--- /dev/null
+rem This file is https://raw.githubusercontent.com/symengine/symengine/master/bin/appveyor-download.cmd
+rem Try to download a given file, with at most maxRetries attempts
+rem This is useful because AppVeyor suffers of many transient network error
+
+@echo off
+rem initiate the retry number
+set retryNumber=0
+set maxRetries=6
+set time=0
+
+:DOWNLOAD
+timeout %time% > NUL
+set /a time=2*%time%+1
+appveyor DownloadFile %*
+
+rem problem?
+IF NOT ERRORLEVEL 1 GOTO :EOF
+@echo Oops, appveyor download exited with code %ERRORLEVEL% - let us try again!
+set /a retryNumber=%retryNumber%+1
+IF %reTryNumber% LSS %maxRetries% (GOTO :DOWNLOAD)
+@echo Sorry, we tried downloading the package for %maxRetries% times and all attempts were unsuccessful!
+EXIT /B 1
\ No newline at end of file
*.class
\#*
.attach_pid*
+smpitmp-*
### cmake
CTestCustom.cmake
examples/msg/masterslave/simgrid.so
examples/simdag/simgrid.so
examples/lua/console/simgrid.so
+SimGrid-*.tar.gz
simgrid.jar
### Unit files
src/simgrid_units_main.c
callgrind.out.*
### Examples and traces
*.exe
-testgraph.dot
-testgraph.xml
-examples/msg/ms.trace
-examples/msg/procmig.trace
-examples/msg/tasks.trace
-examples/msg/volume.trace
-examples/msg/zmsg_test.trace
+examples/msg/actions/actions
+examples/msg/actions/storage_actions
+examples/msg/bittorrent/bittorrent
+examples/msg/bittorrent/bittorrent_platfgen
examples/msg/categories.trace
-examples/msg/masterslave/toto.txt
-examples/msg/simulation.trace
-examples/msg/toto.txt
-examples/msg/z_gtnets.trace
-examples/msg/gpu/test_MSG_gpu_task_create
+examples/msg/chainsend/chainsend
+examples/msg/chord/chord
+examples/msg/chord/chord_stateful
+examples/msg/chord/deployments
+examples/msg/chord/exp_*
examples/msg/cloud/bound
examples/msg/cloud/master_worker_vm
examples/msg/cloud/migrate_vm
examples/msg/cloud/simple_vm
examples/msg/cloud/two_tasks_vm
examples/msg/energy/consumption/energy_consumption
+examples/msg/energy/e3/e3
examples/msg/energy/onoff/onoff
examples/msg/energy/pstate/pstate
-examples/msg/energy/e3/e3
-examples/msg/pastry/pastry
-examples/msg/semaphores/synchro
-examples/msg/tracing/link_srcdst_user_variables
-examples/msg/tracing/link_user_variables
-examples/msg/tracing/simple
-examples/msg/tracing/trace_platform
-examples/msg/tracing/user_variables
-examples/msg/tracing/procmig
-examples/msg/tracing/tasks
-examples/msg/tracing/volume
-examples/msg/io/file
-examples/msg/io/file_unlink
-examples/msg/io/remote
-examples/msg/io/storage
-examples/msg/mc/bugged3
-examples/msg/mc/test/snapshot_comparison1
-examples/msg/mc/test/snapshot_comparison2
-examples/msg/mc/test/snapshot_comparison3
-examples/msg/mc/test/snapshot_comparison4
-examples/msg/mc/test/snapshot_comparison5
-examples/msg/chainsend/chainsend
-examples/msg/chord/chord
-examples/msg/chord/chord_stateful
-examples/msg/chord/deployments
-examples/msg/chord/exp_*
-examples/msg/token_ring/token_ring
-examples/msg/token_ring/token_bypass
+examples/msg/gpu/test_MSG_gpu_task_create
+examples/msg/gtnets/gtnets
+examples/msg/icomms/.kdbgrc.peer3
examples/msg/icomms/peer
examples/msg/icomms/peer2
-examples/msg/start_kill_time/sk_time
-examples/msg/icomms/.kdbgrc.peer3
examples/msg/icomms/peer3
examples/msg/icomms/toto.txt
-examples/msg/masterslave/masterslave_console
+examples/msg/io/file
+examples/msg/io/file_unlink
+examples/msg/io/remote
+examples/msg/io/storage
examples/msg/irc_isend/peer
examples/msg/irc_isend/toto.txt
-examples/msg/ns3/ns3
-examples/simdag/sd_avail
-examples/simdag/ex_sd_seq_access
-examples/simdag/sd_seq_access
-examples/simdag/sd_comm_throttling
-examples/simdag/sd_fail
-examples/simdag/sd_typed_tasks_test
-examples/simdag/ex_sd_test_console
-examples/simdag/sd_test_console
-examples/simdag/scheduling/Montage_25.jed
-examples/simdag/dot/dot_test
-examples/simdag/dot/dot_test2
-examples/simdag/ex_sd_test
-examples/simdag/ex_sd_test2
-examples/simdag/metaxml/sd_meta
-examples/simdag/properties/sd_prop
-examples/simdag/sd_test
-examples/simdag/sd_test2
-examples/simdag/dax/dax_test
-examples/simdag/goal/goal_test
-examples/simdag/scheduling/minmin_test
-examples/simdag/io/sd_io
-examples/msg/actions/actions
-examples/msg/actions/storage_actions
-examples/msg/bittorrent/bittorrent
-examples/msg/bittorrent/bittorrent_platfgen
examples/msg/kademlia/kademlia
-examples/msg/gtnets/gtnets
+examples/msg/masterslave/masterslave_arg
examples/msg/masterslave/masterslave_bypass
+examples/msg/masterslave/masterslave_cluster
+examples/msg/masterslave/masterslave_console
examples/msg/masterslave/masterslave_failure
+examples/msg/masterslave/masterslave_failure_platfgen
examples/msg/masterslave/masterslave_forwarder
-examples/msg/masterslave/masterslave_mailbox
examples/msg/masterslave/masterslave_kill
-examples/msg/masterslave/masterslave_arg
-examples/msg/masterslave/masterslave_failure_platfgen
+examples/msg/masterslave/masterslave_mailbox
examples/msg/masterslave/masterslave_platfgen
+examples/msg/masterslave/toto.txt
+examples/msg/mc/bugged1
+examples/msg/mc/bugged1_liveness
+examples/msg/mc/bugged1_stateful
+examples/msg/mc/bugged2
+examples/msg/mc/bugged2_liveness
+examples/msg/mc/bugged2_stateful
+examples/msg/mc/bugged3
+examples/msg/mc/centralized
+examples/msg/mc/centralized_liveness
+examples/msg/mc/electric_fence
+examples/msg/mc/test/snapshot_comparison1
+examples/msg/mc/test/snapshot_comparison2
+examples/msg/mc/test/snapshot_comparison3
+examples/msg/mc/test/snapshot_comparison4
+examples/msg/mc/test/snapshot_comparison5
examples/msg/migration/migration
+examples/msg/ms.trace
+examples/msg/ns3/ns3
+examples/msg/parallel_contexts/pcontexts
+examples/msg/parallel_contexts/pcontexts2
examples/msg/parallel_task/parallel_task
examples/msg/parallel_task/test_ptask
+examples/msg/pastry/pastry
+examples/msg/pmm/msg_pmm
examples/msg/priority/priority
+examples/msg/procmig.trace
examples/msg/properties/msg_prop
+examples/msg/semaphores/synchro
examples/msg/sendrecv/sendrecv
+examples/msg/simulation.trace
+examples/msg/start_kill_time/sk_time
examples/msg/suspend/suspend
+examples/msg/tasks.trace
+examples/msg/token_ring/token_bypass
+examples/msg/token_ring/token_ring
+examples/msg/toto.txt
examples/msg/trace/test_trace_integration
-examples/msg/mc/centralized
-examples/msg/mc/bugged2
-examples/msg/mc/bugged1
-examples/msg/parallel_contexts/pcontexts
-examples/msg/parallel_contexts/pcontexts2
-examples/msg/pmm/msg_pmm
+examples/msg/tracing/categories
+examples/msg/tracing/link_srcdst_user_variables
+examples/msg/tracing/link_user_variables
+examples/msg/tracing/ms
+examples/msg/tracing/procmig
+examples/msg/tracing/simple
+examples/msg/tracing/tasks
+examples/msg/tracing/trace_platform
+examples/msg/tracing/user_variables
+examples/msg/tracing/volume
+examples/msg/volume.trace
+examples/msg/z_gtnets.trace
+examples/msg/zmsg_test.trace
+examples/simdag/dax/dax_test
+examples/simdag/dot/dot_test
+examples/simdag/dot/dot_test2
+examples/simdag/dot/simulate_dot
+examples/simdag/ex_sd_seq_access
+examples/simdag/ex_sd_test
+examples/simdag/ex_sd_test2
+examples/simdag/ex_sd_test_console
+examples/simdag/goal/goal_test
+examples/simdag/io/sd_io
+examples/simdag/metaxml/sd_meta
+examples/simdag/properties/sd_prop
+examples/simdag/scheduling/minmin_test
+examples/simdag/scheduling/Montage_25.jed
+examples/simdag/sd_avail
+examples/simdag/sd_comm_throttling
+examples/simdag/sd_fail
+examples/simdag/sd_seq_access
+examples/simdag/sd_test
+examples/simdag/sd_test2
+examples/simdag/sd_test_console
+examples/simdag/sd_typed_tasks_test
+examples/simdag/simdag_tracing
+examples/smpi/bcbench
examples/smpi/energy/f77/sef
examples/smpi/energy/f90/sef90
examples/smpi/energy/se
-examples/smpi/toto.txt
-examples/smpi/MM/MM_mpi
-examples/smpi/smpi_replay
-examples/smpi/replay/one_trace
-examples/smpi/bcbench
examples/smpi/first
+examples/smpi/mc_bugged1
+examples/smpi/mc/bugged1
+examples/smpi/mc/bugged1_liveness
+examples/smpi/mc_bugged2
+examples/smpi/mc/bugged2
+examples/smpi/mc/mutual_exclusion
+examples/smpi/mc/non_deterministic
+examples/smpi/mc/send_deterministic
+examples/smpi/MM/MM_mpi
examples/smpi/mvmul
+examples/smpi/replay_multiple/replay_multiple
+examples/smpi/replay/one_trace
examples/smpi/ring_c
examples/smpi/second
examples/smpi/sendrecv
-examples/smpi/mc_bugged1
-examples/smpi/mc_bugged2
+examples/smpi/smpi_msg_masterslave/masterslave_mailbox_smpi
+examples/smpi/smpi_replay
+examples/smpi/smpi_traced
examples/smpi/smpi_traced_simple
-examples/smpi/replay_multiple/replay_multiple
-examples/msg/mc/bugged1_liveness
-examples/msg/mc/bugged1_stateful
-examples/msg/mc/bugged2_liveness
-examples/msg/mc/bugged2_stateful
-examples/msg/mc/centralized_liveness
-examples/msg/mc/electric_fence
-examples/smpi/mc/bugged1
-examples/smpi/mc/bugged1_liveness
-examples/smpi/mc/bugged2
+examples/smpi/smpi_traced.trace
+examples/smpi/toto.txt
+examples/smpi/ttest01
src/replay/replay
src/testall
teshsuite/bug-17132/bug-17132
+teshsuite/datadesc_usage.out
teshsuite/java/sleep_host_off/java_sleep_host_off_compiled
+teshsuite/mc/dwarf/dwarf
+teshsuite/mc/dwarf_expression/dwarf-expression
+teshsuite/mc/replay/random_bug
+teshsuite/msg/get_sender/get_sender
+teshsuite/msg/host_on_off/host_on_off
+teshsuite/msg/host_on_off/host_on_off_recv
+teshsuite/msg/host_on_off/host_on_off_wait
+teshsuite/msg/host_on_off_processes/host_on_off_processes
+teshsuite/msg/pid/pid
+teshsuite/msg/process_join/process_join
+teshsuite/msg/process/process
+teshsuite/msg/storage/concurrent_rw
+teshsuite/msg/storage/storage_basic
+teshsuite/msg/task_destroy_cancel/task_destroy_cancel
+teshsuite/msg/trace/test_trace_integration
+teshsuite/simdag/availability/availability_test
+teshsuite/simdag/basic/basic0
+teshsuite/simdag/basic/basic1
+teshsuite/simdag/basic/basic2
+teshsuite/simdag/basic/basic3
+teshsuite/simdag/basic/basic4
+teshsuite/simdag/basic/basic5
+teshsuite/simdag/basic/basic6
+teshsuite/simdag/incomplete/incomplete
+teshsuite/simdag/network/mxn/test_intra_all2all
+teshsuite/simdag/network/mxn/test_intra_independent_comm
+teshsuite/simdag/network/mxn/test_intra_scatter
+teshsuite/simdag/network/p2p/test_latency1
+teshsuite/simdag/network/p2p/test_latency2
+teshsuite/simdag/network/p2p/test_latency3
+teshsuite/simdag/network/p2p/test_latency_bound
+teshsuite/simdag/network/test_reinit_costs
+teshsuite/simdag/partask/test_comp_only_par
+teshsuite/simdag/partask/test_comp_only_seq
+teshsuite/simdag/platforms/basic_link_test
+teshsuite/simdag/platforms/basic_parsing_test
+teshsuite/simdag/platforms/basic_tracing
+teshsuite/simdag/platforms/evaluate_get_route_time
+teshsuite/simdag/platforms/evaluate_parse_time
+teshsuite/simdag/platforms/flatifier
+teshsuite/simdag/platforms/graphicator
+teshsuite/simdag/platforms/is_router_test
+teshsuite/simix/check_defaults/check_defaults
+teshsuite/simix/stack_overflow/stack_overflow
+teshsuite/smpi/allgather/allgather_coll
+teshsuite/smpi/allgather_coll
+teshsuite/smpi/allgatherv/allgatherv_coll
+teshsuite/smpi/allgatherv_coll
+teshsuite/smpi/allreduce/allreduce
+teshsuite/smpi/allreduce/allreduce_coll
+teshsuite/smpi/allreduce_coll
+teshsuite/smpi/alltoall2
+teshsuite/smpi/alltoall/alltoall2
+teshsuite/smpi/alltoall/alltoall_basic
+teshsuite/smpi/alltoall/alltoall_coll
+teshsuite/smpi/alltoall_basic
+teshsuite/smpi/alltoall_coll
+teshsuite/smpi/alltoallv/alltoallv
+teshsuite/smpi/alltoallv/alltoallv_coll
+teshsuite/smpi/alltoallv_coll
+teshsuite/smpi/barrier/barrier_coll
+teshsuite/smpi/barrier_coll
+teshsuite/smpi/bcast/bcast
+teshsuite/smpi/bcast/bcast_coll
+teshsuite/smpi/bcast_coll
+teshsuite/smpi/compute2
+teshsuite/smpi/compute3
+teshsuite/smpi/compute/compute
+teshsuite/smpi/compute/compute2
+teshsuite/smpi/compute/compute3
+teshsuite/smpi/dsend
+teshsuite/smpi/gather_coll
+teshsuite/smpi/gather/gather_coll
+teshsuite/smpi/hvector/hvector_test
+teshsuite/smpi/hvector_test
+teshsuite/smpi/indexed/indexed_test
+teshsuite/smpi/indexed_test
teshsuite/smpi/isp/umpire/abort
teshsuite/smpi/isp/umpire/abort1
teshsuite/smpi/isp/umpire/abort2
teshsuite/smpi/isp/umpire/any_src-can-deadlock8
teshsuite/smpi/isp/umpire/any_src-can-deadlock9
teshsuite/smpi/isp/umpire/any_src-deadlock
-teshsuite/smpi/isp/umpire/any_src-wait-deadlock
-teshsuite/smpi/isp/umpire/any_src-wait-deadlock2
teshsuite/smpi/isp/umpire/any_src-waitall-deadlock
teshsuite/smpi/isp/umpire/any_src-waitall-deadlock2
teshsuite/smpi/isp/umpire/any_src-waitall-deadlock3
teshsuite/smpi/isp/umpire/any_src-waitany-deadlock
teshsuite/smpi/isp/umpire/any_src-waitany-deadlock2
+teshsuite/smpi/isp/umpire/any_src-wait-deadlock
+teshsuite/smpi/isp/umpire/any_src-wait-deadlock2
teshsuite/smpi/isp/umpire/basic-deadlock
teshsuite/smpi/isp/umpire/basic-deadlock-cart_create
teshsuite/smpi/isp/umpire/basic-deadlock-cart_sub
teshsuite/smpi/isp/umpire/collective-exhaustive-byte-int-mismatch
teshsuite/smpi/isp/umpire/collective-exhaustive-no-error
teshsuite/smpi/isp/umpire/collective-misorder
-teshsuite/smpi/isp/umpire/collective-misorder-allreduce
teshsuite/smpi/isp/umpire/collective-misorder2
+teshsuite/smpi/isp/umpire/collective-misorder-allreduce
teshsuite/smpi/isp/umpire/comm-bcast-deadlock
teshsuite/smpi/isp/umpire/comm-deadlock
teshsuite/smpi/isp/umpire/comm-dup-no-error
teshsuite/smpi/isp/umpire/errhandler-no-free
teshsuite/smpi/isp/umpire/finalize-deadlock
teshsuite/smpi/isp/umpire/group-no-error
-teshsuite/smpi/isp/umpire/group-no-error-exhaustive
teshsuite/smpi/isp/umpire/group-no-error2
teshsuite/smpi/isp/umpire/group-no-error3
+teshsuite/smpi/isp/umpire/group-no-error-exhaustive
teshsuite/smpi/isp/umpire/group-no-free
-teshsuite/smpi/isp/umpire/group-no-free-exhaustive
teshsuite/smpi/isp/umpire/group-no-free2
teshsuite/smpi/isp/umpire/group-no-free3
+teshsuite/smpi/isp/umpire/group-no-free-exhaustive
teshsuite/smpi/isp/umpire/hello
teshsuite/smpi/isp/umpire/intercomm_create-deadlock
teshsuite/smpi/isp/umpire/intercomm_create-deadlock2
teshsuite/smpi/isp/umpire/irecv-isend-ok
teshsuite/smpi/isp/umpire/irecv-isend-ok2
teshsuite/smpi/isp/umpire/lost-request
-teshsuite/smpi/isp/umpire/lost-request-waitall
teshsuite/smpi/isp/umpire/lost-request2
teshsuite/smpi/isp/umpire/lost-request3
+teshsuite/smpi/isp/umpire/lost-request-waitall
teshsuite/smpi/isp/umpire/no-error
+teshsuite/smpi/isp/umpire/no-error2
+teshsuite/smpi/isp/umpire/no-error3
+teshsuite/smpi/isp/umpire/no-error3-any_src
+teshsuite/smpi/isp/umpire/no-error4
+teshsuite/smpi/isp/umpire/no-error4-any_src
teshsuite/smpi/isp/umpire/no-error-any_src
teshsuite/smpi/isp/umpire/no-error-derived-comms
teshsuite/smpi/isp/umpire/no-error-interleaved-isend
teshsuite/smpi/isp/umpire/no-error-testany
teshsuite/smpi/isp/umpire/no-error-vector-isend
teshsuite/smpi/isp/umpire/no-error-wait
-teshsuite/smpi/isp/umpire/no-error-wait-any_src
-teshsuite/smpi/isp/umpire/no-error-wait-any_src2
-teshsuite/smpi/isp/umpire/no-error-wait-any_src3
-teshsuite/smpi/isp/umpire/no-error-wait-any_src4
teshsuite/smpi/isp/umpire/no-error-waitall
teshsuite/smpi/isp/umpire/no-error-waitall-any_src
teshsuite/smpi/isp/umpire/no-error-waitall-any_src2
teshsuite/smpi/isp/umpire/no-error-waitall-any_src3
teshsuite/smpi/isp/umpire/no-error-waitany
+teshsuite/smpi/isp/umpire/no-error-waitany2
teshsuite/smpi/isp/umpire/no-error-waitany-any_src
teshsuite/smpi/isp/umpire/no-error-waitany-any_src2
teshsuite/smpi/isp/umpire/no-error-waitany-any_src3
-teshsuite/smpi/isp/umpire/no-error-waitany2
-teshsuite/smpi/isp/umpire/no-error2
-teshsuite/smpi/isp/umpire/no-error3
-teshsuite/smpi/isp/umpire/no-error3-any_src
-teshsuite/smpi/isp/umpire/no-error4
-teshsuite/smpi/isp/umpire/no-error4-any_src
+teshsuite/smpi/isp/umpire/no-error-wait-any_src
+teshsuite/smpi/isp/umpire/no-error-wait-any_src2
+teshsuite/smpi/isp/umpire/no-error-wait-any_src3
+teshsuite/smpi/isp/umpire/no-error-wait-any_src4
teshsuite/smpi/isp/umpire/op-no-error
teshsuite/smpi/isp/umpire/op-no-free
teshsuite/smpi/isp/umpire/partial-recv
teshsuite/smpi/isp/umpire/probe-deadlock
teshsuite/smpi/isp/umpire/pt2pt-byte-int-mismatch
teshsuite/smpi/isp/umpire/remote_group-no-error
-teshsuite/smpi/isp/umpire/send-recv-ok
teshsuite/smpi/isp/umpire/sendrecv-deadlock
+teshsuite/smpi/isp/umpire/send-recv-ok
teshsuite/smpi/isp/umpire/temp.txt
teshsuite/smpi/isp/umpire/type-commit-twice
teshsuite/smpi/isp/umpire/type-no-error
teshsuite/smpi/isp/umpire/type-no-error-exhaustive
teshsuite/smpi/isp/umpire/type-no-error-exhaustive-with-isends
teshsuite/smpi/isp/umpire/type-no-free
-teshsuite/smpi/isp/umpire/type-no-free-exhaustive
teshsuite/smpi/isp/umpire/type-no-free2
teshsuite/smpi/isp/umpire/type-no-free3
-teshsuite/smpi/isp/umpire/wait-deadlock
+teshsuite/smpi/isp/umpire/type-no-free-exhaustive
teshsuite/smpi/isp/umpire/waitall-deadlock
teshsuite/smpi/isp/umpire/waitany-deadlock
-teshsuite/smpi/compute/compute2
-teshsuite/smpi/compute/compute3
-teshsuite/smpi/pingpong/dsend
-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
-teshsuite/smpi/alltoall/alltoall_coll
-teshsuite/smpi/alltoallv/alltoallv_coll
-teshsuite/smpi/barrier/barrier_coll
-teshsuite/smpi/bcast_coll
-teshsuite/smpi/gather/gather_coll
-teshsuite/smpi/reduce_coll
-teshsuite/smpi/reduce_scatter_coll
-teshsuite/smpi/allreduce/allreduce
-teshsuite/smpi/alltoall/alltoall2
-teshsuite/smpi/alltoall/alltoall_basic
-teshsuite/smpi/alltoallv/alltoallv
-teshsuite/smpi/bcast/bcast
-teshsuite/smpi/compute/compute
-teshsuite/smpi/compute2
-teshsuite/smpi/compute3
-teshsuite/smpi/dsend
-teshsuite/smpi/hvector/hvector_test
-teshsuite/smpi/indexed/indexed_test
-teshsuite/smpi/pingpong/pingpong
-teshsuite/smpi/reduce/reduce
-teshsuite/smpi/scatter/scatter
-teshsuite/smpi/shared/shared
-teshsuite/smpi/smpi_sendrecv
-teshsuite/smpi/split
-teshsuite/smpi/struct/struct_test
-teshsuite/smpi/ttest01
-teshsuite/smpi/vector/vector_test
-teshsuite/smpi/mpich-test/*/*.out
-teshsuite/smpi/mpich-test/*/*.stdo
-teshsuite/smpi/mpich-test/coll/allgatherf
-teshsuite/smpi/mpich-test/coll/allred
-teshsuite/smpi/mpich-test/coll/allred2
-teshsuite/smpi/mpich-test/coll/allredf
-teshsuite/smpi/mpich-test/coll/allredmany
-teshsuite/smpi/mpich-test/coll/alltoallv_mpich
-teshsuite/smpi/mpich-test/coll/assocf
-teshsuite/smpi/mpich-test/coll/barrier
-teshsuite/smpi/mpich-test/coll/bcast_mpich
-teshsuite/smpi/mpich-test/coll/bcastbug
-teshsuite/smpi/mpich-test/coll/bcastbug2
-teshsuite/smpi/mpich-test/coll/bcastlog
-teshsuite/smpi/mpich-test/coll/bcastvec
-teshsuite/smpi/mpich-test/coll/coll1
-teshsuite/smpi/mpich-test/coll/coll10
-teshsuite/smpi/mpich-test/coll/coll11
-teshsuite/smpi/mpich-test/coll/coll12
-teshsuite/smpi/mpich-test/coll/coll13
-teshsuite/smpi/mpich-test/coll/coll2
-teshsuite/smpi/mpich-test/coll/coll3
-teshsuite/smpi/mpich-test/coll/coll4
-teshsuite/smpi/mpich-test/coll/coll5
-teshsuite/smpi/mpich-test/coll/coll6
-teshsuite/smpi/mpich-test/coll/coll7
-teshsuite/smpi/mpich-test/coll/coll8
-teshsuite/smpi/mpich-test/coll/coll9
-teshsuite/smpi/mpich-test/coll/grouptest
-teshsuite/smpi/mpich-test/coll/longuser
-teshsuite/smpi/mpich-test/coll/redscat
-teshsuite/smpi/mpich-test/coll/redtst
-teshsuite/smpi/mpich-test/coll/scantst
-teshsuite/smpi/mpich-test/coll/scattern
-teshsuite/smpi/mpich-test/coll/scatterv
-teshsuite/smpi/mpich-test/context/attrerr
-teshsuite/smpi/mpich-test/context/groupcreate
-teshsuite/smpi/mpich-test/context/grouptest_mpich
-teshsuite/smpi/mpich-test/context/icdup
-teshsuite/smpi/mpich-test/context/ictest
-teshsuite/smpi/mpich-test/context/ictest2
-teshsuite/smpi/mpich-test/context/ictest3
-teshsuite/smpi/mpich-test/env/aborttest
-teshsuite/smpi/mpich-test/env/baseattr
-teshsuite/smpi/mpich-test/env/env.diff
-teshsuite/smpi/mpich-test/env/errhand
-teshsuite/smpi/mpich-test/env/getproc
-teshsuite/smpi/mpich-test/env/getprocf
-teshsuite/smpi/mpich-test/env/gtime
-teshsuite/smpi/mpich-test/env/init
-teshsuite/smpi/mpich-test/env/sigchk
-teshsuite/smpi/mpich-test/env/testerr
-teshsuite/smpi/mpich-test/env/timers
-teshsuite/smpi/mpich-test/env/timertest
-teshsuite/smpi/mpich-test/profile/colluses
-teshsuite/smpi/mpich-test/profile/ptest
-teshsuite/smpi/mpich-test/pt2pt/bsendtest
-teshsuite/smpi/mpich-test/pt2pt/cancel
-teshsuite/smpi/mpich-test/pt2pt/cancel2
-teshsuite/smpi/mpich-test/pt2pt/cancel3
-teshsuite/smpi/mpich-test/pt2pt/cancelibm
-teshsuite/smpi/mpich-test/pt2pt/cancelissend
-teshsuite/smpi/mpich-test/pt2pt/cancelmessages
-teshsuite/smpi/mpich-test/pt2pt/commit
-teshsuite/smpi/mpich-test/pt2pt/dataalign
-teshsuite/smpi/mpich-test/pt2pt/dtypelife
-teshsuite/smpi/mpich-test/pt2pt/dtyperecv
-teshsuite/smpi/mpich-test/pt2pt/exittest
-teshsuite/smpi/mpich-test/pt2pt/fifth
-teshsuite/smpi/mpich-test/pt2pt/flood
-teshsuite/smpi/mpich-test/pt2pt/flood2
-teshsuite/smpi/mpich-test/pt2pt/fourth
-teshsuite/smpi/mpich-test/pt2pt/getelm
-teshsuite/smpi/mpich-test/pt2pt/hindexed
-teshsuite/smpi/mpich-test/pt2pt/htmsg
-teshsuite/smpi/mpich-test/pt2pt/hvec
-teshsuite/smpi/mpich-test/pt2pt/hvectest
-teshsuite/smpi/mpich-test/pt2pt/hvectest2
-teshsuite/smpi/mpich-test/pt2pt/irecvtest
-teshsuite/smpi/mpich-test/pt2pt/irsend
-teshsuite/smpi/mpich-test/pt2pt/irsendinit
-teshsuite/smpi/mpich-test/pt2pt/isendf
-teshsuite/smpi/mpich-test/pt2pt/isendtest
-teshsuite/smpi/mpich-test/pt2pt/isndrcv
-teshsuite/smpi/mpich-test/pt2pt/issend2
-teshsuite/smpi/mpich-test/pt2pt/issendinit
-teshsuite/smpi/mpich-test/pt2pt/issendtest
-teshsuite/smpi/mpich-test/pt2pt/longmsgs
-teshsuite/smpi/mpich-test/pt2pt/nblock
-teshsuite/smpi/mpich-test/pt2pt/nbtest
-teshsuite/smpi/mpich-test/pt2pt/nullproc
-teshsuite/smpi/mpich-test/pt2pt/nullproc2
-teshsuite/smpi/mpich-test/pt2pt/order
-teshsuite/smpi/mpich-test/pt2pt/overtake
-teshsuite/smpi/mpich-test/pt2pt/pack
-teshsuite/smpi/mpich-test/pt2pt/persist
-teshsuite/smpi/mpich-test/pt2pt/persist2
-teshsuite/smpi/mpich-test/pt2pt/persistent
-teshsuite/smpi/mpich-test/pt2pt/pingpong_f
-teshsuite/smpi/mpich-test/pt2pt/probe
-teshsuite/smpi/mpich-test/pt2pt/probe1
-teshsuite/smpi/mpich-test/pt2pt/relrank
-teshsuite/smpi/mpich-test/pt2pt/reqcreate
-teshsuite/smpi/mpich-test/pt2pt/reqfree
-teshsuite/smpi/mpich-test/pt2pt/secondf
-teshsuite/smpi/mpich-test/pt2pt/self
-teshsuite/smpi/mpich-test/pt2pt/selfvsworld
-teshsuite/smpi/mpich-test/pt2pt/send1
-teshsuite/smpi/mpich-test/pt2pt/sendcplx
-teshsuite/smpi/mpich-test/pt2pt/sendfort
-teshsuite/smpi/mpich-test/pt2pt/sendmany
-teshsuite/smpi/mpich-test/pt2pt/sendorder
-teshsuite/smpi/mpich-test/pt2pt/sendrecv2
-teshsuite/smpi/mpich-test/pt2pt/sendrecv3
-teshsuite/smpi/mpich-test/pt2pt/sendrecv4
-teshsuite/smpi/mpich-test/pt2pt/sendrecv_mpich
-teshsuite/smpi/mpich-test/pt2pt/sixth
-teshsuite/smpi/mpich-test/pt2pt/sndrcv
-teshsuite/smpi/mpich-test/pt2pt/sndrcvrep
-teshsuite/smpi/mpich-test/pt2pt/sndrcvrpl2
-teshsuite/smpi/mpich-test/pt2pt/ssendtest
-teshsuite/smpi/mpich-test/pt2pt/ssendtest2
-teshsuite/smpi/mpich-test/pt2pt/structlb
-teshsuite/smpi/mpich-test/pt2pt/testall_mpich
-teshsuite/smpi/mpich-test/pt2pt/testsome
-teshsuite/smpi/mpich-test/pt2pt/testtest1
-teshsuite/smpi/mpich-test/pt2pt/testtypes
-teshsuite/smpi/mpich-test/pt2pt/third
-teshsuite/smpi/mpich-test/pt2pt/trunc
-teshsuite/smpi/mpich-test/pt2pt/truncmult
-teshsuite/smpi/mpich-test/pt2pt/typebase
-teshsuite/smpi/mpich-test/pt2pt/typebasef
-teshsuite/smpi/mpich-test/pt2pt/typecreate
-teshsuite/smpi/mpich-test/pt2pt/typelb
-teshsuite/smpi/mpich-test/pt2pt/typetest
-teshsuite/smpi/mpich-test/pt2pt/typeub
-teshsuite/smpi/mpich-test/pt2pt/typeub2
-teshsuite/smpi/mpich-test/pt2pt/typeub3
-teshsuite/smpi/mpich-test/pt2pt/waitall
-teshsuite/smpi/mpich-test/pt2pt/waitall2
-teshsuite/smpi/mpich-test/pt2pt/waitall3
-teshsuite/smpi/mpich-test/pt2pt/waitall4
-teshsuite/smpi/mpich-test/pt2pt/waitany
-teshsuite/smpi/mpich3-test/f77/info/infotest2f
-teshsuite/smpi/mpich3-test/f77/info/infotestf
-teshsuite/smpi/mpich3-test/f90/info/infotest2f90
-teshsuite/smpi/mpich3-test/f90/info/infotestf90
-teshsuite/smpi/bcast/bcast_coll
-teshsuite/smpi/mpich3-test/coll/allred
-teshsuite/smpi/mpich3-test/datatype/dataalign
-teshsuite/smpi/mpich3-test/datatype/sendrecvt2
-teshsuite/smpi/mpich3-test/datatype/sendrecvt4
-teshsuite/smpi/mpich3-test/f77/rma/c2f2cwinf
-teshsuite/smpi/mpich3-test/f77/rma/winaccf
-teshsuite/smpi/mpich3-test/f77/rma/winfencef
-teshsuite/smpi/mpich3-test/f77/rma/wingetf
-teshsuite/smpi/mpich3-test/f77/rma/winnamef
-teshsuite/smpi/mpich3-test/f77/topo/cartcrf
-teshsuite/smpi/mpich3-test/f90/rma/c2f2cwinf90
-teshsuite/smpi/mpich3-test/f90/rma/winaccf90
-teshsuite/smpi/mpich3-test/f90/rma/winfencef90
-teshsuite/smpi/mpich3-test/f90/rma/wingetf90
-teshsuite/smpi/mpich3-test/f90/rma/winnamef90
-teshsuite/smpi/mpich3-test/perf/commcreatep
-teshsuite/smpi/mpich3-test/perf/non_zero_root
-teshsuite/smpi/mpich3-test/perf/sendrecvl
-teshsuite/smpi/mpich3-test/perf/timer
-teshsuite/smpi/mpich3-test/perf/transp-datatype
-teshsuite/smpi/mpich3-test/perf/twovec
-teshsuite/smpi/mpich3-test/pt2pt/issendselfcancel
-teshsuite/smpi/mpich3-test/rma/getgroup
-teshsuite/smpi/mpich3-test/rma/manyrma3
+teshsuite/smpi/isp/umpire/wait-deadlock
teshsuite/smpi/mpich3-test/attr/attr2type
teshsuite/smpi/mpich3-test/attr/attrend
teshsuite/smpi/mpich3-test/attr/attrend2
teshsuite/smpi/mpich3-test/coll/allgatherv2
teshsuite/smpi/mpich3-test/coll/allgatherv3
teshsuite/smpi/mpich3-test/coll/allgatherv4
+teshsuite/smpi/mpich3-test/coll/allred
teshsuite/smpi/mpich3-test/coll/allred2
teshsuite/smpi/mpich3-test/coll/allred3
teshsuite/smpi/mpich3-test/coll/allred4
teshsuite/smpi/mpich3-test/coll/nonblocking
teshsuite/smpi/mpich3-test/coll/nonblocking2
teshsuite/smpi/mpich3-test/coll/nonblocking3
-teshsuite/smpi/mpich3-test/coll/op_commutative
teshsuite/smpi/mpich3-test/coll/opband
teshsuite/smpi/mpich3-test/coll/opbor
teshsuite/smpi/mpich3-test/coll/opbxor
+teshsuite/smpi/mpich3-test/coll/op_commutative
teshsuite/smpi/mpich3-test/coll/opland
teshsuite/smpi/mpich3-test/coll/oplor
teshsuite/smpi/mpich3-test/coll/oplxor
teshsuite/smpi/mpich3-test/coll/opsum
teshsuite/smpi/mpich3-test/coll/red3
teshsuite/smpi/mpich3-test/coll/red4
-teshsuite/smpi/mpich3-test/coll/red_scat_block
-teshsuite/smpi/mpich3-test/coll/red_scat_block2
teshsuite/smpi/mpich3-test/coll/redscat
teshsuite/smpi/mpich3-test/coll/redscat2
teshsuite/smpi/mpich3-test/coll/redscat3
teshsuite/smpi/mpich3-test/coll/redscatbkinter
teshsuite/smpi/mpich3-test/coll/redscatblk3
+teshsuite/smpi/mpich3-test/coll/red_scat_block
+teshsuite/smpi/mpich3-test/coll/red_scat_block2
teshsuite/smpi/mpich3-test/coll/redscatinter
teshsuite/smpi/mpich3-test/coll/reduce_local
teshsuite/smpi/mpich3-test/coll/reduce_mpich
teshsuite/smpi/mpich3-test/comm/cmsplit
teshsuite/smpi/mpich3-test/comm/cmsplit2
teshsuite/smpi/mpich3-test/comm/cmsplit_type
+teshsuite/smpi/mpich3-test/comm/commcreate1
teshsuite/smpi/mpich3-test/comm/comm_create_group
teshsuite/smpi/mpich3-test/comm/comm_group_half
teshsuite/smpi/mpich3-test/comm/comm_group_rand
teshsuite/smpi/mpich3-test/comm/comm_info
-teshsuite/smpi/mpich3-test/comm/commcreate1
teshsuite/smpi/mpich3-test/comm/commname
teshsuite/smpi/mpich3-test/comm/ctxalloc
teshsuite/smpi/mpich3-test/comm/ctxsplit
teshsuite/smpi/mpich3-test/comm/dup
-teshsuite/smpi/mpich3-test/comm/dup_with_info
teshsuite/smpi/mpich3-test/comm/dupic
+teshsuite/smpi/mpich3-test/comm/dup_with_info
teshsuite/smpi/mpich3-test/comm/ic1
teshsuite/smpi/mpich3-test/comm/ic2
teshsuite/smpi/mpich3-test/comm/iccreate
teshsuite/smpi/mpich3-test/datatype/blockindexed-misc
teshsuite/smpi/mpich3-test/datatype/blockindexed-zero-count
teshsuite/smpi/mpich3-test/datatype/contents
-teshsuite/smpi/mpich3-test/datatype/contig-zero-count
teshsuite/smpi/mpich3-test/datatype/contigstruct
+teshsuite/smpi/mpich3-test/datatype/contig-zero-count
teshsuite/smpi/mpich3-test/datatype/cxx-types
teshsuite/smpi/mpich3-test/datatype/darray-cyclic
teshsuite/smpi/mpich3-test/datatype/darray-pack
+teshsuite/smpi/mpich3-test/datatype/dataalign
teshsuite/smpi/mpich3-test/datatype/gaddress
teshsuite/smpi/mpich3-test/datatype/get-elements
teshsuite/smpi/mpich3-test/datatype/get-elements-pairtype
teshsuite/smpi/mpich3-test/datatype/getpartelm
-teshsuite/smpi/mpich3-test/datatype/hindexed-zeros
teshsuite/smpi/mpich3-test/datatype/hindexed_block
teshsuite/smpi/mpich3-test/datatype/hindexed_block_contents
+teshsuite/smpi/mpich3-test/datatype/hindexed-zeros
teshsuite/smpi/mpich3-test/datatype/indexed-misc
teshsuite/smpi/mpich3-test/datatype/large-count
teshsuite/smpi/mpich3-test/datatype/lbub
teshsuite/smpi/mpich3-test/datatype/lots-of-types
teshsuite/smpi/mpich3-test/datatype/pairtype-pack
teshsuite/smpi/mpich3-test/datatype/pairtype-size-extent
+teshsuite/smpi/mpich3-test/datatype/sendrecvt2
+teshsuite/smpi/mpich3-test/datatype/sendrecvt4
teshsuite/smpi/mpich3-test/datatype/simple-commit
teshsuite/smpi/mpich3-test/datatype/simple-pack
teshsuite/smpi/mpich3-test/datatype/simple-pack-external
teshsuite/smpi/mpich3-test/f77/datatype/hindex1f
teshsuite/smpi/mpich3-test/f77/datatype/hindexed_blockf
teshsuite/smpi/mpich3-test/f77/datatype/packef
-teshsuite/smpi/mpich3-test/f77/datatype/typeaints.h
teshsuite/smpi/mpich3-test/f77/datatype/typeaints
+teshsuite/smpi/mpich3-test/f77/datatype/typeaints.h
teshsuite/smpi/mpich3-test/f77/datatype/typecntsf
teshsuite/smpi/mpich3-test/f77/datatype/typem2f
teshsuite/smpi/mpich3-test/f77/datatype/typename3f
teshsuite/smpi/mpich3-test/f77/datatype/typesnamef
teshsuite/smpi/mpich3-test/f77/datatype/typesubf
teshsuite/smpi/mpich3-test/f77/ext/add1size
+teshsuite/smpi/mpich3-test/f77/info/infotest2f
+teshsuite/smpi/mpich3-test/f77/info/infotestf
teshsuite/smpi/mpich3-test/f77/init/baseenvf
teshsuite/smpi/mpich3-test/f77/pt2pt/allpairf
teshsuite/smpi/mpich3-test/f77/pt2pt/greqf
teshsuite/smpi/mpich3-test/f77/pt2pt/statusesf
+teshsuite/smpi/mpich3-test/f77/rma/c2f2cwinf
+teshsuite/smpi/mpich3-test/f77/rma/winaccf
+teshsuite/smpi/mpich3-test/f77/rma/winfencef
+teshsuite/smpi/mpich3-test/f77/rma/wingetf
+teshsuite/smpi/mpich3-test/f77/rma/winnamef
+teshsuite/smpi/mpich3-test/f77/rma/winscale1f
+teshsuite/smpi/mpich3-test/f77/topo/cartcrf
teshsuite/smpi/mpich3-test/f90/coll/allredint8f90
teshsuite/smpi/mpich3-test/f90/coll/allredopttf90
teshsuite/smpi/mpich3-test/f90/coll/alltoallvf90
teshsuite/smpi/mpich3-test/f90/datatype/typenamef90
teshsuite/smpi/mpich3-test/f90/datatype/typesnamef90
teshsuite/smpi/mpich3-test/f90/datatype/typesubf90
+teshsuite/smpi/mpich3-test/f90/info/infotest2f90
+teshsuite/smpi/mpich3-test/f90/info/infotestf90
teshsuite/smpi/mpich3-test/f90/init/array.mod
teshsuite/smpi/mpich3-test/f90/init/baseenvf90
teshsuite/smpi/mpich3-test/f90/pt2pt/allpairf90
teshsuite/smpi/mpich3-test/f90/pt2pt/array.mod
teshsuite/smpi/mpich3-test/f90/pt2pt/greqf90
teshsuite/smpi/mpich3-test/f90/pt2pt/statusesf90
+teshsuite/smpi/mpich3-test/f90/rma/c2f2cwinf90
+teshsuite/smpi/mpich3-test/f90/rma/winaccf90
+teshsuite/smpi/mpich3-test/f90/rma/winfencef90
+teshsuite/smpi/mpich3-test/f90/rma/wingetf90
+teshsuite/smpi/mpich3-test/f90/rma/winnamef90
+teshsuite/smpi/mpich3-test/f90/rma/winscale1f90
teshsuite/smpi/mpich3-test/group/groupcreate
teshsuite/smpi/mpich3-test/group/groupnullincl
teshsuite/smpi/mpich3-test/group/grouptest
teshsuite/smpi/mpich3-test/init/library_version
teshsuite/smpi/mpich3-test/init/timeout
teshsuite/smpi/mpich3-test/init/version
+teshsuite/smpi/mpich3-test/perf/commcreatep
+teshsuite/smpi/mpich3-test/perf/non_zero_root
+teshsuite/smpi/mpich3-test/perf/sendrecvl
+teshsuite/smpi/mpich3-test/perf/timer
+teshsuite/smpi/mpich3-test/perf/transp-datatype
+teshsuite/smpi/mpich3-test/perf/twovec
teshsuite/smpi/mpich3-test/pt2pt/anyall
teshsuite/smpi/mpich3-test/pt2pt/bottom
teshsuite/smpi/mpich3-test/pt2pt/bsend1
teshsuite/smpi/mpich3-test/pt2pt/inactivereq
teshsuite/smpi/mpich3-test/pt2pt/isendself
teshsuite/smpi/mpich3-test/pt2pt/isendselfprobe
+teshsuite/smpi/mpich3-test/pt2pt/issendselfcancel
teshsuite/smpi/mpich3-test/pt2pt/large_message
teshsuite/smpi/mpich3-test/pt2pt/mprobe
teshsuite/smpi/mpich3-test/pt2pt/pingping
-teshsuite/smpi/mpich3-test/pt2pt/probe-unexp
teshsuite/smpi/mpich3-test/pt2pt/probenull
+teshsuite/smpi/mpich3-test/pt2pt/probe-unexp
teshsuite/smpi/mpich3-test/pt2pt/pscancel
teshsuite/smpi/mpich3-test/pt2pt/rcancel
teshsuite/smpi/mpich3-test/pt2pt/rqfreeb
teshsuite/smpi/mpich3-test/pt2pt/sendself
teshsuite/smpi/mpich3-test/pt2pt/waitany-null
teshsuite/smpi/mpich3-test/pt2pt/waittestnull
-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/smpi/mpich3-test/rma/accfence1
teshsuite/smpi/mpich3-test/rma/accfence2
teshsuite/smpi/mpich3-test/rma/accfence2_am
+teshsuite/smpi/mpich3-test/rma/accpscw1
teshsuite/smpi/mpich3-test/rma/allocmem
teshsuite/smpi/mpich3-test/rma/epochtest
teshsuite/smpi/mpich3-test/rma/getfence1
+teshsuite/smpi/mpich3-test/rma/getgroup
+teshsuite/smpi/mpich3-test/rma/manyrma3
+teshsuite/smpi/mpich3-test/rma/nullpscw
teshsuite/smpi/mpich3-test/rma/putfence1
teshsuite/smpi/mpich3-test/rma/putfidx
+teshsuite/smpi/mpich3-test/rma/putpscw1
teshsuite/smpi/mpich3-test/rma/test1
teshsuite/smpi/mpich3-test/rma/test1_am
teshsuite/smpi/mpich3-test/rma/test1_dt
+teshsuite/smpi/mpich3-test/rma/test2
+teshsuite/smpi/mpich3-test/rma/test2_am
+teshsuite/smpi/mpich3-test/rma/test3
teshsuite/smpi/mpich3-test/rma/test5
teshsuite/smpi/mpich3-test/rma/test5_am
teshsuite/smpi/mpich3-test/rma/transpose1
teshsuite/smpi/mpich3-test/rma/transpose2
+teshsuite/smpi/mpich3-test/rma/transpose3
teshsuite/smpi/mpich3-test/rma/transpose6
teshsuite/smpi/mpich3-test/rma/transpose7
teshsuite/smpi/mpich3-test/rma/window_creation
+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/smpi/mpich-test/coll/allgatherf
+teshsuite/smpi/mpich-test/coll/allred
+teshsuite/smpi/mpich-test/coll/allred2
+teshsuite/smpi/mpich-test/coll/allredf
+teshsuite/smpi/mpich-test/coll/allredmany
+teshsuite/smpi/mpich-test/coll/alltoallv_mpich
+teshsuite/smpi/mpich-test/coll/assocf
+teshsuite/smpi/mpich-test/coll/barrier
+teshsuite/smpi/mpich-test/coll/bcastbug
+teshsuite/smpi/mpich-test/coll/bcastbug2
+teshsuite/smpi/mpich-test/coll/bcastlog
+teshsuite/smpi/mpich-test/coll/bcast_mpich
+teshsuite/smpi/mpich-test/coll/bcastvec
+teshsuite/smpi/mpich-test/coll/coll1
+teshsuite/smpi/mpich-test/coll/coll10
+teshsuite/smpi/mpich-test/coll/coll11
+teshsuite/smpi/mpich-test/coll/coll12
+teshsuite/smpi/mpich-test/coll/coll13
+teshsuite/smpi/mpich-test/coll/coll2
+teshsuite/smpi/mpich-test/coll/coll3
+teshsuite/smpi/mpich-test/coll/coll4
+teshsuite/smpi/mpich-test/coll/coll5
+teshsuite/smpi/mpich-test/coll/coll6
+teshsuite/smpi/mpich-test/coll/coll7
+teshsuite/smpi/mpich-test/coll/coll8
+teshsuite/smpi/mpich-test/coll/coll9
+teshsuite/smpi/mpich-test/coll/grouptest
+teshsuite/smpi/mpich-test/coll/longuser
+teshsuite/smpi/mpich-test/coll/redscat
+teshsuite/smpi/mpich-test/coll/redtst
+teshsuite/smpi/mpich-test/coll/scantst
+teshsuite/smpi/mpich-test/coll/scattern
+teshsuite/smpi/mpich-test/coll/scatterv
+teshsuite/smpi/mpich-test/context/attrerr
+teshsuite/smpi/mpich-test/context/groupcreate
+teshsuite/smpi/mpich-test/context/grouptest_mpich
+teshsuite/smpi/mpich-test/context/icdup
+teshsuite/smpi/mpich-test/context/ictest
+teshsuite/smpi/mpich-test/context/ictest2
+teshsuite/smpi/mpich-test/context/ictest3
+teshsuite/smpi/mpich-test/env/aborttest
+teshsuite/smpi/mpich-test/env/baseattr
+teshsuite/smpi/mpich-test/env/env.diff
+teshsuite/smpi/mpich-test/env/errhand
+teshsuite/smpi/mpich-test/env/getproc
+teshsuite/smpi/mpich-test/env/getprocf
+teshsuite/smpi/mpich-test/env/gtime
+teshsuite/smpi/mpich-test/env/init
+teshsuite/smpi/mpich-test/env/sigchk
+teshsuite/smpi/mpich-test/env/testerr
+teshsuite/smpi/mpich-test/env/timers
+teshsuite/smpi/mpich-test/env/timertest
+teshsuite/smpi/mpich-test/*/*.out
+teshsuite/smpi/mpich-test/profile/colluses
+teshsuite/smpi/mpich-test/profile/ptest
+teshsuite/smpi/mpich-test/pt2pt/bsendtest
+teshsuite/smpi/mpich-test/pt2pt/cancel
+teshsuite/smpi/mpich-test/pt2pt/cancel2
+teshsuite/smpi/mpich-test/pt2pt/cancel3
+teshsuite/smpi/mpich-test/pt2pt/cancelibm
+teshsuite/smpi/mpich-test/pt2pt/cancelissend
+teshsuite/smpi/mpich-test/pt2pt/cancelmessages
+teshsuite/smpi/mpich-test/pt2pt/commit
+teshsuite/smpi/mpich-test/pt2pt/dataalign
+teshsuite/smpi/mpich-test/pt2pt/dtypelife
+teshsuite/smpi/mpich-test/pt2pt/dtyperecv
+teshsuite/smpi/mpich-test/pt2pt/exittest
+teshsuite/smpi/mpich-test/pt2pt/fifth
+teshsuite/smpi/mpich-test/pt2pt/flood
+teshsuite/smpi/mpich-test/pt2pt/flood2
+teshsuite/smpi/mpich-test/pt2pt/fourth
+teshsuite/smpi/mpich-test/pt2pt/getelm
+teshsuite/smpi/mpich-test/pt2pt/hindexed
+teshsuite/smpi/mpich-test/pt2pt/htmsg
+teshsuite/smpi/mpich-test/pt2pt/hvec
+teshsuite/smpi/mpich-test/pt2pt/hvectest
+teshsuite/smpi/mpich-test/pt2pt/hvectest2
+teshsuite/smpi/mpich-test/pt2pt/irecvtest
+teshsuite/smpi/mpich-test/pt2pt/irsend
+teshsuite/smpi/mpich-test/pt2pt/irsendinit
+teshsuite/smpi/mpich-test/pt2pt/isendf
+teshsuite/smpi/mpich-test/pt2pt/isendtest
+teshsuite/smpi/mpich-test/pt2pt/isndrcv
+teshsuite/smpi/mpich-test/pt2pt/issend2
+teshsuite/smpi/mpich-test/pt2pt/issendinit
+teshsuite/smpi/mpich-test/pt2pt/issendtest
+teshsuite/smpi/mpich-test/pt2pt/longmsgs
+teshsuite/smpi/mpich-test/pt2pt/nblock
+teshsuite/smpi/mpich-test/pt2pt/nbtest
+teshsuite/smpi/mpich-test/pt2pt/nullproc
+teshsuite/smpi/mpich-test/pt2pt/nullproc2
+teshsuite/smpi/mpich-test/pt2pt/order
+teshsuite/smpi/mpich-test/pt2pt/overtake
+teshsuite/smpi/mpich-test/pt2pt/pack
+teshsuite/smpi/mpich-test/pt2pt/persist
+teshsuite/smpi/mpich-test/pt2pt/persist2
+teshsuite/smpi/mpich-test/pt2pt/persistent
+teshsuite/smpi/mpich-test/pt2pt/pingpong_f
+teshsuite/smpi/mpich-test/pt2pt/probe
+teshsuite/smpi/mpich-test/pt2pt/probe1
+teshsuite/smpi/mpich-test/pt2pt/relrank
+teshsuite/smpi/mpich-test/pt2pt/reqcreate
+teshsuite/smpi/mpich-test/pt2pt/reqfree
+teshsuite/smpi/mpich-test/pt2pt/secondf
+teshsuite/smpi/mpich-test/pt2pt/self
+teshsuite/smpi/mpich-test/pt2pt/selfvsworld
+teshsuite/smpi/mpich-test/pt2pt/send1
+teshsuite/smpi/mpich-test/pt2pt/sendcplx
+teshsuite/smpi/mpich-test/pt2pt/sendfort
+teshsuite/smpi/mpich-test/pt2pt/sendmany
+teshsuite/smpi/mpich-test/pt2pt/sendorder
+teshsuite/smpi/mpich-test/pt2pt/sendrecv2
+teshsuite/smpi/mpich-test/pt2pt/sendrecv3
+teshsuite/smpi/mpich-test/pt2pt/sendrecv4
+teshsuite/smpi/mpich-test/pt2pt/sendrecv_mpich
+teshsuite/smpi/mpich-test/pt2pt/sixth
+teshsuite/smpi/mpich-test/pt2pt/sndrcv
+teshsuite/smpi/mpich-test/pt2pt/sndrcvrep
+teshsuite/smpi/mpich-test/pt2pt/sndrcvrpl2
+teshsuite/smpi/mpich-test/pt2pt/ssendtest
+teshsuite/smpi/mpich-test/pt2pt/ssendtest2
+teshsuite/smpi/mpich-test/pt2pt/structlb
+teshsuite/smpi/mpich-test/pt2pt/testall_mpich
+teshsuite/smpi/mpich-test/pt2pt/testsome
+teshsuite/smpi/mpich-test/pt2pt/testtest1
+teshsuite/smpi/mpich-test/pt2pt/testtypes
+teshsuite/smpi/mpich-test/pt2pt/third
+teshsuite/smpi/mpich-test/pt2pt/trunc
+teshsuite/smpi/mpich-test/pt2pt/truncmult
+teshsuite/smpi/mpich-test/pt2pt/typebase
+teshsuite/smpi/mpich-test/pt2pt/typebasef
+teshsuite/smpi/mpich-test/pt2pt/typecreate
+teshsuite/smpi/mpich-test/pt2pt/typelb
+teshsuite/smpi/mpich-test/pt2pt/typetest
+teshsuite/smpi/mpich-test/pt2pt/typeub
+teshsuite/smpi/mpich-test/pt2pt/typeub2
+teshsuite/smpi/mpich-test/pt2pt/typeub3
+teshsuite/smpi/mpich-test/pt2pt/waitall
+teshsuite/smpi/mpich-test/pt2pt/waitall2
+teshsuite/smpi/mpich-test/pt2pt/waitall3
+teshsuite/smpi/mpich-test/pt2pt/waitall4
+teshsuite/smpi/mpich-test/pt2pt/waitany
+teshsuite/smpi/mpich-test/*/*.stdo
+teshsuite/smpi/pingpong/dsend
+teshsuite/smpi/pingpong/pingpong
+teshsuite/smpi/reduce_coll
+teshsuite/smpi/reduce/reduce
+teshsuite/smpi/reduce/reduce_coll
+teshsuite/smpi/reduce/reduce_scatter_coll
+teshsuite/smpi/reduce_scatter_coll
+teshsuite/smpi/scatter/scatter
+teshsuite/smpi/shared/shared
+teshsuite/smpi/smpi_sendrecv
+teshsuite/smpi/split
+teshsuite/smpi/struct/struct_test
teshsuite/smpi/struct_test
+teshsuite/smpi/ttest01
teshsuite/smpi/vector_test
-teshsuite/smpi/allgather_coll
-teshsuite/smpi/allgatherv_coll
-teshsuite/smpi/allreduce_coll
-teshsuite/smpi/alltoall2
-teshsuite/smpi/alltoall_basic
-teshsuite/smpi/alltoall_coll
-teshsuite/smpi/alltoallv_coll
-teshsuite/smpi/barrier_coll
-teshsuite/smpi/gather_coll
-teshsuite/smpi/hvector_test
-teshsuite/smpi/indexed_test
-examples/smpi/mc/mutual_exclusion
-examples/smpi/mc/non_deterministic
-examples/smpi/mc/send_deterministic
-examples/smpi/smpi_msg_masterslave/masterslave_mailbox_smpi
-teshsuite/xbt/log_large_test
-teshsuite/xbt/mallocator/mallocator
-teshsuite/xbt/mmalloc/mmalloc_test
-teshsuite/xbt/parallel_log_crashtest
-teshsuite/msg/storage/concurrent_rw
-teshsuite/msg/host_on_off/host_on_off
-teshsuite/msg/host_on_off_processes/host_on_off_processes
-teshsuite/msg/process/process
-teshsuite/msg/process_join/process_join
-teshsuite/msg/storage/storage_basic
-teshsuite/msg/task_destroy_cancel/task_destroy_cancel
-teshsuite/msg/pid/pid
-teshsuite/msg/get_sender/get_sender
-teshsuite/msg/trace/test_trace_integration
-teshsuite/msg/host_on_off/host_on_off_recv
-teshsuite/msg/host_on_off/host_on_off_wait
-teshsuite/simix/check_defaults/check_defaults
-teshsuite/simix/stack_overflow/stack_overflow
-teshsuite/simdag/availability/availability_test
-teshsuite/simdag/basic/basic0
-teshsuite/simdag/basic/basic1
-teshsuite/simdag/basic/basic2
-teshsuite/simdag/basic/basic3
-teshsuite/simdag/basic/basic4
-teshsuite/simdag/basic/basic5
-teshsuite/simdag/basic/basic6
-teshsuite/simdag/incomplete/incomplete
-teshsuite/simdag/network/mxn/test_intra_all2all
-teshsuite/simdag/network/mxn/test_intra_independent_comm
-teshsuite/simdag/network/mxn/test_intra_scatter
-teshsuite/simdag/network/p2p/test_latency1
-teshsuite/simdag/network/p2p/test_latency2
-teshsuite/simdag/network/p2p/test_latency3
-teshsuite/simdag/network/p2p/test_latency_bound
-teshsuite/simdag/network/test_reinit_costs
-teshsuite/simdag/platforms/basic_parsing_test
-teshsuite/simdag/platforms/flatifier
-teshsuite/simdag/platforms/basic_tracing
-teshsuite/simdag/platforms/basic_link_test
-teshsuite/simdag/platforms/evaluate_get_route_time
-teshsuite/simdag/platforms/evaluate_parse_time
-teshsuite/simdag/platforms/graphicator
-teshsuite/simdag/partask/test_comp_only_par
-teshsuite/simdag/partask/test_comp_only_seq
+teshsuite/smpi/vector/vector_test
teshsuite/surf/lmm_usage/lmm_usage
teshsuite/surf/maxmin_bench/maxmin_bench
teshsuite/surf/surf_usage/surf_usage
teshsuite/surf/surf_usage/surf_usage2
teshsuite/surf/trace_usage/trace_usage
-teshsuite/xbt/log_large/log_large_test
-teshsuite/xbt/mmalloc_test
teshsuite/xbt/graphxml_usage/graphxml_usage
teshsuite/xbt/heap_bench/heap_bench
+teshsuite/xbt/log_large/log_large_test
+teshsuite/xbt/log_large_test
teshsuite/xbt/log_usage/log_usage
+teshsuite/xbt/mallocator/mallocator
+teshsuite/xbt/mmalloc/mmalloc_test
+teshsuite/xbt/mmalloc_test
+teshsuite/xbt/parallel_log_crashtest
teshsuite/xbt/parallel_log/parallel_log_crashtest
teshsuite/xbt/parmap_bench/parmap_bench
teshsuite/xbt/parmap_test/parmap_test
-tools/tesh/tesh
-examples/msg/tracing/categories
-examples/msg/tracing/ms
-teshsuite/simdag/platforms/is_router_test
-examples/msg/masterslave/masterslave_cluster
-examples/simdag/simdag_tracing
-examples/smpi/smpi_traced
-examples/smpi/ttest01
-teshsuite/datadesc_usage.out
+testgraph.dot
+testgraph.xml
test_rl
test_sg
-examples/smpi/smpi_traced.trace
-examples/simdag/dot/simulate_dot
+tools/tesh/tesh
#########################################
## touched files to track the dependencies of java examples
examples/java/async/java_async_compiled
examples/scala/master_slave_kill/scala_master_slave_kill_compiled
examples/scala/masterslave/scala_masterslave_compiled
/CMakeCache.txt
-teshsuite/mc/dwarf/dwarf
-teshsuite/mc/dwarf_expression/dwarf-expression
-teshsuite/mc/replay/random_bug
examples/smpi/mc/smpi_bugged1
examples/smpi/mc/smpi_bugged1_liveness
examples/smpi/mc/smpi_bugged2
# reference to non-static member function must be called
# std::uninitialized_fill( buffer_, buffer_ + size, init_value );
# ^~~~
+#
addons:
apt: # Get recent versions of the compiler, even on Ubuntu Precise
sources:
- gcc-4.7
- g++-4.7
# - clang
+
+# Don't install lua from Debian as we need 5.3 and don't have a backport.
+# Installing lua from the source does not make any dynamic library.
+# - curl http://www.lua.org/ftp/lua-5.3.1.tar.gz | tar xz
+# - cd lua-5.3.1
+# - if [ ${TRAVIS_OS_NAME} = 'linux' ] ; then make linux ; else make macosx ; fi
+# - make INSTALL_TOP=$TRAVIS_BUILD_DIR/LuaInstall install
+# - cd ..
+# - ls -lR $TRAVIS_BUILD_DIR/LuaInstall
+
# Install libboost-chrono1.48-dev to get boost 1.48 on Ubuntu Precise. What we really want is libboost-dev libboost-all-dev
# Still need sudo for update-alternatives
before_install:
- if [ ${TRAVIS_OS_NAME} = 'linux' ] ; then sudo add-apt-repository --yes ppa:kubuntu-ppa/backports ; fi # cmake higher than 2.8.7
- if [ ${TRAVIS_OS_NAME} = 'linux' ] ; then sudo apt-get update -qq ; fi
- - if [ ${TRAVIS_OS_NAME} = 'linux' ] ; then sudo apt-get install -y cmake valgrind default-jdk gfortran liblua5.1-dev lua5.1 libboost-chrono1.48-dev ; fi
+ - if [ ${TRAVIS_OS_NAME} = 'linux' ] ; then sudo apt-get install -y cmake valgrind default-jdk gfortran libboost-chrono1.48-dev ; fi
- if [ ${TRAVIS_OS_NAME} = 'linux' ] ; then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 50 ; fi
- if [ ${TRAVIS_OS_NAME} = 'linux' ] ; then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 50 ; fi
script:
- - 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=OFF -Denable_compile_warnings=ON . && make VERBOSE=1 && ctest --output-on-failure --timeout 100
+ - cmake -Denable_documentation=OFF -Denable_coverage=OFF -Denable_java=ON -Denable_model-checking=OFF -Denable_lua=OFF -Denable_compile_optimizations=ON -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=OFF -Denable_compile_warnings=ON . && make VERBOSE=1 && ctest --output-on-failure --timeout 100
branches:
only:
- master
-SimGrid team is composed of a core team and a bunch of crew members.
-
Simgrid Core Team
_________________
-SimGrid is a joint project between University of Hawaii at Manoa, LIG Laboratory
-(INRIA MEScal project, Grenoble, France) and University of Nancy (INRIA
-Algorille project, Nancy, France). The authors of SimGrid are:
+SimGrid is a joint project. Its main authors are (alphabetic order):
Henri Casanova <casanova::cs.ucsd.edu>
Information and Computer Sciences Department, University of Hawaii at Manoa
Arnaud Legrand <arnaud.legrand::imag.fr>
CNRS, LIG Laboratory (Grenoble, France), INRIA MEScal project
-Martin Quinson <martin.quinson::loria.fr>
- University of Nancy I (Nancy, France), LORIA Laboratory,
- INRIA Algorille project
+Martin Quinson <martin.quinson::ens-rennes.fr>
+ École Normale Supérieure de Rennes, IRISA Laboratory, INRIA Myriads project
Fred Suter <frederic.suter::cc.in2p3.fr>
CNRS, IN2P3 Computing Center
Project Crew Members
____________________
-Check out our website http://simgrid.gforge.inria.fr/ to see who's doing what in
-SimGrid!
+Check out our website http://simgrid.gforge.inria.fr/ and the git logs
+to see who's doing what in SimGrid.
-@InProceedings{Casanova:2008:SGF:1397760.1398183,
- author = {Casanova, Henri and Legrand, Arnaud and Quinson, Martin},
- title = {SimGrid: a Generic Framework for Large-Scale Distributed Experiments},
- booktitle = {Proceedings of the Tenth International Conference on Computer Modeling and Simulation},
- series = {UKSIM '08},
- year = {2008},
- isbn = {978-0-7695-3114-4},
- pages = {126--131},
- numpages = {6},
- url = {http://dx.doi.org/10.1109/UKSIM.2008.28},
- doi = {10.1109/UKSIM.2008.28},
- acmid = {1398183},
- publisher = {IEEE Computer Society},
- address = {Washington, DC, USA},
+@Article{simgrid,
+ hal_id = {hal-01017319},
+ url = {http://hal.inria.fr/hal-01017319},
+ title = {Versatile, Scalable, and Accurate Simulation of Distributed Applications and Platforms},
+ author = {Casanova, Henri and Giersch, Arnaud and Legrand, Arnaud and Quinson, Martin and Suter, Fr{\'e}d{\'e}ric},
+ publisher = {Elsevier},
+ pages = {2899-2917},
+ journal = {Journal of Parallel and Distributed Computing},
+ volume = {74},
+ number = {10},
+ year = {2014},
+ month = Jun,
}
-cmake_minimum_required(VERSION 2.6)
-# Java requires 2.8.6
-message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}")
+cmake_minimum_required(VERSION 2.8.8)
+message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
project(SimGrid C CXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
- if (CMAKE_COMPILER_IS_GNUCC)
- if (COMPILER_CXX_VERSION_MAJOR_MINOR STRLESS "4.7")
+ if (CMAKE_COMPILER_IS_GNUCC)
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
message(FATAL_ERROR
- "SimGrid needs at least g++ version 4.7 to compile "
- "(c++11 support of previous versions is too limited).")
+ "SimGrid needs at least g++ version 4.7 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
+ "You need a sufficient support of c++11 to compile SimGrid.")
endif()
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
else()
message(FATAL_ERROR
- "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. "
+ "The compiler ${CMAKE_CXX_COMPILER} (v${CMAKE_CXX_COMPILER_VERSION}) has no C++11 support. "
"Please use a decent C++ compiler.")
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
else()
message(FATAL_ERROR
- "The compiler ${CMAKE_C_COMPILER} has no C11 support. "
+ "The compiler ${CMAKE_C_COMPILER} (v${CMAKE_C_COMPILER_VERSION}) has no C11 support. "
"Please use a decent C compiler "
"(note that c++11 support of ${CMAKE_CXX_COMPILER} seems ok).")
endif()
- if(APPLE AND ("4.6" GREATER COMPILER_C_VERSION_MAJOR_MINOR))
+ if(APPLE AND (CMAKE_C_COMPILER_VERSION VERSION_LESS "4.6"))
### gcc 4.[1-5] cannot compile ucontext on OSX
message(STATUS "Ucontext can't be used with this version of gcc (must be greater than 4.5)")
set(HAVE_UCONTEXT_H 0)
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
set(SIMGRID_VERSION_MAJOR "3")
-set(SIMGRID_VERSION_MINOR "12")
+set(SIMGRID_VERSION_MINOR "13")
set(SIMGRID_VERSION_PATCH "0")
-# set(SIMGRID_VERSION_EXTRA "-devel") # Extra words to add to version string (e.g. -rc1)
+set(SIMGRID_VERSION_EXTRA "-devel") # Extra words to add to version string (e.g. -rc1)
set(SIMGRID_VERSION_DATE "2015") # Year for copyright information
endif()
set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}${SIMGRID_VERSION_EXTRA}")
-set(SIMGRID_VERSION_BANNER
- "SIMGRID_VERSION_STRING\\nCopyright (c) 2004-${SIMGRID_VERSION_DATE}. The Simgrid Team.")
+set(SIMGRID_VERSION_BANNER "SIMGRID_VERSION_STRING\\nCopyright (c) 2004-${SIMGRID_VERSION_DATE}. The Simgrid Team.")
+if(release)
+ set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER}\\nRelease build")
+else()
+ set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER}\\nDevelopment build")
+endif()
set(libsimgrid_version "${release_version}")
set(libsimgrid-java_version "${release_version}")
endif()
endif()
-if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
- exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION")
- exec_program("${CMAKE_CXX_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_CXX_VERSION")
- string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_C_VERSION "${COMPILER_C_VERSION}")
- string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_CXX_VERSION "${COMPILER_CXX_VERSION}")
-
- string(REGEX MATCH "^[0-9].[0-9]" COMPILER_C_VERSION_MAJOR_MINOR "${COMPILER_C_VERSION}")
- string(REPLACE "${COMPILER_C_VERSION_MAJOR_MINOR}." "" COMPILER_C_VERSION_PATCH "${COMPILER_C_VERSION}")
-endif()
-
exec_program("${CMAKE_LINKER} --version" OUTPUT_VARIABLE "LINKER_VERSION")
string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
### Find programs and paths
FIND_PROGRAM(GCOV_PATH gcov)
include(FindPerl)
-if(NOT PERL_EXECUTABLE)
- message(FATAL_ERROR "-- SimGrid cannot be compiled without Perl installed -- sorry. Bailling out.")
+if(NOT PERL_FOUND)
+ message(FATAL_ERROR "Please install Perl to compile SimGrid.")
endif()
if (APPLE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif()
-
-### Set some variables for Cmake
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
+### Compute the include paths
set(INCLUDES
${CMAKE_HOME_DIRECTORY}
${CMAKE_HOME_DIRECTORY}/include
- ${CMAKE_HOME_DIRECTORY}/src
${CMAKE_HOME_DIRECTORY}/src/include
${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}/include
- ${CMAKE_BINARY_DIR}/src
)
if(WIN32)
endif()
### Check 32bits or 64bits
-INCLUDE (CheckTypeSize)
-CHECK_TYPE_SIZE("int" SIZEOF_INT)
-CHECK_TYPE_SIZE("long" SIZEOF_LONG)
-CHECK_TYPE_SIZE("long long" SIZEOF_LONGLONG)
-CHECK_TYPE_SIZE("void*" SIZEOF_VOIDSTAR)
-message (" Data model: (int)=${SIZEOF_INT} (long)=${SIZEOF_LONG} (long long)=${SIZEOF_LONGLONG} (void*)=${SIZEOF_VOIDSTAR}")
-IF(SIZEOF_VOIDSTAR EQUAL 4)
+IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
SET(ARCH_32_BITS 1)
ELSE()
SET(ARCH_32_BITS 0)
string(REGEX REPLACE "/bin/gcc.*" "/include" CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
string(REGEX REPLACE "/bin/gcc.*" "/lib" CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
set(INCLUDES ${INCLUDES} ${CMAKE_INCLUDE_WIN})
+ unset(CMAKE_INCLUDE_WIN)
- if(CMAKE_COMPILER_IS_GNUCC)
- set(__GNUC__ 1)
- exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION")
- string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_C_VERSION "${COMPILER_C_VERSION}")
- string(REGEX MATCH "^[0-9]" COMPILER_C_MAJOR_VERSION "${COMPILER_C_VERSION}")
- string(REGEX MATCH "^[0-9].[0-9]" COMPILER_C_MINOR_VERSION "${COMPILER_C_VERSION}")
- string(REGEX REPLACE "^${COMPILER_C_MAJOR_VERSION}." "" COMPILER_C_MINOR_VERSION "${COMPILER_C_MINOR_VERSION}")
- if(COMPILER_C_MAJOR_VERSION)
- # set(__GNUC__ ${COMPILER_C_MAJOR_VERSION})
- endif()
- if(COMPILER_C_MINOR_VERSION)
- # set(__GNUC_MINOR__ ${COMPILER_C_MINOR_VERSION})
- endif()
- endif()
-
+ find_program(NSIS_PROGRAM NAMES makensi)
set(NSIS_WIN_VERSION $ENV{PROCESSOR_ARCHITEW6432})
if(NSIS_WIN_VERSION MATCHES "")
set(NSIS_WIN_VERSION $ENV{PROCESSOR_ARCHITECTURE})
set(_XBT_WIN32 1)
- message(STATUS "C_COMPILER ${CMAKE_C_COMPILER} ${COMPILER_C_VERSION_MAJOR_MINOR}")
- message(STATUS "CXX_COMPILER ${CMAKE_CXX_COMPILER} ${COMPILER_CXX_VERSION_MAJOR_MINOR}")
+ message(STATUS "C_COMPILER ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_VERSION}")
+ message(STATUS "CXX_COMPILER ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS "CMAKE_RC_COMPILER ${CMAKE_RC_COMPILER}")
- message(STATUS "INCLUDE ${CMAKE_INCLUDE_WIN}")
message(STATUS "LIB ${CMAKE_LIB_WIN}")
message(STATUS "MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}")
message(STATUS "CMAKE_BUILD_TOOL ${CMAKE_BUILD_TOOL}")
### Setup Options
include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
-### Make the *.h files with *.h.in files
-include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CompleteInFiles.cmake)
+### Determine the assembly flavor that we need today
+include(CMakeDetermineSystem)
+IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
+ IF(${ARCH_32_BITS})
+ message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
+ set(PROCESSOR_i686 1)
+ ELSE()
+ message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
+ set(PROCESSOR_x86_64 1)
+ ENDIF()
+ if (MSVC)
+ message(STATUS "Disable fast raw contextes on Microsoft Visual.")
+ else()
+ set(HAVE_RAWCTX 1)
+ endif()
+
+ENDIF()
+
+include(CheckFunctionExists)
+include(CheckTypeSize)
+include(CheckIncludeFile)
+include(CheckIncludeFiles)
+include(CheckLibraryExists)
+include(CheckSymbolExists)
+
+include(FindGraphviz)
+include(FindLibSigc++)
+
+if(enable_scala)
+ find_package(Scala REQUIRED)
+ message("-- [Scala] scalac found: ${SCALA_COMPILE}")
+ set(HAVE_Scala 1)
+endif()
+if(enable_lua)
+ include(FindLuaSimgrid)
+endif()
+
+set(HAVE_NS3 0)
+if(enable_ns3)
+ include(FindNS3)
+ if (NOT HAVE_NS3)
+ message(FATAL_ERROR "Cannot find NS3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
+ endif()
+endif()
+
+find_package(Boost 1.48)
+if(Boost_FOUND)
+ include_directories(${Boost_INCLUDE_DIRS})
+else()
+ if(APPLE)
+ 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."
+ "Did you install libboost-dev and libboost-context-dev?"
+ "(libboost-context-dev is optional)")
+ endif()
+endif()
+
+# Try again to see if we have libboost-context
+find_package(Boost 1.42 COMPONENTS context)
+set(Boost_FOUND 1) # We don't care of whether this component is missing
+
+if(Boost_FOUND AND Boost_CONTEXT_FOUND)
+ # We should use feature detection for this instead:
+ if (Boost_VERSION LESS 105600)
+ message("Found Boost.Context API v1")
+ set(HAVE_BOOST_CONTEXT 1)
+ else()
+ message("Found Boost.Context API v2")
+ set(HAVE_BOOST_CONTEXT 2)
+ endif()
+else()
+ message (" boost : found.")
+ message (" boost-context: missing. Install libboost-context-dev for this optional feature.")
+ set(HAVE_BOOST_CONTEXT 0)
+endif()
+
+# Checks for header libraries functions.
+CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_DLOPEN_IN_LIBDL)
+CHECK_LIBRARY_EXISTS(execinfo backtrace "" HAVE_BACKTRACE_IN_LIBEXECINFO)
+CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_PTHREAD)
+CHECK_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB)
+CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB)
+CHECK_LIBRARY_EXISTS(pthread sem_timedwait "" HAVE_SEM_TIMEDWAIT_LIB)
+CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB)
+CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
+
+if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
+elseif(MINGW)
+ add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
+ set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
+else()
+ set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
+endif()
+
+CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
+CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_VALGRIND_H)
+CHECK_INCLUDE_FILE("socket.h" HAVE_SOCKET_H)
+CHECK_INCLUDE_FILE("stat.h" HAVE_STAT_H)
+CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H)
+CHECK_INCLUDE_FILE("sys/ptrace.h" HAVE_SYS_PTRACE_H)
+CHECK_INCLUDE_FILE("windows.h" HAVE_WINDOWS_H)
+CHECK_INCLUDE_FILE("errno.h" HAVE_ERRNO_H)
+CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
+CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFO_H)
+CHECK_INCLUDE_FILE("signal.h" HAVE_SIGNAL_H)
+CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H)
+CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
+CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H)
+CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
+CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H)
+CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
+CHECK_INCLUDE_FILE("stdio.h" HAVE_STDIO_H)
+CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
+
+CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
+CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
+CHECK_FUNCTION_EXISTS(getdtablesize HAVE_GETDTABLESIZE)
+CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
+CHECK_FUNCTION_EXISTS(readv HAVE_READV)
+CHECK_FUNCTION_EXISTS(popen HAVE_POPEN)
+CHECK_FUNCTION_EXISTS(signal HAVE_SIGNAL)
+
+CHECK_SYMBOL_EXISTS(snprintf stdio.h HAVE_SNPRINTF)
+CHECK_SYMBOL_EXISTS(vsnprintf stdio.h HAVE_VSNPRINTF)
+CHECK_SYMBOL_EXISTS(asprintf stdio.h HAVE_ASPRINTF)
+CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
+
+if(MINGW)
+ # The detection of asprintf fails on MinGW, assumingly because it's
+ # defined as an inline function in stdio.h instead of a regular
+ # function. So force the result to be 1 despite of the test.
+ set(HAVE_SNPRINTF 1)
+ set(HAVE_VSNPRINTF 1)
+ set(HAVE_ASPRINTF 1)
+ set(HAVE_VASPRINTF 1)
+endif()
+
+CHECK_FUNCTION_EXISTS(makecontext HAVE_MAKECONTEXT)
+CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
+
+CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
+
+#Check if __thread is defined
+execute_process(
+ COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_thread_storage.c"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ RESULT_VARIABLE HAVE_thread_storage_run
+ )
+
+if(HAVE_thread_storage_run)
+ set(HAVE_THREAD_LOCAL_STORAGE 1)
+else()
+ set(HAVE_THREAD_LOCAL_STORAGE 0)
+endif()
+
+# Our usage of mmap is Linux-specific (flag MAP_ANONYMOUS), but kFreeBSD uses a GNU libc
+IF(HAVE_MMAP AND
+ NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND
+ NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND
+ NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND
+ NOT "${CMAKE_SYSTEM}" MATCHES "Darwin")
+ SET(HAVE_MMAP 0)
+ message(STATUS "Warning: MMAP is thought as non functional on this architecture (${CMAKE_SYSTEM})")
+ENDIF()
+
+if(HAVE_MMAP AND HAVE_THREAD_LOCAL_STORAGE)
+ SET(HAVE_MMALLOC 1)
+else()
+ SET(HAVE_MMALLOC 0)
+endif()
+
+
+if(WIN32) # Those files are not detected despite being present
+ set(HAVE_UCONTEXT_H 1)
+ set(HAVE_MAKECONTEXT 1)
+endif()
+
+set(CONTEXT_UCONTEXT 0)
+set(CONTEXT_THREADS 0)
+
+if(enable_jedule)
+ set(HAVE_JEDULE 1)
+endif()
+
+if(enable_latency_bound_tracking)
+ SET(HAVE_LATENCY_BOUND_TRACKING 1)
+else()
+ SET(HAVE_LATENCY_BOUND_TRACKING 0)
+endif()
+
+if(enable_mallocators)
+ SET(MALLOCATOR_IS_WANTED 1)
+else()
+ SET(MALLOCATOR_IS_WANTED 0)
+endif()
+
+if(enable_model-checking AND HAVE_MMALLOC)
+ SET(HAVE_MC 1)
+ SET(MMALLOC_WANT_OVERRIDE_LEGACY 1)
+ include(FindLibunwind)
+ include(FindLibdw)
+else()
+ if(enable_model-checking)
+ message(STATUS "Warning: support for model-checking has been disabled because HAVE_MMALLOC is false")
+ endif()
+ SET(HAVE_MC 0)
+ SET(HAVE_MMALLOC 0)
+ SET(MMALLOC_WANT_OVERRIDE_LEGACY 0)
+endif()
+
+if(enable_smpi)
+ include(FindGFortran)
+ SET(HAVE_SMPI 1)
+ if("${CMAKE_SYSTEM}" MATCHES "Linux")
+ SET(USE_LIBUTIL 0)
+ SET(HAVE_PRIVATIZATION 1)
+ elseif("${CMAKE_SYSTEM}" MATCHES "^FreeBSD")
+ SET(USE_LIBUTIL 0)
+ SET(HAVE_PRIVATIZATION 0)
+ endif()
+endif()
+
+#--------------------------------------------------------------------------------------------------
+### Check for GNU dynamic linker
+CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
+if (HAVE_DLFCN_H)
+ if(HAVE_DLOPEN_IN_LIBDL)
+ set(DL_LIBRARY "-ldl")
+ endif(HAVE_DLOPEN_IN_LIBDL)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_gnu_dynlinker.c ${DL_LIBRARY} -o test_gnu_ld
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ OUTPUT_VARIABLE HAVE_GNU_LD_compil
+ )
+ if(HAVE_GNU_LD_compil)
+ set(HAVE_GNU_LD 0)
+ message(STATUS "Warning: test program toward GNU ld failed to compile:")
+ message(STATUS "${HAVE_GNU_LD_comp_output}")
+ else()
+
+ execute_process(COMMAND ./test_gnu_ld
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ RESULT_VARIABLE HAVE_GNU_LD_run
+ OUTPUT_VARIABLE var_exec
+ )
+
+ if(NOT HAVE_GNU_LD_run)
+ set(HAVE_GNU_LD 1)
+ message(STATUS "We are using GNU dynamic linker")
+ else()
+ set(HAVE_GNU_LD 0)
+ message(STATUS "Warning: error while checking for GNU ld:")
+ message(STATUS "Test output: '${var_exec}'")
+ message(STATUS "Exit status: ${HAVE_GNU_LD_run}")
+ endif()
+ file(REMOVE test_gnu_ld)
+ endif()
+endif()
+
+
+#--------------------------------------------------------------------------------------------------
+### Initialize of CONTEXT THREADS
+
+if(HAVE_PTHREAD)
+ ### Test that we have a way to create semaphores
+
+ if(HAVE_SEM_OPEN_LIB)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_open.c -lpthread -o sem_open
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ OUTPUT_VARIABLE HAVE_SEM_OPEN_compil
+ )
+
+ # Test sem_open by compiling:
+ if(HAVE_SEM_OPEN_compil)
+ set(HAVE_SEM_OPEN 0)
+ message(STATUS "Warning: sem_open not compilable")
+ message(STATUS "HAVE_SEM_OPEN_comp_output: ${HAVE_SEM_OPEN_comp_output}")
+ else()
+ set(HAVE_SEM_OPEN 1)
+ message(STATUS "sem_open is compilable")
+ endif()
+
+ # If we're not crosscompiling, we check by executing the program:
+ if (HAVE_SEM_OPEN AND NOT CMAKE_CROSSCOMPILING)
+ execute_process(COMMAND ./sem_open
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ RESULT_VARIABLE HAVE_SEM_OPEN_run
+ OUTPUT_VARIABLE var_compil
+ )
+ if (NOT HAVE_SEM_OPEN_run)
+ set(HAVE_SEM_OPEN 1)
+ message(STATUS "sem_open is executable")
+ else()
+ set(HAVE_SEM_OPEN 0)
+ if(EXISTS "${CMAKE_BINARY_DIR}/sem_open")
+ message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_open exists!")
+ else()
+ message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_open not exists!")
+ endif()
+ message(STATUS "Warning: sem_open not executable")
+ message(STATUS "Compilation output: '${var_compil}'")
+ message(STATUS "Exit result of sem_open: ${HAVE_SEM_OPEN_run}")
+ endif()
+ endif()
+ file(REMOVE sem_open)
+
+ else()
+ set(HAVE_SEM_OPEN 0)
+ endif()
+
+ if(HAVE_SEM_INIT_LIB)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_init.c -lpthread -o sem_init
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ RESULT_VARIABLE HAVE_SEM_INIT_run OUTPUT_VARIABLE HAVE_SEM_INIT_compil)
+
+ # Test sem_init by compiling:
+ if(HAVE_SEM_INIT_compil)
+ set(HAVE_SEM_INIT 0)
+ message(STATUS "Warning: sem_init not compilable")
+ message(STATUS "HAVE_SEM_INIT_comp_output: ${HAVE_SEM_OPEN_comp_output}")
+ else()
+ set(HAVE_SEM_INIT 1)
+ message(STATUS "sem_init is compilable")
+ endif()
+
+ # If we're not crosscompiling, we check by executing the program:
+ if (HAVE_SEM_INIT AND NOT CMAKE_CROSSCOMPILING)
+ execute_process(COMMAND ./sem_init
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ RESULT_VARIABLE HAVE_SEM_INIT_run
+ OUTPUT_VARIABLE var_compil
+ )
+ if (NOT HAVE_SEM_INIT_run)
+ set(HAVE_SEM_INIT 1)
+ message(STATUS "sem_init is executable")
+ else()
+ set(HAVE_SEM_INIT 0)
+ if(EXISTS "${CMAKE_BINARY_DIR}/sem_init")
+ message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_init exists!")
+ else()
+ message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_init not exists!")
+ endif()
+ message(STATUS "Warning: sem_init not executable")
+ message(STATUS "Compilation output: '${var_compil}'")
+ message(STATUS "Exit result of sem_init: ${HAVE_SEM_INIT_run}")
+ endif()
+ endif()
+ file(REMOVE sem_init)
+ endif()
+
+ if(NOT HAVE_SEM_OPEN AND NOT HAVE_SEM_INIT)
+ message(FATAL_ERROR "Semaphores are not usable (neither sem_open nor sem_init is both compilable and executable), but they are mandatory to threads (you may need to mount /dev).")
+ endif()
+
+ ### Test that we have a way to timewait for semaphores
+
+ if(HAVE_SEM_TIMEDWAIT_LIB)
+
+ execute_process(
+ COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_timedwait.c -lpthread"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ OUTPUT_VARIABLE HAVE_SEM_TIMEDWAIT_run
+ )
+
+ if(HAVE_SEM_TIMEDWAIT_run)
+ set(HAVE_SEM_TIMEDWAIT 0)
+ message(STATUS "timedwait not compilable")
+ else()
+ set(HAVE_SEM_TIMEDWAIT 1)
+ message(STATUS "timedwait is compilable")
+ endif()
+ endif()
+
+ ### HAVE_MUTEX_TIMEDLOCK
+
+ if(HAVE_MUTEX_TIMEDLOCK_LIB)
+
+ execute_process(
+ COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_mutex_timedlock.c -lpthread"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ OUTPUT_VARIABLE HAVE_MUTEX_TIMEDLOCK_run
+ )
+
+ if(HAVE_MUTEX_TIMEDLOCK_run)
+ set(HAVE_MUTEX_TIMEDLOCK 0)
+ message(STATUS "timedlock not compilable")
+ else()
+ message(STATUS "timedlock is compilable")
+ set(HAVE_MUTEX_TIMEDLOCK 1)
+ endif()
+ endif()
+endif()
+
+# This is needed for ucontext on MacOS X:
+if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ add_definitions(-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE)
+endif()
+
+if(WIN32)
+ # We always provide our own implementation of ucontext on Windows.
+ try_compile(HAVE_UCONTEXT
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_AC_CHECK_MCSC.c
+ COMPILE_DEFINITIONS _XBT_WIN32
+ INCLUDE_DIRECTORIES
+ ${CMAKE_HOME_DIRECTORY}/src/include
+ ${CMAKE_HOME_DIRECTORY}/src/xbt
+ )
+else()
+ # We always provide our own implementation of ucontext on Windows.
+ try_compile(HAVE_UCONTEXT
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_AC_CHECK_MCSC.c)
+endif()
+
+#If can have both context
+
+if(HAVE_UCONTEXT)
+ set(CONTEXT_UCONTEXT 1)
+ message("-- Support for ucontext factory")
+endif()
+
+if(HAVE_PTHREAD)
+ set(CONTEXT_THREADS 1)
+ message("-- Support for thread context factory")
+endif()
+
+###############
+## GIT version check
+##
+if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
+ execute_process(COMMAND git remote
+ COMMAND head -n 1
+ WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
+ OUTPUT_VARIABLE remote
+ RESULT_VARIABLE ret
+ )
+ string(REPLACE "\n" "" remote "${remote}")
+ #message(STATUS "Git remote: ${remote}")
+ execute_process(COMMAND git config --get remote.${remote}.url
+ WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
+ OUTPUT_VARIABLE url
+ RESULT_VARIABLE ret
+ )
+ string(REPLACE "\n" "" url "${url}")
+ #message(STATUS "Git url: ${url}")
+ if(url)
+ execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --pretty=oneline --abbrev-commit -1
+ WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
+ OUTPUT_VARIABLE GIT_VERSION
+ RESULT_VARIABLE ret
+ )
+ string(REPLACE "\n" "" GIT_VERSION "${GIT_VERSION}")
+ message(STATUS "Git version: ${GIT_VERSION}")
+ execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log -n 1 --pretty=format:%ai .
+ WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
+ OUTPUT_VARIABLE GIT_DATE
+ RESULT_VARIABLE ret
+ )
+ string(REPLACE "\n" "" GIT_DATE "${GIT_DATE}")
+ message(STATUS "Git date: ${GIT_DATE}")
+ string(REGEX REPLACE " .*" "" GIT_VERSION "${GIT_VERSION}")
+
+ execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --pretty=format:%H -1
+ WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
+ OUTPUT_VARIABLE SIMGRID_GITHASH
+ RESULT_VARIABLE ret
+ )
+ string(REPLACE "\n" "" SIMGRID_GITHASH "${SIMGRID_GITHASH}")
+
+ endif()
+elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
+ FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
+endif()
+
+if(GIT_VERSION)
+ set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER} at commit ${GIT_VERSION}")
+endif()
+if(GIT_DATE)
+ set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER} (${GIT_DATE})")
+endif()
+#--------------------------------------------------------------------------------------------------
+
+set(makecontext_CPPFLAGS_2 "")
+if(HAVE_MAKECONTEXT OR WIN32)
+ set(makecontext_CPPFLAGS "-DTEST_makecontext")
+ if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ set(makecontext_CPPFLAGS_2 "-D_XOPEN_SOURCE=700")
+ endif()
+
+ if(WIN32)
+ if(ARCH_32_BITS)
+ set(makecontext_CPPFLAGS "-DTEST_makecontext -D_I_X86_")
+ else()
+ set(makecontext_CPPFLAGS "-DTEST_makecontext -D_AMD64_")
+ endif()
+ set(makecontext_CPPFLAGS_2 "-D_XBT_WIN32 -I${CMAKE_HOME_DIRECTORY}/src/include -I${CMAKE_HOME_DIRECTORY}/src/xbt")
+ endif()
+
+ file(REMOVE ${CMAKE_BINARY_DIR}/conftestval)
+
+ if(CMAKE_CROSSCOMPILING)
+ set(RUN_makecontext_VAR "cross")
+ set(COMPILE_makecontext_VAR "cross")
+ else()
+ try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
+ COMPILE_DEFINITIONS "${makecontext_CPPFLAGS} ${makecontext_CPPFLAGS_2}"
+ )
+ endif()
+
+ if(EXISTS ${CMAKE_BINARY_DIR}/conftestval)
+ file(READ ${CMAKE_BINARY_DIR}/conftestval MAKECONTEXT_ADDR_SIZE)
+ string(REPLACE "\n" "" MAKECONTEXT_ADDR_SIZE "${MAKECONTEXT_ADDR_SIZE}")
+ string(REGEX MATCH ;^.*,;MAKECONTEXT_ADDR "${MAKECONTEXT_ADDR_SIZE}")
+ string(REGEX MATCH ;,.*$; MAKECONTEXT_SIZE "${MAKECONTEXT_ADDR_SIZE}")
+ string(REPLACE "," "" makecontext_addr "${MAKECONTEXT_ADDR}")
+ string(REPLACE "," "" makecontext_size "${MAKECONTEXT_SIZE}")
+ set(pth_skaddr_makecontext "#define pth_skaddr_makecontext(skaddr,sksize) (${makecontext_addr})")
+ set(pth_sksize_makecontext "#define pth_sksize_makecontext(skaddr,sksize) (${makecontext_size})")
+ else()
+ # message(FATAL_ERROR "makecontext is not compilable")
+ endif()
+endif()
+
+#--------------------------------------------------------------------------------------------------
+
+### check for stackgrowth
+if (NOT CMAKE_CROSSCOMPILING)
+ try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
+ RUN_OUTPUT_VARIABLE stack
+ )
+endif()
+if("${stack}" STREQUAL "down")
+ set(PTH_STACKGROWTH "-1")
+elseif("${stack}" STREQUAL "up")
+ set(PTH_STACKGROWTH "1")
+else()
+ if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
+ set(PTH_STACKGROWTH "-1")
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
+ set(PTH_STACKGROWTH "-1")
+ else()
+ message(ERROR "Could not figure the stack direction.")
+ endif()
+endif()
+
+###############
+## System checks
+##
+
+#SG_CONFIGURE_PART([System checks...])
+#AC_PROG_CC(xlC gcc cc) -auto
+#AM_SANITY_CHECK -auto
+
+#AC_PROG_MAKE_SET
+
+#AC_CHECK_VA_COPY
+
+set(diff_va "va_copy((d),(s))"
+ "VA_COPY((d),(s))"
+ "__va_copy((d),(s))"
+ "__builtin_va_copy((d),(s))"
+ "do { (d) = (s)\; } while (0)"
+ "do { *(d) = *(s)\; } while (0)"
+ "memcpy((void *)&(d), (void *)&(s), sizeof(s))"
+ "memcpy((void *)(d), (void *)(s), sizeof(*(s)))"
+ )
+
+foreach(fct ${diff_va})
+ write_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_va_copy.c" "#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#define DO_VA_COPY(d,s) ${fct}
+void test(char *str, ...)
+{
+ va_list ap, ap2;
+ int i;
+ va_start(ap, str);
+ DO_VA_COPY(ap2, ap);
+ for (i = 1; i <= 9; i++) {
+ int k = (int)va_arg(ap, int);
+ if (k != i)
+ abort();
+ }
+ DO_VA_COPY(ap, ap2);
+ for (i = 1; i <= 9; i++) {
+ int k = (int)va_arg(ap, int);
+ if (k != i)
+ abort();
+ }
+ va_end(ap);
+}
+int main(void)
+{
+ test(\"test\", 1, 2, 3, 4, 5, 6, 7, 8, 9);
+ exit(0);
+}"
+ )
+
+ execute_process(
+ COMMAND ${CMAKE_C_COMPILER} "${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_va_copy.c"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ RESULT_VARIABLE COMPILE_VA_NULL_VAR
+ OUTPUT_QUIET
+ ERROR_QUIET
+ )
+
+ if(NOT COMPILE_VA_NULL_VAR)
+ string(REGEX REPLACE "\;" "" fctbis ${fct})
+ if(${fctbis} STREQUAL "va_copy((d),(s))")
+ set(HAVE_VA_COPY 1)
+ set(ac_cv_va_copy "C99")
+ set(__VA_COPY_USE_C99 "va_copy((d),(s))")
+ endif()
+
+ if(${fctbis} STREQUAL "VA_COPY((d),(s))")
+ set(ac_cv_va_copy "GCM")
+ set(__VA_COPY_USE_GCM "VA_COPY((d),(s))")
+ endif()
+
+ if(${fctbis} STREQUAL "__va_copy((d),(s))")
+ set(ac_cv_va_copy "GCH")
+ set(__VA_COPY_USE_GCH "__va_copy((d),(s))")
+ endif()
+
+ if(${fctbis} STREQUAL "__builtin_va_copy((d),(s))")
+ set(ac_cv_va_copy "GCB")
+ set(__VA_COPY_USE_GCB "__builtin_va_copy((d),(s))")
+ endif()
+
+ if(${fctbis} STREQUAL "do { (d) = (s) } while (0)")
+ set(ac_cv_va_copy "ASS")
+ set(__VA_COPY_USE_ASS "do { (d) = (s); } while (0)")
+ endif()
+
+ if(${fctbis} STREQUAL "do { *(d) = *(s) } while (0)")
+ set(ac_cv_va_copy "ASP")
+ set(__VA_COPY_USE_ASP "do { *(d) = *(s); } while (0)")
+ endif()
+
+ if(${fctbis} STREQUAL "memcpy((void *)&(d), (void *)&(s), sizeof(s))")
+ set(ac_cv_va_copy "CPS")
+ set(__VA_COPY_USE_CPS "memcpy((void *)&(d), (void *)&(s), sizeof(s))")
+ endif()
+
+ if(${fctbis} STREQUAL "memcpy((void *)(d), (void *)(s), sizeof(*(s)))")
+ set(ac_cv_va_copy "CPP")
+ set(__VA_COPY_USE_CPP "memcpy((void *)(d), (void *)(s), sizeof(*(s)))")
+ endif()
+
+ if(NOT STATUS_OK)
+ set(__VA_COPY_USE "__VA_COPY_USE_${ac_cv_va_copy}(d, s)")
+ endif()
+ set(STATUS_OK "1")
+
+ endif()
+
+endforeach(fct ${diff_va})
+
+#--------------------------------------------------------------------------------------------------
+### check for a working snprintf
+if(HAVE_SNPRINTF AND HAVE_VSNPRINTF OR WIN32)
+ if(WIN32)
+ #set(HAVE_SNPRINTF 1)
+ #set(HAVE_VSNPRINTF 1)
+ endif()
+
+ if(CMAKE_CROSSCOMPILING)
+ set(RUN_SNPRINTF_FUNC "cross")
+ #set(PREFER_PORTABLE_SNPRINTF 1)
+ else()
+ try_run(RUN_SNPRINTF_FUNC_VAR COMPILE_SNPRINTF_FUNC_VAR
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_snprintf.c
+ )
+ endif()
+
+ if(CMAKE_CROSSCOMPILING)
+ set(RUN_VSNPRINTF_FUNC "cross")
+ set(PREFER_PORTABLE_VSNPRINTF 1)
+ else()
+ try_run(RUN_VSNPRINTF_FUNC_VAR COMPILE_VSNPRINTF_FUNC_VAR
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_vsnprintf.c
+ )
+ endif()
+
+ set(PREFER_PORTABLE_SNPRINTF 0)
+ if(RUN_VSNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
+ set(PREFER_PORTABLE_SNPRINTF 1)
+ endif()
+ if(RUN_SNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
+ set(PREFER_PORTABLE_SNPRINTF 1)
+ endif()
+endif()
+
+### check for asprintf function familly
+if(HAVE_ASPRINTF)
+ SET(simgrid_need_asprintf "")
+ SET(NEED_ASPRINTF 0)
+else()
+ SET(simgrid_need_asprintf "#define SIMGRID_NEED_ASPRINTF 1")
+ SET(NEED_ASPRINTF 1)
+endif()
+
+if(HAVE_VASPRINTF)
+ SET(simgrid_need_vasprintf "")
+ SET(NEED_VASPRINTF 0)
+else()
+ SET(simgrid_need_vasprintf "#define SIMGRID_NEED_VASPRINTF 1")
+ SET(NEED_VASPRINTF 1)
+endif()
+
+### check for addr2line
+
+find_path(ADDR2LINE NAMES addr2line PATHS NO_DEFAULT_PATHS )
+if(ADDR2LINE)
+ set(ADDR2LINE "${ADDR2LINE}/addr2line")
+endif()
+
+### File to create
+
+configure_file("${CMAKE_HOME_DIRECTORY}/src/context_sysv_config.h.in"
+ "${CMAKE_BINARY_DIR}/src/context_sysv_config.h" @ONLY IMMEDIATE)
+
+SET( CMAKEDEFINE "#cmakedefine" )
+configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE)
+configure_file("${CMAKE_BINARY_DIR}/src/internal_config.h" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE)
+configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid_config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid_config.h" @ONLY IMMEDIATE)
+
+set(top_srcdir "${CMAKE_HOME_DIRECTORY}")
+set(srcdir "${CMAKE_HOME_DIRECTORY}/src")
+set(bindir "${CMAKE_BINARY_DIR}")
+
+### Script used when simgrid is installed
+set(exec_prefix ${CMAKE_INSTALL_PREFIX})
+set(includeflag "-I${CMAKE_INSTALL_PREFIX}/include -I${CMAKE_INSTALL_PREFIX}/include/smpi")
+set(includedir "${CMAKE_INSTALL_PREFIX}/include")
+set(libdir ${exec_prefix}/lib)
+set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_INSTALL_PREFIX}/lib")
+if(NS3_LIBRARY_PATH)
+ set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
+endif()
+set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
+
+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}/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/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)
+
+### Script used when simgrid is compiling
+set(includeflag "-I${CMAKE_HOME_DIRECTORY}/include -I${CMAKE_HOME_DIRECTORY}/include/smpi")
+set(includeflag "${includeflag} -I${CMAKE_BINARY_DIR}/include -I${CMAKE_BINARY_DIR}/include/smpi")
+set(includedir "${CMAKE_HOME_DIRECTORY}/include")
+set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
+set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_BINARY_DIR}/lib")
+if(NS3_LIBRARY_PATH)
+ set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
+endif()
+set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
+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/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)
+
+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/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/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)
+endif()
+
+set(generated_headers_to_install
+ ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
+ ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid_config.h
+ )
+
+set(generated_headers
+ ${CMAKE_CURRENT_BINARY_DIR}/src/context_sysv_config.h
+ ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h
+ )
+
+set(generated_files_to_clean
+ ${generated_headers}
+ ${generated_headers_to_install}
+ ${CMAKE_BINARY_DIR}/bin/smpicc
+ ${CMAKE_BINARY_DIR}/bin/smpicxx
+ ${CMAKE_BINARY_DIR}/bin/smpiff
+ ${CMAKE_BINARY_DIR}/bin/smpif90
+ ${CMAKE_BINARY_DIR}/bin/smpirun
+ ${CMAKE_BINARY_DIR}/bin/colorize
+ ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
+ ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
+ )
+
+if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allReduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
+
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt COPYONLY)
+
+ set(generated_files_to_clean
+ ${generated_files_to_clean}
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
+ ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
+ )
+endif()
+
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
+ "${generated_files_to_clean}")
+
+configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/simgrid.nsi.in" "${CMAKE_BINARY_DIR}/simgrid.nsi" @ONLY IMMEDIATE)
### Define source packages for Libs
include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
find_program(WGET_PROGRAM NAMES wget)
message(STATUS "wget: ${WGET_PROGRAM}")
if(WGET_PROGRAM)
- ADD_CUSTOM_TARGET(simgrid_documentation
+ ADD_CUSTOM_TARGET(documentation
COMMENT "Downloading the SimGrid documentation..."
COMMAND ${WGET_PROGRAM} -r -np -nH -nd http://simgrid.gforge.inria.fr/simgrid/${release_version}/doc/
WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc/html
+SimGrid (3.13) UNRELEASED; urgency=low
+
+ SMPI
+ * BC breaks:
+ - The option smpi/async_small_thres was renamed to smpi/async_small_thresh
+ as we attempt to unify our naming schemes -> smpi/send_is_detached_thresh
+
+
+ XBT
+ * Kill the setset datacontainer: it's unused since a while.
+
+ -- $date Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+
SimGrid (3.12) stable; urgency=low
The Facelift Release.
--- /dev/null
+SimGrid requires Lua 5.3; it will not work with Lua 5.2 or Lua 5.1,
+as Lua 5.3 breaks backwards compatibility.
+
+However, installing Lua 5.3 is easy. (If you're an administrator)
+
+Step 1: Go to http://www.lua.org/download.html and download the 5.3 package.
+
+Step 2: Untar the package: tar xvfz lua-5.3.*.tar.gz
+
+Step 3: cd into the new directory
+
+Step 4: Apply the patch in "<simgrid-source-dir>/contrib/lua/lualib.patch" to the
+ lua source:
+
+ For instance, if you unpacked the lua sourcecode to /tmp/lua-5.3.1, use
+ the following commands:
+
+ cp contrib/lua/lualib.patch /tmp/lua-5.3.1
+ cd /tmp/lua-5.3.1/
+ patch -p1 < lualib.patch
+
+Step 5: make <platform>, for instance "make linux"
+
+Step 6: sudo make install
+
+Step 7: Run ccmake (or supply the config option to cmake) to enable Lua in SimGrid. Done!
-# This file is intended to automatize the testing of SimGrid on
-# Windows using the appveyor.com continuous integration service
+# This file automatize the testing of SimGrid on Windows using the appveyor.com continuous integration service
+#
+# Build logs: https://ci.appveyor.com/project/mquinson/simgrid
os: Visual Studio 2015
version: "{build}"
# scripts that are called at very beginning, before repo cloning
init:
-- cmake --version
-- msbuild /version
- git config --global core.longpaths true
- git config --global core.autocrlf input
environment:
global:
- BOOST_ROOT: c:\Libraries\boost_1_59_0
- BOOST_LIBRARYDIR: c:\Libraries\boost_1_59_0\stage\lib
- # BOOST_ROOT: c:\Libraries\boost
- # BOOST_LIBRARYDIR: c:\Libraries\boost\stage\lib
+ BOOST_ROOT: c:\Libraries\boost
+ BOOST_LIBRARYDIR: c:\Libraries\boost\stage\lib
TESH_ARGS: C:/projects/simgrid/bin/tesh --setenv srcdir=C:/projects/simgrid/examples/java --setenv classpath=C:/projects/simgrid/examples/java;C:/projects/simgrid/teshsuite/java;C:/projects/simgrid/simgrid.jar --cd C:/projects/simgrid/examples/java
matrix:
- COMPILER: MinGW-w64
+# MSCV15 is too hard for me: I fail to get the lib to link on that platf (even with c:\Libraries\boost_1_59_0)
# - COMPILER: MSVC15
-# PLATFORM: Win32
+# PLATFORM: Win32 # That's actually an appveyor parameter of MSVC15, it's useless with MinGW-w64
# - COMPILER: MSVC15
# PLATFORM: x64
-
+
+# When Lua will become mandatory, we will have to download it precompiled. It's Windows after all
+#
+#environment:
+#LUA_HINT: C:/projects/simgrid
+#install:
+#- if [%COMPILER%]==[MinGW-w64] appveyor DownloadFile "http://sourceforge.net/projects/luabinaries/files/5.3/Windows Libraries/Dynamic/lua-5.3_Win64_dllw4_lib.zip/download" -FileName lua.zip || appveyor DownloadFile "http://sourceforge.net/projects/luabinaries/files/5.3/Windows Libraries/Dynamic/lua-5.3_Win64_dllw4_lib.zip/download" -FileName lua.zip
+#- if [%COMPILER%]==[MinGW-w64] 7z x -tzip lua.zip > NULL
+
install:
-- if [%COMPILER%]==[MinGW] set PATH=C:\MinGW\bin;%PATH%
-- if [%COMPILER%]==[MinGW] mingw-get update
-- if [%COMPILER%]==[MinGW] rename "C:\Program Files (x86)\Git\bin\sh.exe" "sh2.exe"
-- if [%COMPILER%]==[MinGW-w64] set PATH=C:\mingw64\bin;%PATH%
-- if [%COMPILER%]==[MinGW-w64] rename "C:\Program Files (x86)\Git\bin\sh.exe" "sh2.exe"
-- if [%COMPILER%]==[MinGW-w64] appveyor DownloadFile "https://raw.githubusercontent.com/symengine/dependencies/5cff7d1736877336cf9fb58267111beea4fa152f/x86_64-4.9.1-release-posix-seh-rt_v3-rev1.7z" -FileName mw64.7z || appveyor DownloadFile "https://raw.githubusercontent.com/symengine/dependencies/5cff7d1736877336cf9fb58267111beea4fa152f/x86_64-4.9.1-release-posix-seh-rt_v3-rev1.7z" -FileName mw64.7z
+- if [%COMPILER%]==[MinGW-w64] call .appveyor-download.cmd "https://raw.githubusercontent.com/symengine/dependencies/5cff7d1736877336cf9fb58267111beea4fa152f/x86_64-4.9.1-release-posix-seh-rt_v3-rev1.7z" -FileName mw64.7z
- if [%COMPILER%]==[MinGW-w64] 7z x -oC:\ mw64.7z > NUL
-- if [%COMPILER%]==[MSYS2] set PATH=C:\msys64\bin,%PATH%
+- if [%COMPILER%]==[MinGW-w64] set PATH=C:\mingw64\bin;%PATH%-
+- if [%COMPILER%]==[MinGW-w64] rename "C:\Program Files\Git\usr\bin\sh.exe" "sh-ignored.exe"
build_script:
-- if [%COMPILER%]==[MSVC15] if [%PLATFORM%]==[Win32] cmake -G "Visual Studio 14 2015" -Denable_java=ON -Denable_smpi=OFF -Denable_mallocators=OFF .
-- if [%COMPILER%]==[MSVC15] if [%PLATFORM%]==[x64] cmake -G "Visual Studio 14 2015 Win64" -Denable_java=ON -Denable_smpi=OFF -Denable_mallocators=OFF .
-- if not [%COMPILER%]==[MSVC15] cmake -G "MinGW Makefiles" -Denable_java=ON -Denable_smpi=OFF -Denable_mallocators=OFF -Denable_lto=OFF .
+- if [%COMPILER%]==[MSVC15] if [%PLATFORM%]==[Win32] cmake -G "Visual Studio 14 2015" -Denable_lua=OFF -Denable_java=ON -Denable_smpi=OFF -Denable_mallocators=OFF .
+- if [%COMPILER%]==[MSVC15] if [%PLATFORM%]==[x64] cmake -G "Visual Studio 14 2015 Win64" -Denable_lua=OFF -Denable_java=ON -Denable_smpi=OFF -Denable_mallocators=OFF .
+- if not [%COMPILER%]==[MSVC15] cmake -G "MinGW Makefiles" -Denable_lua=OFF -Denable_java=ON -Denable_smpi=OFF -Denable_mallocators=OFF -Denable_lto=OFF .
- if [%COMPILER%]==[MSVC15] msbuild ALL_BUILD.vcxproj /verbosity:normal
- if not [%COMPILER%]==[MSVC15] mingw32-make VERBOSE=1
- cd C:/projects/simgrid/examples/java && java -classpath ".;../../simgrid.jar" masterslave.Masterslave ../platforms/platform.xml masterslave/masterslaveDeployment.xml || true
--- /dev/null
+diff --git a/Makefile b/Makefile
+index 5ee5601..93830a3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -52,7 +52,7 @@ R= $V.1
+ all: $(PLAT)
+
+ $(PLATS) clean:
+- cd src && $(MAKE) $@
++ cd src && $(MAKE) $@ V=$(V) R=$(R)
+
+ test: dummy
+ src/lua -v
+diff --git a/src/Makefile b/src/Makefile
+index d71c75c..64bda79 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -7,7 +7,7 @@
+ PLAT= none
+
+ CC= gcc -std=gnu99
+-CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS)
++CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS) -fPIC
+ LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
+ LIBS= -lm $(SYSLIBS) $(MYLIBS)
+
+@@ -29,6 +29,7 @@ MYOBJS=
+ PLATS= aix bsd c89 freebsd generic linux macosx mingw posix solaris
+
+ LUA_A= liblua.a
++LUA_SO= liblua.so
+ CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
+ lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
+ ltm.o lundump.o lvm.o lzio.o
+@@ -43,7 +44,7 @@ LUAC_T= luac
+ LUAC_O= luac.o
+
+ ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
+-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
++ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
+ ALL_A= $(LUA_A)
+
+ # Targets start here.
+@@ -59,6 +60,11 @@ $(LUA_A): $(BASE_O)
+ $(AR) $@ $(BASE_O)
+ $(RANLIB) $@
+
++$(LUA_SO): $(CORE_O) $(LIB_O)
++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO)
++
+ $(LUA_T): $(LUA_O) $(LUA_A)
+ $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
+
doxygen/getting_started_index.doc \
doxygen/introduction.doc \
doxygen/install.doc \
- doxygen/examples.doc \
- doxygen/understanding_simgrid.doc \
+ doxygen/examples.doc \
doxygen/platform.doc \
doxygen/deployment.doc \
doxygen/options.doc \
# However, it is strongly recommended to install a local
# copy of MathJax from http://www.mathjax.org before deployment.
-MATHJAX_RELPATH = http://www.mathjax.org/mathjax
+MATHJAX_RELPATH = https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML
# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
# names that should be enabled during MathJax rendering.
If your files are too old, you can use the simgrid_update_xml.pl
script which can be found in the tools directory of the archive.
+\subsection faq_trouble_debug Debugging SMPI applications
+
+In order to debug SMPI programs, you can use the following options:
+
+- <b>-wrapper 'gdb --args'</b>: this option is used to use a wrapper
+ in order to call the SMPI process. Good candidates for this options
+ are "gdb --args", "valgrind", "rr record", "strace", etc;
+
+- <b>-foreground</b>: this options gives the debugger access to the terminal
+ which is needed in order to use an interactive debugger.
+
+Both options are needed in order to run the SMPI process under GDB.
+
\subsection faq_trouble_valgrind Valgrind-related and other debugger issues
If you don't, you really should use valgrind to debug your code, it's
surf_cpu_model_pm = new CpuPlopModel();
- sg_platf_host_add_cb(cpu_parse_init);
sg_platf_postparse_add_cb(cpu_add_traces);
xbt_dynar_push(model_list, &surf_cpu_model_pm);
- smx_popping_accessors.h:
Helper functions to get and set simcall arguments and results
-- smx_popping_bodies.c:
+- smx_popping_bodies.cpp:
The BODY function of each simcall
- smx_popping_enum.c:
Definition of type `enum e_smx_simcall_t` (one value per existing simcall)
-- smx_popping_generated.c:
+- smx_popping_generated.cpp:
Definitions of `simcall_names[]` (debug name of each simcall), and
SIMIX_simcall_enter() that deals with the simcall from within the kernel
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
This page does not exist yet, sorry. We are currently refurbishing the
user documentation -- the internal documentation will follow (FIXME).
+All we can say for now is that once you learn a bit about the SimGrid
+internals, you will probably look a bit like this:
+
+@image html DiscoveringSimgrid.gif Discovering SimGrid's Internals.
+
There is two main things you want to know about the internals of
SimGrid. First, you need to understand the component organization, as
SimGrid is heavily layered, with each level being rather highly
\subsubsection options_model_network_crosstraffic Simulating cross-traffic
-As of SimGrid v3.7, cross-traffic effects can be taken into account in
+%As of SimGrid v3.7, cross-traffic effects can be taken into account in
analytical simulations. It means that ongoing and incoming
communication flows are treated independently. In addition, the LV08
model adds 0.05 of usage on the opposite direction for each new
It is possible to specify that messages below a certain size will be sent
as soon as the call to MPI_Send is issued, without waiting for the
correspondant receive. This threshold can be configured through the
-\b smpi/async_small_thres item. The default value is 0. This behavior can also be
+\b smpi/async_small_thresh item. The default value is 0. This behavior can also be
manually set for MSG mailboxes, by setting the receiving mode of the mailbox
with a call to \ref MSG_mailbox_set_async . For MSG, all messages sent to this
mailbox will have this behavior, so consider using two mailboxes if needed.
\subsection options_virt_factory Selecting the virtualization factory
-In SimGrid, the user code is virtualized in a specific mecanism
-allowing the simulation kernel to control its execution: when a user
+In SimGrid, the user code is virtualized in a specific mechanism
+that allows the simulation kernel to control its execution: when a user
process requires a blocking action (such as sending a message), it is
interrupted, and only gets released when the simulated clock reaches
the point where the blocking operation is done.
- \b raw: amazingly fast factory using a context switching mecanism
of our own, directly implemented in assembly (only available for x86
and amd64 platforms for now)
+ - \b boost: This uses the [context implementation](http://www.boost.org/doc/libs/1_59_0/libs/context/doc/html/index.html)
+ of the boost library; you must have this library installed before
+ you compile SimGrid. (On Debian GNU/Linux based systems, this is
+ provided by the libboost-contexts-dev package.)
The only reason to change this setting is when the debugging tools get
fooled by the optimized context factories. Threads are the most
- \c surf/precision: \ref options_model_precision
- \c <b>For collective operations of SMPI, please refer to Section \ref options_index_smpi_coll</b>
-- \c smpi/async_small_thres: \ref options_model_network_asyncsend
+- \c smpi/async_small_thresh: \ref options_model_network_asyncsend
- \c smpi/bw_factor: \ref options_model_smpi_bw_factor
- \c smpi/coll_selector: \ref options_model_smpi_collectives
- \c smpi/cpu_threshold: \ref options_smpi_bench
Do not remove the generated files after execution.
.TP
\fB\-wrapper\fR <command>
-Use command to run the program (e.g. "valgrind").
+Use command to run the program (e.g. "valgrind", "gdb --args", "rr record").
+You usually want to use the "-foreground" option as well in order to have a TTY.
+.TP
+\fB\-foreground\fR
+Run the child process in the foreground.
+This gives the child process access to the TTY.
.TP
\fB\-map\fR
Display the machine on which each process rank is mapped.
! output sort 19
! timeout 30
$ java -classpath ${classpath:=.} async/AsyncTest ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/async/asyncDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [ 0.000000] (0:@) Using regular java threads. Coroutines could speed your simulation up.
+> [ 0.000000] (0:@) Using regular java threads.
> [ 0.000000] (10:async.Slave@Robert) Receiving on 'slave_8'
> [ 0.000000] (11:async.Slave@Sirois) Receiving on 'slave_9'
> [ 0.000000] (12:async.Slave@Monique) Receiving on 'slave_10'
! timeout 15
$ java -classpath ${classpath:=.} bittorrent/Bittorrent ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/bittorrent/bittorrent.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [5000.832370] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
> [Boivin:bittorrent.Peer:(2) 0.000000] [jmsg/INFO] Hi, I'm joining the network with id 2
> [Boivin:bittorrent.Peer:(2) 5000.048881] [jmsg/INFO] Here is my current status: 1111111111
! output sort 19
$ java -classpath ${classpath:=.} chord/Chord ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/chord/chord.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [652.540924] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
> [Boivin:chord.Node:(7) 0.000000] [jmsg/INFO] Joining the ring with id 8 knowing node 1
> [Gatien:chord.Node:(1) 0.000000] [jmsg/INFO] Joining the ring with id 48 knowing node 1
! output sort 19
$ java -classpath ${classpath:=.} cloud/Cloud ${srcdir:=.}/../platforms/platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [ 0.000000] (0:@) Using regular java threads. Coroutines could speed your simulation up.
+> [ 0.000000] (0:@) Using regular java threads.
> [ 0.000000] (0:@) Start2 hosts
> [ 0.000000] (0:@) Create VM(VM00)@PM(Intel) with 0 mounted disks
> [ 0.000000] (0:@) Create VM(VM01)@PM(Provost) with 0 mounted disks
#! tesh
$ java -classpath ${classpath:=.} cloud/migration/Main ${srcdir:=.}/../platforms/two_hosts_platform.xml ${srcdir:=.}/cloud/migration/deploy_simple.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] This example evaluates the migration time of a VM in presence of collocated VMs on the source and the dest nodes
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] The migrated VM has a memory intensity rate of 70% of the network BW and a cpu load of 90% "(see cloudcom 2013 paper "Adding a Live Migration Model Into SimGrid" for further information)
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] Load of collocated VMs fluctuate between 0 and 90% in order to create a starvation issue and see whether it impacts or not the migration time
! timeout 15
$ java -classpath ${classpath:=.} commTime/CommTimeTest ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/commTime/commTimeDeployment.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [7016.452828] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
> [Bellemarre:commTime.Slave:(15) 0.000000] [jmsg/INFO] Receiving on 'slave_13'
> [Bellemarre:commTime.Slave:(15) 7006.341189] [jmsg/INFO] Received Finalize. I'm done. See you!
! output sort 19
$ java -classpath ${classpath:=.} kademlia/Kademlia ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/kademlia/kademlia.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [900.000000] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
> [Boivin:kademlia.Node:(2) 0.000000] [jmsg/INFO] Hi, I'm going to join the network with the id 1!
> [Boivin:kademlia.Node:(2) 900.000000] [jmsg/INFO] 8/8 FIND_NODE have succedded.
! output sort 19
$ java -classpath ${classpath:=.} master_slave_bypass/MsBypass ${srcdir:=.}/../platforms/platform.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [Boivin:process1:(1) 0.000000] [jmsg/INFO] Master Hello!
> [Boivin:process1:(1) 0.000000] [jmsg/INFO] Create process on host 'Jacquelin'
> [Jacquelin:process2:(2) 0.000000] [jmsg/INFO] Slave Hello!
! output sort 19
$ java -classpath ${classpath:=.} master_slave_kill/MsKill ${srcdir:=.}/../platforms/platform.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [Jacquelin:master:(1) 0.000000] [jmsg/INFO] Master Hello!
> [Jacquelin:master:(1) 0.000000] [jmsg/INFO] Create process on host 'Boivin'
> [Boivin:slave:(2) 0.000000] [jmsg/INFO] Slave Hello!
! output sort 19
$ java -classpath ${classpath:=.} masterslave/Masterslave ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/masterslave/masterslaveDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [ 0.000000] (0:@) Using regular java threads. Coroutines could speed your simulation up.
+> [ 0.000000] (0:@) Using regular java threads.
> [ 0.000000] (1:masterslave.Master@Jacquelin) Hello! Got 7 slaves and 5 tasks to process
> [ 0.000000] (2:masterslave.Forwarder@Jackson) Receiving on 'slave_0'
> [ 0.000000] (3:masterslave.Forwarder@Casavant) Receiving on 'slave_1'
! output sort 19
$ java -classpath ${classpath:=.} migration/Migration ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/migration/migrationDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [ 0.000000] (0:@) Using regular java threads. Coroutines could speed your simulation up.
+> [ 0.000000] (0:@) Using regular java threads.
> [ 0.000000] (1:migration.Emigrant@Jacquelin) I'll look for a new job on another machine where the grass is greener.
> [ 0.000000] (1:migration.Emigrant@Boivin) Yeah, found something to do
> [ 1.000000] (2:migration.Policeman@Boivin) Wait a bit before migrating the emigrant.
! output sort 19
$ java -classpath ${classpath:=.} mutualExclusion/MutexCentral ${srcdir:=.}/../platforms/small_platform.xml ${srcdir:=.}/mutualExclusion/mutex_centralized_deployment.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [Jupiter:mutualExclusion.Node:(2) 0.000000] [jmsg/INFO] Send a request to the coordinator
> [Fafard:mutualExclusion.Node:(3) 0.000000] [jmsg/INFO] Send a request to the coordinator
> [Tremblay:mutualExclusion.Coordinator:(1) 0.019014] [jmsg/INFO] Got a request from mutualExclusion.Node. Queue empty: grant it
! output sort 19
$ java -classpath ${classpath:=.} pingPong/PingPongTest ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/pingPong/pingPongDeployment.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [1.048882] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
> [Boivin:pingPong.Receiver:(2) 0.000000] [jmsg/INFO] hello!
> [Boivin:pingPong.Receiver:(2) 0.000000] [jmsg/INFO] try to get a task
! output sort 19
$ java -classpath ${classpath:=.} priority/Priority ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/priority/priorityDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [ 0.000000] (0:@) Using regular java threads. Coroutines could speed your simulation up.
+> [ 0.000000] (0:@) Using regular java threads.
> [ 0.000000] (1:priority.Test@Fafard) Hello! Running a task of size 7.6296E7 with priority 1.0
> [ 0.000000] (2:priority.Test@Fafard) Hello! Running a task of size 7.6296E7 with priority 2.0
> [ 0.833332] (2:priority.Test@Fafard) Goodbye now!
#! tesh
$ java -classpath ${classpath:=.} reservationSurfPlugin/TestPlugin ${srcdir:=.}/../platforms/small_platform.xml ${srcdir:=.}/reservationSurfPlugin/reservationSurfPluginDeployment.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [Tremblay:reservationSurfPlugin.Sender:(1) 0.000000] [jmsg/INFO] helloo!
> [Ginette:reservationSurfPlugin.Receiver:(2) 0.000000] [jmsg/INFO] helloo!
> [0.000000] [jmsg/INFO] Trace: Communicate message of size 1.0 with rate -1.0 and bound 1.648342855615789E9 from Tremblay to Ginette
#! tesh
$ java -classpath ${classpath:=.} startKillTime/StartKillTime ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/startKillTime/deployment_start_kill.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [Jacquelin:startKillTime.Master:(1) 0.000000] [jmsg/INFO] Hello!
> [Boivin:startKillTime.Slave:(2) 1.000000] [jmsg/INFO] Hello!
> [Jean_Yves:startKillTime.Slave:(3) 2.000000] [jmsg/INFO] Hello!
$ java -classpath ${classpath:=.} surfCpuModel/TestCpuModel ${srcdir:=.}/../platforms/small_platform.xml ${srcdir:=.}/surfCpuModel/surfCpuModelDeployment.xml --cfg=host/model:compound
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'host/model' to 'compound'
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [0.000000] [jmsg/INFO] Initialize Cpu Constant Model
> [0.000000] [jmsg/INFO] New Cpu(Tremblay, 9.8095E7, 1.0)
> [0.000000] [jmsg/INFO] New Cpu(Jupiter, 7.6296E7, 1.0)
> [0.000000] [jmsg/INFO] New Cpu(Ginette, 4.8492E7, 1.0)
> [0.000000] [jmsg/INFO] New Cpu(Bourassa, 4.8492E7, 1.0)
> [0.000000] [jmsg/INFO] UpdateActionState of 0 actions
-> [0.000000] [jmsg/INFO] Cpu Loaded: surfCpuModel.CpuConstantModel
+> [0.000000] [jmsg/INFO] Cpu Loaded: org.simgrid.surf.CpuModel
> [Tremblay:surfCpuModel.Sender:(1) 0.000000] [jmsg/INFO] helloo!
> [Jupiter:surfCpuModel.Receiver:(2) 0.000000] [jmsg/INFO] helloo!
> [0.000000] [jmsg/INFO] Sleep action of duration -1.0 sleeping true
> [0.000000] [jmsg/INFO] Sleep action of duration -1.0 sleeping true
> [0.000000] [jmsg/INFO] ShareResources at time -1.0
-> [0.000000] [jmsg/INFO] ShareResources at time -1.0
> [0.019014] [jmsg/INFO] UpdateActionState of 2 actions
> [0.019014] [jmsg/INFO] ShareResources at time -1.0
-> [0.019014] [jmsg/INFO] ShareResources at time -1.0
> [0.019014] [jmsg/INFO] UpdateActionState of 2 actions
> [Tremblay:surfCpuModel.Sender:(1) 0.019014] [jmsg/INFO] Send duration: 0.019014479160788175
> [Tremblay:surfCpuModel.Sender:(1) 0.019014] [jmsg/INFO] goodbye!
> [0.019014] [jmsg/INFO] Execute action of size 1.0E9 sleeping false
> [0.019014] [jmsg/INFO] Share action with new time 13.10684701688162
> [0.019014] [jmsg/INFO] ShareResources at time 13.10684701688162
-> [0.019014] [jmsg/INFO] Share action with new time 13.10684701688162
-> [0.019014] [jmsg/INFO] ShareResources at time 13.10684701688162
> [13.125861] [jmsg/INFO] UpdateActionState of 1 actions
> [13.125861] [jmsg/INFO] action remains 0.0 after delta of 13.10684701688162
> [13.125861] [jmsg/INFO] action DONE
! output sort
#
$ java -classpath ${classpath:=.} surfPlugin/TestPlugin ${srcdir:=.}/../platforms/small_platform.xml ${srcdir:=.}/surfPlugin/surfPluginDeployment.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [0.000000] [jmsg/INFO] Trace: Link created __loopback__
> [0.000000] [jmsg/INFO] Trace: Link state changed __loopback__
> [0.000000] [jmsg/INFO] Trace: Cpu created Tremblay
! output sort 19
$ java -classpath ${classpath:=.} suspend/Suspend ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/suspend/suspendDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [ 0.000000] (0:@) Using regular java threads. Coroutines could speed your simulation up.
+> [ 0.000000] (0:@) Using regular java threads.
> [ 0.000000] (1:suspend.DreamMaster@Jacquelin) Let's create a lazy guy.
> [ 0.000000] (1:suspend.DreamMaster@Jacquelin) Let's wait a little bit...
> [ 0.000000] (2:Lazy@Jacquelin) Nobody's watching me ? Let's go to sleep.
! output sort 19
$ java -classpath ${classpath:=.} tracing/TracingTest ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/tracing/tracingPingPongDeployment.xml --cfg=tracing:yes --cfg=tracing/filename:simulation.trace --cfg=tracing/platform:yes
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'simulation.trace'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/platform' to 'yes'
${CMAKE_CURRENT_SOURCE_DIR}/kademlia/tools.lua
${CMAKE_CURRENT_SOURCE_DIR}/masterslave/master.lua
${CMAKE_CURRENT_SOURCE_DIR}/masterslave/master_slave.lua
- ${CMAKE_CURRENT_SOURCE_DIR}/masterslave/platform.lua
${CMAKE_CURRENT_SOURCE_DIR}/masterslave/slave.lua
${CMAKE_CURRENT_SOURCE_DIR}/multi_matrix/mult_matrix.lua
${CMAKE_CURRENT_SOURCE_DIR}/multi_matrix/receiver.lua
simgrid.host.setProperty{host="Fafard",prop_id="port",prop_value="76"};
-- create Links
for i=10,0,-1 do
- simgrid.AS.addLink{AS="AS0",id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087};
+ simgrid.AS.addLink{AS="AS0",id=i,bandwidth=252750+ i*768,lat=0.000270544+i*0.087};
end
-- simgrid.route.new(src_id,des_id,links_nb,links_list)
simgrid.AS.addRoute("AS0","Tremblay","Jupiter",{"1"});
require("peer")
require("tracker")
+-- Initialization of the random generator
+table.sort(math)
+math.randomseed(42)
simgrid.platform(arg[1] or "../../platforms/platform.xml")
simgrid.application(arg[2] or "bittorrent.xml")
simgrid.run()
> [iRMX:peer:(7) 15.043659] [lua/INFO] Received an answer from the tracker with 5 peers inside
> [iRMX:peer:(7) 15.043659] [lua/INFO] Start downloading.
> [McGee:peer:(8) 16.609414] [lua/INFO] Starting main leech loop
-> [iRMX:peer:(7) 24.873510] [lua/INFO] Starting main leech loop
+> [iRMX:peer:(7) 17.228855] [lua/INFO] Starting main leech loop
> [Jacquelin:tracker:(1) 3000.000000] [lua/INFO] Tracker is leaving
> [Geoff:peer:(5) 5000.005341] [lua/INFO] My status is now 1111111111
> [Boivin:peer:(2) 5000.048882] [lua/INFO] My status is now 1111111111
+> [iRMX:peer:(7) 5000.228855] [lua/INFO] My status is now 1111111111
> [McGee:peer:(8) 5000.609414] [lua/INFO] My status is now 1111111111
> [TeX:peer:(4) 5000.619837] [lua/INFO] My status is now 1111111111
> [Disney:peer:(6) 5000.644339] [lua/INFO] My status is now 1111111111
-> [iRMX:peer:(7) 5000.873506] [lua/INFO] My status is now 1111111111
> [Jean_Yves:peer:(3) 5000.925088] [lua/INFO] My status is now 1111111111
-
simgrid.info("Starting main leech loop")
local task, err
while now < data.deadline and data.pieces < common.FILE_PIECES do
- task, err = data.comm_received:test()
- if task then
- handle_message(task)
- data.comm_received = simgrid.task.irecv(data.mailbox)
- now = simgrid.get_clock()
- elseif err then
- data.comm_received = simgrid.task.irecv(data.mailbox)
- else
- -- If the user has a pending interesting
- if data.current_piece ~= -1 then
- send_interested_to_peers()
- else
- if table.getn(data.current_pieces) < common.MAX_PIECES then
- update_current_piece()
- end
- end
- -- We don't execute the choke algorithm if we don't already have a piece
- if now >= next_choked_update and data.pieces > 0 then
- update_choked_peers()
- next_choked_update = next_choked_update + common.UPDATE_CHOKED_INTERVAL
- now = simgrid.get_clock()
- else
- simgrid.process.sleep(1)
- now = simgrid.get_clock()
- end
- end
+ task, err = data.comm_received:test()
+ if task then
+ handle_message(task)
+ data.comm_received = simgrid.task.irecv(data.mailbox)
+ now = simgrid.get_clock()
+ elseif err then
+ data.comm_received = simgrid.task.irecv(data.mailbox)
+ else
+ -- If the user has a pending interesting
+ if data.current_piece ~= -1 then
+ send_interested_to_peers()
+ else
+ if #data.current_pieces < common.MAX_PIECES then
+ update_current_piece()
+ end
+ end
+ -- We don't execute the choke algorithm if we don't already have a piece
+ if now >= next_choked_update and data.pieces > 0 then
+ update_choked_peers()
+ next_choked_update = next_choked_update + common.UPDATE_CHOKED_INTERVAL
+ now = simgrid.get_clock()
+ else
+ simgrid.process.sleep(1)
+ now = simgrid.get_clock()
+ end
+ end
end
end
-- Peer main loop when it is seeding
end
-- Send a "not interested" message to a peer.
function send_not_interested(mailbox)
+ simgrid.debug("Sending a send_not_interested")
local task = new_task("NOTINTERESTED")
task:dsend(mailbox)
end
end
-- Send a "HAVE" message to all peers we are connected to
function send_have(piece)
+ simgrid.debug("Sending a HAVE message")
for i,v in pairs(data.peers) do
local task = new_task("HAVE")
task.piece = piece
end
-- Send request messages to a peer that have unchoked us
function send_requests_to_peer(remote_peer)
+ simgrid.debug("Sending a request to peer " .. remote_peer.mailbox)
for i,v in pairs(data.current_pieces) do
send_request(remote_peer.mailbox,i)
end
task:dsend(mailbox)
end
function new_task(type)
- local task = simgrid.task.new("", 0, common.MESSAGE_SIZE)
+ local task = simgrid.task.new(type, 0, common.MESSAGE_SIZE)
task.type = type
task.mailbox = data.mailbox
task.peer_id = data.id
end
end
return s
-end
\ No newline at end of file
+end
if #args ~= 1 then
simgrid.info("Wrong number of arguments for the tracker")
end
- -- Initialization of the random generator
- math.randomseed(42)
-- Retrieve the end time
tracker_data.deadline = tonumber(args[1])
i = math.random(1,#tracker_data.peers_list)
end
while #peers < #tracker_data.peers_list and #peers < common_tracker.MAXIMUM_PEERS do
- table.insert(peers,tracker_data.peers_list[i])
- i = (i + 1) % #tracker_data.peers_list
+ table.insert(peers,tracker_data.peers_list[i])
+ i = (i % #tracker_data.peers_list) +1
end
task.type = "ANSWER"
task.peers = peers
require("simgrid")
-nb_bits = 24
-nb_keys = 2^nb_bits
-comp_size = 0
-comm_size = 10
-timeout = 50
-max_simulation_time = 1000
-stabilize_delay = 20
-fix_fingers_delay = 120
+nb_bits = 24
+nb_keys = 2^nb_bits
+comp_size = 0
+comm_size = 10
+timeout = 50
+max_simulation_time = 1000
+stabilize_delay = 20
+fix_fingers_delay = 120
check_predecessor_delay = 120
-lookup_delay = 10
+lookup_delay = 10
-- current node (don't worry, globals are duplicated in each simulated process)
my_node = {
+ -- FIXME: my_id does not exist.
id = my_id,
next_finger_to_fix = 1,
fingers = {},
-- - the id of a guy I know in the system (except for the first node)
function node(...)
+ simgrid.debug("Hi! This is my first message; I just entered the program!")
-- TODO simplify the deployment file
local known_id
local args = {...}
- my_node.id = tonumber(args[1])
+ my_node.id = math.tointeger(args[1])
+ simgrid.debug("My id is now " .. my_node.id)
if #args == 4 then
- known_id = tonumber(args[2])
+ known_id = math.tointeger(args[2])
+ simgrid.info("Updated my known_id to " .. known_id)
end
- -- initialize the node
- for i = 1, nb_bits do
+ -- initialize the node and the fingertable;
+ -- at the beginning, this node only knows itself (we need to discover others)
+ for i = 1, nb_bits, 1 do
my_node.fingers[i] = my_node.id
end
+
+ -- Let's make sure we can receive messages!
my_node.comm_recv = simgrid.task.irecv(my_node.id)
-- join the ring
local join_success = false
+ --simgrid.info(known_id)
+
if known_id == nil then
- -- first node
+ -- only the first node ("Jacqueline") will enter here
+ -- as configured in file ../../msg/chord/chord.xml
+ simgrid.debug("I'm the node that is in charge. Going to create everything.")
create()
join_success = true
else
+ -- Communicate to the first node and join the ring
+ -- This will also initialize
+ -- my_node.predecessor and my_node.successor
join_success = join(known_id)
end
+ -- At this point, finger[1] does not necessarily actually point
+ -- to the *real* successor; it might be that the first node still
+ -- didn't notify us that another node joined with
+ -- an ID that satisfies my_id <= ID <= current_successorId
+
+ -- TODO Remove this, but make sure my_node.predecessor is initialized somewhere
+ --if my_node.id == 1 then
+ --my_node.predecessor = 1
+ --end
+
-- main loop
if join_success then
- local now = simgrid.get_clock()
- local next_stabilize_date = now + stabilize_delay
- local next_fix_fingers_date = now + fix_fingers_delay
+ local now = simgrid.get_clock()
+ local next_stabilize_date = now + stabilize_delay
+ local next_fix_fingers_date = now + fix_fingers_delay
local next_check_predecessor_date = now + check_predecessor_delay
- local next_lookup_date = now + lookup_delay
+ local next_lookup_date = now + lookup_delay
local task, err
+ simgrid.debug("I'm now entering the main loop.")
+
while now < max_simulation_time do
task, err = my_node.comm_recv:test()
+ simgrid.info(now .. " " .. next_stabilize_date .. " " .. now + stabilize_delay .. " " .. next_fix_fingers_date .. " " .. next_check_predecessor_date .. " " .. next_lookup_date)
if task then
- -- I received a task: answer it
+ -- I received a task: answer it
+ simgrid.info("I received a task of type '" .. task.type .."'! My id is " .. my_node.id)
my_node.comm_recv = simgrid.task.irecv(my_node.id)
- handle_task(task)
+ handle_task(task)
elseif err then
- -- the communication has failed: nevermind
+ -- the communication has failed: nevermind, we'll try again
+ simgrid.info("Error while receiving a task! My id is " .. my_node.id)
my_node.comm_recv = simgrid.task.irecv(my_node.id)
else
-- no task was received: do periodic calls
- if now >= next_stabilize_date then
- stabilize()
- next_stabilize_date = simgrid.get_clock() + stabilize_delay
-
- elseif now >= next_fix_fingers_date then
- fix_fingers()
- next_fix_fingers_date = simgrid.get_clock() + fix_fingers_delay
-
- elseif now >= next_check_predecessor_date then
- check_predecessor()
- next_check_predecessor_date = simgrid.get_clock() + check_predecessor_delay
-
- elseif now >= next_lookup_date then
- random_lookup()
- next_lookup_date = simgrid.get_clock() + lookup_delay
- else
- -- nothing to do: sleep for a while
- simgrid.process.sleep(5)
- end
+ if now >= next_stabilize_date then
+ simgrid.debug("Stabilizing...")
+ stabilize()
+ simgrid.debug("Finished stabilizing!")
+ next_stabilize_date = simgrid.get_clock() + stabilize_delay
+
+ --elseif now >= next_fix_fingers_date then
+ --fix_fingers()
+ --next_fix_fingers_date = simgrid.get_clock() + fix_fingers_delay
+
+ --elseif now >= next_check_predecessor_date then
+ --check_predecessor()
+ --next_check_predecessor_date = simgrid.get_clock() + check_predecessor_delay
+
+ --elseif now >= next_lookup_date then
+ --random_lookup()
+ --simgrid.debug("I'm now executing a lookup, as lookup_delay makes me do this. " .. simgrid.get_clock())
+ --next_lookup_date = simgrid.get_clock() + lookup_delay
+
+ else
+ ---- nothing to do: sleep for a while
+ simgrid.debug("Didn't have to stabilize, update my fingers, check my predecessors or do a random lookup; hence, I'm starting to sleep now...")
+ simgrid.process.sleep(5)
+ simgrid.debug("Slept for 5s")
+ end
end
now = simgrid.get_clock()
end -- while
-- Makes the current node leave the ring
function leave()
- simgrid.info("Leaving the ring")
+ simgrid.info("Leaving the ring, because max_simulation_time was reached.")
-- TODO: notify others
end
--- This function is called when the current node receives a task.
+-- This function is called when the current node receives a task
+-- and can not immediately deal with it; for instance, if the host
+-- waits on a response for a 'find successor' query but receives a
+-- 'get predecessor' message instead; we cannot just discard this
+-- message so we deal with it here.
+--
-- - task: the task received
function handle_task(task)
+ simgrid.debug("Handling task in handle_task()")
local type = task.type
if type == "find successor" then
- simgrid.info("Received a 'find successor' request from " .. task.answer_to ..
- " for id " .. task.request_id)
-
- -- is my successor the successor?
+ task.answer_to = math.tointeger(task.answer_to)
+ task.request_id = math.tointeger(task.request_id)
+
+ simgrid.info("Received a 'find successor' request from " .. string.format("%d", task.answer_to) ..
+ " for id " .. string.format("%d", task.request_id))
+
+ -- Is my successor have the right host? This can happen if there are holes
+ -- in the ring; for instance, if my id is 13 and my successor is 17 and
+ -- 14,15,16 don't exist but I'm asked for 15, then yes, 17 is the right
+ -- answer to the request.
+ --
+ -- Test: my_node.id + 1 <= task.request_id <= my_node.fingers[1]
+ -- ^^^
+ -- TODO: Why the +1? We could receive this message from a host that forwarded
+ -- this message (and the original sender doesn't know us),
+ -- so why do we exclude ourselves?
if is_in_interval(task.request_id, my_node.id + 1, my_node.fingers[1]) then
simgrid.info("Sending back a 'find successor answer' to " ..
- task.answer_to .. ": the successor of " .. task.request_id ..
- " is " .. my_node.fingers[1])
+ string.format("%d", task.answer_to) .. ": the successor of " .. string.format("%d", task.request_id) ..
+ " is " .. string.format("%d", my_node.fingers[1]))
task.type = "find successor answer"
- task.answer = my_node.fingers[1]
- task:dsend(task.answer_to)
+ -- TODO: Can we remove the "" here?
+ task.answer = math.tointeger(my_node.fingers[1])
+ simgrid.info("Answer" .. task.answer)
+ task:dsend(math.tointeger(task.answer_to))
else
-- forward the request to the closest preceding finger in my table
end
elseif type == "get predecessor" then
+ simgrid.info("Received a 'find predecessor' request from " .. string.format("%d", task.answer_to) ..
+ " for id. Sending back an answer.")
+
task.type = "get predecessor answer"
- task.answer = my_node.predecessor
- task:dsend(task.answer_to)
+
+ --for i,v in pairs(my_node) do
+ --print(my_node.id, i, v)
+ --end
+ --print(my_node.predecessor)
+ if my_node.predecessor ~= nil then
+ task.answer = math.tointeger(my_node.predecessor)
+ --print(my_node.predecessor)
+ else
+ -- FIXME: This is completely wrong here. Fix this;
+ -- we need to figure out what to send if we don't know our
+ -- predecessor yet (this DOES happen and this means that task.answer
+ -- is initialised with nil and when task.answer is accessed (not here), it will
+ -- break in Lua 5.3 (because it is nil).
+ simgrid.critical("Don't know my predecessor yet!")
+ my_node.predecessor = remote_get_predecessor(my_node.fingers[1])
+ task.answer = my_node.predecessor
+ end
+
+ --print("It will break now, since task.answer is nil here.")
+ --task.answer = my_node.predecessor
+ --print(task.answer)
+ --print("Before")
+ task:dsend(math.tointeger(task.answer_to))
+ --print("After dsend returned")
elseif type == "notify" then
-- someone is telling me that he may be my new predecessor
- notify(task.request_id)
+ simgrid.info("Host id " .. task.request_id .. " wants to be my predecessor")
+ notify(math.tointeger(task.request_id))
elseif type == "predecessor leaving" then
-- TODO
+ simgrid.debug("predecessor leaving")
elseif type == "successor_leaving" then
- -- TODO
+ -- TODO: We could / should use something like table.remove(my_node.fingers, 1) here
+ simgrid.debug(type)
elseif type == "find successor answer" then
- -- ignoring
+ -- ignoring, this is handled in remote_find_successor
+ simgrid.debug(type)
elseif type == "get predecessor answer" then
- -- ignoring
+ -- ignoring, this is already handled in
else
error("Unknown type of task received: " .. task.type)
end
+
+ simgrid.info("I'm leaving handle_task() now.")
end
-- Returns whether an id belongs to the interval [a, b[.
-- 24 belongs to [21, 29].
-- 24 does not belong to [29, 21].
function is_in_interval(id, a, b)
-
-- normalize the parameters
+ -- TODO: Currently, nb_bits = 24; so a,b,id < 24! Really?
id = id % nb_bits
a = a % nb_bits
b = b % nb_bits
-
+
-- make sure a <= b and a <= id
if b < a then
b = b + nb_keys
-- Returns whether the current node is in the ring.
function has_joined()
- return my_node.fingers[1] ~= nil
+ return my_node.fingers[my_node.id] ~= nil
end
-- Creates a new Chord ring.
function create()
+ simgrid.debug("I've now initialized my predecessor and fingertable.")
+ --my_node.predecessor = my_node.id
my_node.predecessor = nil
- my_node.fingers[1] = my_node.id
+ my_node.fingers[1] = my_node.id
end
-- Attemps to join the Chord ring.
simgrid.info("Joining the ring with id " .. my_node.id .. ", knowing node " .. known_id)
local successor = remote_find_successor(known_id, my_node.id)
+ simgrid.info("Returned from remote_find_successor; my successor is " .. successor)
if successor == nil then
- simgrid.info("Cannot join the ring.")
+ simgrid.critical("Cannot join the ring.")
return false
end
+ -- We don't know the predecessor yet, so we initialize it with NULL
my_node.predecessor = nil
my_node.fingers[1] = successor
+
+ -- Everything was successfull!
return true
end
for i = nb_bits, 1, -1 do
if is_in_interval(my_node.fingers[i], my_node.id + 1, id - 1) then
-- finger i is the first one before id
+ simgrid.info("fix_fingers: The closest preceding node for " .. id .. " is finger " .. i .. " (node " .. my_node.fingers[i] .. ")")
return my_node.fingers[i]
end
end
if is_in_interval(id, my_node.id + 1, my_node.fingers[1]) then
-- my successor is the successor
+ simgrid.info("Looking for successor of " .. id .. ", but I determined it's my own successor: " .. my_node.fingers[1])
return my_node.fingers[1]
+ else
+ -- ask to the closest preceding finger in my table
+ simgrid.info("fix_fingers: Looking for successor of " .. id .. ", checking closest preceding node")
+ local ask_to = closest_preceding_node(id)
+ simgrid.info("fix_fingers: Looking for successor of " .. id .. ", checking closest preceding node")
+ return remote_find_successor(ask_to, id)
end
- -- ask to the closest preceding finger in my table
- local ask_to = closest_preceding_node(id)
- return remote_find_successor(ask_to, id)
end
-- Asks a remote node the successor of an id.
-- return value: the id of the successor, or nil if the request failed
function remote_find_successor(ask_to, id)
- local task = simgrid.task.new("", comp_size, comm_size)
- task.type = "find successor"
- task.request_id = id
- task.answer_to = my_node.id
+ local task = simgrid.task.new("", comp_size, comm_size)
+ task.type = "find successor"
+ task.request_id = id -- This is the id we want to find
+ task.answer_to = my_node.id -- This is where the answer needs to go
+ -- (back to us)
- simgrid.info("Sending a 'find successor' request to " .. ask_to .. " for id " .. id)
+ simgrid.info("Sending a 'find successor' request to " .. ask_to .. " for id " .. id .. " (timeout=".. timeout .. ")")
if task:send(ask_to, timeout) then
-- request successfully sent: wait for an answer
- simgrid.info("Sent the 'find successor' request to " .. ask_to ..
- " for id " .. id .. ", waiting for the answer")
-
while true do
+ simgrid.info("New iteration in while loop of remote_find_successor(); I'm still waiting for a response!")
+ --print(task.request_id)
+ simgrid.info("Starting to wait for a message; timeout=" .. timeout)
task = my_node.comm_recv:wait(timeout)
+ simgrid.info("Finished to wait")
+ -- TODO Do we need this?
+ --for i,v in pairs(task) do
+ --print(i, v)
+ --end
+ --simgrid.info("I will crash!")
+ --task.answer = math.tointeger(task.answer)
+ --simgrid.info("Ich denke task.type ist leer")
+ --simgrid.info("Before irecv: " .. my_node.id)
+
+ -- Even if the recv above failed (timeout occurred) -- we want to be
+ -- able to receive a message if it comes in, even without us explicitly
+ -- calling the recv() method.
my_node.comm_recv = simgrid.task.irecv(my_node.id)
-
+
if not task then
- -- failed to receive the answer
- simgrid.info("Failed to receive the answer to my 'find successor' request")
- return nil
+ -- failed to receive the answer
+ return nil
else
- -- a task was received: is it the expected answer?
- if task.type ~= "find successor answer" or task.request_id ~= id then
- -- this is not our answer
- simgrid.info("Received another request of type " .. task.type)
- handle_task(task)
- else
- -- this is our answer
- simgrid.info("Received the answer to my 'find successor' request for id " ..
- id .. ": the successor is " .. task.answer)
- return task.answer
- end
+ -- a task was received: is it the expected answer (i.e., the response to
+ -- our query and for the id we're interested in)
+ if task.type ~= "find successor answer" or task.request_id ~= id then
+ -- this is not our answer, but we still need to handle it.
+ simgrid.info("Wrong request of type " .. task.type .. " received, expected 'find successor answer'")
+ handle_task(task)
+
+ else
+ -- this is our answer
+ simgrid.info("Received the answer to my 'find successor' request for id " ..
+ id .. ": the successor is " .. task.answer)
+
+ -- TODO: Do we need math.tointeger here?
+ return math.tointeger(task.answer)
+ end
end
end
else
simgrid.info("Failed to send the 'find successor' request to " .. ask_to ..
- " for id " .. id)
+ " for id " .. id)
end
- return successor
+ -- This can never be reached, because if this host finds the successor, it
+ -- will return it right away!
+ simgrid.info("Whooops! I should never reach this statement, because I didn't find a successor!")
+
+ -- We need to return the successor here
end
-- Asks a remote node its predecessor.
local task = simgrid.task.new("", comp_size, comm_size)
task.type = "get predecessor"
- task.answer_to = my_node.id
+ task.answer_to = math.tointeger(my_node.id)
+ -- TODO c.heinrich: Remove this
+ --task.note = "Bla " .. ask_to .. " at time " .. simgrid.get_clock()
+ simgrid.info("Sending request for '" .. task.type .."' to id '" .. ask_to .. "'")
if task:send(ask_to, timeout) then
+ simgrid.info("Done sending the request to " .. ask_to)
-- request successfully sent: wait for an answer
+ -- We need to iterate here because we might receive other
+ -- messages too (but not the answer to the request we just sent);
+ -- hence, we loop here.
while true do
+ simgrid.info("Starting to wait. My id: " .. my_node.id)
task = my_node.comm_recv:wait(timeout)
+ simgrid.info("Finished to wait. My id: " .. my_node.id .. " ask_to is " .. ask_to)
my_node.comm_recv = simgrid.task.irecv(my_node.id)
-
+
if not task then
- -- failed to receive the answer
- return nil
+ -- failed to receive the answer
+ simgrid.info("Task not received - is null?")
+ return nil
else
- -- a task was received: is it the expected answer?
- if task.type ~= "get predecessor answer" then
+ -- a task was received: is it the expected answer?
+ if task.type ~= "get predecessor answer" then
-- this is not our answer
- handle_task(task)
- else
- -- this is our answer
- -- FIXME make sure the message answers to this particular request
- return task.answer
- end
+ simgrid.info("Task is NOT 'get predecessor answer'")
+ handle_task(task)
+ else
+ -- this is our answer
+ -- FIXME make sure the message answers to this particular request
+ --simgrid.info(task.answer)
+ for i,v in pairs(task) do
+ print(my_node.id, i, v)
+ end
+ simgrid.info("Task is answer for predecessor! The answer is: ")
+ if (task.answer) then print("NIL!\n") else print("Not NIL\n") end
+ return task.answer
+ end
end
end
end
-- Checks the immediate successor of the current node.
function stabilize()
-
local candidate
local successor = my_node.fingers[1]
if successor ~= my_node.id then
+ simgrid.info("Getting remote predecessor from ".. successor)
candidate = remote_get_predecessor(successor)
+ simgrid.info("Received ".. candidate .. " as candidate")
else
candidate = my_node.predecessor
end
- -- this node is a candidate to become my new successor
+ simgrid.info("Still stabilizing")
+ -- candidate might become my new successor
if candidate ~= nil and is_in_interval(candidate, my_node.id + 1, successor - 1) then
- my_node.fingers[1] = candidate
+ simgrid.info("I'm updating my successor to " .. math.tointeger(candidate))
+ my_node.fingers[1] = math.tointeger(candidate)
+
+ -- If candidate is not my_node.id, then I should notify candidate that I'm here.
+ -- (So this node updates it's predecessor to me)
+ --remote_notify(candidate, my_node.id)
end
- if successor ~= my_node.id then
+ simgrid.info("Successor: " .. successor .. " and my id: " .. my_node.id)
+ -- If candidate is nil, this means that our successor has no predecessor.
+ -- So we should tell him about us...
+ -- TODO: I think a host that receives a message could automatically add
+ -- this other node as a predecessor if it doesn't have any... needs to
+ -- be implemented somewhere else, not here.
+ if candidate == nil and successor ~= my_node.id then
remote_notify(successor, my_node.id)
end
end
--- Notifies the current node that its predecessor my have changed
+-- Notifies the current node that its predecessor may have changed
-- - candidate_predecessor: the possible new predecessor
function notify(candidate_predecessor)
-
if my_node.predecessor == nil or is_in_interval(candidate_predecessor,
my_node.predecessor + 1, my_node.id - 1) then
- my_node.predecessor = candidate_predecessor
+ simgrid.info("Updated my predecessor to " .. candidate_predecessor)
+ my_node.predecessor = math.tointeger(candidate_predecessor)
end
end
-- - candidate the possible new predecessor
function remote_notify(notify_to, candidate_predecessor)
+ simgrid.info("Updating someone else's predecessor (id: " .. notify_to .. " predecessor to ".. candidate_predecessor .. ")")
local task = simgrid.task.new("", comp_size, comm_size)
task.type = "notify"
task.request_id = candidate_predecessor
task:dsend(notify_to)
end
--- Refreshes the finger table of the current node.
+-- Refreshes the finger table of the current node,
+-- one finger per call.
function fix_fingers()
- local i = my_node.next_finger_to_fix
- local id = find_successor(my_node.id + 2^i)
+ local i = math.tointeger(my_node.next_finger_to_fix)
+ local id = find_successor(math.tointeger(my_node.id + 2^i))
+ simgrid.info("Called fix_fingers(). Next finger to fix: " .. i .. " and I will check " .. my_node.id + 2^i .. ". Request returned " .. id)
+
if id ~= nil then
if id ~= my_node.fingers[i] then
my_node.fingers[i] = id
+ simgrid.info("fix_fingers: Updated finger " .. i .. " to " .. id)
+ else
+ simgrid.info("fix_fingers: id is " .. id)
end
my_node.next_finger_to_fix = (i % nb_bits) + 1
end
simgrid.platform(arg[1] or "../../msg/msg_platform.xml")
simgrid.application(arg[2] or "../../msg/chord/chord90.xml")
simgrid.run()
-
-- under the terms of the license (GNU LGPL) which comes with this package.
--Master Function
-function Master(...)
+function Master(...)
- if #arg ~= 4 then
- error("Wrong number of arguments (got " .. #arg ..
- ", expected 4: nb_tasks comp_size comm_size slave_count)")
+ if select("#", ...) ~= 4 then
+ error("Wrong number of arguments (got " .. select("#", ...) ..
+ ", expected 4: nb_tasks comp_size comm_size slave_count)")
end
simgrid.info("Hello from lua, I'm the master")
- for i,v in ipairs(arg) do
+ for i,v in ipairs({...}) do
simgrid.info("Got " .. v)
end
- local nb_task, comp_size, comm_size, slave_count = unpack(arg)
+ local nb_task, comp_size, comm_size, slave_count = select(1, ...)
- simgrid.info("Argc=" .. (#arg) .. " (should be 4)")
+ simgrid.info("Argc=" .. select("#", ...) .. " (should be 4)")
-- Dispatch the tasks
for i = 1, nb_task do
task = simgrid.task.new("Task " .. i, comp_size, comm_size);
local task_name = simgrid.task.get_name(task)
- alias = "slave " .. (i%slave_count);
+ alias = "slave " .. string.format("%d",i%slave_count);
simgrid.info("Master sending '" .. task_name .. "' To '" .. alias .. "'");
simgrid.task.send(task, alias); -- C user data set to NULL
simgrid.info("Master done sending '" .. task_name .. "' To '" .. alias .. "'");
simgrid.platf.open();
-simgrid.platf.AS_open{id="AS0",mode="Full"};
+simgrid.platf.AS_open{id="AS0",mode="Full"};
simgrid.platf.host_new{id="Tremblay",power=98095000};
simgrid.platf.host_new{id="Jupiter",power=76296000};
-- create Links
for i=10,0,-1 do
- simgrid.platf.link_new{id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087};
+ simgrid.platf.link_new{id=i,bandwidth=252750+ i*768,lat=0.000270544+i*0.087};
end
simgrid.platf.route_new{src="Tremblay",dest="Jupiter",links="1"};
simgrid.platf.route_new{src="Tremblay",dest="Ginette",links="3,4,5"};
simgrid.platf.route_new{src="Tremblay",dest="Bourassa",links="0,1,3,2,4,6,7"};
-simgrid.platf.route_new{src="Jupiter",dest="Tremblay",links="1"};
+--simgrid.platf.route_new{src="Jupiter",dest="Tremblay",links="1"};
+simgrid.platf.route_new{src="Jupiter",dest="Bourassa",links="0,1,2,3,4,6,7,9"};
simgrid.platf.route_new{src="Jupiter",dest="Fafard",links="0,1,2,3,4,8,9"};
simgrid.platf.route_new{src="Jupiter",dest="Ginette",links="3,4,5,9"};
-simgrid.platf.route_new{src="Jupiter",dest="Bourassa",links="0,1,2,3,4,6,7,9"};
-
-simgrid.platf.route_new{src="Fafard",dest="Tremblay",links="0,1,2,3,4,8"};
-simgrid.platf.route_new{src="Fafard",dest="Jupiter",links="0,1,2,3,4,8,9"};
+
simgrid.platf.route_new{src="Fafard",dest="Ginette",links="0,1,2,5,8"};
simgrid.platf.route_new{src="Fafard",dest="Bourassa",links="6,7,8"};
-
-simgrid.platf.route_new{src="Ginette",dest="Tremblay",links="3,4,5"};
-simgrid.platf.route_new{src="Ginette",dest="Jupiter",links="3,4,5,9"};
-simgrid.platf.route_new{src="Ginette",dest="Fafard",links="0,1,2,5,8"};
-simgrid.platf.route_new{src="Ginette",dest="Bourassa",links="0,1,2,5,6,7"};
+--simgrid.platf.route_new{src="Fafard",dest="Tremblay",links="0,1,2,3,4,8"};
+--simgrid.platf.route_new{src="Fafard",dest="Jupiter",links="0,1,2,3,4,8,9"};
-simgrid.platf.route_new{src="Bourassa",dest="Tremblay",links="0,1,3,2,4,6,7"};
-simgrid.platf.route_new{src="Bourassa",dest="Jupiter",links="0,1,2,3,4,6,7,9"};
-simgrid.platf.route_new{src="Bourassa",dest="Fafard",links="6,7,8"};
-simgrid.platf.route_new{src="Bourassa",dest="Ginette",links="0,1,2,5,6,7"};
+simgrid.platf.route_new{src="Ginette",dest="Bourassa",links="0,1,2,5,6,7"};
+--simgrid.platf.route_new{src="Ginette",dest="Tremblay",links="3,4,5"};
+--simgrid.platf.route_new{src="Ginette",dest="Jupiter",links="3,4,5,9"};
+--simgrid.platf.route_new{src="Ginette",dest="Fafard",links="0,1,2,5,8"};
+
+--simgrid.platf.route_new{src="Bourassa",dest="Tremblay",links="0,1,3,2,4,6,7"};
+--simgrid.platf.route_new{src="Bourassa",dest="Jupiter",links="0,1,2,3,4,6,7,9"};
+--simgrid.platf.route_new{src="Bourassa",dest="Fafard",links="6,7,8"};
+--simgrid.platf.route_new{src="Bourassa",dest="Ginette",links="0,1,2,5,6,7"};
simgrid.platf.AS_close();
simgrid.platf.close();
-
+
-- Slave Function ---------------------------------------------------------
function Slave(...)
- if #arg ~= 1 then
+ if select("#", ...) ~= 1 then
error("Wrong number of arguments (got " .. #arg .. ", expected 1: slave_id)")
end
- local my_mailbox = "slave " .. arg[1]
+ local my_mailbox = "slave " .. select(1, ...)
simgrid.info("Hello from lua, I'm a poor slave with mbox: " .. my_mailbox)
while true do
simgrid.info("Slave '" .. my_mailbox .. "' got finalize msg");
break
end
- --local tk_name = simgrid.task.get_name(tk)
+ --local tk_name = simgrid.task.get_name(tk)
simgrid.info("Slave '" .. my_mailbox .. "' processing " .. task:get_name())
simgrid.task.execute(task)
simgrid.info("Slave '" .. my_mailbox .. "': task " .. task:get_name() .. " done")
simgrid.info("Slave '" .. my_mailbox .. "': I'm Done . See You !!");
-end
+end
-- end_of_slave
> [Tanguay:node:(11) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 1111111111 !
> [Morin:node:(12) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 11111111111 !
> [Ethernet:node:(13) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 11111111111 !
+> [Ethernet:node:(13) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
> [Morin:node:(12) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
> [Tanguay:node:(11) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [iRMX:node:(7) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
+> [McGee:node:(8) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
> [Gatien:node:(9) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [TeX:node:(4) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [Laroche:node:(10) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
+> [iRMX:node:(7) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
> [Disney:node:(6) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [Geoff:node:(5) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [McGee:node:(8) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
> [Jean_Yves:node:(3) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
-> [Jacquelin:node:(1) 900.000000] [lua/INFO] 0/8 FIND_NODE have succedded
+> [Geoff:node:(5) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
+> [Laroche:node:(10) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
+> [TeX:node:(4) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
> [Boivin:node:(2) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
-> [Ethernet:node:(13) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
-
+> [Jacquelin:node:(1) 900.000000] [lua/INFO] 0/8 FIND_NODE have succedded
simgrid.debug("Updating " .. id .. " in my routing table")
-- If the element is already in the bucket, we update it.
table.remove(bucket.list,index_of(bucket.list,id))
- table.insert(bucket.list,0,id)
+ table.insert(bucket.list,id)
else
simgrid.debug("Insert " .. id .. " in my routing table in bucket " .. bucket.id)
table.insert(bucket.list,id)
end
return answer
-end
\ No newline at end of file
+end
-- 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.
-function Master(...)
+function Master(...)
- if #arg ~= 4 then
+ if select("#", ...) ~= 4 then
error("Wrong number of arguments (got " .. #arg ..
", expected 4: nb_tasks comp_size comm_size slave_count)")
end
+ local nb_task, comp_size, comm_size, slave_count = select(1, ...)
simgrid.info("Hello from lua, I'm the master")
- local nb_task, comp_size, comm_size, slave_count = unpack(arg)
-- Dispatch the tasks
for i = 1, nb_task do
local task = simgrid.task.new("Task " .. i, comp_size, comm_size)
local task_name = task:get_name()
- local alias = "slave " .. (i % slave_count)
+ local alias = "slave " .. string.format("%d", i % slave_count)
simgrid.info("Sending '" .. task_name .. "' to '" .. alias .."'")
task:send(alias) -- C user data set to NULL
simgrid.info("Done sending '".. task_name .. "' to '" .. alias .."'")
+++ /dev/null
--- Copyright (c) 2011, 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.
-
- --create new routing model
- --simgrid.AS.new(AS_id,AS_mode)
- simgrid.AS.new{id="AS0",mode="Full"};
- --simgrid.host.new(host_id,power)
- simgrid.AS.addHost{AS="AS0",id="Tremblay",power=98095000};
- simgrid.AS.addHost{AS="AS0",id="Jupiter",power=76296000};
- simgrid.AS.addHost{AS="AS0",id="Fafard",power=76296000};
- simgrid.AS.addHost{AS="AS0",id="Ginette",power=48492000};
- simgrid.AS.addHost{AS="AS0",id="Bourassa",power=48492000};
-
- -- create Links
- for i=10,0,-1 do
- simgrid.AS.addLink{AS="AS0",id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087};
- end
- -- simgrid.route.new(src_id,des_id,links_nb,links_list)
- simgrid.AS.addRoute{AS="AS0",src="Tremblay",dest="Jupiter",links="1"};
- simgrid.AS.addRoute{AS="AS0",src="Tremblay",dest="Fafard",links="0,1,2,3,4,8"};
- simgrid.AS.addRoute{AS="AS0",src="Tremblay",dest="Ginette",links="3,4,5"};
- simgrid.AS.addRoute{AS="AS0",src="Tremblay",dest="Bourassa",links="0,1,3,2,4,6,7"};
-
- simgrid.AS.addRoute{AS="AS0",src="Jupiter",dest="Tremblay",links="1"};
- simgrid.AS.addRoute{AS="AS0",src="Jupiter",dest="Fafard",links="0,1,2,3,4,8,9"};
- simgrid.AS.addRoute{AS="AS0",src="Jupiter",dest="Ginette",links="3,4,5,9"};
- simgrid.AS.addRoute{AS="AS0",src="Jupiter",dest="Bourassa",links="0,1,2,3,4,6,7,9"};
-
- simgrid.AS.addRoute{AS="AS0",src="Fafard",dest="Tremblay",links="0,1,2,3,4,8"};
- simgrid.AS.addRoute{AS="AS0",src="Fafard",dest="Jupiter",links="0,1,2,3,4,8,9"};
- simgrid.AS.addRoute{AS="AS0",src="Fafard",dest="Ginette",links="0,1,2,5,8"};
- simgrid.AS.addRoute{AS="AS0",src="Fafard",dest="Bourassa",links="6,7,8"};
-
- simgrid.AS.addRoute{AS="AS0",src="Ginette",dest="Tremblay",links="3,4,5"};
- simgrid.AS.addRoute{AS="AS0",src="Ginette",dest="Jupiter",links="3,4,5,9"};
- simgrid.AS.addRoute{AS="AS0",src="Ginette",dest="Fafard",links="0,1,2,5,8"};
- simgrid.AS.addRoute{AS="AS0",src="Ginette",dest="Bourassa",links="0,1,2,5,6,7"};
-
- simgrid.AS.addRoute{AS="AS0",src="Bourassa",dest="Tremblay",links="0,1,3,2,4,6,7"};
- simgrid.AS.addRoute{AS="AS0",src="Bourassa",dest="Jupiter",links="0,1,2,3,4,6,7,9"};
- simgrid.AS.addRoute{AS="AS0",src="Bourassa",dest="Fafard",links="6,7,8"};
- simgrid.AS.addRoute{AS="AS0",src="Bourassa",dest="Ginette",links="0,1,2,5,6,7"};
-
- --Save Platform
- --simgrid.info("start registering platform");
- simgrid.msg_register_platform();
- --simgrid.info("platform registered");
function Slave(...)
- if #arg ~= 1 then
+ if select("#", ...) ~= 1 then
error("Wrong number of arguments (got " .. #arg .. ", expected 1: slave_id)")
end
- local my_mailbox = "slave " .. arg[1]
+ local my_mailbox = "slave " .. select(1, ...)
simgrid.info("Hello from lua, I'm a poor slave with mailbox: " .. my_mailbox)
while true do
function Receiver(...)
simgrid.info("Hello From Receiver")
- local sender = simgrid.host.get_by_name(arg[1])
- local send_alias = arg[2]
+ local sender = simgrid.host.get_by_name(select(1, ...))
+ local send_alias = select(2, ...)
local recv_alias = "Receiver"
simgrid.info("Receiving Task from " .. simgrid.host.name(sender))
local task = simgrid.task.recv(recv_alias)
-- 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.
-function Sender(...)
+function Sender(...)
simgrid.info("Hello From Sender")
- local receiver = simgrid.host.get_by_name(arg[1])
- local task_comp = arg[2]
- local task_comm = arg[3]
- local rec_alias = arg[4]
+ local receiver = simgrid.host.get_by_name(select(1, ...))
+ local task_comp = select(2, ...)
+ local task_comm = select(3, ...)
+ local rec_alias = select(4, ...)
local size = 4
local m1 = mkmatrix(size, size)
local m2 = mkmatrix(size, size)
- if #arg ~= 4 then
+ if select("#", ...) ~= 4 then
error("Argc should be 4")
end
- simgrid.info("Argc=" .. (#arg) .. " (should be 4)")
+ simgrid.info("Argc=" .. select("#", ...) .. " (should be 4)")
-- Sending Task
local task = simgrid.task.new("matrix_task", task_comp, task_comm)
-- create Links
for i=10,0,-1 do
- simgrid.AS.addLink{AS="AS0",id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087};
+ simgrid.AS.addLink{AS="AS0",id=i,bandwidth=252750+ i*768,lat=0.000270544+i*0.087};
end
-- simgrid.route.new(src_id,des_id,links_nb,links_list)
simgrid.AS.addRoute("AS0","Splayd_1","Splayd_2",{"1"});
-- Assigns to the global string the first argument and prints it
function set_global_string(...)
- global_string = arg[1]
+ global_string = select(1, ...)
simgrid.info("Changing the global string")
print_global()
end
#include <stdio.h>
#include <stdlib.h>
-#include "simgrid/msg.h" /* Yeah! If you want to use msg, you need to include simgrid/msg.h */
+#include "simgrid/msg.h" /* Yeah! If you want to use msg, you need to include simgrid/msg.h */
#include "simgrid/simix.h" /* semaphores for the barrier */
#include "xbt.h" /* calloc, printf */
-#include "instr/instr_private.h"
#include <xbt/replay.h>
/** @addtogroup MSG_examples
host_parameters.id = NULL;
//Power from 3,000,000 to 10,000,000
- host_parameters.power_peak = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push_as(host_parameters.power_peak, double,
+ host_parameters.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push_as(host_parameters.speed_peak, double,
7000000 * RngStream_RandU01(rng_stream) + 3000000.0);
host_parameters.core_amount = 1;
- host_parameters.power_scale = 1;
- host_parameters.power_trace = NULL;
+ host_parameters.speed_scale = 1;
+ host_parameters.speed_trace = NULL;
host_parameters.initial_state = SURF_RESOURCE_ON;
host_parameters.state_trace = NULL;
host_parameters.coord = NULL;
#include "xbt/asserts.h"
#include "simgrid/modelchecker.h"
#include <xbt/RngStream.h>
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h" // FIXME: this is an internal header
/** @addtogroup MSG_examples
*
XBT_INFO("### Test: with/without MSG_task_set_bound");
-#if 0
- /* Easy-to-understand code (without calling MSG_task_set_bound) */
- {
- double clock_sta = MSG_get_clock();
-
- msg_task_t task = MSG_task_create("Task", computation_amount, 0, NULL);
- MSG_task_execute(task);
- MSG_task_destroy(task);
-
- double clock_end = MSG_get_clock();
- double duration = clock_end - clock_sta;
- double flops_per_sec = computation_amount / duration;
-
- XBT_INFO("not bound => duration %f (%f flops/s)", duration, flops_per_sec);
- }
-
- /* Easy-to-understand code (with calling MSG_task_set_bound) */
- {
- double clock_sta = MSG_get_clock();
-
- msg_task_t task = MSG_task_create("Task", computation_amount, 0, NULL);
- MSG_task_set_bound(task, cpu_speed / 2);
- MSG_task_execute(task);
- MSG_task_destroy(task);
-
- double clock_end = MSG_get_clock();
- double duration = clock_end - clock_sta;
- double flops_per_sec = computation_amount / duration;
-
- XBT_INFO("bound to 0.5 => duration %f (%f flops/s)", duration, flops_per_sec);
- }
-#endif
-
{
XBT_INFO("### Test: no bound for Task1@%s", hostA_name);
launch_worker(hostA, "worker0", computation_amount, 0, 0);
* 2. kcachegrind
**/
-static double time_precise(void)
-{
+static double time_precise(void) {
struct timeval tv;
int ret = gettimeofday(&tv, NULL);
if (ret < 0)
return now;
}
-static int computation_fun(int argc, char *argv[])
-{
+static int computation_fun(int argc, char *argv[]) {
for (;;) {
// double clock_sta = time_precise();
return 0;
}
-static void launch_computation_worker(msg_host_t host)
-{
+static void launch_computation_worker(msg_host_t host) {
MSG_process_create("compute", computation_fun, NULL, host);
}
-#if 0
-struct task_priv {
- msg_host_t tx_host;
- msg_process_t tx_proc;
- double clock_sta;
-};
-
-static int communication_tx_fun(int argc, char *argv[])
-{
- xbt_assert(argc == 2);
- const char *mbox = argv[1];
-
- msg_task_t task = MSG_task_create("Task", 1000000, 1000000, NULL);
-
- struct task_priv *priv = xbt_new(struct task_priv, 1);
- priv->tx_proc = MSG_process_self();
- priv->tx_host = MSG_host_self();
- priv->clock_sta = MSG_get_clock();
-
- MSG_task_set_data(task, priv);
-
- MSG_task_send(task, mbox);
-
- return 0;
-}
-
-static int communication_rx_fun(int argc, char *argv[])
-{
- const char *pr_name = MSG_process_get_name(MSG_process_self());
- const char *host_name = MSG_host_get_name(MSG_host_self());
- xbt_assert(argc == 2);
- const char *mbox = argv[1];
-
- msg_task_t task = NULL;
- MSG_task_recv(&task, mbox);
-
- struct task_priv *priv = MSG_task_get_data(task);
- double clock_end = MSG_get_clock();
-
- XBT_INFO("%s:%s to %s:%s => %g sec",
- MSG_host_get_name(priv->tx_host),
- MSG_process_get_name(priv->tx_proc),
- host_name, pr_name, clock_end - priv->clock_sta);
-
- MSG_task_destroy(task);
-
- return 0;
-}
-
-static void launch_communication_worker(msg_host_t tx_host, msg_host_t rx_host)
-{
- char *mbox = bprintf("MBOX:%s-%s",
- MSG_host_get_name(tx_host),
- MSG_host_get_name(rx_host));
- char **argv = NULL;
-
- const char *pr_name_tx = "comm_tx";
- argv = xbt_new(char *, 3);
- argv[0] = xbt_strdup(pr_name_tx);
- argv[1] = xbt_strdup(mbox);
- argv[2] = NULL;
-
- MSG_process_create_with_arguments(pr_name_tx, communication_tx_fun, NULL, tx_host, 2, argv);
-
- const char *pr_name_rx = "comm_rx";
- argv = xbt_new(char *, 3);
- argv[0] = xbt_strdup(pr_name_rx);
- argv[1] = xbt_strdup(mbox);
- argv[2] = NULL;
-
- MSG_process_create_with_arguments(pr_name_rx, communication_rx_fun, NULL, rx_host, 2, argv);
-
- xbt_free(mbox);
-}
-#endif
-
-
-
-
-
-
static int master_main(int argc, char *argv[])
{
xbt_dynar_t hosts_dynar = MSG_hosts_as_dynar();
> [ 30.000000] (0:@) Total simulation time: 30.00
> [ 30.000000] (0:@) Total energy of host MyHost1: 3160.000000 Joules
> [ 30.000000] (0:@) Total energy of host MyHost2: 2100.000000 Joules
+> [ 30.000000] (0:@) Total energy of host MyHost3: 3000.000000 Joules
> [ 30.000000] (1:dvfs_test@MyHost1) Done sleeping (duration: 10.00 s). Current peak speed=2E+07 flop/s; Energy dissipated=3160 J
! output sort 19
$ $SG_TEST_EXENV energy/pstate/pstate$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml ${srcdir:=.}/energy/pstate/deployment_pstate.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
> [ 0.000000] (1:dvfs_test@MyHost1) Count of Processor states=3
-> [ 0.000000] (2:dvfs_test@MyHost2) Count of Processor states=1
+> [ 0.000000] (2:dvfs_test@MyHost2) Count of Processor states=3
> [ 0.000000] (1:dvfs_test@MyHost1) Current power peak=100000000.000000
> [ 0.000000] (2:dvfs_test@MyHost2) Current power peak=100000000.000000
> [ 1.000000] (1:dvfs_test@MyHost1) Task1 simulation time: 1.000000e+00
> [ 1.000000] (2:dvfs_test@MyHost2) Task1 simulation time: 1.000000e+00
-> [ 1.000000] (2:dvfs_test@MyHost2) Cannot set pstate 2, host supports only 1 pstates
> [ 1.000000] (1:dvfs_test@MyHost1) Changing power peak value to 20000000.000000 (at index 2)
+> [ 1.000000] (2:dvfs_test@MyHost2) Changing power peak value to 20000000.000000 (at index 2)
> [ 1.000000] (1:dvfs_test@MyHost1) Current power peak=20000000.000000
+> [ 1.000000] (2:dvfs_test@MyHost2) Current power peak=20000000.000000
> [ 6.000000] (1:dvfs_test@MyHost1) Task2 simulation time: 5.000000e+00
-> [ 6.000000] (1:dvfs_test@MyHost1) Count of Processor states=1
-> [ 6.000000] (1:dvfs_test@MyHost1) Current power peak=100000000.000000
+> [ 6.000000] (2:dvfs_test@MyHost2) Task2 simulation time: 5.000000e+00
+> [ 6.000000] (1:dvfs_test@MyHost1) Count of Processor states=3
+> [ 6.000000] (2:dvfs_test@MyHost2) Count of Processor states=3
+> [ 6.000000] (1:dvfs_test@MyHost1) Current power peak=20000000.000000
+> [ 6.000000] (2:dvfs_test@MyHost2) Current power peak=20000000.000000
> [ 6.000000] (0:@) Total simulation time: 6.000000e+00
--- /dev/null
+set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
+
+add_executable(energy_vm energy_vm.c)
+
+### Add definitions for compile
+target_link_libraries(energy_vm simgrid)
+
+set(tesh_files
+ ${tesh_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/energy_vm.tesh
+ PARENT_SCOPE
+ )
+
+set(xml_files
+ ${xml_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/deployment_consumption.xml
+ PARENT_SCOPE
+ )
+
+set(examples_src
+ ${examples_src}
+ ${CMAKE_CURRENT_SOURCE_DIR}/energy_vm.c
+ PARENT_SCOPE
+ )
+
+set(bin_files
+ ${bin_files}
+ PARENT_SCOPE
+ )
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+ <process host="MyHost1" function="dvfs_test" />
+
+</platform>
--- /dev/null
+/* Copyright (c) 2007-2010, 2013-2015. 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 "simgrid/msg.h"
+#include "xbt/sysdep.h" /* calloc */
+#include "simgrid/plugins.h"
+
+/* Create a log channel to have nice outputs. */
+#include "xbt/log.h"
+#include "xbt/asserts.h"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(energy_vm, "Messages of this example");
+
+
+static int worker_func() {
+ msg_task_t task1 = MSG_task_create("t1", 300E6, 0, NULL);
+ MSG_task_execute (task1);
+ MSG_task_destroy(task1);
+ XBT_INFO("This worker is done.");
+ return 0;
+}
+
+static int dvfs(int argc, char *argv[])
+{
+ msg_host_t host1 = MSG_host_by_name("MyHost1");
+ msg_host_t host2 = MSG_host_by_name("MyHost2");
+ msg_host_t host3 = MSG_host_by_name("MyHost3");
+
+ /* Host 1 */
+ XBT_INFO("Creating and starting two VMs");
+ msg_vm_t vm1 = MSG_vm_create(host1, "vm1", 4, 2048, 100, NULL, 1024 * 20, 10,50);
+ MSG_vm_start(vm1);
+ msg_vm_t vm2 = MSG_vm_create(host3, "vm2", 4, 2048, 100, NULL, 1024 * 20, 10,50);
+ MSG_vm_start(vm2);
+
+ XBT_INFO("Create two tasks on Host1: one inside a VM, the other directly on the host");
+ MSG_process_create("p11", worker_func, NULL, vm1);
+ MSG_process_create("p12", worker_func, NULL, host1);
+
+ XBT_INFO("Create two tasks on Host2: both directly on the host");
+ MSG_process_create("p21", worker_func, NULL, host2);
+ MSG_process_create("p22", worker_func, NULL, host2);
+
+ XBT_INFO("Create two tasks on Host3: both inside a VM");
+ MSG_process_create("p31", worker_func, NULL, vm2);
+ MSG_process_create("p32", worker_func, NULL, vm2);
+
+ XBT_INFO("Wait 5 seconds. The tasks are still running (they run for 3 seconds, but 2 tasks are co-located, so they run for 6 seconds)");
+ MSG_process_sleep(5);
+ XBT_INFO("Wait another 5 seconds. The tasks stop at some point in between");
+ MSG_process_sleep(5);
+
+ MSG_vm_shutdown(vm1);
+ MSG_vm_shutdown(vm2);
+
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ msg_error_t res = MSG_OK;
+ sg_energy_plugin_init();
+ MSG_init(&argc, argv);
+
+ if (argc != 2) {
+ XBT_CRITICAL("Usage: %s platform_file\n", argv[0]);
+ xbt_die("example: %s msg_platform.xml\n", argv[0]);
+ }
+
+ MSG_create_environment(argv[1]);
+
+ /* Application deployment */
+ MSG_process_create("dvfs",dvfs,NULL,MSG_host_by_name("MyHost1"));
+
+ res = MSG_main();
+
+ XBT_INFO("Total simulation time: %.2f; All hosts must have the exact same energy consumption.", MSG_get_clock());
+
+ if (res == MSG_OK)
+ return 0;
+ else
+ return 1;
+}
+
--- /dev/null
+#! ./tesh
+
+p Testing the mechanism for computing host energy consumption in case of VMs
+
+$ $SG_TEST_EXENV energy/vm/energy_vm$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [ 0.000000] (1:dvfs@MyHost1) Creating and starting two VMs
+> [ 0.000000] (0:@) Create VM(vm1)@PM(MyHost1) with 0 mounted disks
+> [ 0.000000] (0:@) Create VM(vm2)@PM(MyHost3) with 0 mounted disks
+> [ 0.000000] (1:dvfs@MyHost1) Create two tasks on Host1: one inside a VM, the other directly on the host
+> [ 0.000000] (1:dvfs@MyHost1) Create two tasks on Host2: both directly on the host
+> [ 0.000000] (1:dvfs@MyHost1) Create two tasks on Host3: both inside a VM
+> [ 0.000000] (1:dvfs@MyHost1) Wait 5 seconds. The tasks are still running (they run for 3 seconds, but 2 tasks are co-located, so they run for 6 seconds)
+> [ 5.000000] (1:dvfs@MyHost1) Wait another 5 seconds. The tasks stop at some point in between
+> [ 6.000000] (4:p21@MyHost2) This worker is done.
+> [ 6.000000] (5:p22@MyHost2) This worker is done.
+> [ 6.000000] (3:p12@MyHost1) This worker is done.
+> [ 6.000000] (2:p11@vm1) This worker is done.
+> [ 6.000000] (6:p31@vm2) This worker is done.
+> [ 6.000000] (7:p32@vm2) This worker is done.
+> [ 10.000000] (0:@) Total simulation time: 10.00; All hosts must have the exact same energy consumption.
+> [ 10.000000] (0:@) Total energy of host MyHost1: 1580.000000 Joules
+> [ 10.000000] (0:@) Total energy of host MyHost2: 1600.000000 Joules
+> [ 10.000000] (0:@) Total energy of host MyHost3: 1600.000000 Joules
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/msg.h"
-#include "surf/surf_private.h"
int host(int argc, char *argv[]);
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/msg.h"
-#include "surf/surf_private.h"
int host(int argc, char *argv[]);
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/msg.h"
-#include "surf/surf_private.h"
#define INMEGA (1024*1024)
static int master_choosen = FALSE;
host_parameters.id = NULL;
- host_parameters.power_peak = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push_as(host_parameters.power_peak, double, 25000000.0);
+ host_parameters.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push_as(host_parameters.speed_peak, double, 25000000.0);
host_parameters.core_amount = 1;
- host_parameters.power_scale = 1;
- host_parameters.power_trace = NULL;
+ host_parameters.speed_scale = 1;
+ host_parameters.speed_trace = NULL;
host_parameters.initial_state = SURF_RESOURCE_ON;
host_parameters.state_trace = NULL;
host_parameters.coord = NULL;
tmgr_event_generator_new_uniform(pw_date_generator_id, 5, 10);
probabilist_event_generator_t pw_value_generator =
tmgr_event_generator_new_uniform(pw_value_generator_id, 0.6, 1.0);
- host_parameters.power_trace =
+ host_parameters.speed_trace =
tmgr_trace_generator_value(bprintf("pw_host_%ld", node->id),
pw_date_generator,
pw_value_generator);
s_sg_platf_host_cbarg_t host_parameters;
host_parameters.id = NULL;
- host_parameters.power_peak = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push_as(host_parameters.power_peak, double, 1000000.0);
+ host_parameters.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push_as(host_parameters.speed_peak, double, 1000000.0);
host_parameters.core_amount = 1;
- host_parameters.power_scale = 1;
- host_parameters.power_trace = NULL;
+ host_parameters.speed_scale = 1;
+ host_parameters.speed_trace = NULL;
host_parameters.initial_state = SURF_RESOURCE_ON;
host_parameters.state_trace = NULL;
host_parameters.coord = NULL;
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/msg.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
int host(int argc, char *argv[]);
unsigned int task_comp_size = 50000000;
#include <stdio.h>
#include <stdlib.h>
+#include "surf/surfxml_parse.h"
#include "simgrid/msg.h"
-#include "surf/surf_private.h"
int host(int argc, char *argv[]);
unsigned int task_comp_size = 50000000;
s_sg_platf_host_cbarg_t bob = SG_PLATF_HOST_INITIALIZER;
bob.id = "bob";
- bob.power_peak = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push_as(bob.power_peak, double, 98095000.0);
+ bob.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push_as(bob.speed_peak, double, 98095000.0);
sg_platf_new_host(&bob);
+ xbt_dynar_free(&bob.speed_peak);
s_sg_platf_host_cbarg_t alice = SG_PLATF_HOST_INITIALIZER;
alice.id = "alice";
- alice.power_peak = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push_as(alice.power_peak, double, 98095000.0);
+ alice.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push_as(alice.speed_peak, double, 98095000.0);
sg_platf_new_host(&alice);
+ xbt_dynar_free(&alice.speed_peak);
s_sg_platf_link_cbarg_t link = SG_PLATF_LINK_INITIALIZER;
link.id = "link1";
sg_platf_new_AS_end();
sg_platf_end();
- sg_platf_exit();
return 0;
}
--- /dev/null
+-- Copyright (c) 2011, 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.
+
+ require("simgrid")
+
+ function seq(min,max)
+ L={}
+ for i=min,max,1 do
+ table.insert(L,i)
+ end
+ return L
+ end
+
+ function my_cluster(args)
+ -- args is a table with the following keys
+ -- -
+ local required_args = {"id", "prefix", "suffix", "radical", "power", "bw", "lat" }
+ for _,val in pairs(required_args) do
+ if args[val] == nil then simgrid.critical("Must specify '" .. val .. "' attribute. See docs for details.") end
+ end
+ if args.sharing_sharing_policy == nil then
+ args.sharing_sharing_policy = "SHARED"
+ end
+ if args.topology ~= "TORUS" and args.topology ~= "FAT_TREE" then
+ args.topology = "Cluster"
+ end
+ --if args.core==nil then args.core = 1 end
+ --if args.core==nil then args.core = 1 end
+ --if args.core==nil then args.core = 1 end
+ --if args.core==nil then args.core = 1 end
+ --if args.core==nil then args.core = 1 end
+ --if args.core==nil then args.core = 1 end
+ --if args.core==nil then args.core = 1 end
+ --if args.core==nil then args.core = 1 end
+ --if args.core==nil then args.core = 1 end
+
+ -- Check the mode = Cluster here
+ return function()
+
+ simgrid.platf.AS_open{id=args.id,mode=args.topology};
+
+ if args.bb_bw ~= nil and args.bb_lat ~= nil then
+ simgrid.platf.backbone_new{id=args.id .. "-bb",bandwidth=args.bb_bw,latency=args.bb_lat,sharing_policy=args.bb_sharing_sharing_policy}
+ end
+ for _,i in pairs(args.radical) do
+ local hostname = args.prefix .. i .. args.suffix
+ local linkname = args.id .."_link_" .. i
+ simgrid.platf.host_new{id=hostname, power=args.power,core=args.core,power_trace=args.availability_file,state_trace=args.state_file};
+ simgrid.platf.link_new{id=linkname, bandwidth=args.bw,latency=args.lat, sharing_policy=args.sharing_sharing_policy};
+ simgrid.platf.host_link_new{id=hostname,up=linkname.."_UP",down=linkname.."_DOWN"};
+
+ if args.loopback_bw ~= nil and args.loopback_lat ~= nil then
+ simgrid.platf.link_new{id=linkname .. "_loopback",bandwidth=args.loopback_bw,latency=args.loopback_lat,sharing_policy="FATPIPE"}
+ end
+ end
+ simgrid.platf.AS_close()
+ end
+ end
+
+ simgrid.platf.open();
+ cluster_factory = my_cluster{prefix="node-", suffix=".acme.org", radical=seq(0,262144), host_factory = function(hostno)
+ if hostno % 2 == 0 then return "blabla" end
+ if hostno % 2 == 1 then return "blublub" end
+ end,
+ power="1Gf",
+ id="AS0",
+ bw="125MBps",
+ lat="50us",
+ sharing_sharing_policy="FULLDUPLEX"
+ }()
+ --my_cluster{prefix="node2-", suffix=".acme.org", radical=seq(0,44) }
+
+ simgrid.platf.close();
<platform version="3">
<AS id="AS0" routing="Full">
<!-- Multiple pstate processor capacities can be defined as a list of powers specified for a given host -->
- <!-- The enabled pstate can be set through the "pstate" attribute (lowest pstate corresponds to the highest processor power) -->
+ <!-- Attribute 'pstate' specifies the initialy selected pstate (here, the lowest pstate corresponds to the highest processor power) -->
<host id="MyHost1" power="100.0Mf,50.0Mf,20.0Mf" pstate="0" >
<!-- List of min_power:max_power pairs (in Watts) corresponding to the power consumed when the processor is idle and when it is fully loaded -->
<!-- The list must contain one power pair for each previously defined pstate-->
<prop id="watt_per_state" value="95.0:200.0, 93.0:170.0, 90.0:150.0" />
<prop id="watt_off" value="10" />
</host>
- <host id="MyHost2" power="100.0Mf" >
- <prop id="watt_per_state" value="100.0:200.0" />
+ <host id="MyHost2" power="100.0Mf,50.0Mf,20.0Mf" pstate="0" >
+ <prop id="watt_per_state" value="100.0:200.0, 93.0:170.0, 90.0:150.0" />
+ <prop id="watt_off" value="10" />
+ </host>
+ <host id="MyHost3" power="100.0Mf,50.0Mf,20.0Mf" pstate="0" >
+ <prop id="watt_per_state" value="100.0:200.0, 93.0:170.0, 90.0:150.0" />
<prop id="watt_off" value="10" />
</host>
- <link id="link1" bandwidth="100kBps" latency="0"/>
- <route src="MyHost1" dst="MyHost2"><link_ctn id="link1"/></route>
+ <link id="bus" bandwidth="100kBps" latency="0"/>
+ <route src="MyHost1" dst="MyHost2"><link_ctn id="bus"/></route>
+ <route src="MyHost1" dst="MyHost3"><link_ctn id="bus"/></route>
+ <route src="MyHost2" dst="MyHost3"><link_ctn id="bus"/></route>
</AS>
</platform>
--- /dev/null
+<?xml version='1.0'?>
+ <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+ <platform version="3">
+ <AS id="AS0" routing="Full">
+ <host id="Jacquelin" power="137.333Mf"/>
+ <host id="Boivin" power="98.095Mf"/>
+ <host id="Jean_Yves" power="98.095Mf"/>
+ <host id="TeX" power="68.667Mf"/>
+ <host id="Geoff" power="42.917Mf"/>
+ <host id="Disney" power="114.444Mf"/>
+ <host id="iRMX" power="68.667Mf"/>
+ <host id="McGee" power="42.917Mf"/>
+ <host id="Gatien" power="114.444Mf"/>
+ <host id="Laroche" power="98.095Mf"/>
+ <host id="Tanguay" power="68.667Mf"/>
+ <host id="Morin" power="85.833Mf"/>
+ <host id="Ethernet" power="98.095Mf"/>
+ <host id="Bellemarre" power="34.333Mf"/>
+ <host id="Kuenning" power="85.833Mf"/>
+ <host id="Gaston" power="98.095Mf"/>
+ <host id="Harry" power="42.917Mf"/>
+ <host id="Bousquet" power="42.917Mf"/>
+ <host id="Paul" power="76.296Mf"/>
+ <host id="St_Jean" power="76.296Mf"/>
+ <host id="Jill" power="114.444Mf"/>
+ <host id="Marcel" power="171.667Mf"/>
+ <host id="Wright" power="48.492Mf"/>
+ <host id="Jackson" power="48.492Mf"/>
+ <host id="Fernand" power="22.151Mf"/>
+ <host id="Soucy" power="137.333Mf"/>
+ <host id="Ste_Julie" power="85.833Mf"/>
+ <host id="Victoria" power="85.833Mf"/>
+ <host id="Lessard" power="85.833Mf"/>
+ <host id="Florient" power="114.444Mf"/>
+ <host id="Marcoux" power="98.095Mf"/>
+ <host id="Gavrel" power="85.833Mf"/>
+ <host id="Bescherelle" power="137.333Mf"/>
+ <host id="Pierre" power="114.444Mf"/>
+ <host id="Jamie" power="76.296Mf"/>
+ <host id="Rubin" power="42.917Mf"/>
+ <host id="Olivier" power="114.444Mf"/>
+ <host id="Boucherville" power="48.492Mf"/>
+ <host id="Pointe_Claire" power="48.492Mf"/>
+ <host id="Kansas" power="137.333Mf"/>
+ <host id="King" power="114.444Mf"/>
+ <host id="Lapointe" power="68.667Mf"/>
+ <host id="Julian" power="114.444Mf"/>
+ <host id="Lafontaine" power="68.667Mf"/>
+ <host id="Gordon" power="76.296Mf"/>
+ <host id="Drouin" power="42.917Mf"/>
+ <host id="Robert" power="137.333Mf"/>
+ <host id="Jocelyne" power="34.333Mf"/>
+ <host id="Stephen" power="68.667Mf"/>
+ <host id="Provost" power="137.333Mf"/>
+ <host id="Juneau" power="22.151Mf"/>
+ <host id="Casavant" power="48.492Mf"/>
+ <host id="St_Antoine" power="34.333Mf"/>
+ <host id="Louis" power="98.095Mf"/>
+ <host id="Julien" power="22.151Mf"/>
+ <host id="St_Paul" power="114.444Mf"/>
+ <host id="Mathematica" power="137.333Mf"/>
+ <host id="LaTeX" power="85.833Mf"/>
+ <host id="Sirois" power="114.444Mf"/>
+ <host id="Monique" power="114.444Mf"/>
+ <host id="Audy" power="34.333Mf"/>
+ <host id="Bourassa" power="85.833Mf"/>
+ <host id="OHara" power="42.917Mf"/>
+ <host id="Boston" power="42.917Mf"/>
+ <host id="Papineau" power="85.833Mf"/>
+ <host id="Fraser" power="98.095Mf"/>
+ <host id="Browne" power="137.333Mf"/>
+ <host id="SunOS" power="34.333Mf"/>
+ <host id="Varennes" power="68.667Mf"/>
+ <host id="Jacques" power="98.095Mf"/>
+ <host id="Thierry" power="137.333Mf"/>
+ <host id="Lachapelle" power="42.917Mf"/>
+ <host id="kV" power="68.667Mf"/>
+ <host id="Yolande" power="42.917Mf"/>
+ <host id="Pronovost" power="114.444Mf"/>
+ <host id="SPICE" power="68.667Mf"/>
+ <host id="Europe" power="48.492Mf"/>
+ <host id="Roy" power="34.333Mf"/>
+ <host id="Amadeus" power="114.444Mf"/>
+ <host id="Intel" power="137.333Mf"/>
+ <host id="Cambridge" power="114.444Mf"/>
+ <host id="Tremblay" power="171.667Mf"/>
+ <host id="UNIX" power="76.296Mf"/>
+ <host id="Domey" power="76.296Mf"/>
+ <host id="St_Bruno" power="42.917Mf"/>
+ <host id="Jean_Claude" power="85.833Mf"/>
+ <host id="Doyon" power="68.667Mf"/>
+ <host id="Fafard" power="137.333Mf"/>
+ <host id="Croteau" power="42.917Mf"/>
+ <host id="Dodge" power="114.444Mf"/>
+ <link id="127" bandwidth="3.430125MBps" lat="536.941us"/>
+ <link id="32" bandwidth="11.618875MBps" lat="189.98us"/>
+ <link id="90" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="118" bandwidth="1.467625MBps" lat="869.727us"/>
+ <link id="71" bandwidth="8.42725MBps" lat="156.056us"/>
+ <link id="102" bandwidth="4.817MBps" lat="117.352us"/>
+ <link id="18" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="125" bandwidth="5.574625MBps" lat="227.43us"/>
+ <link id="16" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="44" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="55" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="84" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="27" bandwidth="8.015125MBps" lat="35.076518ms"/>
+ <link id="190" bandwidth="1.23025MBps" lat="1.502106ms"/>
+ <link id="161" bandwidth="1.469125MBps" lat="1.114548ms"/>
+ <link id="95" bandwidth="5.7585MBps" lat="4.760145ms"/>
+ <link id="57" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="20" bandwidth="255.228625MBps" lat="7.413073ms"/>
+ <link id="163" bandwidth="2.583375MBps" lat="410.463us"/>
+ <link id="109" bandwidth="1.858MBps" lat="820.952us"/>
+ <link id="151" bandwidth="1.564125MBps" lat="788.956us"/>
+ <link id="89" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="175" bandwidth="1.37675MBps" lat="449.267us"/>
+ <link id="148" bandwidth="578.625kBps" lat="5.473705ms"/>
+ <link id="31" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="35" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="11" bandwidth="118.6825MBps" lat="136.931us"/>
+ <link id="78" bandwidth="27.94625MBps" lat="278.066us"/>
+ <link id="93" bandwidth="2.608MBps" lat="637.001us"/>
+ <link id="106" bandwidth="251.625kBps" lat="4.455826ms"/>
+ <link id="157" bandwidth="274.375kBps" lat="4.669142ms"/>
+ <link id="65" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="29" bandwidth="8.158MBps" lat="270.544us"/>
+ <link id="138" bandwidth="253.125kBps" lat="5.652577ms"/>
+ <link id="114" bandwidth="253.125kBps" lat="5.652577ms"/>
+ <link id="58" bandwidth="21.41475MBps" lat="29.5890617ms"/>
+ <link id="153" bandwidth="4.817MBps" lat="117.352us"/>
+ <link id="15" bandwidth="132.977875MBps" lat="131.098us"/>
+ <link id="137" bandwidth="4.416625MBps" lat="19.773us"/>
+ <link id="81" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="60" bandwidth="21.41475MBps" lat="29.5890617ms"/>
+ <link id="101" bandwidth="290.125kBps" lat="4.522355ms"/>
+ <link id="73" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="86" bandwidth="8.42725MBps" lat="156.056us"/>
+ <link id="76" bandwidth="27.94625MBps" lat="278.066us"/>
+ <link id="62" bandwidth="8.015125MBps" lat="35.076518ms"/>
+ <link id="67" bandwidth="27.94625MBps" lat="278.066us"/>
+ <link id="165" bandwidth="253.125kBps" lat="5.652577ms"/>
+ <link id="139" bandwidth="1.888875MBps" lat="1.081287ms"/>
+ <link id="129" bandwidth="1.467625MBps" lat="869.727us"/>
+ <link id="2" bandwidth="132.977875MBps" lat="131.098us"/>
+ <link id="17" bandwidth="118.6825MBps" lat="136.931us"/>
+ <link id="186" bandwidth="4.39725MBps" lat="677.601us"/>
+ <link id="110" bandwidth="5.574625MBps" lat="227.43us"/>
+ <link id="82" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="147" bandwidth="2.368MBps" lat="9.547561ms"/>
+ <link id="168" bandwidth="1.858MBps" lat="820.952us"/>
+ <link id="184" bandwidth="303.375kBps" lat="4.062241ms"/>
+ <link id="135" bandwidth="1.37675MBps" lat="449.267us"/>
+ <link id="14" bandwidth="118.6825MBps" lat="136.931us"/>
+ <link id="112" bandwidth="4.133375MBps" lat="9.693542ms"/>
+ <link id="69" bandwidth="8.42725MBps" lat="156.056us"/>
+ <link id="191" bandwidth="1.467625MBps" lat="869.727us"/>
+ <link id="172" bandwidth="605kBps" lat="87.981858ms"/>
+ <link id="145" bandwidth="2.583375MBps" lat="410.463us"/>
+ <link id="49" bandwidth="27.94625MBps" lat="278.066us"/>
+ <link id="178" bandwidth="1.469125MBps" lat="1.114548ms"/>
+ <link id="24" bandwidth="10.099625MBps" lat="479.78us"/>
+ <link id="187" bandwidth="1.467625MBps" lat="869.727us"/>
+ <link id="140" bandwidth="1.4655MBps" lat="863.872us"/>
+ <link id="124" bandwidth="556kBps" lat="3.101854ms"/>
+ <link id="104" bandwidth="4.485125MBps" lat="126.045us"/>
+ <link id="131" bandwidth="317.375kBps" lat="4.583831ms"/>
+ <link id="181" bandwidth="4.485125MBps" lat="126.045us"/>
+ <link id="121" bandwidth="4.817MBps" lat="117.352us"/>
+ <link id="79" bandwidth="8.42725MBps" lat="156.056us"/>
+ <link id="154" bandwidth="272.375kBps" lat="5.922616ms"/>
+ <link id="0" bandwidth="255.228625MBps" lat="7.413073ms"/>
+ <link id="23" bandwidth="10.099625MBps" lat="479.78us"/>
+ <link id="96" bandwidth="4.97825MBps" lat="7.164412ms"/>
+ <link id="126" bandwidth="3.9955MBps" lat="678.645us"/>
+ <link id="159" bandwidth="4.817MBps" lat="117.352us"/>
+ <link id="160" bandwidth="274.375kBps" lat="4.669142ms"/>
+ <link id="176" bandwidth="3.1755MBps" lat="472.524us"/>
+ <link id="47" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="8" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="98" bandwidth="556kBps" lat="3.101854ms"/>
+ <link id="37" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="117" bandwidth="1.51525MBps" lat="844.683us"/>
+ <link id="43" bandwidth="27.94625MBps" lat="278.066us"/>
+ <link id="5" bandwidth="41.279125MBps" lat="59.904us"/>
+ <link id="170" bandwidth="4.485125MBps" lat="126.045us"/>
+ <link id="33" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="21" bandwidth="41.279125MBps" lat="59.904us"/>
+ <link id="63" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="7" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="26" bandwidth="21.41475MBps" lat="29.5890617ms"/>
+ <link id="80" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="119" bandwidth="317.375kBps" lat="4.583831ms"/>
+ <link id="180" bandwidth="251.625kBps" lat="4.455826ms"/>
+ <link id="99" bandwidth="253.125kBps" lat="5.652577ms"/>
+ <link id="179" bandwidth="5.816375MBps" lat="164.758us"/>
+ <link id="162" bandwidth="556kBps" lat="3.101854ms"/>
+ <link id="72" bandwidth="41.279125MBps" lat="59.904us"/>
+ <link id="74" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="182" bandwidth="4.416625MBps" lat="19.773us"/>
+ <link id="61" bandwidth="8.015125MBps" lat="35.076518ms"/>
+ <link id="108" bandwidth="990.5kBps" lat="1.742977ms"/>
+ <link id="115" bandwidth="926.625kBps" lat="601.375us"/>
+ <link id="92" bandwidth="1.564125MBps" lat="788.956us"/>
+ <link id="103" bandwidth="472.125kBps" lat="5.161451ms"/>
+ <link id="10" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="113" bandwidth="1.858MBps" lat="820.952us"/>
+ <link id="152" bandwidth="7.20975MBps" lat="1.461517ms"/>
+ <link id="189" bandwidth="251.625kBps" lat="4.455826ms"/>
+ <link id="142" bandwidth="1.62775MBps" lat="278.175us"/>
+ <link id="91" bandwidth="8.42725MBps" lat="156.056us"/>
+ <link id="167" bandwidth="768.75kBps" lat="8.76244ms"/>
+ <link id="48" bandwidth="41.279125MBps" lat="59.904us"/>
+ <link id="107" bandwidth="1.281875MBps" lat="6.104672ms"/>
+ <link id="87" bandwidth="8.158MBps" lat="270.544us"/>
+ <link id="174" bandwidth="290.875kBps" lat="4.47727ms"/>
+ <link id="77" bandwidth="27.94625MBps" lat="278.066us"/>
+ <link id="133" bandwidth="1.469125MBps" lat="1.114548ms"/>
+ <link id="149" bandwidth="1.04925MBps" lat="9.647856ms"/>
+ <link id="123" bandwidth="3.430125MBps" lat="536.941us"/>
+ <link id="50" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="39" bandwidth="8.015125MBps" lat="35.076518ms"/>
+ <link id="64" bandwidth="21.41475MBps" lat="29.5890617ms"/>
+ <link id="97" bandwidth="7.534MBps" lat="125.428us"/>
+ <link id="12" bandwidth="41.279125MBps" lat="59.904us"/>
+ <link id="41" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="52" bandwidth="8.42725MBps" lat="156.056us"/>
+ <link id="173" bandwidth="7.534MBps" lat="125.428us"/>
+ <link id="56" bandwidth="21.41475MBps" lat="29.5890617ms"/>
+ <link id="45" bandwidth="8.158MBps" lat="270.544us"/>
+ <link id="66" bandwidth="11.618875MBps" lat="189.98us"/>
+ <link id="19" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="54" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="70" bandwidth="41.279125MBps" lat="59.904us"/>
+ <link id="188" bandwidth="3.1755MBps" lat="472.524us"/>
+ <link id="68" bandwidth="41.279125MBps" lat="59.904us"/>
+ <link id="166" bandwidth="3.9955MBps" lat="678.645us"/>
+ <link id="1" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="136" bandwidth="926.625kBps" lat="601.375us"/>
+ <link id="88" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="116" bandwidth="2.368MBps" lat="9.547561ms"/>
+ <link id="144" bandwidth="259.125kBps" lat="4.460898ms"/>
+ <link id="141" bandwidth="472.125kBps" lat="5.161451ms"/>
+ <link id="30" bandwidth="10.099625MBps" lat="479.78us"/>
+ <link id="100" bandwidth="721.625kBps" lat="6.406us"/>
+ <link id="25" bandwidth="8.015125MBps" lat="35.076518ms"/>
+ <link id="128" bandwidth="1.469125MBps" lat="1.114548ms"/>
+ <link id="28" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="120" bandwidth="4.461125MBps" lat="106.949us"/>
+ <link id="156" bandwidth="4.485125MBps" lat="126.045us"/>
+ <link id="134" bandwidth="259.125kBps" lat="4.460898ms"/>
+ <link id="40" bandwidth="21.41475MBps" lat="29.5890617ms"/>
+ <link id="75" bandwidth="11.618875MBps" lat="189.98us"/>
+ <link id="83" bandwidth="10.314625MBps" lat="6.932556ms"/>
+ <link id="59" bandwidth="11.845375MBps" lat="370.788us"/>
+ <link id="177" bandwidth="990.5kBps" lat="1.742977ms"/>
+ <link id="150" bandwidth="4.27025MBps" lat="672.289us"/>
+ <link id="155" bandwidth="1.37675MBps" lat="449.267us"/>
+ <link id="130" bandwidth="4.485125MBps" lat="126.045us"/>
+ <link id="53" bandwidth="11.618875MBps" lat="189.98us"/>
+ <link id="122" bandwidth="1.126875MBps" lat="287.84us"/>
+ <link id="143" bandwidth="7.20975MBps" lat="1.461517ms"/>
+ <link id="158" bandwidth="3.028375MBps" lat="677.908us"/>
+ <link id="42" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="22" bandwidth="11.618875MBps" lat="189.98us"/>
+ <link id="46" bandwidth="8.158MBps" lat="270.544us"/>
+ <link id="13" bandwidth="255.228625MBps" lat="7.413073ms"/>
+ <link id="105" bandwidth="117.125kBps" lat="53.930106ms"/>
+ <link id="6" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="85" bandwidth="15.376875MBps" lat="35.083019ms"/>
+ <link id="185" bandwidth="2.3485MBps" lat="259.761us"/>
+ <link id="36" bandwidth="11.618875MBps" lat="189.98us"/>
+ <link id="3" bandwidth="255.228625MBps" lat="7.413073ms"/>
+ <link id="183" bandwidth="3.9955MBps" lat="678.645us"/>
+ <link id="94" bandwidth="4.485125MBps" lat="126.045us"/>
+ <link id="146" bandwidth="3.37125MBps" lat="666.676us"/>
+ <link id="51" bandwidth="8.42725MBps" lat="156.056us"/>
+ <link id="9" bandwidth="34.285625MBps" lat="514.433us"/>
+ <link id="111" bandwidth="3.275625MBps" lat="658.142us"/>
+ <link id="38" bandwidth="41.279125MBps" lat="59.904us"/>
+ <link id="4" bandwidth="132.977875MBps" lat="131.098us"/>
+ <link id="34" bandwidth="11.845375MBps" lat="370.788us"/>
+ <link id="169" bandwidth="1.37675MBps" lat="449.267us"/>
+ <link id="164" bandwidth="768.75kBps" lat="8.76244ms"/>
+ <link id="132" bandwidth="2.179125MBps" lat="320.114us"/>
+ <link id="171" bandwidth="3.29775MBps" lat="595.883us"/>
+ <route src="Jacquelin" dst="Boivin" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Jacquelin" dst="Jean_Yves" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Jacquelin" dst="TeX" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Jacquelin" dst="Geoff" symmetrical="NO"><link_ctn id="145"/></route>
+ <route src="Jacquelin" dst="Disney" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Jacquelin" dst="iRMX" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Jacquelin" dst="McGee" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Jacquelin" dst="Gatien" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Jacquelin" dst="Laroche" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Jacquelin" dst="Tanguay" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Jacquelin" dst="Morin" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Jacquelin" dst="Ethernet" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Jacquelin" dst="Bellemarre" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Jacquelin" dst="Kuenning" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Jacquelin" dst="Gaston" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Jacquelin" dst="Harry" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Jacquelin" dst="Bousquet" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Jacquelin" dst="Paul" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Jacquelin" dst="St_Jean" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Jacquelin" dst="Jill" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Jacquelin" dst="Marcel" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Jacquelin" dst="Wright" symmetrical="NO"><link_ctn id="145"/><link_ctn id="147"/></route>
+ <route src="Jacquelin" dst="Jackson" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Jacquelin" dst="Fernand" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Jacquelin" dst="Soucy" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Jacquelin" dst="Ste_Julie" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Jacquelin" dst="Victoria" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Jacquelin" dst="Lessard" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Jacquelin" dst="Florient" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Jacquelin" dst="Marcoux" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Jacquelin" dst="Gavrel" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Jacquelin" dst="Bescherelle" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Jacquelin" dst="Pierre" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Jacquelin" dst="Jamie" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Jacquelin" dst="Rubin" symmetrical="NO"><link_ctn id="145"/><link_ctn id="144"/></route>
+ <route src="Jacquelin" dst="Olivier" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Jacquelin" dst="Boucherville" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Jacquelin" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Jacquelin" dst="Kansas" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Jacquelin" dst="King" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Jacquelin" dst="Lapointe" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Jacquelin" dst="Julian" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Jacquelin" dst="Lafontaine" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Jacquelin" dst="Gordon" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Jacquelin" dst="Drouin" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Jacquelin" dst="Robert" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Jacquelin" dst="Jocelyne" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Jacquelin" dst="Stephen" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Jacquelin" dst="Provost" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Jacquelin" dst="Juneau" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Jacquelin" dst="Casavant" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Jacquelin" dst="St_Antoine" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Jacquelin" dst="Louis" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Jacquelin" dst="Julien" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Jacquelin" dst="St_Paul" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Jacquelin" dst="Mathematica" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Jacquelin" dst="LaTeX" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Jacquelin" dst="Sirois" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Jacquelin" dst="Monique" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Jacquelin" dst="Audy" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Jacquelin" dst="Bourassa" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Jacquelin" dst="OHara" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Jacquelin" dst="Boston" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Jacquelin" dst="Papineau" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Jacquelin" dst="Fraser" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Jacquelin" dst="Browne" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Jacquelin" dst="SunOS" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Jacquelin" dst="Varennes" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Jacquelin" dst="Jacques" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Jacquelin" dst="Thierry" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Jacquelin" dst="Lachapelle" symmetrical="NO"><link_ctn id="145"/><link_ctn id="146"/></route>
+ <route src="Jacquelin" dst="kV" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Jacquelin" dst="Yolande" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Jacquelin" dst="Pronovost" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Jacquelin" dst="SPICE" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Jacquelin" dst="Europe" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Jacquelin" dst="Roy" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Jacquelin" dst="Amadeus" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Jacquelin" dst="Intel" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Jacquelin" dst="Cambridge" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Jacquelin" dst="Tremblay" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Jacquelin" dst="UNIX" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Jacquelin" dst="Domey" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Jacquelin" dst="St_Bruno" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Jacquelin" dst="Jean_Claude" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Jacquelin" dst="Doyon" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Jacquelin" dst="Fafard" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Jacquelin" dst="Croteau" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Jacquelin" dst="Dodge" symmetrical="NO"><link_ctn id="145"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Boivin" dst="Jacquelin" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Boivin" dst="Jean_Yves" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Boivin" dst="TeX" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Boivin" dst="Geoff" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Boivin" dst="Disney" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Boivin" dst="iRMX" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Boivin" dst="McGee" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Boivin" dst="Gatien" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Boivin" dst="Laroche" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Boivin" dst="Tanguay" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Boivin" dst="Morin" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Boivin" dst="Ethernet" symmetrical="NO"><link_ctn id="118"/></route>
+ <route src="Boivin" dst="Bellemarre" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Boivin" dst="Kuenning" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Boivin" dst="Gaston" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Boivin" dst="Harry" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Boivin" dst="Bousquet" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Boivin" dst="Paul" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Boivin" dst="St_Jean" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Boivin" dst="Jill" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Boivin" dst="Marcel" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Boivin" dst="Wright" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Boivin" dst="Jackson" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Boivin" dst="Fernand" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Boivin" dst="Soucy" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Boivin" dst="Ste_Julie" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Boivin" dst="Victoria" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Boivin" dst="Lessard" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Boivin" dst="Florient" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Boivin" dst="Marcoux" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Boivin" dst="Gavrel" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Boivin" dst="Bescherelle" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Boivin" dst="Pierre" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Boivin" dst="Jamie" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Boivin" dst="Rubin" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Boivin" dst="Olivier" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Boivin" dst="Boucherville" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Boivin" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Boivin" dst="Kansas" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Boivin" dst="King" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Boivin" dst="Lapointe" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Boivin" dst="Julian" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Boivin" dst="Lafontaine" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Boivin" dst="Gordon" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Boivin" dst="Drouin" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Boivin" dst="Robert" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Boivin" dst="Jocelyne" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Boivin" dst="Stephen" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Boivin" dst="Provost" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Boivin" dst="Juneau" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Boivin" dst="Casavant" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Boivin" dst="St_Antoine" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Boivin" dst="Louis" symmetrical="NO"><link_ctn id="117"/></route>
+ <route src="Boivin" dst="Julien" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Boivin" dst="St_Paul" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Boivin" dst="Mathematica" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Boivin" dst="LaTeX" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Boivin" dst="Sirois" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Boivin" dst="Monique" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Boivin" dst="Audy" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Boivin" dst="Bourassa" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Boivin" dst="OHara" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Boivin" dst="Boston" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Boivin" dst="Papineau" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Boivin" dst="Fraser" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Boivin" dst="Browne" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Boivin" dst="SunOS" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Boivin" dst="Varennes" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Boivin" dst="Jacques" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Boivin" dst="Thierry" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Boivin" dst="Lachapelle" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Boivin" dst="kV" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Boivin" dst="Yolande" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Boivin" dst="Pronovost" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Boivin" dst="SPICE" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Boivin" dst="Europe" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Boivin" dst="Roy" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Boivin" dst="Amadeus" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Boivin" dst="Intel" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Boivin" dst="Cambridge" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Boivin" dst="Tremblay" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Boivin" dst="UNIX" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Boivin" dst="Domey" symmetrical="NO"><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Boivin" dst="St_Bruno" symmetrical="NO"><link_ctn id="119"/></route>
+ <route src="Boivin" dst="Jean_Claude" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Boivin" dst="Doyon" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Boivin" dst="Fafard" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Boivin" dst="Croteau" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Boivin" dst="Dodge" symmetrical="NO"><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Jean_Yves" dst="Jacquelin" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Jean_Yves" dst="Boivin" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Jean_Yves" dst="TeX" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Jean_Yves" dst="Geoff" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="Jean_Yves" dst="Disney" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Jean_Yves" dst="iRMX" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Jean_Yves" dst="McGee" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Jean_Yves" dst="Gatien" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Jean_Yves" dst="Laroche" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Jean_Yves" dst="Tanguay" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Jean_Yves" dst="Morin" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Jean_Yves" dst="Ethernet" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Jean_Yves" dst="Bellemarre" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Jean_Yves" dst="Kuenning" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Jean_Yves" dst="Gaston" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Jean_Yves" dst="Harry" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Jean_Yves" dst="Bousquet" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Jean_Yves" dst="Paul" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Jean_Yves" dst="St_Jean" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Jean_Yves" dst="Jill" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Jean_Yves" dst="Marcel" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Jean_Yves" dst="Wright" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Jean_Yves" dst="Jackson" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="62"/></route>
+ <route src="Jean_Yves" dst="Fernand" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Jean_Yves" dst="Soucy" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Jean_Yves" dst="Ste_Julie" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Jean_Yves" dst="Victoria" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Jean_Yves" dst="Lessard" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Jean_Yves" dst="Florient" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Jean_Yves" dst="Marcoux" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Jean_Yves" dst="Gavrel" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Jean_Yves" dst="Bescherelle" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Jean_Yves" dst="Pierre" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Jean_Yves" dst="Jamie" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Jean_Yves" dst="Rubin" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Jean_Yves" dst="Olivier" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Jean_Yves" dst="Boucherville" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Jean_Yves" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Jean_Yves" dst="Kansas" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Jean_Yves" dst="King" symmetrical="NO"><link_ctn id="138"/><link_ctn id="137"/></route>
+ <route src="Jean_Yves" dst="Lapointe" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Jean_Yves" dst="Julian" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Jean_Yves" dst="Lafontaine" symmetrical="NO"><link_ctn id="138"/><link_ctn id="139"/></route>
+ <route src="Jean_Yves" dst="Gordon" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Jean_Yves" dst="Drouin" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Jean_Yves" dst="Robert" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Jean_Yves" dst="Jocelyne" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Jean_Yves" dst="Stephen" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Jean_Yves" dst="Provost" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Jean_Yves" dst="Juneau" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Jean_Yves" dst="Casavant" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Jean_Yves" dst="St_Antoine" symmetrical="NO"><link_ctn id="138"/></route>
+ <route src="Jean_Yves" dst="Louis" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Jean_Yves" dst="Julien" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Jean_Yves" dst="St_Paul" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Jean_Yves" dst="Mathematica" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Jean_Yves" dst="LaTeX" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Jean_Yves" dst="Sirois" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Jean_Yves" dst="Monique" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Jean_Yves" dst="Audy" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Jean_Yves" dst="Bourassa" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Jean_Yves" dst="OHara" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Jean_Yves" dst="Boston" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Jean_Yves" dst="Papineau" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Jean_Yves" dst="Fraser" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Jean_Yves" dst="Browne" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Jean_Yves" dst="SunOS" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Jean_Yves" dst="Varennes" symmetrical="NO"><link_ctn id="138"/><link_ctn id="136"/></route>
+ <route src="Jean_Yves" dst="Jacques" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Jean_Yves" dst="Thierry" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Jean_Yves" dst="Lachapelle" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Jean_Yves" dst="kV" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Jean_Yves" dst="Yolande" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Jean_Yves" dst="Pronovost" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Jean_Yves" dst="SPICE" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Jean_Yves" dst="Europe" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Jean_Yves" dst="Roy" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Jean_Yves" dst="Amadeus" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Jean_Yves" dst="Intel" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Jean_Yves" dst="Cambridge" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Jean_Yves" dst="Tremblay" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Jean_Yves" dst="UNIX" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Jean_Yves" dst="Domey" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Jean_Yves" dst="St_Bruno" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Jean_Yves" dst="Jean_Claude" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Jean_Yves" dst="Doyon" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Jean_Yves" dst="Fafard" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Jean_Yves" dst="Croteau" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Jean_Yves" dst="Dodge" symmetrical="NO"><link_ctn id="138"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="TeX" dst="Jacquelin" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="TeX" dst="Boivin" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="TeX" dst="Jean_Yves" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="TeX" dst="Geoff" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="TeX" dst="Disney" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="TeX" dst="iRMX" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="TeX" dst="McGee" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="TeX" dst="Gatien" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="TeX" dst="Laroche" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="TeX" dst="Tanguay" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="TeX" dst="Morin" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="TeX" dst="Ethernet" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="TeX" dst="Bellemarre" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="34"/></route>
+ <route src="TeX" dst="Kuenning" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="TeX" dst="Gaston" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="TeX" dst="Harry" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="TeX" dst="Bousquet" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="TeX" dst="Paul" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="TeX" dst="St_Jean" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="TeX" dst="Jill" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="TeX" dst="Marcel" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="TeX" dst="Wright" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="TeX" dst="Jackson" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="TeX" dst="Fernand" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="TeX" dst="Soucy" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="TeX" dst="Ste_Julie" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="TeX" dst="Victoria" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="TeX" dst="Lessard" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="TeX" dst="Florient" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="TeX" dst="Marcoux" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="TeX" dst="Gavrel" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="TeX" dst="Bescherelle" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="TeX" dst="Pierre" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="TeX" dst="Jamie" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="TeX" dst="Rubin" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="TeX" dst="Olivier" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="TeX" dst="Boucherville" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="TeX" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="TeX" dst="Kansas" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="TeX" dst="King" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="TeX" dst="Lapointe" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="TeX" dst="Julian" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="TeX" dst="Lafontaine" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="TeX" dst="Gordon" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="TeX" dst="Drouin" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="TeX" dst="Robert" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="TeX" dst="Jocelyne" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="TeX" dst="Stephen" symmetrical="NO"><link_ctn id="100"/><link_ctn id="101"/></route>
+ <route src="TeX" dst="Provost" symmetrical="NO"><link_ctn id="100"/><link_ctn id="103"/></route>
+ <route src="TeX" dst="Juneau" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="TeX" dst="Casavant" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="TeX" dst="St_Antoine" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="TeX" dst="Louis" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="TeX" dst="Julien" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="TeX" dst="St_Paul" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="TeX" dst="Mathematica" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="TeX" dst="LaTeX" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="TeX" dst="Sirois" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="TeX" dst="Monique" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="TeX" dst="Audy" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="TeX" dst="Bourassa" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="TeX" dst="OHara" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="TeX" dst="Boston" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="TeX" dst="Papineau" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="TeX" dst="Fraser" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="TeX" dst="Browne" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="TeX" dst="SunOS" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="TeX" dst="Varennes" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="TeX" dst="Jacques" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="TeX" dst="Thierry" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="TeX" dst="Lachapelle" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="TeX" dst="kV" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="TeX" dst="Yolande" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="TeX" dst="Pronovost" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="TeX" dst="SPICE" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="TeX" dst="Europe" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="TeX" dst="Roy" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="TeX" dst="Amadeus" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="TeX" dst="Intel" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="TeX" dst="Cambridge" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="TeX" dst="Tremblay" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="TeX" dst="UNIX" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="TeX" dst="Domey" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="TeX" dst="St_Bruno" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="TeX" dst="Jean_Claude" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="TeX" dst="Doyon" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="TeX" dst="Fafard" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="TeX" dst="Croteau" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="TeX" dst="Dodge" symmetrical="NO"><link_ctn id="100"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Geoff" dst="Jacquelin" symmetrical="NO"><link_ctn id="145"/></route>
+ <route src="Geoff" dst="Boivin" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Geoff" dst="Jean_Yves" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Geoff" dst="TeX" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Geoff" dst="Disney" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Geoff" dst="iRMX" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Geoff" dst="McGee" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Geoff" dst="Gatien" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Geoff" dst="Laroche" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Geoff" dst="Tanguay" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Geoff" dst="Morin" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Geoff" dst="Ethernet" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Geoff" dst="Bellemarre" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Geoff" dst="Kuenning" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Geoff" dst="Gaston" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Geoff" dst="Harry" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Geoff" dst="Bousquet" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Geoff" dst="Paul" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Geoff" dst="St_Jean" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Geoff" dst="Jill" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Geoff" dst="Marcel" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Geoff" dst="Wright" symmetrical="NO"><link_ctn id="147"/></route>
+ <route src="Geoff" dst="Jackson" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Geoff" dst="Fernand" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Geoff" dst="Soucy" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Geoff" dst="Ste_Julie" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Geoff" dst="Victoria" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Geoff" dst="Lessard" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Geoff" dst="Florient" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Geoff" dst="Marcoux" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Geoff" dst="Gavrel" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Geoff" dst="Bescherelle" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Geoff" dst="Pierre" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Geoff" dst="Jamie" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Geoff" dst="Rubin" symmetrical="NO"><link_ctn id="144"/></route>
+ <route src="Geoff" dst="Olivier" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Geoff" dst="Boucherville" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Geoff" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Geoff" dst="Kansas" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Geoff" dst="King" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Geoff" dst="Lapointe" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Geoff" dst="Julian" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Geoff" dst="Lafontaine" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Geoff" dst="Gordon" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Geoff" dst="Drouin" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Geoff" dst="Robert" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Geoff" dst="Jocelyne" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Geoff" dst="Stephen" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Geoff" dst="Provost" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Geoff" dst="Juneau" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Geoff" dst="Casavant" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Geoff" dst="St_Antoine" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Geoff" dst="Louis" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Geoff" dst="Julien" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Geoff" dst="St_Paul" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Geoff" dst="Mathematica" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Geoff" dst="LaTeX" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Geoff" dst="Sirois" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Geoff" dst="Monique" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Geoff" dst="Audy" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Geoff" dst="Bourassa" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Geoff" dst="OHara" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Geoff" dst="Boston" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Geoff" dst="Papineau" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Geoff" dst="Fraser" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Geoff" dst="Browne" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Geoff" dst="SunOS" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Geoff" dst="Varennes" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Geoff" dst="Jacques" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Geoff" dst="Thierry" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Geoff" dst="Lachapelle" symmetrical="NO"><link_ctn id="146"/></route>
+ <route src="Geoff" dst="kV" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Geoff" dst="Yolande" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Geoff" dst="Pronovost" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Geoff" dst="SPICE" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Geoff" dst="Europe" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Geoff" dst="Roy" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Geoff" dst="Amadeus" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Geoff" dst="Intel" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Geoff" dst="Cambridge" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Geoff" dst="Tremblay" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Geoff" dst="UNIX" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Geoff" dst="Domey" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Geoff" dst="St_Bruno" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Geoff" dst="Jean_Claude" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Geoff" dst="Doyon" symmetrical="NO"><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Geoff" dst="Fafard" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Geoff" dst="Croteau" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Geoff" dst="Dodge" symmetrical="NO"><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Disney" dst="Jacquelin" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Disney" dst="Boivin" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Disney" dst="Jean_Yves" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Disney" dst="TeX" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Disney" dst="Geoff" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Disney" dst="iRMX" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Disney" dst="McGee" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Disney" dst="Gatien" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Disney" dst="Laroche" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Disney" dst="Tanguay" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Disney" dst="Morin" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Disney" dst="Ethernet" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Disney" dst="Bellemarre" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/></route>
+ <route src="Disney" dst="Kuenning" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Disney" dst="Gaston" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Disney" dst="Harry" symmetrical="NO"><link_ctn id="111"/><link_ctn id="108"/></route>
+ <route src="Disney" dst="Bousquet" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Disney" dst="Paul" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Disney" dst="St_Jean" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Disney" dst="Jill" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Disney" dst="Marcel" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Disney" dst="Wright" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Disney" dst="Jackson" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Disney" dst="Fernand" symmetrical="NO"><link_ctn id="111"/><link_ctn id="109"/></route>
+ <route src="Disney" dst="Soucy" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Disney" dst="Ste_Julie" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Disney" dst="Victoria" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Disney" dst="Lessard" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Disney" dst="Florient" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Disney" dst="Marcoux" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Disney" dst="Gavrel" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Disney" dst="Bescherelle" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Disney" dst="Pierre" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Disney" dst="Jamie" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Disney" dst="Rubin" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Disney" dst="Olivier" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Disney" dst="Boucherville" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Disney" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Disney" dst="Kansas" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Disney" dst="King" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Disney" dst="Lapointe" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Disney" dst="Julian" symmetrical="NO"><link_ctn id="111"/></route>
+ <route src="Disney" dst="Lafontaine" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Disney" dst="Gordon" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Disney" dst="Drouin" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Disney" dst="Robert" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Disney" dst="Jocelyne" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Disney" dst="Stephen" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Disney" dst="Provost" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Disney" dst="Juneau" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Disney" dst="Casavant" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Disney" dst="St_Antoine" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Disney" dst="Louis" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Disney" dst="Julien" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Disney" dst="St_Paul" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Disney" dst="Mathematica" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Disney" dst="LaTeX" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Disney" dst="Sirois" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Disney" dst="Monique" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Disney" dst="Audy" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Disney" dst="Bourassa" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Disney" dst="OHara" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Disney" dst="Boston" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Disney" dst="Papineau" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Disney" dst="Fraser" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Disney" dst="Browne" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Disney" dst="SunOS" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Disney" dst="Varennes" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Disney" dst="Jacques" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Disney" dst="Thierry" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Disney" dst="Lachapelle" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Disney" dst="kV" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Disney" dst="Yolande" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Disney" dst="Pronovost" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Disney" dst="SPICE" symmetrical="NO"><link_ctn id="111"/><link_ctn id="110"/></route>
+ <route src="Disney" dst="Europe" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Disney" dst="Roy" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Disney" dst="Amadeus" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Disney" dst="Intel" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Disney" dst="Cambridge" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Disney" dst="Tremblay" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Disney" dst="UNIX" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Disney" dst="Domey" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Disney" dst="St_Bruno" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Disney" dst="Jean_Claude" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Disney" dst="Doyon" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Disney" dst="Fafard" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Disney" dst="Croteau" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Disney" dst="Dodge" symmetrical="NO"><link_ctn id="111"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="iRMX" dst="Jacquelin" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="iRMX" dst="Boivin" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="iRMX" dst="Jean_Yves" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="iRMX" dst="TeX" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="iRMX" dst="Geoff" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="iRMX" dst="Disney" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="iRMX" dst="McGee" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="iRMX" dst="Gatien" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="iRMX" dst="Laroche" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/></route>
+ <route src="iRMX" dst="Tanguay" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="iRMX" dst="Morin" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="iRMX" dst="Ethernet" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="iRMX" dst="Bellemarre" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="iRMX" dst="Kuenning" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="iRMX" dst="Gaston" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="iRMX" dst="Harry" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="iRMX" dst="Bousquet" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="iRMX" dst="Paul" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="iRMX" dst="St_Jean" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="iRMX" dst="Jill" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="90"/></route>
+ <route src="iRMX" dst="Marcel" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="iRMX" dst="Wright" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="iRMX" dst="Jackson" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="iRMX" dst="Fernand" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="iRMX" dst="Soucy" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="iRMX" dst="Ste_Julie" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="iRMX" dst="Victoria" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="iRMX" dst="Lessard" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="iRMX" dst="Florient" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="iRMX" dst="Marcoux" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="iRMX" dst="Gavrel" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="iRMX" dst="Bescherelle" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="iRMX" dst="Pierre" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="iRMX" dst="Jamie" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="iRMX" dst="Rubin" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="iRMX" dst="Olivier" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="iRMX" dst="Boucherville" symmetrical="NO"><link_ctn id="172"/></route>
+ <route src="iRMX" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="iRMX" dst="Kansas" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="iRMX" dst="King" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="iRMX" dst="Lapointe" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="iRMX" dst="Julian" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="iRMX" dst="Lafontaine" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="iRMX" dst="Gordon" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="iRMX" dst="Drouin" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="iRMX" dst="Robert" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="iRMX" dst="Jocelyne" symmetrical="NO"><link_ctn id="172"/><link_ctn id="173"/></route>
+ <route src="iRMX" dst="Stephen" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="iRMX" dst="Provost" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="iRMX" dst="Juneau" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="iRMX" dst="Casavant" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="iRMX" dst="St_Antoine" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="iRMX" dst="Louis" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="iRMX" dst="Julien" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="iRMX" dst="St_Paul" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="iRMX" dst="Mathematica" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="iRMX" dst="LaTeX" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="iRMX" dst="Sirois" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="iRMX" dst="Monique" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="iRMX" dst="Audy" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="iRMX" dst="Bourassa" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="iRMX" dst="OHara" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="iRMX" dst="Boston" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="iRMX" dst="Papineau" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="iRMX" dst="Fraser" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="iRMX" dst="Browne" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="iRMX" dst="SunOS" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="iRMX" dst="Varennes" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="iRMX" dst="Jacques" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="iRMX" dst="Thierry" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="iRMX" dst="Lachapelle" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="iRMX" dst="kV" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="iRMX" dst="Yolande" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="iRMX" dst="Pronovost" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="iRMX" dst="SPICE" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="iRMX" dst="Europe" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="iRMX" dst="Roy" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="iRMX" dst="Amadeus" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="iRMX" dst="Intel" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="iRMX" dst="Cambridge" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="iRMX" dst="Tremblay" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="iRMX" dst="UNIX" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="iRMX" dst="Domey" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="iRMX" dst="St_Bruno" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="iRMX" dst="Jean_Claude" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="iRMX" dst="Doyon" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="iRMX" dst="Fafard" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="iRMX" dst="Croteau" symmetrical="NO"><link_ctn id="172"/><link_ctn id="175"/></route>
+ <route src="iRMX" dst="Dodge" symmetrical="NO"><link_ctn id="172"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="McGee" dst="Jacquelin" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="McGee" dst="Boivin" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="McGee" dst="Jean_Yves" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="McGee" dst="TeX" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="McGee" dst="Geoff" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="McGee" dst="Disney" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="McGee" dst="iRMX" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="McGee" dst="Gatien" symmetrical="NO"><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="McGee" dst="Laroche" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="McGee" dst="Tanguay" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="McGee" dst="Morin" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="McGee" dst="Ethernet" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="McGee" dst="Bellemarre" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="McGee" dst="Kuenning" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="McGee" dst="Gaston" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="McGee" dst="Harry" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="McGee" dst="Bousquet" symmetrical="NO"><link_ctn id="41"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="McGee" dst="Paul" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="McGee" dst="St_Jean" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="McGee" dst="Jill" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="McGee" dst="Marcel" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="McGee" dst="Wright" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="McGee" dst="Jackson" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="McGee" dst="Fernand" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="McGee" dst="Soucy" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="McGee" dst="Ste_Julie" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="McGee" dst="Victoria" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="McGee" dst="Lessard" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="McGee" dst="Florient" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="McGee" dst="Marcoux" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="McGee" dst="Gavrel" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="McGee" dst="Bescherelle" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="McGee" dst="Pierre" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="McGee" dst="Jamie" symmetrical="NO"><link_ctn id="120"/></route>
+ <route src="McGee" dst="Rubin" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="McGee" dst="Olivier" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="McGee" dst="Boucherville" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="McGee" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="McGee" dst="Kansas" symmetrical="NO"><link_ctn id="122"/></route>
+ <route src="McGee" dst="King" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="McGee" dst="Lapointe" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="McGee" dst="Julian" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="McGee" dst="Lafontaine" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="McGee" dst="Gordon" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="McGee" dst="Drouin" symmetrical="NO"><link_ctn id="123"/></route>
+ <route src="McGee" dst="Robert" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="McGee" dst="Jocelyne" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="McGee" dst="Stephen" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="McGee" dst="Provost" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="McGee" dst="Juneau" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="McGee" dst="Casavant" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="McGee" dst="St_Antoine" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="McGee" dst="Louis" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="McGee" dst="Julien" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="McGee" dst="St_Paul" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="McGee" dst="Mathematica" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="McGee" dst="LaTeX" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="McGee" dst="Sirois" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="McGee" dst="Monique" symmetrical="NO"><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="McGee" dst="Audy" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="McGee" dst="Bourassa" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="McGee" dst="OHara" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="McGee" dst="Boston" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="McGee" dst="Papineau" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="McGee" dst="Fraser" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="McGee" dst="Browne" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="McGee" dst="SunOS" symmetrical="NO"><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="McGee" dst="Varennes" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="McGee" dst="Jacques" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="McGee" dst="Thierry" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="McGee" dst="Lachapelle" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="McGee" dst="kV" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="McGee" dst="Yolande" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="McGee" dst="Pronovost" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="McGee" dst="SPICE" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="McGee" dst="Europe" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="McGee" dst="Roy" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="McGee" dst="Amadeus" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="McGee" dst="Intel" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="McGee" dst="Cambridge" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="McGee" dst="Tremblay" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="McGee" dst="UNIX" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="McGee" dst="Domey" symmetrical="NO"><link_ctn id="41"/><link_ctn id="40"/></route>
+ <route src="McGee" dst="St_Bruno" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="McGee" dst="Jean_Claude" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="McGee" dst="Doyon" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="McGee" dst="Fafard" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="McGee" dst="Croteau" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="McGee" dst="Dodge" symmetrical="NO"><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Gatien" dst="Jacquelin" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Gatien" dst="Boivin" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="Gatien" dst="Jean_Yves" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Gatien" dst="TeX" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Gatien" dst="Geoff" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Gatien" dst="Disney" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Gatien" dst="iRMX" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Gatien" dst="McGee" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="41"/></route>
+ <route src="Gatien" dst="Laroche" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Gatien" dst="Tanguay" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Gatien" dst="Morin" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Gatien" dst="Ethernet" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Gatien" dst="Bellemarre" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Gatien" dst="Kuenning" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Gatien" dst="Gaston" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Gatien" dst="Harry" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Gatien" dst="Bousquet" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Gatien" dst="Paul" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Gatien" dst="St_Jean" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Gatien" dst="Jill" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Gatien" dst="Marcel" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Gatien" dst="Wright" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Gatien" dst="Jackson" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Gatien" dst="Fernand" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Gatien" dst="Soucy" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Gatien" dst="Ste_Julie" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Gatien" dst="Victoria" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Gatien" dst="Lessard" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Gatien" dst="Florient" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Gatien" dst="Marcoux" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Gatien" dst="Gavrel" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Gatien" dst="Bescherelle" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Gatien" dst="Pierre" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Gatien" dst="Jamie" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Gatien" dst="Rubin" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Gatien" dst="Olivier" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Gatien" dst="Boucherville" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Gatien" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Gatien" dst="Kansas" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Gatien" dst="King" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Gatien" dst="Lapointe" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Gatien" dst="Julian" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Gatien" dst="Lafontaine" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Gatien" dst="Gordon" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Gatien" dst="Drouin" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Gatien" dst="Robert" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Gatien" dst="Jocelyne" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Gatien" dst="Stephen" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Gatien" dst="Provost" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Gatien" dst="Juneau" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Gatien" dst="Casavant" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Gatien" dst="St_Antoine" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Gatien" dst="Louis" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Gatien" dst="Julien" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Gatien" dst="St_Paul" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Gatien" dst="Mathematica" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Gatien" dst="LaTeX" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Gatien" dst="Sirois" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Gatien" dst="Monique" symmetrical="NO"><link_ctn id="115"/><link_ctn id="113"/></route>
+ <route src="Gatien" dst="Audy" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Gatien" dst="Bourassa" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Gatien" dst="OHara" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Gatien" dst="Boston" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Gatien" dst="Papineau" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Gatien" dst="Fraser" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Gatien" dst="Browne" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Gatien" dst="SunOS" symmetrical="NO"><link_ctn id="115"/><link_ctn id="114"/></route>
+ <route src="Gatien" dst="Varennes" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Gatien" dst="Jacques" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Gatien" dst="Thierry" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Gatien" dst="Lachapelle" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Gatien" dst="kV" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Gatien" dst="Yolande" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Gatien" dst="Pronovost" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Gatien" dst="SPICE" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Gatien" dst="Europe" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Gatien" dst="Roy" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Gatien" dst="Amadeus" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Gatien" dst="Intel" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Gatien" dst="Cambridge" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Gatien" dst="Tremblay" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Gatien" dst="UNIX" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Gatien" dst="Domey" symmetrical="NO"><link_ctn id="115"/></route>
+ <route src="Gatien" dst="St_Bruno" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Gatien" dst="Jean_Claude" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Gatien" dst="Doyon" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Gatien" dst="Fafard" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Gatien" dst="Croteau" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Gatien" dst="Dodge" symmetrical="NO"><link_ctn id="115"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Laroche" dst="Jacquelin" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Laroche" dst="Boivin" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Laroche" dst="Jean_Yves" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Laroche" dst="TeX" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Laroche" dst="Geoff" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Laroche" dst="Disney" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Laroche" dst="iRMX" symmetrical="NO"><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Laroche" dst="McGee" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Laroche" dst="Gatien" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Laroche" dst="Tanguay" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Laroche" dst="Morin" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Laroche" dst="Ethernet" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Laroche" dst="Bellemarre" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Laroche" dst="Kuenning" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Laroche" dst="Gaston" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Laroche" dst="Harry" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Laroche" dst="Bousquet" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Laroche" dst="Paul" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Laroche" dst="St_Jean" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Laroche" dst="Jill" symmetrical="NO"><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Laroche" dst="Marcel" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Laroche" dst="Wright" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Laroche" dst="Jackson" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Laroche" dst="Fernand" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Laroche" dst="Soucy" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Laroche" dst="Ste_Julie" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Laroche" dst="Victoria" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Laroche" dst="Lessard" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Laroche" dst="Florient" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Laroche" dst="Marcoux" symmetrical="NO"><link_ctn id="186"/></route>
+ <route src="Laroche" dst="Gavrel" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Laroche" dst="Bescherelle" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Laroche" dst="Pierre" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Laroche" dst="Jamie" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Laroche" dst="Rubin" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Laroche" dst="Olivier" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Laroche" dst="Boucherville" symmetrical="NO"><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Laroche" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="184"/></route>
+ <route src="Laroche" dst="Kansas" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Laroche" dst="King" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Laroche" dst="Lapointe" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Laroche" dst="Julian" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Laroche" dst="Lafontaine" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Laroche" dst="Gordon" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Laroche" dst="Drouin" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Laroche" dst="Robert" symmetrical="NO"><link_ctn id="187"/></route>
+ <route src="Laroche" dst="Jocelyne" symmetrical="NO"><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Laroche" dst="Stephen" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Laroche" dst="Provost" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Laroche" dst="Juneau" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Laroche" dst="Casavant" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Laroche" dst="St_Antoine" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Laroche" dst="Louis" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Laroche" dst="Julien" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Laroche" dst="St_Paul" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Laroche" dst="Mathematica" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Laroche" dst="LaTeX" symmetrical="NO"><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Laroche" dst="Sirois" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Laroche" dst="Monique" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Laroche" dst="Audy" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Laroche" dst="Bourassa" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Laroche" dst="OHara" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Laroche" dst="Boston" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Laroche" dst="Papineau" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Laroche" dst="Fraser" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Laroche" dst="Browne" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Laroche" dst="SunOS" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Laroche" dst="Varennes" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Laroche" dst="Jacques" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Laroche" dst="Thierry" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Laroche" dst="Lachapelle" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Laroche" dst="kV" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Laroche" dst="Yolande" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Laroche" dst="Pronovost" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Laroche" dst="SPICE" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Laroche" dst="Europe" symmetrical="NO"><link_ctn id="185"/></route>
+ <route src="Laroche" dst="Roy" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Laroche" dst="Amadeus" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Laroche" dst="Intel" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Laroche" dst="Cambridge" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Laroche" dst="Tremblay" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Laroche" dst="UNIX" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Laroche" dst="Domey" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Laroche" dst="St_Bruno" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Laroche" dst="Jean_Claude" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Laroche" dst="Doyon" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Laroche" dst="Fafard" symmetrical="NO"><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Laroche" dst="Croteau" symmetrical="NO"><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Laroche" dst="Dodge" symmetrical="NO"><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Tanguay" dst="Jacquelin" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Tanguay" dst="Boivin" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Tanguay" dst="Jean_Yves" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Tanguay" dst="TeX" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Tanguay" dst="Geoff" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Tanguay" dst="Disney" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Tanguay" dst="iRMX" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Tanguay" dst="McGee" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Tanguay" dst="Gatien" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Tanguay" dst="Laroche" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Tanguay" dst="Morin" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Tanguay" dst="Ethernet" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Tanguay" dst="Bellemarre" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Tanguay" dst="Kuenning" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Tanguay" dst="Gaston" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Tanguay" dst="Harry" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Tanguay" dst="Bousquet" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Tanguay" dst="Paul" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Tanguay" dst="St_Jean" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Tanguay" dst="Jill" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Tanguay" dst="Marcel" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Tanguay" dst="Wright" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Tanguay" dst="Jackson" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Tanguay" dst="Fernand" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Tanguay" dst="Soucy" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Tanguay" dst="Ste_Julie" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Tanguay" dst="Victoria" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Tanguay" dst="Lessard" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Tanguay" dst="Florient" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Tanguay" dst="Marcoux" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Tanguay" dst="Gavrel" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Tanguay" dst="Bescherelle" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Tanguay" dst="Pierre" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Tanguay" dst="Jamie" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Tanguay" dst="Rubin" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Tanguay" dst="Olivier" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Tanguay" dst="Boucherville" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Tanguay" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Tanguay" dst="Kansas" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Tanguay" dst="King" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Tanguay" dst="Lapointe" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Tanguay" dst="Julian" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Tanguay" dst="Lafontaine" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Tanguay" dst="Gordon" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Tanguay" dst="Drouin" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Tanguay" dst="Robert" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Tanguay" dst="Jocelyne" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Tanguay" dst="Stephen" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Tanguay" dst="Provost" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Tanguay" dst="Juneau" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Tanguay" dst="Casavant" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Tanguay" dst="St_Antoine" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Tanguay" dst="Louis" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Tanguay" dst="Julien" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Tanguay" dst="St_Paul" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Tanguay" dst="Mathematica" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Tanguay" dst="LaTeX" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Tanguay" dst="Sirois" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Tanguay" dst="Monique" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Tanguay" dst="Audy" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Tanguay" dst="Bourassa" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Tanguay" dst="OHara" symmetrical="NO"><link_ctn id="162"/><link_ctn id="163"/></route>
+ <route src="Tanguay" dst="Boston" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Tanguay" dst="Papineau" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Tanguay" dst="Fraser" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Tanguay" dst="Browne" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Tanguay" dst="SunOS" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Tanguay" dst="Varennes" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Tanguay" dst="Jacques" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Tanguay" dst="Thierry" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Tanguay" dst="Lachapelle" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Tanguay" dst="kV" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Tanguay" dst="Yolande" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Tanguay" dst="Pronovost" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Tanguay" dst="SPICE" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Tanguay" dst="Europe" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Tanguay" dst="Roy" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Tanguay" dst="Amadeus" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Tanguay" dst="Intel" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Tanguay" dst="Cambridge" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Tanguay" dst="Tremblay" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Tanguay" dst="UNIX" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Tanguay" dst="Domey" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Tanguay" dst="St_Bruno" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Tanguay" dst="Jean_Claude" symmetrical="NO"><link_ctn id="162"/><link_ctn id="160"/></route>
+ <route src="Tanguay" dst="Doyon" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Tanguay" dst="Fafard" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Tanguay" dst="Croteau" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Tanguay" dst="Dodge" symmetrical="NO"><link_ctn id="162"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Morin" dst="Jacquelin" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Morin" dst="Boivin" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Morin" dst="Jean_Yves" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Morin" dst="TeX" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Morin" dst="Geoff" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Morin" dst="Disney" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Morin" dst="iRMX" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Morin" dst="McGee" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Morin" dst="Gatien" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Morin" dst="Laroche" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Morin" dst="Tanguay" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Morin" dst="Ethernet" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Morin" dst="Bellemarre" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Morin" dst="Kuenning" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Morin" dst="Gaston" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Morin" dst="Harry" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Morin" dst="Bousquet" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Morin" dst="Paul" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Morin" dst="St_Jean" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Morin" dst="Jill" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Morin" dst="Marcel" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Morin" dst="Wright" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Morin" dst="Jackson" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Morin" dst="Fernand" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Morin" dst="Soucy" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Morin" dst="Ste_Julie" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Morin" dst="Victoria" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Morin" dst="Lessard" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Morin" dst="Florient" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Morin" dst="Marcoux" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Morin" dst="Gavrel" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Morin" dst="Bescherelle" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Morin" dst="Pierre" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Morin" dst="Jamie" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Morin" dst="Rubin" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Morin" dst="Olivier" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Morin" dst="Boucherville" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Morin" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Morin" dst="Kansas" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Morin" dst="King" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Morin" dst="Lapointe" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Morin" dst="Julian" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Morin" dst="Lafontaine" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Morin" dst="Gordon" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Morin" dst="Drouin" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Morin" dst="Robert" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Morin" dst="Jocelyne" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Morin" dst="Stephen" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Morin" dst="Provost" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Morin" dst="Juneau" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Morin" dst="Casavant" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Morin" dst="St_Antoine" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Morin" dst="Louis" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Morin" dst="Julien" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Morin" dst="St_Paul" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Morin" dst="Mathematica" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Morin" dst="LaTeX" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Morin" dst="Sirois" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Morin" dst="Monique" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Morin" dst="Audy" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Morin" dst="Bourassa" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Morin" dst="OHara" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Morin" dst="Boston" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Morin" dst="Papineau" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Morin" dst="Fraser" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Morin" dst="Browne" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Morin" dst="SunOS" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Morin" dst="Varennes" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Morin" dst="Jacques" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Morin" dst="Thierry" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Morin" dst="Lachapelle" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Morin" dst="kV" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Morin" dst="Yolande" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Morin" dst="Pronovost" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Morin" dst="SPICE" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Morin" dst="Europe" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Morin" dst="Roy" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Morin" dst="Amadeus" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Morin" dst="Intel" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Morin" dst="Cambridge" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Morin" dst="Tremblay" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Morin" dst="UNIX" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Morin" dst="Domey" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Morin" dst="St_Bruno" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Morin" dst="Jean_Claude" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Morin" dst="Doyon" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Morin" dst="Fafard" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Morin" dst="Croteau" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Morin" dst="Dodge" symmetrical="NO"><link_ctn id="106"/><link_ctn id="31"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Ethernet" dst="Jacquelin" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Ethernet" dst="Boivin" symmetrical="NO"><link_ctn id="118"/></route>
+ <route src="Ethernet" dst="Jean_Yves" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Ethernet" dst="TeX" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Ethernet" dst="Geoff" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Ethernet" dst="Disney" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Ethernet" dst="iRMX" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Ethernet" dst="McGee" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Ethernet" dst="Gatien" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Ethernet" dst="Laroche" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Ethernet" dst="Tanguay" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Ethernet" dst="Morin" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Ethernet" dst="Bellemarre" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Ethernet" dst="Kuenning" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Ethernet" dst="Gaston" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Ethernet" dst="Harry" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Ethernet" dst="Bousquet" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Ethernet" dst="Paul" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Ethernet" dst="St_Jean" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Ethernet" dst="Jill" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Ethernet" dst="Marcel" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Ethernet" dst="Wright" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Ethernet" dst="Jackson" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Ethernet" dst="Fernand" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Ethernet" dst="Soucy" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Ethernet" dst="Ste_Julie" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Ethernet" dst="Victoria" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Ethernet" dst="Lessard" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Ethernet" dst="Florient" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Ethernet" dst="Marcoux" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Ethernet" dst="Gavrel" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Ethernet" dst="Bescherelle" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Ethernet" dst="Pierre" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Ethernet" dst="Jamie" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Ethernet" dst="Rubin" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Ethernet" dst="Olivier" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Ethernet" dst="Boucherville" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Ethernet" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Ethernet" dst="Kansas" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Ethernet" dst="King" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Ethernet" dst="Lapointe" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Ethernet" dst="Julian" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Ethernet" dst="Lafontaine" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Ethernet" dst="Gordon" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Ethernet" dst="Drouin" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Ethernet" dst="Robert" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Ethernet" dst="Jocelyne" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Ethernet" dst="Stephen" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Ethernet" dst="Provost" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Ethernet" dst="Juneau" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Ethernet" dst="Casavant" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Ethernet" dst="St_Antoine" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Ethernet" dst="Louis" symmetrical="NO"><link_ctn id="118"/><link_ctn id="117"/></route>
+ <route src="Ethernet" dst="Julien" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Ethernet" dst="St_Paul" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Ethernet" dst="Mathematica" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Ethernet" dst="LaTeX" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Ethernet" dst="Sirois" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Ethernet" dst="Monique" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Ethernet" dst="Audy" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Ethernet" dst="Bourassa" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Ethernet" dst="OHara" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Ethernet" dst="Boston" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Ethernet" dst="Papineau" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Ethernet" dst="Fraser" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Ethernet" dst="Browne" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Ethernet" dst="SunOS" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Ethernet" dst="Varennes" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Ethernet" dst="Jacques" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Ethernet" dst="Thierry" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Ethernet" dst="Lachapelle" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Ethernet" dst="kV" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Ethernet" dst="Yolande" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Ethernet" dst="Pronovost" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Ethernet" dst="SPICE" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Ethernet" dst="Europe" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Ethernet" dst="Roy" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Ethernet" dst="Amadeus" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Ethernet" dst="Intel" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Ethernet" dst="Cambridge" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Ethernet" dst="Tremblay" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Ethernet" dst="UNIX" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Ethernet" dst="Domey" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Ethernet" dst="St_Bruno" symmetrical="NO"><link_ctn id="118"/><link_ctn id="119"/></route>
+ <route src="Ethernet" dst="Jean_Claude" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Ethernet" dst="Doyon" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Ethernet" dst="Fafard" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Ethernet" dst="Croteau" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Ethernet" dst="Dodge" symmetrical="NO"><link_ctn id="118"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Bellemarre" dst="Jacquelin" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Bellemarre" dst="Boivin" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Bellemarre" dst="Jean_Yves" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Bellemarre" dst="TeX" symmetrical="NO"><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Bellemarre" dst="Geoff" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Bellemarre" dst="Disney" symmetrical="NO"><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Bellemarre" dst="iRMX" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Bellemarre" dst="McGee" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Bellemarre" dst="Gatien" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Bellemarre" dst="Laroche" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Bellemarre" dst="Tanguay" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Bellemarre" dst="Morin" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Bellemarre" dst="Ethernet" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Bellemarre" dst="Kuenning" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Bellemarre" dst="Gaston" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Bellemarre" dst="Harry" symmetrical="NO"><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Bellemarre" dst="Bousquet" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Bellemarre" dst="Paul" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Bellemarre" dst="St_Jean" symmetrical="NO"><link_ctn id="97"/></route>
+ <route src="Bellemarre" dst="Jill" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Bellemarre" dst="Marcel" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Bellemarre" dst="Wright" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Bellemarre" dst="Jackson" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Bellemarre" dst="Fernand" symmetrical="NO"><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Bellemarre" dst="Soucy" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Bellemarre" dst="Ste_Julie" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Bellemarre" dst="Victoria" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Bellemarre" dst="Lessard" symmetrical="NO"><link_ctn id="99"/></route>
+ <route src="Bellemarre" dst="Florient" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Bellemarre" dst="Marcoux" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Bellemarre" dst="Gavrel" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Bellemarre" dst="Bescherelle" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Bellemarre" dst="Pierre" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Bellemarre" dst="Jamie" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Bellemarre" dst="Rubin" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Bellemarre" dst="Olivier" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Bellemarre" dst="Boucherville" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Bellemarre" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Bellemarre" dst="Kansas" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Bellemarre" dst="King" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Bellemarre" dst="Lapointe" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Bellemarre" dst="Julian" symmetrical="NO"><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Bellemarre" dst="Lafontaine" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Bellemarre" dst="Gordon" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Bellemarre" dst="Drouin" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Bellemarre" dst="Robert" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Bellemarre" dst="Jocelyne" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Bellemarre" dst="Stephen" symmetrical="NO"><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Bellemarre" dst="Provost" symmetrical="NO"><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Bellemarre" dst="Juneau" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Bellemarre" dst="Casavant" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Bellemarre" dst="St_Antoine" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Bellemarre" dst="Louis" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Bellemarre" dst="Julien" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Bellemarre" dst="St_Paul" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Bellemarre" dst="Mathematica" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Bellemarre" dst="LaTeX" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Bellemarre" dst="Sirois" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Bellemarre" dst="Monique" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Bellemarre" dst="Audy" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Bellemarre" dst="Bourassa" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Bellemarre" dst="OHara" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Bellemarre" dst="Boston" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Bellemarre" dst="Papineau" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Bellemarre" dst="Fraser" symmetrical="NO"><link_ctn id="96"/></route>
+ <route src="Bellemarre" dst="Browne" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Bellemarre" dst="SunOS" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Bellemarre" dst="Varennes" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Bellemarre" dst="Jacques" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Bellemarre" dst="Thierry" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Bellemarre" dst="Lachapelle" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Bellemarre" dst="kV" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Bellemarre" dst="Yolande" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Bellemarre" dst="Pronovost" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Bellemarre" dst="SPICE" symmetrical="NO"><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Bellemarre" dst="Europe" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Bellemarre" dst="Roy" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Bellemarre" dst="Amadeus" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Bellemarre" dst="Intel" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Bellemarre" dst="Cambridge" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Bellemarre" dst="Tremblay" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Bellemarre" dst="UNIX" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Bellemarre" dst="Domey" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Bellemarre" dst="St_Bruno" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Bellemarre" dst="Jean_Claude" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Bellemarre" dst="Doyon" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Bellemarre" dst="Fafard" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Bellemarre" dst="Croteau" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Bellemarre" dst="Dodge" symmetrical="NO"><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Kuenning" dst="Jacquelin" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Kuenning" dst="Boivin" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Kuenning" dst="Jean_Yves" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Kuenning" dst="TeX" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Kuenning" dst="Geoff" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="Kuenning" dst="Disney" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Kuenning" dst="iRMX" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Kuenning" dst="McGee" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Kuenning" dst="Gatien" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Kuenning" dst="Laroche" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Kuenning" dst="Tanguay" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Kuenning" dst="Morin" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Kuenning" dst="Ethernet" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Kuenning" dst="Bellemarre" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Kuenning" dst="Gaston" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Kuenning" dst="Harry" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Kuenning" dst="Bousquet" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Kuenning" dst="Paul" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Kuenning" dst="St_Jean" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Kuenning" dst="Jill" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Kuenning" dst="Marcel" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Kuenning" dst="Wright" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Kuenning" dst="Jackson" symmetrical="NO"><link_ctn id="135"/></route>
+ <route src="Kuenning" dst="Fernand" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Kuenning" dst="Soucy" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Kuenning" dst="Ste_Julie" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Kuenning" dst="Victoria" symmetrical="NO"><link_ctn id="135"/><link_ctn id="133"/></route>
+ <route src="Kuenning" dst="Lessard" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Kuenning" dst="Florient" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Kuenning" dst="Marcoux" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Kuenning" dst="Gavrel" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Kuenning" dst="Bescherelle" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Kuenning" dst="Pierre" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Kuenning" dst="Jamie" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Kuenning" dst="Rubin" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Kuenning" dst="Olivier" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Kuenning" dst="Boucherville" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Kuenning" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Kuenning" dst="Kansas" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Kuenning" dst="King" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Kuenning" dst="Lapointe" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Kuenning" dst="Julian" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Kuenning" dst="Lafontaine" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Kuenning" dst="Gordon" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Kuenning" dst="Drouin" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Kuenning" dst="Robert" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Kuenning" dst="Jocelyne" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Kuenning" dst="Stephen" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Kuenning" dst="Provost" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Kuenning" dst="Juneau" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Kuenning" dst="Casavant" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Kuenning" dst="St_Antoine" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="63"/></route>
+ <route src="Kuenning" dst="Louis" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Kuenning" dst="Julien" symmetrical="NO"><link_ctn id="135"/><link_ctn id="134"/></route>
+ <route src="Kuenning" dst="St_Paul" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Kuenning" dst="Mathematica" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Kuenning" dst="LaTeX" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Kuenning" dst="Sirois" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Kuenning" dst="Monique" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Kuenning" dst="Audy" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Kuenning" dst="Bourassa" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Kuenning" dst="OHara" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Kuenning" dst="Boston" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Kuenning" dst="Papineau" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Kuenning" dst="Fraser" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Kuenning" dst="Browne" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Kuenning" dst="SunOS" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Kuenning" dst="Varennes" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Kuenning" dst="Jacques" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Kuenning" dst="Thierry" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Kuenning" dst="Lachapelle" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Kuenning" dst="kV" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Kuenning" dst="Yolande" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Kuenning" dst="Pronovost" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Kuenning" dst="SPICE" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Kuenning" dst="Europe" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Kuenning" dst="Roy" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Kuenning" dst="Amadeus" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Kuenning" dst="Intel" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Kuenning" dst="Cambridge" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Kuenning" dst="Tremblay" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Kuenning" dst="UNIX" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Kuenning" dst="Domey" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Kuenning" dst="St_Bruno" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Kuenning" dst="Jean_Claude" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Kuenning" dst="Doyon" symmetrical="NO"><link_ctn id="135"/><link_ctn id="132"/></route>
+ <route src="Kuenning" dst="Fafard" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Kuenning" dst="Croteau" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Kuenning" dst="Dodge" symmetrical="NO"><link_ctn id="135"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Gaston" dst="Jacquelin" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Gaston" dst="Boivin" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Gaston" dst="Jean_Yves" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Gaston" dst="TeX" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Gaston" dst="Geoff" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Gaston" dst="Disney" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Gaston" dst="iRMX" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Gaston" dst="McGee" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Gaston" dst="Gatien" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Gaston" dst="Laroche" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Gaston" dst="Tanguay" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Gaston" dst="Morin" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Gaston" dst="Ethernet" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Gaston" dst="Bellemarre" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Gaston" dst="Kuenning" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Gaston" dst="Harry" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Gaston" dst="Bousquet" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Gaston" dst="Paul" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Gaston" dst="St_Jean" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Gaston" dst="Jill" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Gaston" dst="Marcel" symmetrical="NO"><link_ctn id="153"/><link_ctn id="155"/></route>
+ <route src="Gaston" dst="Wright" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Gaston" dst="Jackson" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Gaston" dst="Fernand" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Gaston" dst="Soucy" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Gaston" dst="Ste_Julie" symmetrical="NO"><link_ctn id="153"/></route>
+ <route src="Gaston" dst="Victoria" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Gaston" dst="Lessard" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Gaston" dst="Florient" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Gaston" dst="Marcoux" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Gaston" dst="Gavrel" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Gaston" dst="Bescherelle" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Gaston" dst="Pierre" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Gaston" dst="Jamie" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Gaston" dst="Rubin" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Gaston" dst="Olivier" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Gaston" dst="Boucherville" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Gaston" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Gaston" dst="Kansas" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Gaston" dst="King" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Gaston" dst="Lapointe" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Gaston" dst="Julian" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Gaston" dst="Lafontaine" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Gaston" dst="Gordon" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Gaston" dst="Drouin" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Gaston" dst="Robert" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Gaston" dst="Jocelyne" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Gaston" dst="Stephen" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Gaston" dst="Provost" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Gaston" dst="Juneau" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Gaston" dst="Casavant" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Gaston" dst="St_Antoine" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Gaston" dst="Louis" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Gaston" dst="Julien" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Gaston" dst="St_Paul" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Gaston" dst="Mathematica" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Gaston" dst="LaTeX" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Gaston" dst="Sirois" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Gaston" dst="Monique" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Gaston" dst="Audy" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Gaston" dst="Bourassa" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Gaston" dst="OHara" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Gaston" dst="Boston" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Gaston" dst="Papineau" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Gaston" dst="Fraser" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Gaston" dst="Browne" symmetrical="NO"><link_ctn id="153"/><link_ctn id="152"/></route>
+ <route src="Gaston" dst="SunOS" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Gaston" dst="Varennes" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Gaston" dst="Jacques" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Gaston" dst="Thierry" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Gaston" dst="Lachapelle" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Gaston" dst="kV" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Gaston" dst="Yolande" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Gaston" dst="Pronovost" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Gaston" dst="SPICE" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Gaston" dst="Europe" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Gaston" dst="Roy" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Gaston" dst="Amadeus" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Gaston" dst="Intel" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Gaston" dst="Cambridge" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Gaston" dst="Tremblay" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Gaston" dst="UNIX" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Gaston" dst="Domey" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Gaston" dst="St_Bruno" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Gaston" dst="Jean_Claude" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Gaston" dst="Doyon" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Gaston" dst="Fafard" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Gaston" dst="Croteau" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Gaston" dst="Dodge" symmetrical="NO"><link_ctn id="153"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Harry" dst="Jacquelin" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Harry" dst="Boivin" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Harry" dst="Jean_Yves" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Harry" dst="TeX" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Harry" dst="Geoff" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Harry" dst="Disney" symmetrical="NO"><link_ctn id="108"/><link_ctn id="111"/></route>
+ <route src="Harry" dst="iRMX" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Harry" dst="McGee" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Harry" dst="Gatien" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Harry" dst="Laroche" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Harry" dst="Tanguay" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Harry" dst="Morin" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Harry" dst="Ethernet" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Harry" dst="Bellemarre" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/></route>
+ <route src="Harry" dst="Kuenning" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Harry" dst="Gaston" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Harry" dst="Bousquet" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Harry" dst="Paul" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Harry" dst="St_Jean" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Harry" dst="Jill" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Harry" dst="Marcel" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Harry" dst="Wright" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Harry" dst="Jackson" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Harry" dst="Fernand" symmetrical="NO"><link_ctn id="108"/><link_ctn id="109"/></route>
+ <route src="Harry" dst="Soucy" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Harry" dst="Ste_Julie" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Harry" dst="Victoria" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Harry" dst="Lessard" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Harry" dst="Florient" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Harry" dst="Marcoux" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Harry" dst="Gavrel" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Harry" dst="Bescherelle" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Harry" dst="Pierre" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Harry" dst="Jamie" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Harry" dst="Rubin" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Harry" dst="Olivier" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Harry" dst="Boucherville" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Harry" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Harry" dst="Kansas" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Harry" dst="King" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Harry" dst="Lapointe" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Harry" dst="Julian" symmetrical="NO"><link_ctn id="108"/></route>
+ <route src="Harry" dst="Lafontaine" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Harry" dst="Gordon" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Harry" dst="Drouin" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Harry" dst="Robert" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Harry" dst="Jocelyne" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Harry" dst="Stephen" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Harry" dst="Provost" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Harry" dst="Juneau" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Harry" dst="Casavant" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Harry" dst="St_Antoine" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Harry" dst="Louis" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Harry" dst="Julien" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Harry" dst="St_Paul" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Harry" dst="Mathematica" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Harry" dst="LaTeX" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Harry" dst="Sirois" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Harry" dst="Monique" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Harry" dst="Audy" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Harry" dst="Bourassa" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Harry" dst="OHara" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Harry" dst="Boston" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Harry" dst="Papineau" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Harry" dst="Fraser" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Harry" dst="Browne" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Harry" dst="SunOS" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Harry" dst="Varennes" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Harry" dst="Jacques" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Harry" dst="Thierry" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Harry" dst="Lachapelle" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Harry" dst="kV" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Harry" dst="Yolande" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Harry" dst="Pronovost" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Harry" dst="SPICE" symmetrical="NO"><link_ctn id="108"/><link_ctn id="110"/></route>
+ <route src="Harry" dst="Europe" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Harry" dst="Roy" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Harry" dst="Amadeus" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Harry" dst="Intel" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Harry" dst="Cambridge" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Harry" dst="Tremblay" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Harry" dst="UNIX" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Harry" dst="Domey" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Harry" dst="St_Bruno" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Harry" dst="Jean_Claude" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Harry" dst="Doyon" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Harry" dst="Fafard" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Harry" dst="Croteau" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Harry" dst="Dodge" symmetrical="NO"><link_ctn id="108"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Bousquet" dst="Jacquelin" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Bousquet" dst="Boivin" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="Bousquet" dst="Jean_Yves" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Bousquet" dst="TeX" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Bousquet" dst="Geoff" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Bousquet" dst="Disney" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Bousquet" dst="iRMX" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Bousquet" dst="McGee" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="41"/></route>
+ <route src="Bousquet" dst="Gatien" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Bousquet" dst="Laroche" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Bousquet" dst="Tanguay" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Bousquet" dst="Morin" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Bousquet" dst="Ethernet" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Bousquet" dst="Bellemarre" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Bousquet" dst="Kuenning" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Bousquet" dst="Gaston" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Bousquet" dst="Harry" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Bousquet" dst="Paul" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Bousquet" dst="St_Jean" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Bousquet" dst="Jill" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Bousquet" dst="Marcel" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Bousquet" dst="Wright" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Bousquet" dst="Jackson" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Bousquet" dst="Fernand" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Bousquet" dst="Soucy" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Bousquet" dst="Ste_Julie" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Bousquet" dst="Victoria" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Bousquet" dst="Lessard" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Bousquet" dst="Florient" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Bousquet" dst="Marcoux" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Bousquet" dst="Gavrel" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Bousquet" dst="Bescherelle" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Bousquet" dst="Pierre" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Bousquet" dst="Jamie" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Bousquet" dst="Rubin" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Bousquet" dst="Olivier" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Bousquet" dst="Boucherville" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Bousquet" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Bousquet" dst="Kansas" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Bousquet" dst="King" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Bousquet" dst="Lapointe" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Bousquet" dst="Julian" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Bousquet" dst="Lafontaine" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Bousquet" dst="Gordon" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Bousquet" dst="Drouin" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Bousquet" dst="Robert" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Bousquet" dst="Jocelyne" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Bousquet" dst="Stephen" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Bousquet" dst="Provost" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Bousquet" dst="Juneau" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Bousquet" dst="Casavant" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Bousquet" dst="St_Antoine" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Bousquet" dst="Louis" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Bousquet" dst="Julien" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Bousquet" dst="St_Paul" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Bousquet" dst="Mathematica" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Bousquet" dst="LaTeX" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Bousquet" dst="Sirois" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Bousquet" dst="Monique" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Bousquet" dst="Audy" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Bousquet" dst="Bourassa" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Bousquet" dst="OHara" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Bousquet" dst="Boston" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Bousquet" dst="Papineau" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Bousquet" dst="Fraser" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Bousquet" dst="Browne" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Bousquet" dst="SunOS" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Bousquet" dst="Varennes" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Bousquet" dst="Jacques" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Bousquet" dst="Thierry" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Bousquet" dst="Lachapelle" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Bousquet" dst="kV" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Bousquet" dst="Yolande" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Bousquet" dst="Pronovost" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Bousquet" dst="SPICE" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Bousquet" dst="Europe" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Bousquet" dst="Roy" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Bousquet" dst="Amadeus" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Bousquet" dst="Intel" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Bousquet" dst="Cambridge" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Bousquet" dst="Tremblay" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Bousquet" dst="UNIX" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Bousquet" dst="Domey" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="40"/></route>
+ <route src="Bousquet" dst="St_Bruno" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Bousquet" dst="Jean_Claude" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Bousquet" dst="Doyon" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Bousquet" dst="Fafard" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Bousquet" dst="Croteau" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Bousquet" dst="Dodge" symmetrical="NO"><link_ctn id="124"/><link_ctn id="37"/><link_ctn id="36"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Paul" dst="Jacquelin" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Paul" dst="Boivin" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Paul" dst="Jean_Yves" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Paul" dst="TeX" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Paul" dst="Geoff" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Paul" dst="Disney" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Paul" dst="iRMX" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Paul" dst="McGee" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Paul" dst="Gatien" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Paul" dst="Laroche" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Paul" dst="Tanguay" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Paul" dst="Morin" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Paul" dst="Ethernet" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Paul" dst="Bellemarre" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Paul" dst="Kuenning" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Paul" dst="Gaston" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Paul" dst="Harry" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Paul" dst="Bousquet" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Paul" dst="St_Jean" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Paul" dst="Jill" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Paul" dst="Marcel" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Paul" dst="Wright" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Paul" dst="Jackson" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Paul" dst="Fernand" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Paul" dst="Soucy" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Paul" dst="Ste_Julie" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Paul" dst="Victoria" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Paul" dst="Lessard" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Paul" dst="Florient" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Paul" dst="Marcoux" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Paul" dst="Gavrel" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Paul" dst="Bescherelle" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Paul" dst="Pierre" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Paul" dst="Jamie" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Paul" dst="Rubin" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Paul" dst="Olivier" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Paul" dst="Boucherville" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Paul" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Paul" dst="Kansas" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Paul" dst="King" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Paul" dst="Lapointe" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Paul" dst="Julian" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Paul" dst="Lafontaine" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Paul" dst="Gordon" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Paul" dst="Drouin" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Paul" dst="Robert" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Paul" dst="Jocelyne" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Paul" dst="Stephen" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Paul" dst="Provost" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Paul" dst="Juneau" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Paul" dst="Casavant" symmetrical="NO"><link_ctn id="93"/><link_ctn id="92"/></route>
+ <route src="Paul" dst="St_Antoine" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Paul" dst="Louis" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Paul" dst="Julien" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Paul" dst="St_Paul" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Paul" dst="Mathematica" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Paul" dst="LaTeX" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Paul" dst="Sirois" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Paul" dst="Monique" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Paul" dst="Audy" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Paul" dst="Bourassa" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Paul" dst="OHara" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Paul" dst="Boston" symmetrical="NO"><link_ctn id="93"/><link_ctn id="95"/></route>
+ <route src="Paul" dst="Papineau" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Paul" dst="Fraser" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Paul" dst="Browne" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Paul" dst="SunOS" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Paul" dst="Varennes" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Paul" dst="Jacques" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Paul" dst="Thierry" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Paul" dst="Lachapelle" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Paul" dst="kV" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Paul" dst="Yolande" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Paul" dst="Pronovost" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Paul" dst="SPICE" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Paul" dst="Europe" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Paul" dst="Roy" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Paul" dst="Amadeus" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Paul" dst="Intel" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Paul" dst="Cambridge" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Paul" dst="Tremblay" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Paul" dst="UNIX" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Paul" dst="Domey" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Paul" dst="St_Bruno" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Paul" dst="Jean_Claude" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Paul" dst="Doyon" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Paul" dst="Fafard" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Paul" dst="Croteau" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Paul" dst="Dodge" symmetrical="NO"><link_ctn id="93"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="St_Jean" dst="Jacquelin" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="St_Jean" dst="Boivin" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="St_Jean" dst="Jean_Yves" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="St_Jean" dst="TeX" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="St_Jean" dst="Geoff" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="St_Jean" dst="Disney" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="St_Jean" dst="iRMX" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="St_Jean" dst="McGee" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="St_Jean" dst="Gatien" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="St_Jean" dst="Laroche" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="St_Jean" dst="Tanguay" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="St_Jean" dst="Morin" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="St_Jean" dst="Ethernet" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="St_Jean" dst="Bellemarre" symmetrical="NO"><link_ctn id="97"/></route>
+ <route src="St_Jean" dst="Kuenning" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="St_Jean" dst="Gaston" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="St_Jean" dst="Harry" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="St_Jean" dst="Bousquet" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="St_Jean" dst="Paul" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="St_Jean" dst="Jill" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="St_Jean" dst="Marcel" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="St_Jean" dst="Wright" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="St_Jean" dst="Jackson" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="St_Jean" dst="Fernand" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="St_Jean" dst="Soucy" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="St_Jean" dst="Ste_Julie" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="St_Jean" dst="Victoria" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="St_Jean" dst="Lessard" symmetrical="NO"><link_ctn id="97"/><link_ctn id="99"/></route>
+ <route src="St_Jean" dst="Florient" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="St_Jean" dst="Marcoux" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="St_Jean" dst="Gavrel" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="St_Jean" dst="Bescherelle" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="St_Jean" dst="Pierre" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="St_Jean" dst="Jamie" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="St_Jean" dst="Rubin" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="St_Jean" dst="Olivier" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="St_Jean" dst="Boucherville" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="St_Jean" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="St_Jean" dst="Kansas" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="St_Jean" dst="King" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="St_Jean" dst="Lapointe" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="St_Jean" dst="Julian" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="St_Jean" dst="Lafontaine" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="St_Jean" dst="Gordon" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="St_Jean" dst="Drouin" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="St_Jean" dst="Robert" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="St_Jean" dst="Jocelyne" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="St_Jean" dst="Stephen" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="St_Jean" dst="Provost" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="St_Jean" dst="Juneau" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="St_Jean" dst="Casavant" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="St_Jean" dst="St_Antoine" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="St_Jean" dst="Louis" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="St_Jean" dst="Julien" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="St_Jean" dst="St_Paul" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="St_Jean" dst="Mathematica" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="St_Jean" dst="LaTeX" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="St_Jean" dst="Sirois" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="St_Jean" dst="Monique" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="St_Jean" dst="Audy" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="St_Jean" dst="Bourassa" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="St_Jean" dst="OHara" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="St_Jean" dst="Boston" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="St_Jean" dst="Papineau" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="St_Jean" dst="Fraser" symmetrical="NO"><link_ctn id="97"/><link_ctn id="96"/></route>
+ <route src="St_Jean" dst="Browne" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="St_Jean" dst="SunOS" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="St_Jean" dst="Varennes" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="St_Jean" dst="Jacques" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="St_Jean" dst="Thierry" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="St_Jean" dst="Lachapelle" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="St_Jean" dst="kV" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="St_Jean" dst="Yolande" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="St_Jean" dst="Pronovost" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="St_Jean" dst="SPICE" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="St_Jean" dst="Europe" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="St_Jean" dst="Roy" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="St_Jean" dst="Amadeus" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="St_Jean" dst="Intel" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="St_Jean" dst="Cambridge" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="St_Jean" dst="Tremblay" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="St_Jean" dst="UNIX" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="St_Jean" dst="Domey" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="St_Jean" dst="St_Bruno" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="St_Jean" dst="Jean_Claude" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="St_Jean" dst="Doyon" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="St_Jean" dst="Fafard" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="St_Jean" dst="Croteau" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="St_Jean" dst="Dodge" symmetrical="NO"><link_ctn id="97"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Jill" dst="Jacquelin" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Jill" dst="Boivin" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Jill" dst="Jean_Yves" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Jill" dst="TeX" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Jill" dst="Geoff" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Jill" dst="Disney" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Jill" dst="iRMX" symmetrical="NO"><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Jill" dst="McGee" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Jill" dst="Gatien" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Jill" dst="Laroche" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/></route>
+ <route src="Jill" dst="Tanguay" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Jill" dst="Morin" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Jill" dst="Ethernet" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Jill" dst="Bellemarre" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Jill" dst="Kuenning" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Jill" dst="Gaston" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Jill" dst="Harry" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Jill" dst="Bousquet" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Jill" dst="Paul" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Jill" dst="St_Jean" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Jill" dst="Marcel" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Jill" dst="Wright" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Jill" dst="Jackson" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Jill" dst="Fernand" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Jill" dst="Soucy" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Jill" dst="Ste_Julie" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Jill" dst="Victoria" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Jill" dst="Lessard" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Jill" dst="Florient" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Jill" dst="Marcoux" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Jill" dst="Gavrel" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Jill" dst="Bescherelle" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Jill" dst="Pierre" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Jill" dst="Jamie" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Jill" dst="Rubin" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Jill" dst="Olivier" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Jill" dst="Boucherville" symmetrical="NO"><link_ctn id="90"/><link_ctn id="89"/></route>
+ <route src="Jill" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Jill" dst="Kansas" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Jill" dst="King" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Jill" dst="Lapointe" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Jill" dst="Julian" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Jill" dst="Lafontaine" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Jill" dst="Gordon" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Jill" dst="Drouin" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Jill" dst="Robert" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Jill" dst="Jocelyne" symmetrical="NO"><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Jill" dst="Stephen" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Jill" dst="Provost" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Jill" dst="Juneau" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Jill" dst="Casavant" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Jill" dst="St_Antoine" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Jill" dst="Louis" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Jill" dst="Julien" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Jill" dst="St_Paul" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Jill" dst="Mathematica" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Jill" dst="LaTeX" symmetrical="NO"><link_ctn id="177"/></route>
+ <route src="Jill" dst="Sirois" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Jill" dst="Monique" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Jill" dst="Audy" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Jill" dst="Bourassa" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Jill" dst="OHara" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Jill" dst="Boston" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Jill" dst="Papineau" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Jill" dst="Fraser" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Jill" dst="Browne" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Jill" dst="SunOS" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Jill" dst="Varennes" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Jill" dst="Jacques" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Jill" dst="Thierry" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Jill" dst="Lachapelle" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Jill" dst="kV" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Jill" dst="Yolande" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Jill" dst="Pronovost" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Jill" dst="SPICE" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Jill" dst="Europe" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Jill" dst="Roy" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Jill" dst="Amadeus" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Jill" dst="Intel" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Jill" dst="Cambridge" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Jill" dst="Tremblay" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Jill" dst="UNIX" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Jill" dst="Domey" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Jill" dst="St_Bruno" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Jill" dst="Jean_Claude" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Jill" dst="Doyon" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Jill" dst="Fafard" symmetrical="NO"><link_ctn id="179"/></route>
+ <route src="Jill" dst="Croteau" symmetrical="NO"><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Jill" dst="Dodge" symmetrical="NO"><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Marcel" dst="Jacquelin" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Marcel" dst="Boivin" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Marcel" dst="Jean_Yves" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Marcel" dst="TeX" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Marcel" dst="Geoff" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Marcel" dst="Disney" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Marcel" dst="iRMX" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Marcel" dst="McGee" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Marcel" dst="Gatien" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Marcel" dst="Laroche" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Marcel" dst="Tanguay" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Marcel" dst="Morin" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Marcel" dst="Ethernet" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Marcel" dst="Bellemarre" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Marcel" dst="Kuenning" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Marcel" dst="Gaston" symmetrical="NO"><link_ctn id="155"/><link_ctn id="153"/></route>
+ <route src="Marcel" dst="Harry" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Marcel" dst="Bousquet" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Marcel" dst="Paul" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Marcel" dst="St_Jean" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Marcel" dst="Jill" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Marcel" dst="Wright" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Marcel" dst="Jackson" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Marcel" dst="Fernand" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Marcel" dst="Soucy" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Marcel" dst="Ste_Julie" symmetrical="NO"><link_ctn id="155"/></route>
+ <route src="Marcel" dst="Victoria" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Marcel" dst="Lessard" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Marcel" dst="Florient" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Marcel" dst="Marcoux" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Marcel" dst="Gavrel" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Marcel" dst="Bescherelle" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Marcel" dst="Pierre" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Marcel" dst="Jamie" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Marcel" dst="Rubin" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Marcel" dst="Olivier" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Marcel" dst="Boucherville" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Marcel" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Marcel" dst="Kansas" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Marcel" dst="King" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Marcel" dst="Lapointe" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Marcel" dst="Julian" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Marcel" dst="Lafontaine" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Marcel" dst="Gordon" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Marcel" dst="Drouin" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Marcel" dst="Robert" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Marcel" dst="Jocelyne" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Marcel" dst="Stephen" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Marcel" dst="Provost" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Marcel" dst="Juneau" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Marcel" dst="Casavant" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Marcel" dst="St_Antoine" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Marcel" dst="Louis" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Marcel" dst="Julien" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Marcel" dst="St_Paul" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Marcel" dst="Mathematica" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Marcel" dst="LaTeX" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Marcel" dst="Sirois" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Marcel" dst="Monique" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Marcel" dst="Audy" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Marcel" dst="Bourassa" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Marcel" dst="OHara" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Marcel" dst="Boston" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Marcel" dst="Papineau" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Marcel" dst="Fraser" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Marcel" dst="Browne" symmetrical="NO"><link_ctn id="155"/><link_ctn id="152"/></route>
+ <route src="Marcel" dst="SunOS" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Marcel" dst="Varennes" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Marcel" dst="Jacques" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Marcel" dst="Thierry" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Marcel" dst="Lachapelle" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Marcel" dst="kV" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Marcel" dst="Yolande" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Marcel" dst="Pronovost" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Marcel" dst="SPICE" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Marcel" dst="Europe" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Marcel" dst="Roy" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Marcel" dst="Amadeus" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Marcel" dst="Intel" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Marcel" dst="Cambridge" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Marcel" dst="Tremblay" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Marcel" dst="UNIX" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Marcel" dst="Domey" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Marcel" dst="St_Bruno" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Marcel" dst="Jean_Claude" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Marcel" dst="Doyon" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Marcel" dst="Fafard" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Marcel" dst="Croteau" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Marcel" dst="Dodge" symmetrical="NO"><link_ctn id="155"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Wright" dst="Jacquelin" symmetrical="NO"><link_ctn id="147"/><link_ctn id="145"/></route>
+ <route src="Wright" dst="Boivin" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Wright" dst="Jean_Yves" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Wright" dst="TeX" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Wright" dst="Geoff" symmetrical="NO"><link_ctn id="147"/></route>
+ <route src="Wright" dst="Disney" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Wright" dst="iRMX" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Wright" dst="McGee" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Wright" dst="Gatien" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Wright" dst="Laroche" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Wright" dst="Tanguay" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Wright" dst="Morin" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Wright" dst="Ethernet" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Wright" dst="Bellemarre" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Wright" dst="Kuenning" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Wright" dst="Gaston" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Wright" dst="Harry" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Wright" dst="Bousquet" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Wright" dst="Paul" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Wright" dst="St_Jean" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Wright" dst="Jill" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Wright" dst="Marcel" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Wright" dst="Jackson" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Wright" dst="Fernand" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Wright" dst="Soucy" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Wright" dst="Ste_Julie" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Wright" dst="Victoria" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Wright" dst="Lessard" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Wright" dst="Florient" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Wright" dst="Marcoux" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Wright" dst="Gavrel" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Wright" dst="Bescherelle" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Wright" dst="Pierre" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Wright" dst="Jamie" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Wright" dst="Rubin" symmetrical="NO"><link_ctn id="147"/><link_ctn id="144"/></route>
+ <route src="Wright" dst="Olivier" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Wright" dst="Boucherville" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Wright" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Wright" dst="Kansas" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Wright" dst="King" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Wright" dst="Lapointe" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Wright" dst="Julian" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Wright" dst="Lafontaine" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Wright" dst="Gordon" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Wright" dst="Drouin" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Wright" dst="Robert" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Wright" dst="Jocelyne" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Wright" dst="Stephen" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Wright" dst="Provost" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Wright" dst="Juneau" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Wright" dst="Casavant" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Wright" dst="St_Antoine" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Wright" dst="Louis" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Wright" dst="Julien" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Wright" dst="St_Paul" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Wright" dst="Mathematica" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Wright" dst="LaTeX" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Wright" dst="Sirois" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Wright" dst="Monique" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Wright" dst="Audy" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Wright" dst="Bourassa" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Wright" dst="OHara" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Wright" dst="Boston" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Wright" dst="Papineau" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Wright" dst="Fraser" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Wright" dst="Browne" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Wright" dst="SunOS" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Wright" dst="Varennes" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Wright" dst="Jacques" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Wright" dst="Thierry" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Wright" dst="Lachapelle" symmetrical="NO"><link_ctn id="147"/><link_ctn id="146"/></route>
+ <route src="Wright" dst="kV" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Wright" dst="Yolande" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Wright" dst="Pronovost" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Wright" dst="SPICE" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Wright" dst="Europe" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Wright" dst="Roy" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Wright" dst="Amadeus" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Wright" dst="Intel" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Wright" dst="Cambridge" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Wright" dst="Tremblay" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Wright" dst="UNIX" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Wright" dst="Domey" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Wright" dst="St_Bruno" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Wright" dst="Jean_Claude" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Wright" dst="Doyon" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Wright" dst="Fafard" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Wright" dst="Croteau" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Wright" dst="Dodge" symmetrical="NO"><link_ctn id="147"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Jackson" dst="Jacquelin" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Jackson" dst="Boivin" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Jackson" dst="Jean_Yves" symmetrical="NO"><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Jackson" dst="TeX" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Jackson" dst="Geoff" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="Jackson" dst="Disney" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Jackson" dst="iRMX" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Jackson" dst="McGee" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Jackson" dst="Gatien" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Jackson" dst="Laroche" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Jackson" dst="Tanguay" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Jackson" dst="Morin" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Jackson" dst="Ethernet" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Jackson" dst="Bellemarre" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Jackson" dst="Kuenning" symmetrical="NO"><link_ctn id="135"/></route>
+ <route src="Jackson" dst="Gaston" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Jackson" dst="Harry" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Jackson" dst="Bousquet" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Jackson" dst="Paul" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Jackson" dst="St_Jean" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Jackson" dst="Jill" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Jackson" dst="Marcel" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Jackson" dst="Wright" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Jackson" dst="Fernand" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Jackson" dst="Soucy" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Jackson" dst="Ste_Julie" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Jackson" dst="Victoria" symmetrical="NO"><link_ctn id="133"/></route>
+ <route src="Jackson" dst="Lessard" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Jackson" dst="Florient" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Jackson" dst="Marcoux" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Jackson" dst="Gavrel" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Jackson" dst="Bescherelle" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Jackson" dst="Pierre" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Jackson" dst="Jamie" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Jackson" dst="Rubin" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Jackson" dst="Olivier" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Jackson" dst="Boucherville" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Jackson" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Jackson" dst="Kansas" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Jackson" dst="King" symmetrical="NO"><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Jackson" dst="Lapointe" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Jackson" dst="Julian" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Jackson" dst="Lafontaine" symmetrical="NO"><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Jackson" dst="Gordon" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Jackson" dst="Drouin" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Jackson" dst="Robert" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Jackson" dst="Jocelyne" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Jackson" dst="Stephen" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Jackson" dst="Provost" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Jackson" dst="Juneau" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Jackson" dst="Casavant" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Jackson" dst="St_Antoine" symmetrical="NO"><link_ctn id="62"/><link_ctn id="63"/></route>
+ <route src="Jackson" dst="Louis" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Jackson" dst="Julien" symmetrical="NO"><link_ctn id="134"/></route>
+ <route src="Jackson" dst="St_Paul" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Jackson" dst="Mathematica" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Jackson" dst="LaTeX" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Jackson" dst="Sirois" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Jackson" dst="Monique" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Jackson" dst="Audy" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Jackson" dst="Bourassa" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Jackson" dst="OHara" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Jackson" dst="Boston" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Jackson" dst="Papineau" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Jackson" dst="Fraser" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Jackson" dst="Browne" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Jackson" dst="SunOS" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Jackson" dst="Varennes" symmetrical="NO"><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Jackson" dst="Jacques" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Jackson" dst="Thierry" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Jackson" dst="Lachapelle" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Jackson" dst="kV" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Jackson" dst="Yolande" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Jackson" dst="Pronovost" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Jackson" dst="SPICE" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Jackson" dst="Europe" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Jackson" dst="Roy" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Jackson" dst="Amadeus" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Jackson" dst="Intel" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Jackson" dst="Cambridge" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Jackson" dst="Tremblay" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Jackson" dst="UNIX" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Jackson" dst="Domey" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Jackson" dst="St_Bruno" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Jackson" dst="Jean_Claude" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Jackson" dst="Doyon" symmetrical="NO"><link_ctn id="132"/></route>
+ <route src="Jackson" dst="Fafard" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Jackson" dst="Croteau" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Jackson" dst="Dodge" symmetrical="NO"><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Fernand" dst="Jacquelin" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Fernand" dst="Boivin" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Fernand" dst="Jean_Yves" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Fernand" dst="TeX" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Fernand" dst="Geoff" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Fernand" dst="Disney" symmetrical="NO"><link_ctn id="109"/><link_ctn id="111"/></route>
+ <route src="Fernand" dst="iRMX" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Fernand" dst="McGee" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Fernand" dst="Gatien" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Fernand" dst="Laroche" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Fernand" dst="Tanguay" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Fernand" dst="Morin" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Fernand" dst="Ethernet" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Fernand" dst="Bellemarre" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/></route>
+ <route src="Fernand" dst="Kuenning" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Fernand" dst="Gaston" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Fernand" dst="Harry" symmetrical="NO"><link_ctn id="109"/><link_ctn id="108"/></route>
+ <route src="Fernand" dst="Bousquet" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Fernand" dst="Paul" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Fernand" dst="St_Jean" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Fernand" dst="Jill" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Fernand" dst="Marcel" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Fernand" dst="Wright" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Fernand" dst="Jackson" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Fernand" dst="Soucy" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Fernand" dst="Ste_Julie" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Fernand" dst="Victoria" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Fernand" dst="Lessard" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Fernand" dst="Florient" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Fernand" dst="Marcoux" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Fernand" dst="Gavrel" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Fernand" dst="Bescherelle" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Fernand" dst="Pierre" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Fernand" dst="Jamie" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Fernand" dst="Rubin" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Fernand" dst="Olivier" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Fernand" dst="Boucherville" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Fernand" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Fernand" dst="Kansas" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Fernand" dst="King" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Fernand" dst="Lapointe" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Fernand" dst="Julian" symmetrical="NO"><link_ctn id="109"/></route>
+ <route src="Fernand" dst="Lafontaine" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Fernand" dst="Gordon" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Fernand" dst="Drouin" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Fernand" dst="Robert" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Fernand" dst="Jocelyne" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Fernand" dst="Stephen" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Fernand" dst="Provost" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Fernand" dst="Juneau" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Fernand" dst="Casavant" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Fernand" dst="St_Antoine" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Fernand" dst="Louis" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Fernand" dst="Julien" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Fernand" dst="St_Paul" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Fernand" dst="Mathematica" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Fernand" dst="LaTeX" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Fernand" dst="Sirois" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Fernand" dst="Monique" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Fernand" dst="Audy" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Fernand" dst="Bourassa" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Fernand" dst="OHara" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Fernand" dst="Boston" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Fernand" dst="Papineau" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Fernand" dst="Fraser" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Fernand" dst="Browne" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Fernand" dst="SunOS" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Fernand" dst="Varennes" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Fernand" dst="Jacques" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Fernand" dst="Thierry" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Fernand" dst="Lachapelle" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Fernand" dst="kV" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Fernand" dst="Yolande" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Fernand" dst="Pronovost" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Fernand" dst="SPICE" symmetrical="NO"><link_ctn id="109"/><link_ctn id="110"/></route>
+ <route src="Fernand" dst="Europe" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Fernand" dst="Roy" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Fernand" dst="Amadeus" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Fernand" dst="Intel" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Fernand" dst="Cambridge" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Fernand" dst="Tremblay" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Fernand" dst="UNIX" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Fernand" dst="Domey" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Fernand" dst="St_Bruno" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Fernand" dst="Jean_Claude" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Fernand" dst="Doyon" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Fernand" dst="Fafard" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Fernand" dst="Croteau" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Fernand" dst="Dodge" symmetrical="NO"><link_ctn id="109"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Soucy" dst="Jacquelin" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Soucy" dst="Boivin" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Soucy" dst="Jean_Yves" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Soucy" dst="TeX" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Soucy" dst="Geoff" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Soucy" dst="Disney" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Soucy" dst="iRMX" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Soucy" dst="McGee" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Soucy" dst="Gatien" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Soucy" dst="Laroche" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Soucy" dst="Tanguay" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Soucy" dst="Morin" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Soucy" dst="Ethernet" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Soucy" dst="Bellemarre" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Soucy" dst="Kuenning" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Soucy" dst="Gaston" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Soucy" dst="Harry" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Soucy" dst="Bousquet" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Soucy" dst="Paul" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Soucy" dst="St_Jean" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Soucy" dst="Jill" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Soucy" dst="Marcel" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Soucy" dst="Wright" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Soucy" dst="Jackson" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Soucy" dst="Fernand" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Soucy" dst="Ste_Julie" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Soucy" dst="Victoria" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Soucy" dst="Lessard" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Soucy" dst="Florient" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Soucy" dst="Marcoux" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Soucy" dst="Gavrel" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Soucy" dst="Bescherelle" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Soucy" dst="Pierre" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Soucy" dst="Jamie" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Soucy" dst="Rubin" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Soucy" dst="Olivier" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Soucy" dst="Boucherville" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Soucy" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Soucy" dst="Kansas" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Soucy" dst="King" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Soucy" dst="Lapointe" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Soucy" dst="Julian" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Soucy" dst="Lafontaine" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Soucy" dst="Gordon" symmetrical="NO"><link_ctn id="191"/></route>
+ <route src="Soucy" dst="Drouin" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Soucy" dst="Robert" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Soucy" dst="Jocelyne" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Soucy" dst="Stephen" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Soucy" dst="Provost" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Soucy" dst="Juneau" symmetrical="NO"><link_ctn id="191"/><link_ctn id="189"/></route>
+ <route src="Soucy" dst="Casavant" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Soucy" dst="St_Antoine" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Soucy" dst="Louis" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Soucy" dst="Julien" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Soucy" dst="St_Paul" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Soucy" dst="Mathematica" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Soucy" dst="LaTeX" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Soucy" dst="Sirois" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Soucy" dst="Monique" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Soucy" dst="Audy" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Soucy" dst="Bourassa" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Soucy" dst="OHara" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Soucy" dst="Boston" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Soucy" dst="Papineau" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Soucy" dst="Fraser" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Soucy" dst="Browne" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Soucy" dst="SunOS" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Soucy" dst="Varennes" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Soucy" dst="Jacques" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Soucy" dst="Thierry" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Soucy" dst="Lachapelle" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Soucy" dst="kV" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Soucy" dst="Yolande" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Soucy" dst="Pronovost" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Soucy" dst="SPICE" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Soucy" dst="Europe" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Soucy" dst="Roy" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Soucy" dst="Amadeus" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Soucy" dst="Intel" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Soucy" dst="Cambridge" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Soucy" dst="Tremblay" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Soucy" dst="UNIX" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Soucy" dst="Domey" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Soucy" dst="St_Bruno" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Soucy" dst="Jean_Claude" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Soucy" dst="Doyon" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Soucy" dst="Fafard" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Soucy" dst="Croteau" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Soucy" dst="Dodge" symmetrical="NO"><link_ctn id="191"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Ste_Julie" dst="Jacquelin" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Ste_Julie" dst="Boivin" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Ste_Julie" dst="Jean_Yves" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Ste_Julie" dst="TeX" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Ste_Julie" dst="Geoff" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Ste_Julie" dst="Disney" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Ste_Julie" dst="iRMX" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Ste_Julie" dst="McGee" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Ste_Julie" dst="Gatien" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Ste_Julie" dst="Laroche" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Ste_Julie" dst="Tanguay" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Ste_Julie" dst="Morin" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Ste_Julie" dst="Ethernet" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Ste_Julie" dst="Bellemarre" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Ste_Julie" dst="Kuenning" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Ste_Julie" dst="Gaston" symmetrical="NO"><link_ctn id="153"/></route>
+ <route src="Ste_Julie" dst="Harry" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Ste_Julie" dst="Bousquet" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Ste_Julie" dst="Paul" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Ste_Julie" dst="St_Jean" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Ste_Julie" dst="Jill" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Ste_Julie" dst="Marcel" symmetrical="NO"><link_ctn id="155"/></route>
+ <route src="Ste_Julie" dst="Wright" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Ste_Julie" dst="Jackson" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Ste_Julie" dst="Fernand" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Ste_Julie" dst="Soucy" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Ste_Julie" dst="Victoria" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Ste_Julie" dst="Lessard" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Ste_Julie" dst="Florient" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Ste_Julie" dst="Marcoux" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Ste_Julie" dst="Gavrel" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Ste_Julie" dst="Bescherelle" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Ste_Julie" dst="Pierre" symmetrical="NO"><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Ste_Julie" dst="Jamie" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Ste_Julie" dst="Rubin" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Ste_Julie" dst="Olivier" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Ste_Julie" dst="Boucherville" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Ste_Julie" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Ste_Julie" dst="Kansas" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Ste_Julie" dst="King" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Ste_Julie" dst="Lapointe" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Ste_Julie" dst="Julian" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Ste_Julie" dst="Lafontaine" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Ste_Julie" dst="Gordon" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Ste_Julie" dst="Drouin" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Ste_Julie" dst="Robert" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Ste_Julie" dst="Jocelyne" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Ste_Julie" dst="Stephen" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Ste_Julie" dst="Provost" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Ste_Julie" dst="Juneau" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Ste_Julie" dst="Casavant" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Ste_Julie" dst="St_Antoine" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Ste_Julie" dst="Louis" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Ste_Julie" dst="Julien" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Ste_Julie" dst="St_Paul" symmetrical="NO"><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Ste_Julie" dst="Mathematica" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Ste_Julie" dst="LaTeX" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Ste_Julie" dst="Sirois" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Ste_Julie" dst="Monique" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Ste_Julie" dst="Audy" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Ste_Julie" dst="Bourassa" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Ste_Julie" dst="OHara" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Ste_Julie" dst="Boston" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Ste_Julie" dst="Papineau" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Ste_Julie" dst="Fraser" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Ste_Julie" dst="Browne" symmetrical="NO"><link_ctn id="152"/></route>
+ <route src="Ste_Julie" dst="SunOS" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Ste_Julie" dst="Varennes" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Ste_Julie" dst="Jacques" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Ste_Julie" dst="Thierry" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Ste_Julie" dst="Lachapelle" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Ste_Julie" dst="kV" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Ste_Julie" dst="Yolande" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Ste_Julie" dst="Pronovost" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Ste_Julie" dst="SPICE" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Ste_Julie" dst="Europe" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Ste_Julie" dst="Roy" symmetrical="NO"><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Ste_Julie" dst="Amadeus" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Ste_Julie" dst="Intel" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Ste_Julie" dst="Cambridge" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Ste_Julie" dst="Tremblay" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Ste_Julie" dst="UNIX" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Ste_Julie" dst="Domey" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Ste_Julie" dst="St_Bruno" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Ste_Julie" dst="Jean_Claude" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Ste_Julie" dst="Doyon" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Ste_Julie" dst="Fafard" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Ste_Julie" dst="Croteau" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Ste_Julie" dst="Dodge" symmetrical="NO"><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Victoria" dst="Jacquelin" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Victoria" dst="Boivin" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Victoria" dst="Jean_Yves" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Victoria" dst="TeX" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Victoria" dst="Geoff" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="Victoria" dst="Disney" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Victoria" dst="iRMX" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Victoria" dst="McGee" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Victoria" dst="Gatien" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Victoria" dst="Laroche" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Victoria" dst="Tanguay" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Victoria" dst="Morin" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Victoria" dst="Ethernet" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Victoria" dst="Bellemarre" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Victoria" dst="Kuenning" symmetrical="NO"><link_ctn id="133"/><link_ctn id="135"/></route>
+ <route src="Victoria" dst="Gaston" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Victoria" dst="Harry" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Victoria" dst="Bousquet" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Victoria" dst="Paul" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Victoria" dst="St_Jean" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Victoria" dst="Jill" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Victoria" dst="Marcel" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Victoria" dst="Wright" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Victoria" dst="Jackson" symmetrical="NO"><link_ctn id="133"/></route>
+ <route src="Victoria" dst="Fernand" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Victoria" dst="Soucy" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Victoria" dst="Ste_Julie" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Victoria" dst="Lessard" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Victoria" dst="Florient" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Victoria" dst="Marcoux" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Victoria" dst="Gavrel" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Victoria" dst="Bescherelle" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Victoria" dst="Pierre" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Victoria" dst="Jamie" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Victoria" dst="Rubin" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Victoria" dst="Olivier" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Victoria" dst="Boucherville" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Victoria" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Victoria" dst="Kansas" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Victoria" dst="King" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Victoria" dst="Lapointe" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Victoria" dst="Julian" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Victoria" dst="Lafontaine" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Victoria" dst="Gordon" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Victoria" dst="Drouin" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Victoria" dst="Robert" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Victoria" dst="Jocelyne" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Victoria" dst="Stephen" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Victoria" dst="Provost" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Victoria" dst="Juneau" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Victoria" dst="Casavant" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Victoria" dst="St_Antoine" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="63"/></route>
+ <route src="Victoria" dst="Louis" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Victoria" dst="Julien" symmetrical="NO"><link_ctn id="133"/><link_ctn id="134"/></route>
+ <route src="Victoria" dst="St_Paul" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Victoria" dst="Mathematica" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Victoria" dst="LaTeX" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Victoria" dst="Sirois" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Victoria" dst="Monique" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Victoria" dst="Audy" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Victoria" dst="Bourassa" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Victoria" dst="OHara" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Victoria" dst="Boston" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Victoria" dst="Papineau" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Victoria" dst="Fraser" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Victoria" dst="Browne" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Victoria" dst="SunOS" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Victoria" dst="Varennes" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Victoria" dst="Jacques" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Victoria" dst="Thierry" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Victoria" dst="Lachapelle" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Victoria" dst="kV" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Victoria" dst="Yolande" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Victoria" dst="Pronovost" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Victoria" dst="SPICE" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Victoria" dst="Europe" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Victoria" dst="Roy" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Victoria" dst="Amadeus" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Victoria" dst="Intel" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Victoria" dst="Cambridge" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Victoria" dst="Tremblay" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Victoria" dst="UNIX" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Victoria" dst="Domey" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Victoria" dst="St_Bruno" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Victoria" dst="Jean_Claude" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Victoria" dst="Doyon" symmetrical="NO"><link_ctn id="133"/><link_ctn id="132"/></route>
+ <route src="Victoria" dst="Fafard" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Victoria" dst="Croteau" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Victoria" dst="Dodge" symmetrical="NO"><link_ctn id="133"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Lessard" dst="Jacquelin" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Lessard" dst="Boivin" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Lessard" dst="Jean_Yves" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Lessard" dst="TeX" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Lessard" dst="Geoff" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Lessard" dst="Disney" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Lessard" dst="iRMX" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Lessard" dst="McGee" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Lessard" dst="Gatien" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Lessard" dst="Laroche" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Lessard" dst="Tanguay" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Lessard" dst="Morin" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Lessard" dst="Ethernet" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Lessard" dst="Bellemarre" symmetrical="NO"><link_ctn id="99"/></route>
+ <route src="Lessard" dst="Kuenning" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Lessard" dst="Gaston" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Lessard" dst="Harry" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Lessard" dst="Bousquet" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Lessard" dst="Paul" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Lessard" dst="St_Jean" symmetrical="NO"><link_ctn id="99"/><link_ctn id="97"/></route>
+ <route src="Lessard" dst="Jill" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Lessard" dst="Marcel" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Lessard" dst="Wright" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Lessard" dst="Jackson" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Lessard" dst="Fernand" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Lessard" dst="Soucy" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Lessard" dst="Ste_Julie" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Lessard" dst="Victoria" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Lessard" dst="Florient" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Lessard" dst="Marcoux" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Lessard" dst="Gavrel" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Lessard" dst="Bescherelle" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Lessard" dst="Pierre" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Lessard" dst="Jamie" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Lessard" dst="Rubin" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Lessard" dst="Olivier" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Lessard" dst="Boucherville" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Lessard" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Lessard" dst="Kansas" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Lessard" dst="King" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Lessard" dst="Lapointe" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Lessard" dst="Julian" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Lessard" dst="Lafontaine" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Lessard" dst="Gordon" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Lessard" dst="Drouin" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Lessard" dst="Robert" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Lessard" dst="Jocelyne" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Lessard" dst="Stephen" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Lessard" dst="Provost" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Lessard" dst="Juneau" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Lessard" dst="Casavant" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Lessard" dst="St_Antoine" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Lessard" dst="Louis" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Lessard" dst="Julien" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Lessard" dst="St_Paul" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Lessard" dst="Mathematica" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Lessard" dst="LaTeX" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Lessard" dst="Sirois" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Lessard" dst="Monique" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Lessard" dst="Audy" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Lessard" dst="Bourassa" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Lessard" dst="OHara" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Lessard" dst="Boston" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Lessard" dst="Papineau" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Lessard" dst="Fraser" symmetrical="NO"><link_ctn id="99"/><link_ctn id="96"/></route>
+ <route src="Lessard" dst="Browne" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Lessard" dst="SunOS" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Lessard" dst="Varennes" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Lessard" dst="Jacques" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Lessard" dst="Thierry" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Lessard" dst="Lachapelle" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Lessard" dst="kV" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Lessard" dst="Yolande" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Lessard" dst="Pronovost" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Lessard" dst="SPICE" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Lessard" dst="Europe" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Lessard" dst="Roy" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Lessard" dst="Amadeus" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Lessard" dst="Intel" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Lessard" dst="Cambridge" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Lessard" dst="Tremblay" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Lessard" dst="UNIX" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Lessard" dst="Domey" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Lessard" dst="St_Bruno" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Lessard" dst="Jean_Claude" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Lessard" dst="Doyon" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Lessard" dst="Fafard" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Lessard" dst="Croteau" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Lessard" dst="Dodge" symmetrical="NO"><link_ctn id="99"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Florient" dst="Jacquelin" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Florient" dst="Boivin" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Florient" dst="Jean_Yves" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Florient" dst="TeX" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Florient" dst="Geoff" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Florient" dst="Disney" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Florient" dst="iRMX" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Florient" dst="McGee" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Florient" dst="Gatien" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Florient" dst="Laroche" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Florient" dst="Tanguay" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Florient" dst="Morin" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Florient" dst="Ethernet" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Florient" dst="Bellemarre" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Florient" dst="Kuenning" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Florient" dst="Gaston" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Florient" dst="Harry" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Florient" dst="Bousquet" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Florient" dst="Paul" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Florient" dst="St_Jean" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Florient" dst="Jill" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Florient" dst="Marcel" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Florient" dst="Wright" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Florient" dst="Jackson" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Florient" dst="Fernand" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Florient" dst="Soucy" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Florient" dst="Ste_Julie" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Florient" dst="Victoria" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Florient" dst="Lessard" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Florient" dst="Marcoux" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Florient" dst="Gavrel" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Florient" dst="Bescherelle" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Florient" dst="Pierre" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Florient" dst="Jamie" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Florient" dst="Rubin" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Florient" dst="Olivier" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Florient" dst="Boucherville" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Florient" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Florient" dst="Kansas" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Florient" dst="King" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Florient" dst="Lapointe" symmetrical="NO"><link_ctn id="181"/></route>
+ <route src="Florient" dst="Julian" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Florient" dst="Lafontaine" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Florient" dst="Gordon" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Florient" dst="Drouin" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Florient" dst="Robert" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Florient" dst="Jocelyne" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Florient" dst="Stephen" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Florient" dst="Provost" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Florient" dst="Juneau" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Florient" dst="Casavant" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Florient" dst="St_Antoine" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Florient" dst="Louis" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Florient" dst="Julien" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Florient" dst="St_Paul" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Florient" dst="Mathematica" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Florient" dst="LaTeX" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Florient" dst="Sirois" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Florient" dst="Monique" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Florient" dst="Audy" symmetrical="NO"><link_ctn id="181"/><link_ctn id="183"/></route>
+ <route src="Florient" dst="Bourassa" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Florient" dst="OHara" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Florient" dst="Boston" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Florient" dst="Papineau" symmetrical="NO"><link_ctn id="181"/><link_ctn id="182"/></route>
+ <route src="Florient" dst="Fraser" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Florient" dst="Browne" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Florient" dst="SunOS" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Florient" dst="Varennes" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Florient" dst="Jacques" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Florient" dst="Thierry" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Florient" dst="Lachapelle" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Florient" dst="kV" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Florient" dst="Yolande" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Florient" dst="Pronovost" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Florient" dst="SPICE" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Florient" dst="Europe" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Florient" dst="Roy" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Florient" dst="Amadeus" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Florient" dst="Intel" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Florient" dst="Cambridge" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Florient" dst="Tremblay" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Florient" dst="UNIX" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Florient" dst="Domey" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Florient" dst="St_Bruno" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Florient" dst="Jean_Claude" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Florient" dst="Doyon" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Florient" dst="Fafard" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Florient" dst="Croteau" symmetrical="NO"><link_ctn id="181"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Florient" dst="Dodge" symmetrical="NO"><link_ctn id="181"/><link_ctn id="180"/></route>
+ <route src="Marcoux" dst="Jacquelin" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Marcoux" dst="Boivin" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Marcoux" dst="Jean_Yves" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Marcoux" dst="TeX" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Marcoux" dst="Geoff" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Marcoux" dst="Disney" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Marcoux" dst="iRMX" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Marcoux" dst="McGee" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Marcoux" dst="Gatien" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Marcoux" dst="Laroche" symmetrical="NO"><link_ctn id="186"/></route>
+ <route src="Marcoux" dst="Tanguay" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Marcoux" dst="Morin" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Marcoux" dst="Ethernet" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Marcoux" dst="Bellemarre" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Marcoux" dst="Kuenning" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Marcoux" dst="Gaston" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Marcoux" dst="Harry" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Marcoux" dst="Bousquet" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Marcoux" dst="Paul" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Marcoux" dst="St_Jean" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Marcoux" dst="Jill" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Marcoux" dst="Marcel" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Marcoux" dst="Wright" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Marcoux" dst="Jackson" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Marcoux" dst="Fernand" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Marcoux" dst="Soucy" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Marcoux" dst="Ste_Julie" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Marcoux" dst="Victoria" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Marcoux" dst="Lessard" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Marcoux" dst="Florient" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Marcoux" dst="Gavrel" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Marcoux" dst="Bescherelle" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Marcoux" dst="Pierre" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Marcoux" dst="Jamie" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Marcoux" dst="Rubin" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Marcoux" dst="Olivier" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Marcoux" dst="Boucherville" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Marcoux" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="186"/><link_ctn id="184"/></route>
+ <route src="Marcoux" dst="Kansas" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Marcoux" dst="King" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Marcoux" dst="Lapointe" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Marcoux" dst="Julian" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Marcoux" dst="Lafontaine" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Marcoux" dst="Gordon" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Marcoux" dst="Drouin" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Marcoux" dst="Robert" symmetrical="NO"><link_ctn id="186"/><link_ctn id="187"/></route>
+ <route src="Marcoux" dst="Jocelyne" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Marcoux" dst="Stephen" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Marcoux" dst="Provost" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Marcoux" dst="Juneau" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Marcoux" dst="Casavant" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Marcoux" dst="St_Antoine" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Marcoux" dst="Louis" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Marcoux" dst="Julien" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Marcoux" dst="St_Paul" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Marcoux" dst="Mathematica" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Marcoux" dst="LaTeX" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Marcoux" dst="Sirois" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Marcoux" dst="Monique" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Marcoux" dst="Audy" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Marcoux" dst="Bourassa" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Marcoux" dst="OHara" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Marcoux" dst="Boston" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Marcoux" dst="Papineau" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Marcoux" dst="Fraser" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Marcoux" dst="Browne" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Marcoux" dst="SunOS" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Marcoux" dst="Varennes" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Marcoux" dst="Jacques" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Marcoux" dst="Thierry" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Marcoux" dst="Lachapelle" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Marcoux" dst="kV" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Marcoux" dst="Yolande" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Marcoux" dst="Pronovost" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Marcoux" dst="SPICE" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Marcoux" dst="Europe" symmetrical="NO"><link_ctn id="186"/><link_ctn id="185"/></route>
+ <route src="Marcoux" dst="Roy" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Marcoux" dst="Amadeus" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Marcoux" dst="Intel" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Marcoux" dst="Cambridge" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Marcoux" dst="Tremblay" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Marcoux" dst="UNIX" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Marcoux" dst="Domey" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Marcoux" dst="St_Bruno" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Marcoux" dst="Jean_Claude" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Marcoux" dst="Doyon" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Marcoux" dst="Fafard" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Marcoux" dst="Croteau" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Marcoux" dst="Dodge" symmetrical="NO"><link_ctn id="186"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Gavrel" dst="Jacquelin" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Gavrel" dst="Boivin" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Gavrel" dst="Jean_Yves" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Gavrel" dst="TeX" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Gavrel" dst="Geoff" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Gavrel" dst="Disney" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Gavrel" dst="iRMX" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Gavrel" dst="McGee" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Gavrel" dst="Gatien" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Gavrel" dst="Laroche" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Gavrel" dst="Tanguay" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Gavrel" dst="Morin" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Gavrel" dst="Ethernet" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Gavrel" dst="Bellemarre" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Gavrel" dst="Kuenning" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Gavrel" dst="Gaston" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Gavrel" dst="Harry" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Gavrel" dst="Bousquet" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Gavrel" dst="Paul" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Gavrel" dst="St_Jean" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Gavrel" dst="Jill" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Gavrel" dst="Marcel" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Gavrel" dst="Wright" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Gavrel" dst="Jackson" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Gavrel" dst="Fernand" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Gavrel" dst="Soucy" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Gavrel" dst="Ste_Julie" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Gavrel" dst="Victoria" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Gavrel" dst="Lessard" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Gavrel" dst="Florient" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Gavrel" dst="Marcoux" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Gavrel" dst="Bescherelle" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Gavrel" dst="Pierre" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Gavrel" dst="Jamie" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Gavrel" dst="Rubin" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Gavrel" dst="Olivier" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Gavrel" dst="Boucherville" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Gavrel" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Gavrel" dst="Kansas" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Gavrel" dst="King" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Gavrel" dst="Lapointe" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Gavrel" dst="Julian" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Gavrel" dst="Lafontaine" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Gavrel" dst="Gordon" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Gavrel" dst="Drouin" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Gavrel" dst="Robert" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Gavrel" dst="Jocelyne" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Gavrel" dst="Stephen" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Gavrel" dst="Provost" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Gavrel" dst="Juneau" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Gavrel" dst="Casavant" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Gavrel" dst="St_Antoine" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Gavrel" dst="Louis" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Gavrel" dst="Julien" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Gavrel" dst="St_Paul" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Gavrel" dst="Mathematica" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Gavrel" dst="LaTeX" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Gavrel" dst="Sirois" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Gavrel" dst="Monique" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Gavrel" dst="Audy" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Gavrel" dst="Bourassa" symmetrical="NO"><link_ctn id="148"/><link_ctn id="150"/></route>
+ <route src="Gavrel" dst="OHara" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Gavrel" dst="Boston" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Gavrel" dst="Papineau" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Gavrel" dst="Fraser" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Gavrel" dst="Browne" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Gavrel" dst="SunOS" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Gavrel" dst="Varennes" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Gavrel" dst="Jacques" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Gavrel" dst="Thierry" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Gavrel" dst="Lachapelle" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Gavrel" dst="kV" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Gavrel" dst="Yolande" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Gavrel" dst="Pronovost" symmetrical="NO"><link_ctn id="148"/><link_ctn id="151"/></route>
+ <route src="Gavrel" dst="SPICE" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Gavrel" dst="Europe" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Gavrel" dst="Roy" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Gavrel" dst="Amadeus" symmetrical="NO"><link_ctn id="148"/></route>
+ <route src="Gavrel" dst="Intel" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Gavrel" dst="Cambridge" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Gavrel" dst="Tremblay" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Gavrel" dst="UNIX" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Gavrel" dst="Domey" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Gavrel" dst="St_Bruno" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Gavrel" dst="Jean_Claude" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Gavrel" dst="Doyon" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Gavrel" dst="Fafard" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Gavrel" dst="Croteau" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Gavrel" dst="Dodge" symmetrical="NO"><link_ctn id="148"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Bescherelle" dst="Jacquelin" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Bescherelle" dst="Boivin" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Bescherelle" dst="Jean_Yves" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Bescherelle" dst="TeX" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Bescherelle" dst="Geoff" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Bescherelle" dst="Disney" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Bescherelle" dst="iRMX" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Bescherelle" dst="McGee" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Bescherelle" dst="Gatien" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Bescherelle" dst="Laroche" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Bescherelle" dst="Tanguay" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Bescherelle" dst="Morin" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Bescherelle" dst="Ethernet" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Bescherelle" dst="Bellemarre" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Bescherelle" dst="Kuenning" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Bescherelle" dst="Gaston" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Bescherelle" dst="Harry" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Bescherelle" dst="Bousquet" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Bescherelle" dst="Paul" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Bescherelle" dst="St_Jean" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Bescherelle" dst="Jill" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Bescherelle" dst="Marcel" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Bescherelle" dst="Wright" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Bescherelle" dst="Jackson" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Bescherelle" dst="Fernand" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Bescherelle" dst="Soucy" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Bescherelle" dst="Ste_Julie" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Bescherelle" dst="Victoria" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Bescherelle" dst="Lessard" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Bescherelle" dst="Florient" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Bescherelle" dst="Marcoux" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Bescherelle" dst="Gavrel" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Bescherelle" dst="Pierre" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Bescherelle" dst="Jamie" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Bescherelle" dst="Rubin" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Bescherelle" dst="Olivier" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Bescherelle" dst="Boucherville" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Bescherelle" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Bescherelle" dst="Kansas" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Bescherelle" dst="King" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Bescherelle" dst="Lapointe" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Bescherelle" dst="Julian" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Bescherelle" dst="Lafontaine" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Bescherelle" dst="Gordon" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Bescherelle" dst="Drouin" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Bescherelle" dst="Robert" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Bescherelle" dst="Jocelyne" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Bescherelle" dst="Stephen" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Bescherelle" dst="Provost" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Bescherelle" dst="Juneau" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Bescherelle" dst="Casavant" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Bescherelle" dst="St_Antoine" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Bescherelle" dst="Louis" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Bescherelle" dst="Julien" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Bescherelle" dst="St_Paul" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Bescherelle" dst="Mathematica" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Bescherelle" dst="LaTeX" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Bescherelle" dst="Sirois" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Bescherelle" dst="Monique" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Bescherelle" dst="Audy" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Bescherelle" dst="Bourassa" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Bescherelle" dst="OHara" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Bescherelle" dst="Boston" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Bescherelle" dst="Papineau" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Bescherelle" dst="Fraser" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Bescherelle" dst="Browne" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Bescherelle" dst="SunOS" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Bescherelle" dst="Varennes" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Bescherelle" dst="Jacques" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Bescherelle" dst="Thierry" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Bescherelle" dst="Lachapelle" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Bescherelle" dst="kV" symmetrical="NO"><link_ctn id="140"/></route>
+ <route src="Bescherelle" dst="Yolande" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Bescherelle" dst="Pronovost" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Bescherelle" dst="SPICE" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Bescherelle" dst="Europe" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Bescherelle" dst="Roy" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Bescherelle" dst="Amadeus" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Bescherelle" dst="Intel" symmetrical="NO"><link_ctn id="140"/><link_ctn id="141"/></route>
+ <route src="Bescherelle" dst="Cambridge" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Bescherelle" dst="Tremblay" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Bescherelle" dst="UNIX" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Bescherelle" dst="Domey" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Bescherelle" dst="St_Bruno" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Bescherelle" dst="Jean_Claude" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Bescherelle" dst="Doyon" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Bescherelle" dst="Fafard" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Bescherelle" dst="Croteau" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Bescherelle" dst="Dodge" symmetrical="NO"><link_ctn id="140"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Pierre" dst="Jacquelin" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Pierre" dst="Boivin" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Pierre" dst="Jean_Yves" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Pierre" dst="TeX" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Pierre" dst="Geoff" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Pierre" dst="Disney" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Pierre" dst="iRMX" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Pierre" dst="McGee" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Pierre" dst="Gatien" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Pierre" dst="Laroche" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Pierre" dst="Tanguay" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Pierre" dst="Morin" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Pierre" dst="Ethernet" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Pierre" dst="Bellemarre" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Pierre" dst="Kuenning" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Pierre" dst="Gaston" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Pierre" dst="Harry" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Pierre" dst="Bousquet" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Pierre" dst="Paul" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Pierre" dst="St_Jean" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Pierre" dst="Jill" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Pierre" dst="Marcel" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Pierre" dst="Wright" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Pierre" dst="Jackson" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Pierre" dst="Fernand" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Pierre" dst="Soucy" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Pierre" dst="Ste_Julie" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Pierre" dst="Victoria" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Pierre" dst="Lessard" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Pierre" dst="Florient" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Pierre" dst="Marcoux" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Pierre" dst="Gavrel" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Pierre" dst="Bescherelle" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Pierre" dst="Jamie" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Pierre" dst="Rubin" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Pierre" dst="Olivier" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Pierre" dst="Boucherville" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Pierre" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Pierre" dst="Kansas" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Pierre" dst="King" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Pierre" dst="Lapointe" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Pierre" dst="Julian" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Pierre" dst="Lafontaine" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Pierre" dst="Gordon" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Pierre" dst="Drouin" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Pierre" dst="Robert" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Pierre" dst="Jocelyne" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Pierre" dst="Stephen" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Pierre" dst="Provost" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Pierre" dst="Juneau" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Pierre" dst="Casavant" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Pierre" dst="St_Antoine" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Pierre" dst="Louis" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Pierre" dst="Julien" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Pierre" dst="St_Paul" symmetrical="NO"><link_ctn id="167"/><link_ctn id="165"/></route>
+ <route src="Pierre" dst="Mathematica" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Pierre" dst="LaTeX" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Pierre" dst="Sirois" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Pierre" dst="Monique" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Pierre" dst="Audy" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Pierre" dst="Bourassa" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Pierre" dst="OHara" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Pierre" dst="Boston" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Pierre" dst="Papineau" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Pierre" dst="Fraser" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Pierre" dst="Browne" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Pierre" dst="SunOS" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Pierre" dst="Varennes" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Pierre" dst="Jacques" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Pierre" dst="Thierry" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Pierre" dst="Lachapelle" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Pierre" dst="kV" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Pierre" dst="Yolande" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Pierre" dst="Pronovost" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Pierre" dst="SPICE" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Pierre" dst="Europe" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Pierre" dst="Roy" symmetrical="NO"><link_ctn id="167"/></route>
+ <route src="Pierre" dst="Amadeus" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Pierre" dst="Intel" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Pierre" dst="Cambridge" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Pierre" dst="Tremblay" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Pierre" dst="UNIX" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Pierre" dst="Domey" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Pierre" dst="St_Bruno" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Pierre" dst="Jean_Claude" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Pierre" dst="Doyon" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Pierre" dst="Fafard" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Pierre" dst="Croteau" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Pierre" dst="Dodge" symmetrical="NO"><link_ctn id="167"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Jamie" dst="Jacquelin" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Jamie" dst="Boivin" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="Jamie" dst="Jean_Yves" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Jamie" dst="TeX" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Jamie" dst="Geoff" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Jamie" dst="Disney" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Jamie" dst="iRMX" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Jamie" dst="McGee" symmetrical="NO"><link_ctn id="120"/></route>
+ <route src="Jamie" dst="Gatien" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Jamie" dst="Laroche" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Jamie" dst="Tanguay" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Jamie" dst="Morin" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Jamie" dst="Ethernet" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Jamie" dst="Bellemarre" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Jamie" dst="Kuenning" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Jamie" dst="Gaston" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Jamie" dst="Harry" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Jamie" dst="Bousquet" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Jamie" dst="Paul" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Jamie" dst="St_Jean" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Jamie" dst="Jill" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Jamie" dst="Marcel" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Jamie" dst="Wright" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Jamie" dst="Jackson" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Jamie" dst="Fernand" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Jamie" dst="Soucy" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Jamie" dst="Ste_Julie" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Jamie" dst="Victoria" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Jamie" dst="Lessard" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Jamie" dst="Florient" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Jamie" dst="Marcoux" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Jamie" dst="Gavrel" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Jamie" dst="Bescherelle" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Jamie" dst="Pierre" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Jamie" dst="Rubin" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Jamie" dst="Olivier" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Jamie" dst="Boucherville" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Jamie" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Jamie" dst="Kansas" symmetrical="NO"><link_ctn id="120"/><link_ctn id="122"/></route>
+ <route src="Jamie" dst="King" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Jamie" dst="Lapointe" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Jamie" dst="Julian" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Jamie" dst="Lafontaine" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Jamie" dst="Gordon" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Jamie" dst="Drouin" symmetrical="NO"><link_ctn id="120"/><link_ctn id="123"/></route>
+ <route src="Jamie" dst="Robert" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Jamie" dst="Jocelyne" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Jamie" dst="Stephen" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Jamie" dst="Provost" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Jamie" dst="Juneau" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Jamie" dst="Casavant" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Jamie" dst="St_Antoine" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Jamie" dst="Louis" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Jamie" dst="Julien" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Jamie" dst="St_Paul" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Jamie" dst="Mathematica" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Jamie" dst="LaTeX" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Jamie" dst="Sirois" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Jamie" dst="Monique" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Jamie" dst="Audy" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Jamie" dst="Bourassa" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Jamie" dst="OHara" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Jamie" dst="Boston" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Jamie" dst="Papineau" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Jamie" dst="Fraser" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Jamie" dst="Browne" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Jamie" dst="SunOS" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Jamie" dst="Varennes" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Jamie" dst="Jacques" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Jamie" dst="Thierry" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Jamie" dst="Lachapelle" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Jamie" dst="kV" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Jamie" dst="Yolande" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Jamie" dst="Pronovost" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Jamie" dst="SPICE" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Jamie" dst="Europe" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Jamie" dst="Roy" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Jamie" dst="Amadeus" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Jamie" dst="Intel" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Jamie" dst="Cambridge" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Jamie" dst="Tremblay" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Jamie" dst="UNIX" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Jamie" dst="Domey" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="40"/></route>
+ <route src="Jamie" dst="St_Bruno" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Jamie" dst="Jean_Claude" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Jamie" dst="Doyon" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Jamie" dst="Fafard" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Jamie" dst="Croteau" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Jamie" dst="Dodge" symmetrical="NO"><link_ctn id="120"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Rubin" dst="Jacquelin" symmetrical="NO"><link_ctn id="144"/><link_ctn id="145"/></route>
+ <route src="Rubin" dst="Boivin" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Rubin" dst="Jean_Yves" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Rubin" dst="TeX" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Rubin" dst="Geoff" symmetrical="NO"><link_ctn id="144"/></route>
+ <route src="Rubin" dst="Disney" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Rubin" dst="iRMX" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Rubin" dst="McGee" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Rubin" dst="Gatien" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Rubin" dst="Laroche" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Rubin" dst="Tanguay" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Rubin" dst="Morin" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Rubin" dst="Ethernet" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Rubin" dst="Bellemarre" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Rubin" dst="Kuenning" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Rubin" dst="Gaston" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Rubin" dst="Harry" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Rubin" dst="Bousquet" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Rubin" dst="Paul" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Rubin" dst="St_Jean" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Rubin" dst="Jill" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Rubin" dst="Marcel" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Rubin" dst="Wright" symmetrical="NO"><link_ctn id="144"/><link_ctn id="147"/></route>
+ <route src="Rubin" dst="Jackson" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Rubin" dst="Fernand" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Rubin" dst="Soucy" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Rubin" dst="Ste_Julie" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Rubin" dst="Victoria" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Rubin" dst="Lessard" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Rubin" dst="Florient" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Rubin" dst="Marcoux" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Rubin" dst="Gavrel" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Rubin" dst="Bescherelle" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Rubin" dst="Pierre" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Rubin" dst="Jamie" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Rubin" dst="Olivier" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Rubin" dst="Boucherville" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Rubin" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Rubin" dst="Kansas" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Rubin" dst="King" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Rubin" dst="Lapointe" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Rubin" dst="Julian" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Rubin" dst="Lafontaine" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Rubin" dst="Gordon" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Rubin" dst="Drouin" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Rubin" dst="Robert" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Rubin" dst="Jocelyne" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Rubin" dst="Stephen" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Rubin" dst="Provost" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Rubin" dst="Juneau" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Rubin" dst="Casavant" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Rubin" dst="St_Antoine" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Rubin" dst="Louis" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Rubin" dst="Julien" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Rubin" dst="St_Paul" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Rubin" dst="Mathematica" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Rubin" dst="LaTeX" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Rubin" dst="Sirois" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Rubin" dst="Monique" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Rubin" dst="Audy" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Rubin" dst="Bourassa" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Rubin" dst="OHara" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Rubin" dst="Boston" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Rubin" dst="Papineau" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Rubin" dst="Fraser" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Rubin" dst="Browne" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Rubin" dst="SunOS" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Rubin" dst="Varennes" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Rubin" dst="Jacques" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Rubin" dst="Thierry" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Rubin" dst="Lachapelle" symmetrical="NO"><link_ctn id="144"/><link_ctn id="146"/></route>
+ <route src="Rubin" dst="kV" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Rubin" dst="Yolande" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Rubin" dst="Pronovost" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Rubin" dst="SPICE" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Rubin" dst="Europe" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Rubin" dst="Roy" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Rubin" dst="Amadeus" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Rubin" dst="Intel" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Rubin" dst="Cambridge" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Rubin" dst="Tremblay" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Rubin" dst="UNIX" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Rubin" dst="Domey" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Rubin" dst="St_Bruno" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Rubin" dst="Jean_Claude" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Rubin" dst="Doyon" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Rubin" dst="Fafard" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Rubin" dst="Croteau" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Rubin" dst="Dodge" symmetrical="NO"><link_ctn id="144"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Olivier" dst="Jacquelin" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Olivier" dst="Boivin" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Olivier" dst="Jean_Yves" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Olivier" dst="TeX" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Olivier" dst="Geoff" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Olivier" dst="Disney" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Olivier" dst="iRMX" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Olivier" dst="McGee" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Olivier" dst="Gatien" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Olivier" dst="Laroche" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Olivier" dst="Tanguay" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Olivier" dst="Morin" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Olivier" dst="Ethernet" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Olivier" dst="Bellemarre" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Olivier" dst="Kuenning" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Olivier" dst="Gaston" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Olivier" dst="Harry" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Olivier" dst="Bousquet" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Olivier" dst="Paul" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Olivier" dst="St_Jean" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Olivier" dst="Jill" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Olivier" dst="Marcel" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Olivier" dst="Wright" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Olivier" dst="Jackson" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Olivier" dst="Fernand" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Olivier" dst="Soucy" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Olivier" dst="Ste_Julie" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Olivier" dst="Victoria" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Olivier" dst="Lessard" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Olivier" dst="Florient" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Olivier" dst="Marcoux" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Olivier" dst="Gavrel" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Olivier" dst="Bescherelle" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Olivier" dst="Pierre" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Olivier" dst="Jamie" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Olivier" dst="Rubin" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Olivier" dst="Boucherville" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Olivier" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Olivier" dst="Kansas" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Olivier" dst="King" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Olivier" dst="Lapointe" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Olivier" dst="Julian" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Olivier" dst="Lafontaine" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Olivier" dst="Gordon" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Olivier" dst="Drouin" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Olivier" dst="Robert" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Olivier" dst="Jocelyne" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Olivier" dst="Stephen" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Olivier" dst="Provost" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Olivier" dst="Juneau" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Olivier" dst="Casavant" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Olivier" dst="St_Antoine" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Olivier" dst="Louis" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Olivier" dst="Julien" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Olivier" dst="St_Paul" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Olivier" dst="Mathematica" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Olivier" dst="LaTeX" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Olivier" dst="Sirois" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Olivier" dst="Monique" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Olivier" dst="Audy" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Olivier" dst="Bourassa" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Olivier" dst="OHara" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Olivier" dst="Boston" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Olivier" dst="Papineau" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Olivier" dst="Fraser" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Olivier" dst="Browne" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Olivier" dst="SunOS" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Olivier" dst="Varennes" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Olivier" dst="Jacques" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Olivier" dst="Thierry" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Olivier" dst="Lachapelle" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Olivier" dst="kV" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Olivier" dst="Yolande" symmetrical="NO"><link_ctn id="171"/><link_ctn id="168"/></route>
+ <route src="Olivier" dst="Pronovost" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Olivier" dst="SPICE" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Olivier" dst="Europe" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Olivier" dst="Roy" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Olivier" dst="Amadeus" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Olivier" dst="Intel" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Olivier" dst="Cambridge" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Olivier" dst="Tremblay" symmetrical="NO"><link_ctn id="171"/><link_ctn id="170"/></route>
+ <route src="Olivier" dst="UNIX" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Olivier" dst="Domey" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Olivier" dst="St_Bruno" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Olivier" dst="Jean_Claude" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Olivier" dst="Doyon" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Olivier" dst="Fafard" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Olivier" dst="Croteau" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Olivier" dst="Dodge" symmetrical="NO"><link_ctn id="171"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Boucherville" dst="Jacquelin" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Boucherville" dst="Boivin" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Boucherville" dst="Jean_Yves" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Boucherville" dst="TeX" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Boucherville" dst="Geoff" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Boucherville" dst="Disney" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Boucherville" dst="iRMX" symmetrical="NO"><link_ctn id="172"/></route>
+ <route src="Boucherville" dst="McGee" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Boucherville" dst="Gatien" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Boucherville" dst="Laroche" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/></route>
+ <route src="Boucherville" dst="Tanguay" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Boucherville" dst="Morin" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Boucherville" dst="Ethernet" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Boucherville" dst="Bellemarre" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Boucherville" dst="Kuenning" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Boucherville" dst="Gaston" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Boucherville" dst="Harry" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Boucherville" dst="Bousquet" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Boucherville" dst="Paul" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Boucherville" dst="St_Jean" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Boucherville" dst="Jill" symmetrical="NO"><link_ctn id="89"/><link_ctn id="90"/></route>
+ <route src="Boucherville" dst="Marcel" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Boucherville" dst="Wright" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Boucherville" dst="Jackson" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Boucherville" dst="Fernand" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Boucherville" dst="Soucy" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Boucherville" dst="Ste_Julie" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Boucherville" dst="Victoria" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Boucherville" dst="Lessard" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Boucherville" dst="Florient" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Boucherville" dst="Marcoux" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Boucherville" dst="Gavrel" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Boucherville" dst="Bescherelle" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Boucherville" dst="Pierre" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Boucherville" dst="Jamie" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Boucherville" dst="Rubin" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Boucherville" dst="Olivier" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Boucherville" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Boucherville" dst="Kansas" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Boucherville" dst="King" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Boucherville" dst="Lapointe" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Boucherville" dst="Julian" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Boucherville" dst="Lafontaine" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Boucherville" dst="Gordon" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Boucherville" dst="Drouin" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Boucherville" dst="Robert" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Boucherville" dst="Jocelyne" symmetrical="NO"><link_ctn id="173"/></route>
+ <route src="Boucherville" dst="Stephen" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Boucherville" dst="Provost" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Boucherville" dst="Juneau" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Boucherville" dst="Casavant" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Boucherville" dst="St_Antoine" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Boucherville" dst="Louis" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Boucherville" dst="Julien" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Boucherville" dst="St_Paul" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Boucherville" dst="Mathematica" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Boucherville" dst="LaTeX" symmetrical="NO"><link_ctn id="89"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Boucherville" dst="Sirois" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Boucherville" dst="Monique" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Boucherville" dst="Audy" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Boucherville" dst="Bourassa" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Boucherville" dst="OHara" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Boucherville" dst="Boston" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Boucherville" dst="Papineau" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Boucherville" dst="Fraser" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Boucherville" dst="Browne" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Boucherville" dst="SunOS" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Boucherville" dst="Varennes" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Boucherville" dst="Jacques" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Boucherville" dst="Thierry" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Boucherville" dst="Lachapelle" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Boucherville" dst="kV" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Boucherville" dst="Yolande" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Boucherville" dst="Pronovost" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Boucherville" dst="SPICE" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Boucherville" dst="Europe" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Boucherville" dst="Roy" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Boucherville" dst="Amadeus" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Boucherville" dst="Intel" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Boucherville" dst="Cambridge" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Boucherville" dst="Tremblay" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Boucherville" dst="UNIX" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Boucherville" dst="Domey" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Boucherville" dst="St_Bruno" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Boucherville" dst="Jean_Claude" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Boucherville" dst="Doyon" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Boucherville" dst="Fafard" symmetrical="NO"><link_ctn id="89"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Boucherville" dst="Croteau" symmetrical="NO"><link_ctn id="175"/></route>
+ <route src="Boucherville" dst="Dodge" symmetrical="NO"><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Pointe_Claire" dst="Jacquelin" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Pointe_Claire" dst="Boivin" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Pointe_Claire" dst="Jean_Yves" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Pointe_Claire" dst="TeX" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Pointe_Claire" dst="Geoff" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Pointe_Claire" dst="Disney" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Pointe_Claire" dst="iRMX" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Pointe_Claire" dst="McGee" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Pointe_Claire" dst="Gatien" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Pointe_Claire" dst="Laroche" symmetrical="NO"><link_ctn id="184"/></route>
+ <route src="Pointe_Claire" dst="Tanguay" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Pointe_Claire" dst="Morin" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Pointe_Claire" dst="Ethernet" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Pointe_Claire" dst="Bellemarre" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Pointe_Claire" dst="Kuenning" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Pointe_Claire" dst="Gaston" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Pointe_Claire" dst="Harry" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Pointe_Claire" dst="Bousquet" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Pointe_Claire" dst="Paul" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Pointe_Claire" dst="St_Jean" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Pointe_Claire" dst="Jill" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Pointe_Claire" dst="Marcel" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Pointe_Claire" dst="Wright" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Pointe_Claire" dst="Jackson" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Pointe_Claire" dst="Fernand" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Pointe_Claire" dst="Soucy" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Pointe_Claire" dst="Ste_Julie" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Pointe_Claire" dst="Victoria" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Pointe_Claire" dst="Lessard" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Pointe_Claire" dst="Florient" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Pointe_Claire" dst="Marcoux" symmetrical="NO"><link_ctn id="184"/><link_ctn id="186"/></route>
+ <route src="Pointe_Claire" dst="Gavrel" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Pointe_Claire" dst="Bescherelle" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Pointe_Claire" dst="Pierre" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Pointe_Claire" dst="Jamie" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Pointe_Claire" dst="Rubin" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Pointe_Claire" dst="Olivier" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Pointe_Claire" dst="Boucherville" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Pointe_Claire" dst="Kansas" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Pointe_Claire" dst="King" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Pointe_Claire" dst="Lapointe" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Pointe_Claire" dst="Julian" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Pointe_Claire" dst="Lafontaine" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Pointe_Claire" dst="Gordon" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Pointe_Claire" dst="Drouin" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Pointe_Claire" dst="Robert" symmetrical="NO"><link_ctn id="184"/><link_ctn id="187"/></route>
+ <route src="Pointe_Claire" dst="Jocelyne" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Pointe_Claire" dst="Stephen" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Pointe_Claire" dst="Provost" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Pointe_Claire" dst="Juneau" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Pointe_Claire" dst="Casavant" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Pointe_Claire" dst="St_Antoine" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Pointe_Claire" dst="Louis" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Pointe_Claire" dst="Julien" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Pointe_Claire" dst="St_Paul" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Pointe_Claire" dst="Mathematica" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Pointe_Claire" dst="LaTeX" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Pointe_Claire" dst="Sirois" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Pointe_Claire" dst="Monique" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Pointe_Claire" dst="Audy" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Pointe_Claire" dst="Bourassa" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Pointe_Claire" dst="OHara" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Pointe_Claire" dst="Boston" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Pointe_Claire" dst="Papineau" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Pointe_Claire" dst="Fraser" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Pointe_Claire" dst="Browne" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Pointe_Claire" dst="SunOS" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Pointe_Claire" dst="Varennes" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Pointe_Claire" dst="Jacques" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Pointe_Claire" dst="Thierry" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Pointe_Claire" dst="Lachapelle" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Pointe_Claire" dst="kV" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Pointe_Claire" dst="Yolande" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Pointe_Claire" dst="Pronovost" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Pointe_Claire" dst="SPICE" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Pointe_Claire" dst="Europe" symmetrical="NO"><link_ctn id="184"/><link_ctn id="185"/></route>
+ <route src="Pointe_Claire" dst="Roy" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Pointe_Claire" dst="Amadeus" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Pointe_Claire" dst="Intel" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Pointe_Claire" dst="Cambridge" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Pointe_Claire" dst="Tremblay" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Pointe_Claire" dst="UNIX" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Pointe_Claire" dst="Domey" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Pointe_Claire" dst="St_Bruno" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Pointe_Claire" dst="Jean_Claude" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Pointe_Claire" dst="Doyon" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Pointe_Claire" dst="Fafard" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Pointe_Claire" dst="Croteau" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Pointe_Claire" dst="Dodge" symmetrical="NO"><link_ctn id="184"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Kansas" dst="Jacquelin" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Kansas" dst="Boivin" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="Kansas" dst="Jean_Yves" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Kansas" dst="TeX" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Kansas" dst="Geoff" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Kansas" dst="Disney" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Kansas" dst="iRMX" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Kansas" dst="McGee" symmetrical="NO"><link_ctn id="122"/></route>
+ <route src="Kansas" dst="Gatien" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Kansas" dst="Laroche" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Kansas" dst="Tanguay" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Kansas" dst="Morin" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Kansas" dst="Ethernet" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Kansas" dst="Bellemarre" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Kansas" dst="Kuenning" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Kansas" dst="Gaston" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Kansas" dst="Harry" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Kansas" dst="Bousquet" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Kansas" dst="Paul" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Kansas" dst="St_Jean" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Kansas" dst="Jill" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Kansas" dst="Marcel" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Kansas" dst="Wright" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Kansas" dst="Jackson" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Kansas" dst="Fernand" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Kansas" dst="Soucy" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Kansas" dst="Ste_Julie" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Kansas" dst="Victoria" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Kansas" dst="Lessard" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Kansas" dst="Florient" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Kansas" dst="Marcoux" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Kansas" dst="Gavrel" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Kansas" dst="Bescherelle" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Kansas" dst="Pierre" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Kansas" dst="Jamie" symmetrical="NO"><link_ctn id="122"/><link_ctn id="120"/></route>
+ <route src="Kansas" dst="Rubin" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Kansas" dst="Olivier" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Kansas" dst="Boucherville" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Kansas" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Kansas" dst="King" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Kansas" dst="Lapointe" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Kansas" dst="Julian" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Kansas" dst="Lafontaine" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Kansas" dst="Gordon" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Kansas" dst="Drouin" symmetrical="NO"><link_ctn id="122"/><link_ctn id="123"/></route>
+ <route src="Kansas" dst="Robert" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Kansas" dst="Jocelyne" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Kansas" dst="Stephen" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Kansas" dst="Provost" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Kansas" dst="Juneau" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Kansas" dst="Casavant" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Kansas" dst="St_Antoine" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Kansas" dst="Louis" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Kansas" dst="Julien" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Kansas" dst="St_Paul" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Kansas" dst="Mathematica" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Kansas" dst="LaTeX" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Kansas" dst="Sirois" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Kansas" dst="Monique" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Kansas" dst="Audy" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Kansas" dst="Bourassa" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Kansas" dst="OHara" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Kansas" dst="Boston" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Kansas" dst="Papineau" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Kansas" dst="Fraser" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Kansas" dst="Browne" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Kansas" dst="SunOS" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Kansas" dst="Varennes" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Kansas" dst="Jacques" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Kansas" dst="Thierry" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Kansas" dst="Lachapelle" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Kansas" dst="kV" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Kansas" dst="Yolande" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Kansas" dst="Pronovost" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Kansas" dst="SPICE" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Kansas" dst="Europe" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Kansas" dst="Roy" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Kansas" dst="Amadeus" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Kansas" dst="Intel" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Kansas" dst="Cambridge" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Kansas" dst="Tremblay" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Kansas" dst="UNIX" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Kansas" dst="Domey" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="40"/></route>
+ <route src="Kansas" dst="St_Bruno" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Kansas" dst="Jean_Claude" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Kansas" dst="Doyon" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Kansas" dst="Fafard" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Kansas" dst="Croteau" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Kansas" dst="Dodge" symmetrical="NO"><link_ctn id="122"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="King" dst="Jacquelin" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="King" dst="Boivin" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="King" dst="Jean_Yves" symmetrical="NO"><link_ctn id="137"/><link_ctn id="138"/></route>
+ <route src="King" dst="TeX" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="King" dst="Geoff" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="King" dst="Disney" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="King" dst="iRMX" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="King" dst="McGee" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="King" dst="Gatien" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="King" dst="Laroche" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="King" dst="Tanguay" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="King" dst="Morin" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="King" dst="Ethernet" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="King" dst="Bellemarre" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="King" dst="Kuenning" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="King" dst="Gaston" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="King" dst="Harry" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="King" dst="Bousquet" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="King" dst="Paul" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="King" dst="St_Jean" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="King" dst="Jill" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="King" dst="Marcel" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="King" dst="Wright" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="King" dst="Jackson" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="62"/></route>
+ <route src="King" dst="Fernand" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="King" dst="Soucy" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="King" dst="Ste_Julie" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="King" dst="Victoria" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="King" dst="Lessard" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="King" dst="Florient" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="King" dst="Marcoux" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="King" dst="Gavrel" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="King" dst="Bescherelle" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="King" dst="Pierre" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="King" dst="Jamie" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="King" dst="Rubin" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="King" dst="Olivier" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="King" dst="Boucherville" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="King" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="King" dst="Kansas" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="King" dst="Lapointe" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="King" dst="Julian" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="King" dst="Lafontaine" symmetrical="NO"><link_ctn id="137"/><link_ctn id="139"/></route>
+ <route src="King" dst="Gordon" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="King" dst="Drouin" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="King" dst="Robert" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="King" dst="Jocelyne" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="King" dst="Stephen" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="King" dst="Provost" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="King" dst="Juneau" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="King" dst="Casavant" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="King" dst="St_Antoine" symmetrical="NO"><link_ctn id="137"/></route>
+ <route src="King" dst="Louis" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="King" dst="Julien" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="King" dst="St_Paul" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="King" dst="Mathematica" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="King" dst="LaTeX" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="King" dst="Sirois" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="King" dst="Monique" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="King" dst="Audy" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="King" dst="Bourassa" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="King" dst="OHara" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="King" dst="Boston" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="King" dst="Papineau" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="King" dst="Fraser" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="King" dst="Browne" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="King" dst="SunOS" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="King" dst="Varennes" symmetrical="NO"><link_ctn id="137"/><link_ctn id="136"/></route>
+ <route src="King" dst="Jacques" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="King" dst="Thierry" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="King" dst="Lachapelle" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="King" dst="kV" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="King" dst="Yolande" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="King" dst="Pronovost" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="King" dst="SPICE" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="King" dst="Europe" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="King" dst="Roy" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="King" dst="Amadeus" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="King" dst="Intel" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="King" dst="Cambridge" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="King" dst="Tremblay" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="King" dst="UNIX" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="King" dst="Domey" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="King" dst="St_Bruno" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="King" dst="Jean_Claude" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="King" dst="Doyon" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="King" dst="Fafard" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="King" dst="Croteau" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="King" dst="Dodge" symmetrical="NO"><link_ctn id="137"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Lapointe" dst="Jacquelin" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Lapointe" dst="Boivin" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Lapointe" dst="Jean_Yves" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Lapointe" dst="TeX" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Lapointe" dst="Geoff" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Lapointe" dst="Disney" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Lapointe" dst="iRMX" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Lapointe" dst="McGee" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Lapointe" dst="Gatien" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Lapointe" dst="Laroche" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Lapointe" dst="Tanguay" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Lapointe" dst="Morin" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Lapointe" dst="Ethernet" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Lapointe" dst="Bellemarre" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Lapointe" dst="Kuenning" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Lapointe" dst="Gaston" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Lapointe" dst="Harry" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Lapointe" dst="Bousquet" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Lapointe" dst="Paul" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Lapointe" dst="St_Jean" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Lapointe" dst="Jill" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Lapointe" dst="Marcel" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Lapointe" dst="Wright" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Lapointe" dst="Jackson" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Lapointe" dst="Fernand" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Lapointe" dst="Soucy" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Lapointe" dst="Ste_Julie" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Lapointe" dst="Victoria" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Lapointe" dst="Lessard" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Lapointe" dst="Florient" symmetrical="NO"><link_ctn id="181"/></route>
+ <route src="Lapointe" dst="Marcoux" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Lapointe" dst="Gavrel" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Lapointe" dst="Bescherelle" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Lapointe" dst="Pierre" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Lapointe" dst="Jamie" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Lapointe" dst="Rubin" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Lapointe" dst="Olivier" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Lapointe" dst="Boucherville" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Lapointe" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Lapointe" dst="Kansas" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Lapointe" dst="King" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Lapointe" dst="Julian" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Lapointe" dst="Lafontaine" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Lapointe" dst="Gordon" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Lapointe" dst="Drouin" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Lapointe" dst="Robert" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Lapointe" dst="Jocelyne" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Lapointe" dst="Stephen" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Lapointe" dst="Provost" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Lapointe" dst="Juneau" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Lapointe" dst="Casavant" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Lapointe" dst="St_Antoine" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Lapointe" dst="Louis" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Lapointe" dst="Julien" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Lapointe" dst="St_Paul" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Lapointe" dst="Mathematica" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Lapointe" dst="LaTeX" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Lapointe" dst="Sirois" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Lapointe" dst="Monique" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Lapointe" dst="Audy" symmetrical="NO"><link_ctn id="183"/></route>
+ <route src="Lapointe" dst="Bourassa" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Lapointe" dst="OHara" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Lapointe" dst="Boston" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Lapointe" dst="Papineau" symmetrical="NO"><link_ctn id="182"/></route>
+ <route src="Lapointe" dst="Fraser" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Lapointe" dst="Browne" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Lapointe" dst="SunOS" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Lapointe" dst="Varennes" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Lapointe" dst="Jacques" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Lapointe" dst="Thierry" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Lapointe" dst="Lachapelle" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Lapointe" dst="kV" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Lapointe" dst="Yolande" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Lapointe" dst="Pronovost" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Lapointe" dst="SPICE" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Lapointe" dst="Europe" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Lapointe" dst="Roy" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Lapointe" dst="Amadeus" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Lapointe" dst="Intel" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Lapointe" dst="Cambridge" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Lapointe" dst="Tremblay" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Lapointe" dst="UNIX" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Lapointe" dst="Domey" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Lapointe" dst="St_Bruno" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Lapointe" dst="Jean_Claude" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Lapointe" dst="Doyon" symmetrical="NO"><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Lapointe" dst="Fafard" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Lapointe" dst="Croteau" symmetrical="NO"><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Lapointe" dst="Dodge" symmetrical="NO"><link_ctn id="180"/></route>
+ <route src="Julian" dst="Jacquelin" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Julian" dst="Boivin" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Julian" dst="Jean_Yves" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Julian" dst="TeX" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Julian" dst="Geoff" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Julian" dst="Disney" symmetrical="NO"><link_ctn id="111"/></route>
+ <route src="Julian" dst="iRMX" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Julian" dst="McGee" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Julian" dst="Gatien" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Julian" dst="Laroche" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Julian" dst="Tanguay" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Julian" dst="Morin" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Julian" dst="Ethernet" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Julian" dst="Bellemarre" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/></route>
+ <route src="Julian" dst="Kuenning" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Julian" dst="Gaston" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Julian" dst="Harry" symmetrical="NO"><link_ctn id="108"/></route>
+ <route src="Julian" dst="Bousquet" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Julian" dst="Paul" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Julian" dst="St_Jean" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Julian" dst="Jill" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Julian" dst="Marcel" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Julian" dst="Wright" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Julian" dst="Jackson" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Julian" dst="Fernand" symmetrical="NO"><link_ctn id="109"/></route>
+ <route src="Julian" dst="Soucy" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Julian" dst="Ste_Julie" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Julian" dst="Victoria" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Julian" dst="Lessard" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Julian" dst="Florient" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Julian" dst="Marcoux" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Julian" dst="Gavrel" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Julian" dst="Bescherelle" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Julian" dst="Pierre" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Julian" dst="Jamie" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Julian" dst="Rubin" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Julian" dst="Olivier" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Julian" dst="Boucherville" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Julian" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Julian" dst="Kansas" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Julian" dst="King" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Julian" dst="Lapointe" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Julian" dst="Lafontaine" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Julian" dst="Gordon" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Julian" dst="Drouin" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Julian" dst="Robert" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Julian" dst="Jocelyne" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Julian" dst="Stephen" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Julian" dst="Provost" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Julian" dst="Juneau" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Julian" dst="Casavant" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Julian" dst="St_Antoine" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Julian" dst="Louis" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Julian" dst="Julien" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Julian" dst="St_Paul" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Julian" dst="Mathematica" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Julian" dst="LaTeX" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Julian" dst="Sirois" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Julian" dst="Monique" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Julian" dst="Audy" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Julian" dst="Bourassa" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Julian" dst="OHara" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Julian" dst="Boston" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Julian" dst="Papineau" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Julian" dst="Fraser" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Julian" dst="Browne" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Julian" dst="SunOS" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Julian" dst="Varennes" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Julian" dst="Jacques" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Julian" dst="Thierry" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Julian" dst="Lachapelle" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Julian" dst="kV" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Julian" dst="Yolande" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Julian" dst="Pronovost" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Julian" dst="SPICE" symmetrical="NO"><link_ctn id="110"/></route>
+ <route src="Julian" dst="Europe" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Julian" dst="Roy" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Julian" dst="Amadeus" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Julian" dst="Intel" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Julian" dst="Cambridge" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Julian" dst="Tremblay" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Julian" dst="UNIX" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Julian" dst="Domey" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Julian" dst="St_Bruno" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Julian" dst="Jean_Claude" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Julian" dst="Doyon" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Julian" dst="Fafard" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Julian" dst="Croteau" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Julian" dst="Dodge" symmetrical="NO"><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Lafontaine" dst="Jacquelin" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Lafontaine" dst="Boivin" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Lafontaine" dst="Jean_Yves" symmetrical="NO"><link_ctn id="139"/><link_ctn id="138"/></route>
+ <route src="Lafontaine" dst="TeX" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Lafontaine" dst="Geoff" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="Lafontaine" dst="Disney" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Lafontaine" dst="iRMX" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Lafontaine" dst="McGee" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Lafontaine" dst="Gatien" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Lafontaine" dst="Laroche" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Lafontaine" dst="Tanguay" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Lafontaine" dst="Morin" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Lafontaine" dst="Ethernet" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Lafontaine" dst="Bellemarre" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Lafontaine" dst="Kuenning" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Lafontaine" dst="Gaston" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Lafontaine" dst="Harry" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Lafontaine" dst="Bousquet" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Lafontaine" dst="Paul" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Lafontaine" dst="St_Jean" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Lafontaine" dst="Jill" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Lafontaine" dst="Marcel" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Lafontaine" dst="Wright" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Lafontaine" dst="Jackson" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="62"/></route>
+ <route src="Lafontaine" dst="Fernand" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Lafontaine" dst="Soucy" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Lafontaine" dst="Ste_Julie" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Lafontaine" dst="Victoria" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Lafontaine" dst="Lessard" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Lafontaine" dst="Florient" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Lafontaine" dst="Marcoux" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Lafontaine" dst="Gavrel" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Lafontaine" dst="Bescherelle" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Lafontaine" dst="Pierre" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Lafontaine" dst="Jamie" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Lafontaine" dst="Rubin" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Lafontaine" dst="Olivier" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Lafontaine" dst="Boucherville" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Lafontaine" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Lafontaine" dst="Kansas" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Lafontaine" dst="King" symmetrical="NO"><link_ctn id="139"/><link_ctn id="137"/></route>
+ <route src="Lafontaine" dst="Lapointe" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Lafontaine" dst="Julian" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Lafontaine" dst="Gordon" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Lafontaine" dst="Drouin" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Lafontaine" dst="Robert" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Lafontaine" dst="Jocelyne" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Lafontaine" dst="Stephen" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Lafontaine" dst="Provost" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Lafontaine" dst="Juneau" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Lafontaine" dst="Casavant" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Lafontaine" dst="St_Antoine" symmetrical="NO"><link_ctn id="139"/></route>
+ <route src="Lafontaine" dst="Louis" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Lafontaine" dst="Julien" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Lafontaine" dst="St_Paul" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Lafontaine" dst="Mathematica" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Lafontaine" dst="LaTeX" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Lafontaine" dst="Sirois" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Lafontaine" dst="Monique" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Lafontaine" dst="Audy" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Lafontaine" dst="Bourassa" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Lafontaine" dst="OHara" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Lafontaine" dst="Boston" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Lafontaine" dst="Papineau" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Lafontaine" dst="Fraser" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Lafontaine" dst="Browne" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Lafontaine" dst="SunOS" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Lafontaine" dst="Varennes" symmetrical="NO"><link_ctn id="139"/><link_ctn id="136"/></route>
+ <route src="Lafontaine" dst="Jacques" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Lafontaine" dst="Thierry" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Lafontaine" dst="Lachapelle" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Lafontaine" dst="kV" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Lafontaine" dst="Yolande" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Lafontaine" dst="Pronovost" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Lafontaine" dst="SPICE" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Lafontaine" dst="Europe" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Lafontaine" dst="Roy" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Lafontaine" dst="Amadeus" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Lafontaine" dst="Intel" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Lafontaine" dst="Cambridge" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Lafontaine" dst="Tremblay" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Lafontaine" dst="UNIX" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Lafontaine" dst="Domey" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Lafontaine" dst="St_Bruno" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Lafontaine" dst="Jean_Claude" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Lafontaine" dst="Doyon" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Lafontaine" dst="Fafard" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Lafontaine" dst="Croteau" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Lafontaine" dst="Dodge" symmetrical="NO"><link_ctn id="139"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Gordon" dst="Jacquelin" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Gordon" dst="Boivin" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Gordon" dst="Jean_Yves" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Gordon" dst="TeX" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Gordon" dst="Geoff" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Gordon" dst="Disney" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Gordon" dst="iRMX" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Gordon" dst="McGee" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Gordon" dst="Gatien" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Gordon" dst="Laroche" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Gordon" dst="Tanguay" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Gordon" dst="Morin" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Gordon" dst="Ethernet" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Gordon" dst="Bellemarre" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Gordon" dst="Kuenning" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Gordon" dst="Gaston" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Gordon" dst="Harry" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Gordon" dst="Bousquet" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Gordon" dst="Paul" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Gordon" dst="St_Jean" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Gordon" dst="Jill" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Gordon" dst="Marcel" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Gordon" dst="Wright" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Gordon" dst="Jackson" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Gordon" dst="Fernand" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Gordon" dst="Soucy" symmetrical="NO"><link_ctn id="191"/></route>
+ <route src="Gordon" dst="Ste_Julie" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Gordon" dst="Victoria" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Gordon" dst="Lessard" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Gordon" dst="Florient" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Gordon" dst="Marcoux" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Gordon" dst="Gavrel" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Gordon" dst="Bescherelle" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Gordon" dst="Pierre" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Gordon" dst="Jamie" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Gordon" dst="Rubin" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Gordon" dst="Olivier" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Gordon" dst="Boucherville" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Gordon" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Gordon" dst="Kansas" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Gordon" dst="King" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Gordon" dst="Lapointe" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Gordon" dst="Julian" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Gordon" dst="Lafontaine" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Gordon" dst="Drouin" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Gordon" dst="Robert" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Gordon" dst="Jocelyne" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Gordon" dst="Stephen" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Gordon" dst="Provost" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Gordon" dst="Juneau" symmetrical="NO"><link_ctn id="189"/></route>
+ <route src="Gordon" dst="Casavant" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Gordon" dst="St_Antoine" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Gordon" dst="Louis" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Gordon" dst="Julien" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Gordon" dst="St_Paul" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Gordon" dst="Mathematica" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Gordon" dst="LaTeX" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Gordon" dst="Sirois" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Gordon" dst="Monique" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Gordon" dst="Audy" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Gordon" dst="Bourassa" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Gordon" dst="OHara" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Gordon" dst="Boston" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Gordon" dst="Papineau" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Gordon" dst="Fraser" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Gordon" dst="Browne" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Gordon" dst="SunOS" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Gordon" dst="Varennes" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Gordon" dst="Jacques" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Gordon" dst="Thierry" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Gordon" dst="Lachapelle" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Gordon" dst="kV" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Gordon" dst="Yolande" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Gordon" dst="Pronovost" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Gordon" dst="SPICE" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Gordon" dst="Europe" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Gordon" dst="Roy" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Gordon" dst="Amadeus" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Gordon" dst="Intel" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Gordon" dst="Cambridge" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Gordon" dst="Tremblay" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Gordon" dst="UNIX" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Gordon" dst="Domey" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Gordon" dst="St_Bruno" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Gordon" dst="Jean_Claude" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Gordon" dst="Doyon" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Gordon" dst="Fafard" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Gordon" dst="Croteau" symmetrical="NO"><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Gordon" dst="Dodge" symmetrical="NO"><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Drouin" dst="Jacquelin" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Drouin" dst="Boivin" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="Drouin" dst="Jean_Yves" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Drouin" dst="TeX" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Drouin" dst="Geoff" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Drouin" dst="Disney" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Drouin" dst="iRMX" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Drouin" dst="McGee" symmetrical="NO"><link_ctn id="123"/></route>
+ <route src="Drouin" dst="Gatien" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Drouin" dst="Laroche" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Drouin" dst="Tanguay" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Drouin" dst="Morin" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Drouin" dst="Ethernet" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Drouin" dst="Bellemarre" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Drouin" dst="Kuenning" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Drouin" dst="Gaston" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Drouin" dst="Harry" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Drouin" dst="Bousquet" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Drouin" dst="Paul" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Drouin" dst="St_Jean" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Drouin" dst="Jill" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Drouin" dst="Marcel" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Drouin" dst="Wright" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Drouin" dst="Jackson" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Drouin" dst="Fernand" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Drouin" dst="Soucy" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Drouin" dst="Ste_Julie" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Drouin" dst="Victoria" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Drouin" dst="Lessard" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Drouin" dst="Florient" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Drouin" dst="Marcoux" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Drouin" dst="Gavrel" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Drouin" dst="Bescherelle" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Drouin" dst="Pierre" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Drouin" dst="Jamie" symmetrical="NO"><link_ctn id="123"/><link_ctn id="120"/></route>
+ <route src="Drouin" dst="Rubin" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Drouin" dst="Olivier" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Drouin" dst="Boucherville" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Drouin" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Drouin" dst="Kansas" symmetrical="NO"><link_ctn id="123"/><link_ctn id="122"/></route>
+ <route src="Drouin" dst="King" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Drouin" dst="Lapointe" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Drouin" dst="Julian" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Drouin" dst="Lafontaine" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Drouin" dst="Gordon" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Drouin" dst="Robert" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Drouin" dst="Jocelyne" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Drouin" dst="Stephen" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Drouin" dst="Provost" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Drouin" dst="Juneau" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Drouin" dst="Casavant" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Drouin" dst="St_Antoine" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Drouin" dst="Louis" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Drouin" dst="Julien" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Drouin" dst="St_Paul" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Drouin" dst="Mathematica" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Drouin" dst="LaTeX" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Drouin" dst="Sirois" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Drouin" dst="Monique" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Drouin" dst="Audy" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Drouin" dst="Bourassa" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Drouin" dst="OHara" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Drouin" dst="Boston" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Drouin" dst="Papineau" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Drouin" dst="Fraser" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Drouin" dst="Browne" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Drouin" dst="SunOS" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Drouin" dst="Varennes" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Drouin" dst="Jacques" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Drouin" dst="Thierry" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Drouin" dst="Lachapelle" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Drouin" dst="kV" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Drouin" dst="Yolande" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Drouin" dst="Pronovost" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Drouin" dst="SPICE" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Drouin" dst="Europe" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Drouin" dst="Roy" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Drouin" dst="Amadeus" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Drouin" dst="Intel" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Drouin" dst="Cambridge" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Drouin" dst="Tremblay" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Drouin" dst="UNIX" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Drouin" dst="Domey" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="40"/></route>
+ <route src="Drouin" dst="St_Bruno" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Drouin" dst="Jean_Claude" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Drouin" dst="Doyon" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Drouin" dst="Fafard" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Drouin" dst="Croteau" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Drouin" dst="Dodge" symmetrical="NO"><link_ctn id="123"/><link_ctn id="41"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Robert" dst="Jacquelin" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Robert" dst="Boivin" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Robert" dst="Jean_Yves" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Robert" dst="TeX" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Robert" dst="Geoff" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Robert" dst="Disney" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Robert" dst="iRMX" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Robert" dst="McGee" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Robert" dst="Gatien" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Robert" dst="Laroche" symmetrical="NO"><link_ctn id="187"/></route>
+ <route src="Robert" dst="Tanguay" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Robert" dst="Morin" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Robert" dst="Ethernet" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Robert" dst="Bellemarre" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Robert" dst="Kuenning" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Robert" dst="Gaston" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Robert" dst="Harry" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Robert" dst="Bousquet" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Robert" dst="Paul" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Robert" dst="St_Jean" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Robert" dst="Jill" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Robert" dst="Marcel" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Robert" dst="Wright" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Robert" dst="Jackson" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Robert" dst="Fernand" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Robert" dst="Soucy" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Robert" dst="Ste_Julie" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Robert" dst="Victoria" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Robert" dst="Lessard" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Robert" dst="Florient" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Robert" dst="Marcoux" symmetrical="NO"><link_ctn id="187"/><link_ctn id="186"/></route>
+ <route src="Robert" dst="Gavrel" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Robert" dst="Bescherelle" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Robert" dst="Pierre" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Robert" dst="Jamie" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Robert" dst="Rubin" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Robert" dst="Olivier" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Robert" dst="Boucherville" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Robert" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="187"/><link_ctn id="184"/></route>
+ <route src="Robert" dst="Kansas" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Robert" dst="King" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Robert" dst="Lapointe" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Robert" dst="Julian" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Robert" dst="Lafontaine" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Robert" dst="Gordon" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Robert" dst="Drouin" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Robert" dst="Jocelyne" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Robert" dst="Stephen" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Robert" dst="Provost" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Robert" dst="Juneau" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Robert" dst="Casavant" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Robert" dst="St_Antoine" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Robert" dst="Louis" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Robert" dst="Julien" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Robert" dst="St_Paul" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Robert" dst="Mathematica" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Robert" dst="LaTeX" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Robert" dst="Sirois" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Robert" dst="Monique" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Robert" dst="Audy" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Robert" dst="Bourassa" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Robert" dst="OHara" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Robert" dst="Boston" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Robert" dst="Papineau" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Robert" dst="Fraser" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Robert" dst="Browne" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Robert" dst="SunOS" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Robert" dst="Varennes" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Robert" dst="Jacques" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Robert" dst="Thierry" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Robert" dst="Lachapelle" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Robert" dst="kV" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Robert" dst="Yolande" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Robert" dst="Pronovost" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Robert" dst="SPICE" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Robert" dst="Europe" symmetrical="NO"><link_ctn id="187"/><link_ctn id="185"/></route>
+ <route src="Robert" dst="Roy" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Robert" dst="Amadeus" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Robert" dst="Intel" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Robert" dst="Cambridge" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Robert" dst="Tremblay" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Robert" dst="UNIX" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Robert" dst="Domey" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Robert" dst="St_Bruno" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Robert" dst="Jean_Claude" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Robert" dst="Doyon" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Robert" dst="Fafard" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Robert" dst="Croteau" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Robert" dst="Dodge" symmetrical="NO"><link_ctn id="187"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Jocelyne" dst="Jacquelin" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Jocelyne" dst="Boivin" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Jocelyne" dst="Jean_Yves" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Jocelyne" dst="TeX" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Jocelyne" dst="Geoff" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Jocelyne" dst="Disney" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Jocelyne" dst="iRMX" symmetrical="NO"><link_ctn id="173"/><link_ctn id="172"/></route>
+ <route src="Jocelyne" dst="McGee" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Jocelyne" dst="Gatien" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Jocelyne" dst="Laroche" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/></route>
+ <route src="Jocelyne" dst="Tanguay" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Jocelyne" dst="Morin" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Jocelyne" dst="Ethernet" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Jocelyne" dst="Bellemarre" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Jocelyne" dst="Kuenning" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Jocelyne" dst="Gaston" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Jocelyne" dst="Harry" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Jocelyne" dst="Bousquet" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Jocelyne" dst="Paul" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Jocelyne" dst="St_Jean" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Jocelyne" dst="Jill" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="90"/></route>
+ <route src="Jocelyne" dst="Marcel" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Jocelyne" dst="Wright" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Jocelyne" dst="Jackson" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Jocelyne" dst="Fernand" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Jocelyne" dst="Soucy" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Jocelyne" dst="Ste_Julie" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Jocelyne" dst="Victoria" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Jocelyne" dst="Lessard" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Jocelyne" dst="Florient" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Jocelyne" dst="Marcoux" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Jocelyne" dst="Gavrel" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Jocelyne" dst="Bescherelle" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Jocelyne" dst="Pierre" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Jocelyne" dst="Jamie" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Jocelyne" dst="Rubin" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Jocelyne" dst="Olivier" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Jocelyne" dst="Boucherville" symmetrical="NO"><link_ctn id="173"/></route>
+ <route src="Jocelyne" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Jocelyne" dst="Kansas" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Jocelyne" dst="King" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Jocelyne" dst="Lapointe" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Jocelyne" dst="Julian" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Jocelyne" dst="Lafontaine" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Jocelyne" dst="Gordon" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Jocelyne" dst="Drouin" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Jocelyne" dst="Robert" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Jocelyne" dst="Stephen" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Jocelyne" dst="Provost" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Jocelyne" dst="Juneau" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Jocelyne" dst="Casavant" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Jocelyne" dst="St_Antoine" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Jocelyne" dst="Louis" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Jocelyne" dst="Julien" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Jocelyne" dst="St_Paul" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Jocelyne" dst="Mathematica" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Jocelyne" dst="LaTeX" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Jocelyne" dst="Sirois" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Jocelyne" dst="Monique" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Jocelyne" dst="Audy" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Jocelyne" dst="Bourassa" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Jocelyne" dst="OHara" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Jocelyne" dst="Boston" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Jocelyne" dst="Papineau" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Jocelyne" dst="Fraser" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Jocelyne" dst="Browne" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Jocelyne" dst="SunOS" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Jocelyne" dst="Varennes" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Jocelyne" dst="Jacques" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Jocelyne" dst="Thierry" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Jocelyne" dst="Lachapelle" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Jocelyne" dst="kV" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Jocelyne" dst="Yolande" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Jocelyne" dst="Pronovost" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Jocelyne" dst="SPICE" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Jocelyne" dst="Europe" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Jocelyne" dst="Roy" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Jocelyne" dst="Amadeus" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Jocelyne" dst="Intel" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Jocelyne" dst="Cambridge" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Jocelyne" dst="Tremblay" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Jocelyne" dst="UNIX" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Jocelyne" dst="Domey" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Jocelyne" dst="St_Bruno" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Jocelyne" dst="Jean_Claude" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Jocelyne" dst="Doyon" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Jocelyne" dst="Fafard" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Jocelyne" dst="Croteau" symmetrical="NO"><link_ctn id="173"/><link_ctn id="175"/></route>
+ <route src="Jocelyne" dst="Dodge" symmetrical="NO"><link_ctn id="173"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Stephen" dst="Jacquelin" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Stephen" dst="Boivin" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Stephen" dst="Jean_Yves" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Stephen" dst="TeX" symmetrical="NO"><link_ctn id="101"/><link_ctn id="100"/></route>
+ <route src="Stephen" dst="Geoff" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Stephen" dst="Disney" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Stephen" dst="iRMX" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Stephen" dst="McGee" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Stephen" dst="Gatien" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Stephen" dst="Laroche" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Stephen" dst="Tanguay" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Stephen" dst="Morin" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Stephen" dst="Ethernet" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Stephen" dst="Bellemarre" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="34"/></route>
+ <route src="Stephen" dst="Kuenning" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Stephen" dst="Gaston" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Stephen" dst="Harry" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Stephen" dst="Bousquet" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Stephen" dst="Paul" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Stephen" dst="St_Jean" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Stephen" dst="Jill" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Stephen" dst="Marcel" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Stephen" dst="Wright" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Stephen" dst="Jackson" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Stephen" dst="Fernand" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Stephen" dst="Soucy" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Stephen" dst="Ste_Julie" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Stephen" dst="Victoria" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Stephen" dst="Lessard" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Stephen" dst="Florient" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Stephen" dst="Marcoux" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Stephen" dst="Gavrel" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Stephen" dst="Bescherelle" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Stephen" dst="Pierre" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Stephen" dst="Jamie" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Stephen" dst="Rubin" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Stephen" dst="Olivier" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Stephen" dst="Boucherville" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Stephen" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Stephen" dst="Kansas" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Stephen" dst="King" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Stephen" dst="Lapointe" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Stephen" dst="Julian" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Stephen" dst="Lafontaine" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Stephen" dst="Gordon" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Stephen" dst="Drouin" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Stephen" dst="Robert" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Stephen" dst="Jocelyne" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Stephen" dst="Provost" symmetrical="NO"><link_ctn id="101"/><link_ctn id="103"/></route>
+ <route src="Stephen" dst="Juneau" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Stephen" dst="Casavant" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Stephen" dst="St_Antoine" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Stephen" dst="Louis" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Stephen" dst="Julien" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Stephen" dst="St_Paul" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Stephen" dst="Mathematica" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Stephen" dst="LaTeX" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Stephen" dst="Sirois" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Stephen" dst="Monique" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Stephen" dst="Audy" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Stephen" dst="Bourassa" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Stephen" dst="OHara" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Stephen" dst="Boston" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Stephen" dst="Papineau" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Stephen" dst="Fraser" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Stephen" dst="Browne" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Stephen" dst="SunOS" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Stephen" dst="Varennes" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Stephen" dst="Jacques" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Stephen" dst="Thierry" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Stephen" dst="Lachapelle" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Stephen" dst="kV" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Stephen" dst="Yolande" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Stephen" dst="Pronovost" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Stephen" dst="SPICE" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Stephen" dst="Europe" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Stephen" dst="Roy" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Stephen" dst="Amadeus" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Stephen" dst="Intel" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Stephen" dst="Cambridge" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Stephen" dst="Tremblay" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Stephen" dst="UNIX" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Stephen" dst="Domey" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Stephen" dst="St_Bruno" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Stephen" dst="Jean_Claude" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Stephen" dst="Doyon" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Stephen" dst="Fafard" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Stephen" dst="Croteau" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Stephen" dst="Dodge" symmetrical="NO"><link_ctn id="101"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Provost" dst="Jacquelin" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Provost" dst="Boivin" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Provost" dst="Jean_Yves" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Provost" dst="TeX" symmetrical="NO"><link_ctn id="103"/><link_ctn id="100"/></route>
+ <route src="Provost" dst="Geoff" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Provost" dst="Disney" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Provost" dst="iRMX" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Provost" dst="McGee" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Provost" dst="Gatien" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Provost" dst="Laroche" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Provost" dst="Tanguay" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Provost" dst="Morin" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Provost" dst="Ethernet" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Provost" dst="Bellemarre" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="34"/></route>
+ <route src="Provost" dst="Kuenning" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Provost" dst="Gaston" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Provost" dst="Harry" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Provost" dst="Bousquet" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Provost" dst="Paul" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Provost" dst="St_Jean" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Provost" dst="Jill" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Provost" dst="Marcel" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Provost" dst="Wright" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Provost" dst="Jackson" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Provost" dst="Fernand" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Provost" dst="Soucy" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Provost" dst="Ste_Julie" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Provost" dst="Victoria" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Provost" dst="Lessard" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Provost" dst="Florient" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Provost" dst="Marcoux" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Provost" dst="Gavrel" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Provost" dst="Bescherelle" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Provost" dst="Pierre" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Provost" dst="Jamie" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Provost" dst="Rubin" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Provost" dst="Olivier" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Provost" dst="Boucherville" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Provost" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Provost" dst="Kansas" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Provost" dst="King" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Provost" dst="Lapointe" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Provost" dst="Julian" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Provost" dst="Lafontaine" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Provost" dst="Gordon" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Provost" dst="Drouin" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Provost" dst="Robert" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Provost" dst="Jocelyne" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Provost" dst="Stephen" symmetrical="NO"><link_ctn id="103"/><link_ctn id="101"/></route>
+ <route src="Provost" dst="Juneau" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Provost" dst="Casavant" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Provost" dst="St_Antoine" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Provost" dst="Louis" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Provost" dst="Julien" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Provost" dst="St_Paul" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Provost" dst="Mathematica" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Provost" dst="LaTeX" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Provost" dst="Sirois" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Provost" dst="Monique" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Provost" dst="Audy" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Provost" dst="Bourassa" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Provost" dst="OHara" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Provost" dst="Boston" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Provost" dst="Papineau" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Provost" dst="Fraser" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Provost" dst="Browne" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Provost" dst="SunOS" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Provost" dst="Varennes" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Provost" dst="Jacques" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Provost" dst="Thierry" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Provost" dst="Lachapelle" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Provost" dst="kV" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Provost" dst="Yolande" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Provost" dst="Pronovost" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Provost" dst="SPICE" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Provost" dst="Europe" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Provost" dst="Roy" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Provost" dst="Amadeus" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Provost" dst="Intel" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Provost" dst="Cambridge" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Provost" dst="Tremblay" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Provost" dst="UNIX" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Provost" dst="Domey" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Provost" dst="St_Bruno" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Provost" dst="Jean_Claude" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Provost" dst="Doyon" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Provost" dst="Fafard" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Provost" dst="Croteau" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Provost" dst="Dodge" symmetrical="NO"><link_ctn id="103"/><link_ctn id="35"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Juneau" dst="Jacquelin" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Juneau" dst="Boivin" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Juneau" dst="Jean_Yves" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Juneau" dst="TeX" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Juneau" dst="Geoff" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Juneau" dst="Disney" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Juneau" dst="iRMX" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Juneau" dst="McGee" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Juneau" dst="Gatien" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Juneau" dst="Laroche" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Juneau" dst="Tanguay" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Juneau" dst="Morin" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Juneau" dst="Ethernet" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Juneau" dst="Bellemarre" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Juneau" dst="Kuenning" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Juneau" dst="Gaston" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Juneau" dst="Harry" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Juneau" dst="Bousquet" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Juneau" dst="Paul" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Juneau" dst="St_Jean" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Juneau" dst="Jill" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Juneau" dst="Marcel" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Juneau" dst="Wright" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Juneau" dst="Jackson" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Juneau" dst="Fernand" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Juneau" dst="Soucy" symmetrical="NO"><link_ctn id="189"/><link_ctn id="191"/></route>
+ <route src="Juneau" dst="Ste_Julie" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Juneau" dst="Victoria" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Juneau" dst="Lessard" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Juneau" dst="Florient" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Juneau" dst="Marcoux" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Juneau" dst="Gavrel" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Juneau" dst="Bescherelle" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Juneau" dst="Pierre" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Juneau" dst="Jamie" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Juneau" dst="Rubin" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Juneau" dst="Olivier" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Juneau" dst="Boucherville" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Juneau" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Juneau" dst="Kansas" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Juneau" dst="King" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Juneau" dst="Lapointe" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Juneau" dst="Julian" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Juneau" dst="Lafontaine" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Juneau" dst="Gordon" symmetrical="NO"><link_ctn id="189"/></route>
+ <route src="Juneau" dst="Drouin" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Juneau" dst="Robert" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Juneau" dst="Jocelyne" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Juneau" dst="Stephen" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Juneau" dst="Provost" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Juneau" dst="Casavant" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Juneau" dst="St_Antoine" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Juneau" dst="Louis" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Juneau" dst="Julien" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Juneau" dst="St_Paul" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Juneau" dst="Mathematica" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Juneau" dst="LaTeX" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Juneau" dst="Sirois" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Juneau" dst="Monique" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Juneau" dst="Audy" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Juneau" dst="Bourassa" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Juneau" dst="OHara" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Juneau" dst="Boston" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Juneau" dst="Papineau" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Juneau" dst="Fraser" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Juneau" dst="Browne" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Juneau" dst="SunOS" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Juneau" dst="Varennes" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Juneau" dst="Jacques" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Juneau" dst="Thierry" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Juneau" dst="Lachapelle" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Juneau" dst="kV" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Juneau" dst="Yolande" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Juneau" dst="Pronovost" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Juneau" dst="SPICE" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Juneau" dst="Europe" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Juneau" dst="Roy" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Juneau" dst="Amadeus" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Juneau" dst="Intel" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Juneau" dst="Cambridge" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Juneau" dst="Tremblay" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Juneau" dst="UNIX" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Juneau" dst="Domey" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Juneau" dst="St_Bruno" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Juneau" dst="Jean_Claude" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Juneau" dst="Doyon" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Juneau" dst="Fafard" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Juneau" dst="Croteau" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Juneau" dst="Dodge" symmetrical="NO"><link_ctn id="189"/><link_ctn id="83"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Casavant" dst="Jacquelin" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Casavant" dst="Boivin" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Casavant" dst="Jean_Yves" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Casavant" dst="TeX" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Casavant" dst="Geoff" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Casavant" dst="Disney" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Casavant" dst="iRMX" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Casavant" dst="McGee" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Casavant" dst="Gatien" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Casavant" dst="Laroche" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Casavant" dst="Tanguay" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Casavant" dst="Morin" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Casavant" dst="Ethernet" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Casavant" dst="Bellemarre" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Casavant" dst="Kuenning" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Casavant" dst="Gaston" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Casavant" dst="Harry" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Casavant" dst="Bousquet" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Casavant" dst="Paul" symmetrical="NO"><link_ctn id="92"/><link_ctn id="93"/></route>
+ <route src="Casavant" dst="St_Jean" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Casavant" dst="Jill" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Casavant" dst="Marcel" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Casavant" dst="Wright" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Casavant" dst="Jackson" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Casavant" dst="Fernand" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Casavant" dst="Soucy" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Casavant" dst="Ste_Julie" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Casavant" dst="Victoria" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Casavant" dst="Lessard" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Casavant" dst="Florient" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Casavant" dst="Marcoux" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Casavant" dst="Gavrel" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Casavant" dst="Bescherelle" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Casavant" dst="Pierre" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Casavant" dst="Jamie" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Casavant" dst="Rubin" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Casavant" dst="Olivier" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Casavant" dst="Boucherville" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Casavant" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Casavant" dst="Kansas" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Casavant" dst="King" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Casavant" dst="Lapointe" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Casavant" dst="Julian" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Casavant" dst="Lafontaine" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Casavant" dst="Gordon" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Casavant" dst="Drouin" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Casavant" dst="Robert" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Casavant" dst="Jocelyne" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Casavant" dst="Stephen" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Casavant" dst="Provost" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Casavant" dst="Juneau" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Casavant" dst="St_Antoine" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Casavant" dst="Louis" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Casavant" dst="Julien" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Casavant" dst="St_Paul" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Casavant" dst="Mathematica" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Casavant" dst="LaTeX" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Casavant" dst="Sirois" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Casavant" dst="Monique" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Casavant" dst="Audy" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Casavant" dst="Bourassa" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Casavant" dst="OHara" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Casavant" dst="Boston" symmetrical="NO"><link_ctn id="92"/><link_ctn id="95"/></route>
+ <route src="Casavant" dst="Papineau" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Casavant" dst="Fraser" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Casavant" dst="Browne" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Casavant" dst="SunOS" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Casavant" dst="Varennes" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Casavant" dst="Jacques" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Casavant" dst="Thierry" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Casavant" dst="Lachapelle" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Casavant" dst="kV" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Casavant" dst="Yolande" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Casavant" dst="Pronovost" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Casavant" dst="SPICE" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Casavant" dst="Europe" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Casavant" dst="Roy" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Casavant" dst="Amadeus" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Casavant" dst="Intel" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Casavant" dst="Cambridge" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Casavant" dst="Tremblay" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Casavant" dst="UNIX" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Casavant" dst="Domey" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Casavant" dst="St_Bruno" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Casavant" dst="Jean_Claude" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Casavant" dst="Doyon" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Casavant" dst="Fafard" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Casavant" dst="Croteau" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Casavant" dst="Dodge" symmetrical="NO"><link_ctn id="92"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="St_Antoine" dst="Jacquelin" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="St_Antoine" dst="Boivin" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="St_Antoine" dst="Jean_Yves" symmetrical="NO"><link_ctn id="138"/></route>
+ <route src="St_Antoine" dst="TeX" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="St_Antoine" dst="Geoff" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="St_Antoine" dst="Disney" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="St_Antoine" dst="iRMX" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="St_Antoine" dst="McGee" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="St_Antoine" dst="Gatien" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="St_Antoine" dst="Laroche" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="St_Antoine" dst="Tanguay" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="St_Antoine" dst="Morin" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="St_Antoine" dst="Ethernet" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="St_Antoine" dst="Bellemarre" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="St_Antoine" dst="Kuenning" symmetrical="NO"><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="St_Antoine" dst="Gaston" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="St_Antoine" dst="Harry" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="St_Antoine" dst="Bousquet" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="St_Antoine" dst="Paul" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="St_Antoine" dst="St_Jean" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="St_Antoine" dst="Jill" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="St_Antoine" dst="Marcel" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="St_Antoine" dst="Wright" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="St_Antoine" dst="Jackson" symmetrical="NO"><link_ctn id="63"/><link_ctn id="62"/></route>
+ <route src="St_Antoine" dst="Fernand" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="St_Antoine" dst="Soucy" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="St_Antoine" dst="Ste_Julie" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="St_Antoine" dst="Victoria" symmetrical="NO"><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="St_Antoine" dst="Lessard" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="St_Antoine" dst="Florient" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="St_Antoine" dst="Marcoux" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="St_Antoine" dst="Gavrel" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="St_Antoine" dst="Bescherelle" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="St_Antoine" dst="Pierre" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="St_Antoine" dst="Jamie" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="St_Antoine" dst="Rubin" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="St_Antoine" dst="Olivier" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="St_Antoine" dst="Boucherville" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="St_Antoine" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="St_Antoine" dst="Kansas" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="St_Antoine" dst="King" symmetrical="NO"><link_ctn id="137"/></route>
+ <route src="St_Antoine" dst="Lapointe" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="St_Antoine" dst="Julian" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="St_Antoine" dst="Lafontaine" symmetrical="NO"><link_ctn id="139"/></route>
+ <route src="St_Antoine" dst="Gordon" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="St_Antoine" dst="Drouin" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="St_Antoine" dst="Robert" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="St_Antoine" dst="Jocelyne" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="St_Antoine" dst="Stephen" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="St_Antoine" dst="Provost" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="St_Antoine" dst="Juneau" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="St_Antoine" dst="Casavant" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="St_Antoine" dst="Louis" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="St_Antoine" dst="Julien" symmetrical="NO"><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="St_Antoine" dst="St_Paul" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="St_Antoine" dst="Mathematica" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="St_Antoine" dst="LaTeX" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="St_Antoine" dst="Sirois" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="St_Antoine" dst="Monique" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="St_Antoine" dst="Audy" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="St_Antoine" dst="Bourassa" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="St_Antoine" dst="OHara" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="St_Antoine" dst="Boston" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="St_Antoine" dst="Papineau" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="St_Antoine" dst="Fraser" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="St_Antoine" dst="Browne" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="St_Antoine" dst="SunOS" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="St_Antoine" dst="Varennes" symmetrical="NO"><link_ctn id="136"/></route>
+ <route src="St_Antoine" dst="Jacques" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="St_Antoine" dst="Thierry" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="St_Antoine" dst="Lachapelle" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="St_Antoine" dst="kV" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="St_Antoine" dst="Yolande" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="St_Antoine" dst="Pronovost" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="St_Antoine" dst="SPICE" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="St_Antoine" dst="Europe" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="St_Antoine" dst="Roy" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="St_Antoine" dst="Amadeus" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="St_Antoine" dst="Intel" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="St_Antoine" dst="Cambridge" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="St_Antoine" dst="Tremblay" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="St_Antoine" dst="UNIX" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="St_Antoine" dst="Domey" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="St_Antoine" dst="St_Bruno" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="St_Antoine" dst="Jean_Claude" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="St_Antoine" dst="Doyon" symmetrical="NO"><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="St_Antoine" dst="Fafard" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="St_Antoine" dst="Croteau" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="St_Antoine" dst="Dodge" symmetrical="NO"><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Louis" dst="Jacquelin" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Louis" dst="Boivin" symmetrical="NO"><link_ctn id="117"/></route>
+ <route src="Louis" dst="Jean_Yves" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Louis" dst="TeX" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Louis" dst="Geoff" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Louis" dst="Disney" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Louis" dst="iRMX" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Louis" dst="McGee" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Louis" dst="Gatien" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Louis" dst="Laroche" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Louis" dst="Tanguay" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Louis" dst="Morin" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Louis" dst="Ethernet" symmetrical="NO"><link_ctn id="117"/><link_ctn id="118"/></route>
+ <route src="Louis" dst="Bellemarre" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Louis" dst="Kuenning" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Louis" dst="Gaston" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Louis" dst="Harry" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Louis" dst="Bousquet" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Louis" dst="Paul" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Louis" dst="St_Jean" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Louis" dst="Jill" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Louis" dst="Marcel" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Louis" dst="Wright" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Louis" dst="Jackson" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Louis" dst="Fernand" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Louis" dst="Soucy" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Louis" dst="Ste_Julie" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Louis" dst="Victoria" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Louis" dst="Lessard" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Louis" dst="Florient" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Louis" dst="Marcoux" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Louis" dst="Gavrel" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Louis" dst="Bescherelle" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Louis" dst="Pierre" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Louis" dst="Jamie" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Louis" dst="Rubin" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Louis" dst="Olivier" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Louis" dst="Boucherville" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Louis" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Louis" dst="Kansas" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Louis" dst="King" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Louis" dst="Lapointe" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Louis" dst="Julian" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Louis" dst="Lafontaine" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Louis" dst="Gordon" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Louis" dst="Drouin" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Louis" dst="Robert" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Louis" dst="Jocelyne" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Louis" dst="Stephen" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Louis" dst="Provost" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Louis" dst="Juneau" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Louis" dst="Casavant" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Louis" dst="St_Antoine" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Louis" dst="Julien" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Louis" dst="St_Paul" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Louis" dst="Mathematica" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Louis" dst="LaTeX" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Louis" dst="Sirois" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Louis" dst="Monique" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Louis" dst="Audy" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Louis" dst="Bourassa" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Louis" dst="OHara" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Louis" dst="Boston" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Louis" dst="Papineau" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Louis" dst="Fraser" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Louis" dst="Browne" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Louis" dst="SunOS" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Louis" dst="Varennes" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Louis" dst="Jacques" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Louis" dst="Thierry" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Louis" dst="Lachapelle" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Louis" dst="kV" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Louis" dst="Yolande" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Louis" dst="Pronovost" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Louis" dst="SPICE" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Louis" dst="Europe" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Louis" dst="Roy" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Louis" dst="Amadeus" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Louis" dst="Intel" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Louis" dst="Cambridge" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Louis" dst="Tremblay" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Louis" dst="UNIX" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Louis" dst="Domey" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Louis" dst="St_Bruno" symmetrical="NO"><link_ctn id="117"/><link_ctn id="119"/></route>
+ <route src="Louis" dst="Jean_Claude" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Louis" dst="Doyon" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Louis" dst="Fafard" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Louis" dst="Croteau" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Louis" dst="Dodge" symmetrical="NO"><link_ctn id="117"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Julien" dst="Jacquelin" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Julien" dst="Boivin" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Julien" dst="Jean_Yves" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Julien" dst="TeX" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Julien" dst="Geoff" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="Julien" dst="Disney" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Julien" dst="iRMX" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Julien" dst="McGee" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Julien" dst="Gatien" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Julien" dst="Laroche" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Julien" dst="Tanguay" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Julien" dst="Morin" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Julien" dst="Ethernet" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Julien" dst="Bellemarre" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Julien" dst="Kuenning" symmetrical="NO"><link_ctn id="134"/><link_ctn id="135"/></route>
+ <route src="Julien" dst="Gaston" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Julien" dst="Harry" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Julien" dst="Bousquet" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Julien" dst="Paul" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Julien" dst="St_Jean" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Julien" dst="Jill" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Julien" dst="Marcel" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Julien" dst="Wright" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Julien" dst="Jackson" symmetrical="NO"><link_ctn id="134"/></route>
+ <route src="Julien" dst="Fernand" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Julien" dst="Soucy" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Julien" dst="Ste_Julie" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Julien" dst="Victoria" symmetrical="NO"><link_ctn id="134"/><link_ctn id="133"/></route>
+ <route src="Julien" dst="Lessard" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Julien" dst="Florient" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Julien" dst="Marcoux" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Julien" dst="Gavrel" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Julien" dst="Bescherelle" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Julien" dst="Pierre" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Julien" dst="Jamie" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Julien" dst="Rubin" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Julien" dst="Olivier" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Julien" dst="Boucherville" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Julien" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Julien" dst="Kansas" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Julien" dst="King" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Julien" dst="Lapointe" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Julien" dst="Julian" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Julien" dst="Lafontaine" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Julien" dst="Gordon" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Julien" dst="Drouin" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Julien" dst="Robert" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Julien" dst="Jocelyne" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Julien" dst="Stephen" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Julien" dst="Provost" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Julien" dst="Juneau" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Julien" dst="Casavant" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Julien" dst="St_Antoine" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="63"/></route>
+ <route src="Julien" dst="Louis" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Julien" dst="St_Paul" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Julien" dst="Mathematica" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Julien" dst="LaTeX" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Julien" dst="Sirois" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Julien" dst="Monique" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Julien" dst="Audy" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Julien" dst="Bourassa" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Julien" dst="OHara" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Julien" dst="Boston" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Julien" dst="Papineau" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Julien" dst="Fraser" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Julien" dst="Browne" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Julien" dst="SunOS" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Julien" dst="Varennes" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Julien" dst="Jacques" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Julien" dst="Thierry" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Julien" dst="Lachapelle" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Julien" dst="kV" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Julien" dst="Yolande" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Julien" dst="Pronovost" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Julien" dst="SPICE" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Julien" dst="Europe" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Julien" dst="Roy" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Julien" dst="Amadeus" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Julien" dst="Intel" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Julien" dst="Cambridge" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Julien" dst="Tremblay" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Julien" dst="UNIX" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Julien" dst="Domey" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Julien" dst="St_Bruno" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Julien" dst="Jean_Claude" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Julien" dst="Doyon" symmetrical="NO"><link_ctn id="134"/><link_ctn id="132"/></route>
+ <route src="Julien" dst="Fafard" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Julien" dst="Croteau" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Julien" dst="Dodge" symmetrical="NO"><link_ctn id="134"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="St_Paul" dst="Jacquelin" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="St_Paul" dst="Boivin" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="St_Paul" dst="Jean_Yves" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="St_Paul" dst="TeX" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="St_Paul" dst="Geoff" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="St_Paul" dst="Disney" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="St_Paul" dst="iRMX" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="St_Paul" dst="McGee" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="St_Paul" dst="Gatien" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="St_Paul" dst="Laroche" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="St_Paul" dst="Tanguay" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="St_Paul" dst="Morin" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="St_Paul" dst="Ethernet" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="St_Paul" dst="Bellemarre" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="St_Paul" dst="Kuenning" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="St_Paul" dst="Gaston" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="St_Paul" dst="Harry" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="St_Paul" dst="Bousquet" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="St_Paul" dst="Paul" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="St_Paul" dst="St_Jean" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="St_Paul" dst="Jill" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="St_Paul" dst="Marcel" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="St_Paul" dst="Wright" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="St_Paul" dst="Jackson" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="St_Paul" dst="Fernand" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="St_Paul" dst="Soucy" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="St_Paul" dst="Ste_Julie" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="St_Paul" dst="Victoria" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="St_Paul" dst="Lessard" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="St_Paul" dst="Florient" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="St_Paul" dst="Marcoux" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="St_Paul" dst="Gavrel" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="St_Paul" dst="Bescherelle" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="St_Paul" dst="Pierre" symmetrical="NO"><link_ctn id="165"/><link_ctn id="167"/></route>
+ <route src="St_Paul" dst="Jamie" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="St_Paul" dst="Rubin" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="St_Paul" dst="Olivier" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="St_Paul" dst="Boucherville" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="St_Paul" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="St_Paul" dst="Kansas" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="St_Paul" dst="King" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="St_Paul" dst="Lapointe" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="St_Paul" dst="Julian" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="St_Paul" dst="Lafontaine" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="St_Paul" dst="Gordon" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="St_Paul" dst="Drouin" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="St_Paul" dst="Robert" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="St_Paul" dst="Jocelyne" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="St_Paul" dst="Stephen" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="St_Paul" dst="Provost" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="St_Paul" dst="Juneau" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="St_Paul" dst="Casavant" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="St_Paul" dst="St_Antoine" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="St_Paul" dst="Louis" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="St_Paul" dst="Julien" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="St_Paul" dst="Mathematica" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="St_Paul" dst="LaTeX" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="St_Paul" dst="Sirois" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="St_Paul" dst="Monique" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="St_Paul" dst="Audy" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="St_Paul" dst="Bourassa" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="St_Paul" dst="OHara" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="St_Paul" dst="Boston" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="St_Paul" dst="Papineau" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="St_Paul" dst="Fraser" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="St_Paul" dst="Browne" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="St_Paul" dst="SunOS" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="St_Paul" dst="Varennes" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="St_Paul" dst="Jacques" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="St_Paul" dst="Thierry" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="St_Paul" dst="Lachapelle" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="St_Paul" dst="kV" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="St_Paul" dst="Yolande" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="St_Paul" dst="Pronovost" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="St_Paul" dst="SPICE" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="St_Paul" dst="Europe" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="St_Paul" dst="Roy" symmetrical="NO"><link_ctn id="165"/></route>
+ <route src="St_Paul" dst="Amadeus" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="St_Paul" dst="Intel" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="St_Paul" dst="Cambridge" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="St_Paul" dst="Tremblay" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="St_Paul" dst="UNIX" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="St_Paul" dst="Domey" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="St_Paul" dst="St_Bruno" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="St_Paul" dst="Jean_Claude" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="St_Paul" dst="Doyon" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="St_Paul" dst="Fafard" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="St_Paul" dst="Croteau" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="St_Paul" dst="Dodge" symmetrical="NO"><link_ctn id="165"/><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Mathematica" dst="Jacquelin" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Mathematica" dst="Boivin" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Mathematica" dst="Jean_Yves" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Mathematica" dst="TeX" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Mathematica" dst="Geoff" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Mathematica" dst="Disney" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Mathematica" dst="iRMX" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Mathematica" dst="McGee" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Mathematica" dst="Gatien" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Mathematica" dst="Laroche" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Mathematica" dst="Tanguay" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Mathematica" dst="Morin" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Mathematica" dst="Ethernet" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Mathematica" dst="Bellemarre" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Mathematica" dst="Kuenning" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Mathematica" dst="Gaston" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Mathematica" dst="Harry" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Mathematica" dst="Bousquet" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Mathematica" dst="Paul" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Mathematica" dst="St_Jean" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Mathematica" dst="Jill" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Mathematica" dst="Marcel" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Mathematica" dst="Wright" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Mathematica" dst="Jackson" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Mathematica" dst="Fernand" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Mathematica" dst="Soucy" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Mathematica" dst="Ste_Julie" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Mathematica" dst="Victoria" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Mathematica" dst="Lessard" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Mathematica" dst="Florient" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Mathematica" dst="Marcoux" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Mathematica" dst="Gavrel" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Mathematica" dst="Bescherelle" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Mathematica" dst="Pierre" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Mathematica" dst="Jamie" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Mathematica" dst="Rubin" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Mathematica" dst="Olivier" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Mathematica" dst="Boucherville" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Mathematica" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Mathematica" dst="Kansas" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Mathematica" dst="King" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Mathematica" dst="Lapointe" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Mathematica" dst="Julian" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Mathematica" dst="Lafontaine" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Mathematica" dst="Gordon" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Mathematica" dst="Drouin" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Mathematica" dst="Robert" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Mathematica" dst="Jocelyne" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Mathematica" dst="Stephen" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Mathematica" dst="Provost" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Mathematica" dst="Juneau" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Mathematica" dst="Casavant" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Mathematica" dst="St_Antoine" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Mathematica" dst="Louis" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Mathematica" dst="Julien" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Mathematica" dst="St_Paul" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Mathematica" dst="LaTeX" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Mathematica" dst="Sirois" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Mathematica" dst="Monique" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Mathematica" dst="Audy" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Mathematica" dst="Bourassa" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Mathematica" dst="OHara" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Mathematica" dst="Boston" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Mathematica" dst="Papineau" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Mathematica" dst="Fraser" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Mathematica" dst="Browne" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Mathematica" dst="SunOS" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Mathematica" dst="Varennes" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Mathematica" dst="Jacques" symmetrical="NO"><link_ctn id="157"/><link_ctn id="159"/></route>
+ <route src="Mathematica" dst="Thierry" symmetrical="NO"><link_ctn id="157"/><link_ctn id="156"/></route>
+ <route src="Mathematica" dst="Lachapelle" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Mathematica" dst="kV" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Mathematica" dst="Yolande" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Mathematica" dst="Pronovost" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Mathematica" dst="SPICE" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Mathematica" dst="Europe" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Mathematica" dst="Roy" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Mathematica" dst="Amadeus" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Mathematica" dst="Intel" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Mathematica" dst="Cambridge" symmetrical="NO"><link_ctn id="157"/><link_ctn id="158"/></route>
+ <route src="Mathematica" dst="Tremblay" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Mathematica" dst="UNIX" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Mathematica" dst="Domey" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Mathematica" dst="St_Bruno" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Mathematica" dst="Jean_Claude" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Mathematica" dst="Doyon" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Mathematica" dst="Fafard" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Mathematica" dst="Croteau" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Mathematica" dst="Dodge" symmetrical="NO"><link_ctn id="157"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="LaTeX" dst="Jacquelin" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="LaTeX" dst="Boivin" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="LaTeX" dst="Jean_Yves" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="LaTeX" dst="TeX" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="LaTeX" dst="Geoff" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="LaTeX" dst="Disney" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="LaTeX" dst="iRMX" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="LaTeX" dst="McGee" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="LaTeX" dst="Gatien" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="LaTeX" dst="Laroche" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/></route>
+ <route src="LaTeX" dst="Tanguay" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="LaTeX" dst="Morin" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="LaTeX" dst="Ethernet" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="LaTeX" dst="Bellemarre" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="LaTeX" dst="Kuenning" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="LaTeX" dst="Gaston" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="LaTeX" dst="Harry" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="LaTeX" dst="Bousquet" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="LaTeX" dst="Paul" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="LaTeX" dst="St_Jean" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="LaTeX" dst="Jill" symmetrical="NO"><link_ctn id="177"/></route>
+ <route src="LaTeX" dst="Marcel" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="LaTeX" dst="Wright" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="LaTeX" dst="Jackson" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="LaTeX" dst="Fernand" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="LaTeX" dst="Soucy" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="LaTeX" dst="Ste_Julie" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="LaTeX" dst="Victoria" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="LaTeX" dst="Lessard" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="LaTeX" dst="Florient" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="LaTeX" dst="Marcoux" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="LaTeX" dst="Gavrel" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="LaTeX" dst="Bescherelle" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="LaTeX" dst="Pierre" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="LaTeX" dst="Jamie" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="LaTeX" dst="Rubin" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="LaTeX" dst="Olivier" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="LaTeX" dst="Boucherville" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="89"/></route>
+ <route src="LaTeX" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="LaTeX" dst="Kansas" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="LaTeX" dst="King" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="LaTeX" dst="Lapointe" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="LaTeX" dst="Julian" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="LaTeX" dst="Lafontaine" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="LaTeX" dst="Gordon" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="LaTeX" dst="Drouin" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="LaTeX" dst="Robert" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="LaTeX" dst="Jocelyne" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="LaTeX" dst="Stephen" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="LaTeX" dst="Provost" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="LaTeX" dst="Juneau" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="LaTeX" dst="Casavant" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="LaTeX" dst="St_Antoine" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="LaTeX" dst="Louis" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="LaTeX" dst="Julien" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="LaTeX" dst="St_Paul" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="LaTeX" dst="Mathematica" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="LaTeX" dst="Sirois" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="LaTeX" dst="Monique" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="LaTeX" dst="Audy" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="LaTeX" dst="Bourassa" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="LaTeX" dst="OHara" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="LaTeX" dst="Boston" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="LaTeX" dst="Papineau" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="LaTeX" dst="Fraser" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="LaTeX" dst="Browne" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="LaTeX" dst="SunOS" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="LaTeX" dst="Varennes" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="LaTeX" dst="Jacques" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="LaTeX" dst="Thierry" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="LaTeX" dst="Lachapelle" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="LaTeX" dst="kV" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="LaTeX" dst="Yolande" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="LaTeX" dst="Pronovost" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="LaTeX" dst="SPICE" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="LaTeX" dst="Europe" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="LaTeX" dst="Roy" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="LaTeX" dst="Amadeus" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="LaTeX" dst="Intel" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="LaTeX" dst="Cambridge" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="LaTeX" dst="Tremblay" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="LaTeX" dst="UNIX" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="LaTeX" dst="Domey" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="LaTeX" dst="St_Bruno" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="LaTeX" dst="Jean_Claude" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="LaTeX" dst="Doyon" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="LaTeX" dst="Fafard" symmetrical="NO"><link_ctn id="177"/><link_ctn id="179"/></route>
+ <route src="LaTeX" dst="Croteau" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="LaTeX" dst="Dodge" symmetrical="NO"><link_ctn id="177"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Sirois" dst="Jacquelin" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Sirois" dst="Boivin" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="Sirois" dst="Jean_Yves" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Sirois" dst="TeX" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Sirois" dst="Geoff" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Sirois" dst="Disney" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Sirois" dst="iRMX" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Sirois" dst="McGee" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Sirois" dst="Gatien" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Sirois" dst="Laroche" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Sirois" dst="Tanguay" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Sirois" dst="Morin" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Sirois" dst="Ethernet" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Sirois" dst="Bellemarre" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Sirois" dst="Kuenning" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Sirois" dst="Gaston" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Sirois" dst="Harry" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Sirois" dst="Bousquet" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Sirois" dst="Paul" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Sirois" dst="St_Jean" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Sirois" dst="Jill" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Sirois" dst="Marcel" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Sirois" dst="Wright" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Sirois" dst="Jackson" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Sirois" dst="Fernand" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Sirois" dst="Soucy" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Sirois" dst="Ste_Julie" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Sirois" dst="Victoria" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Sirois" dst="Lessard" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Sirois" dst="Florient" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Sirois" dst="Marcoux" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Sirois" dst="Gavrel" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Sirois" dst="Bescherelle" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Sirois" dst="Pierre" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Sirois" dst="Jamie" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Sirois" dst="Rubin" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Sirois" dst="Olivier" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Sirois" dst="Boucherville" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Sirois" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Sirois" dst="Kansas" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Sirois" dst="King" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Sirois" dst="Lapointe" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Sirois" dst="Julian" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Sirois" dst="Lafontaine" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Sirois" dst="Gordon" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Sirois" dst="Drouin" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Sirois" dst="Robert" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Sirois" dst="Jocelyne" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Sirois" dst="Stephen" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Sirois" dst="Provost" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Sirois" dst="Juneau" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Sirois" dst="Casavant" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Sirois" dst="St_Antoine" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Sirois" dst="Louis" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Sirois" dst="Julien" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Sirois" dst="St_Paul" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Sirois" dst="Mathematica" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Sirois" dst="LaTeX" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Sirois" dst="Monique" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Sirois" dst="Audy" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Sirois" dst="Bourassa" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Sirois" dst="OHara" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Sirois" dst="Boston" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Sirois" dst="Papineau" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Sirois" dst="Fraser" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Sirois" dst="Browne" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Sirois" dst="SunOS" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Sirois" dst="Varennes" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Sirois" dst="Jacques" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Sirois" dst="Thierry" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Sirois" dst="Lachapelle" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Sirois" dst="kV" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Sirois" dst="Yolande" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Sirois" dst="Pronovost" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Sirois" dst="SPICE" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Sirois" dst="Europe" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Sirois" dst="Roy" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Sirois" dst="Amadeus" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Sirois" dst="Intel" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Sirois" dst="Cambridge" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Sirois" dst="Tremblay" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Sirois" dst="UNIX" symmetrical="NO"><link_ctn id="129"/></route>
+ <route src="Sirois" dst="Domey" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Sirois" dst="St_Bruno" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Sirois" dst="Jean_Claude" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Sirois" dst="Doyon" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Sirois" dst="Fafard" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Sirois" dst="Croteau" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Sirois" dst="Dodge" symmetrical="NO"><link_ctn id="129"/><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Monique" dst="Jacquelin" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Monique" dst="Boivin" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="Monique" dst="Jean_Yves" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Monique" dst="TeX" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Monique" dst="Geoff" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Monique" dst="Disney" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Monique" dst="iRMX" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Monique" dst="McGee" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="41"/></route>
+ <route src="Monique" dst="Gatien" symmetrical="NO"><link_ctn id="113"/><link_ctn id="115"/></route>
+ <route src="Monique" dst="Laroche" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Monique" dst="Tanguay" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Monique" dst="Morin" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Monique" dst="Ethernet" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Monique" dst="Bellemarre" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Monique" dst="Kuenning" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Monique" dst="Gaston" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Monique" dst="Harry" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Monique" dst="Bousquet" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Monique" dst="Paul" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Monique" dst="St_Jean" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Monique" dst="Jill" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Monique" dst="Marcel" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Monique" dst="Wright" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Monique" dst="Jackson" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Monique" dst="Fernand" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Monique" dst="Soucy" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Monique" dst="Ste_Julie" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Monique" dst="Victoria" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Monique" dst="Lessard" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Monique" dst="Florient" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Monique" dst="Marcoux" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Monique" dst="Gavrel" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Monique" dst="Bescherelle" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Monique" dst="Pierre" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Monique" dst="Jamie" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Monique" dst="Rubin" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Monique" dst="Olivier" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Monique" dst="Boucherville" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Monique" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Monique" dst="Kansas" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Monique" dst="King" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Monique" dst="Lapointe" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Monique" dst="Julian" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Monique" dst="Lafontaine" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Monique" dst="Gordon" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Monique" dst="Drouin" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Monique" dst="Robert" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Monique" dst="Jocelyne" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Monique" dst="Stephen" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Monique" dst="Provost" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Monique" dst="Juneau" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Monique" dst="Casavant" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Monique" dst="St_Antoine" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Monique" dst="Louis" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Monique" dst="Julien" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Monique" dst="St_Paul" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Monique" dst="Mathematica" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Monique" dst="LaTeX" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Monique" dst="Sirois" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Monique" dst="Audy" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Monique" dst="Bourassa" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Monique" dst="OHara" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Monique" dst="Boston" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Monique" dst="Papineau" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Monique" dst="Fraser" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Monique" dst="Browne" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Monique" dst="SunOS" symmetrical="NO"><link_ctn id="113"/><link_ctn id="114"/></route>
+ <route src="Monique" dst="Varennes" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Monique" dst="Jacques" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Monique" dst="Thierry" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Monique" dst="Lachapelle" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Monique" dst="kV" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Monique" dst="Yolande" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Monique" dst="Pronovost" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Monique" dst="SPICE" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Monique" dst="Europe" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Monique" dst="Roy" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Monique" dst="Amadeus" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Monique" dst="Intel" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Monique" dst="Cambridge" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Monique" dst="Tremblay" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Monique" dst="UNIX" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Monique" dst="Domey" symmetrical="NO"><link_ctn id="113"/></route>
+ <route src="Monique" dst="St_Bruno" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Monique" dst="Jean_Claude" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Monique" dst="Doyon" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Monique" dst="Fafard" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Monique" dst="Croteau" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Monique" dst="Dodge" symmetrical="NO"><link_ctn id="113"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Audy" dst="Jacquelin" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Audy" dst="Boivin" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Audy" dst="Jean_Yves" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Audy" dst="TeX" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Audy" dst="Geoff" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Audy" dst="Disney" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Audy" dst="iRMX" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Audy" dst="McGee" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Audy" dst="Gatien" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Audy" dst="Laroche" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Audy" dst="Tanguay" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Audy" dst="Morin" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Audy" dst="Ethernet" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Audy" dst="Bellemarre" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Audy" dst="Kuenning" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Audy" dst="Gaston" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Audy" dst="Harry" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Audy" dst="Bousquet" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Audy" dst="Paul" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Audy" dst="St_Jean" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Audy" dst="Jill" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Audy" dst="Marcel" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Audy" dst="Wright" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Audy" dst="Jackson" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Audy" dst="Fernand" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Audy" dst="Soucy" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Audy" dst="Ste_Julie" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Audy" dst="Victoria" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Audy" dst="Lessard" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Audy" dst="Florient" symmetrical="NO"><link_ctn id="183"/><link_ctn id="181"/></route>
+ <route src="Audy" dst="Marcoux" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Audy" dst="Gavrel" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Audy" dst="Bescherelle" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Audy" dst="Pierre" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Audy" dst="Jamie" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Audy" dst="Rubin" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Audy" dst="Olivier" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Audy" dst="Boucherville" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Audy" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Audy" dst="Kansas" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Audy" dst="King" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Audy" dst="Lapointe" symmetrical="NO"><link_ctn id="183"/></route>
+ <route src="Audy" dst="Julian" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Audy" dst="Lafontaine" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Audy" dst="Gordon" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Audy" dst="Drouin" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Audy" dst="Robert" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Audy" dst="Jocelyne" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Audy" dst="Stephen" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Audy" dst="Provost" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Audy" dst="Juneau" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Audy" dst="Casavant" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Audy" dst="St_Antoine" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Audy" dst="Louis" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Audy" dst="Julien" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Audy" dst="St_Paul" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Audy" dst="Mathematica" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Audy" dst="LaTeX" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Audy" dst="Sirois" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Audy" dst="Monique" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Audy" dst="Bourassa" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Audy" dst="OHara" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Audy" dst="Boston" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Audy" dst="Papineau" symmetrical="NO"><link_ctn id="183"/><link_ctn id="182"/></route>
+ <route src="Audy" dst="Fraser" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Audy" dst="Browne" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Audy" dst="SunOS" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Audy" dst="Varennes" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Audy" dst="Jacques" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Audy" dst="Thierry" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Audy" dst="Lachapelle" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Audy" dst="kV" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Audy" dst="Yolande" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Audy" dst="Pronovost" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Audy" dst="SPICE" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Audy" dst="Europe" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Audy" dst="Roy" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Audy" dst="Amadeus" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Audy" dst="Intel" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Audy" dst="Cambridge" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Audy" dst="Tremblay" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Audy" dst="UNIX" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Audy" dst="Domey" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Audy" dst="St_Bruno" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Audy" dst="Jean_Claude" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Audy" dst="Doyon" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Audy" dst="Fafard" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Audy" dst="Croteau" symmetrical="NO"><link_ctn id="183"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Audy" dst="Dodge" symmetrical="NO"><link_ctn id="183"/><link_ctn id="180"/></route>
+ <route src="Bourassa" dst="Jacquelin" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Bourassa" dst="Boivin" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Bourassa" dst="Jean_Yves" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Bourassa" dst="TeX" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Bourassa" dst="Geoff" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Bourassa" dst="Disney" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Bourassa" dst="iRMX" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Bourassa" dst="McGee" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Bourassa" dst="Gatien" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Bourassa" dst="Laroche" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Bourassa" dst="Tanguay" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Bourassa" dst="Morin" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Bourassa" dst="Ethernet" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Bourassa" dst="Bellemarre" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Bourassa" dst="Kuenning" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Bourassa" dst="Gaston" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Bourassa" dst="Harry" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Bourassa" dst="Bousquet" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Bourassa" dst="Paul" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Bourassa" dst="St_Jean" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Bourassa" dst="Jill" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Bourassa" dst="Marcel" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Bourassa" dst="Wright" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Bourassa" dst="Jackson" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Bourassa" dst="Fernand" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Bourassa" dst="Soucy" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Bourassa" dst="Ste_Julie" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Bourassa" dst="Victoria" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Bourassa" dst="Lessard" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Bourassa" dst="Florient" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Bourassa" dst="Marcoux" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Bourassa" dst="Gavrel" symmetrical="NO"><link_ctn id="150"/><link_ctn id="148"/></route>
+ <route src="Bourassa" dst="Bescherelle" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Bourassa" dst="Pierre" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Bourassa" dst="Jamie" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Bourassa" dst="Rubin" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Bourassa" dst="Olivier" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Bourassa" dst="Boucherville" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Bourassa" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Bourassa" dst="Kansas" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Bourassa" dst="King" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Bourassa" dst="Lapointe" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Bourassa" dst="Julian" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Bourassa" dst="Lafontaine" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Bourassa" dst="Gordon" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Bourassa" dst="Drouin" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Bourassa" dst="Robert" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Bourassa" dst="Jocelyne" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Bourassa" dst="Stephen" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Bourassa" dst="Provost" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Bourassa" dst="Juneau" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Bourassa" dst="Casavant" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Bourassa" dst="St_Antoine" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Bourassa" dst="Louis" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Bourassa" dst="Julien" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Bourassa" dst="St_Paul" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Bourassa" dst="Mathematica" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Bourassa" dst="LaTeX" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Bourassa" dst="Sirois" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Bourassa" dst="Monique" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Bourassa" dst="Audy" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Bourassa" dst="OHara" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Bourassa" dst="Boston" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Bourassa" dst="Papineau" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Bourassa" dst="Fraser" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Bourassa" dst="Browne" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Bourassa" dst="SunOS" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Bourassa" dst="Varennes" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Bourassa" dst="Jacques" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Bourassa" dst="Thierry" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Bourassa" dst="Lachapelle" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Bourassa" dst="kV" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Bourassa" dst="Yolande" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Bourassa" dst="Pronovost" symmetrical="NO"><link_ctn id="150"/><link_ctn id="151"/></route>
+ <route src="Bourassa" dst="SPICE" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Bourassa" dst="Europe" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Bourassa" dst="Roy" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Bourassa" dst="Amadeus" symmetrical="NO"><link_ctn id="150"/></route>
+ <route src="Bourassa" dst="Intel" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Bourassa" dst="Cambridge" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Bourassa" dst="Tremblay" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Bourassa" dst="UNIX" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Bourassa" dst="Domey" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Bourassa" dst="St_Bruno" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Bourassa" dst="Jean_Claude" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Bourassa" dst="Doyon" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Bourassa" dst="Fafard" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Bourassa" dst="Croteau" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Bourassa" dst="Dodge" symmetrical="NO"><link_ctn id="150"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="OHara" dst="Jacquelin" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="OHara" dst="Boivin" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="OHara" dst="Jean_Yves" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="OHara" dst="TeX" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="OHara" dst="Geoff" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="OHara" dst="Disney" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="OHara" dst="iRMX" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="OHara" dst="McGee" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="OHara" dst="Gatien" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="OHara" dst="Laroche" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="OHara" dst="Tanguay" symmetrical="NO"><link_ctn id="163"/><link_ctn id="162"/></route>
+ <route src="OHara" dst="Morin" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="OHara" dst="Ethernet" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="OHara" dst="Bellemarre" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="OHara" dst="Kuenning" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="OHara" dst="Gaston" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="OHara" dst="Harry" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="OHara" dst="Bousquet" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="OHara" dst="Paul" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="OHara" dst="St_Jean" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="OHara" dst="Jill" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="OHara" dst="Marcel" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="OHara" dst="Wright" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="OHara" dst="Jackson" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="OHara" dst="Fernand" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="OHara" dst="Soucy" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="OHara" dst="Ste_Julie" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="OHara" dst="Victoria" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="OHara" dst="Lessard" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="OHara" dst="Florient" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="OHara" dst="Marcoux" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="OHara" dst="Gavrel" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="OHara" dst="Bescherelle" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="OHara" dst="Pierre" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="OHara" dst="Jamie" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="OHara" dst="Rubin" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="OHara" dst="Olivier" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="OHara" dst="Boucherville" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="OHara" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="OHara" dst="Kansas" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="OHara" dst="King" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="OHara" dst="Lapointe" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="OHara" dst="Julian" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="OHara" dst="Lafontaine" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="OHara" dst="Gordon" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="OHara" dst="Drouin" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="OHara" dst="Robert" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="OHara" dst="Jocelyne" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="OHara" dst="Stephen" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="OHara" dst="Provost" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="OHara" dst="Juneau" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="OHara" dst="Casavant" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="OHara" dst="St_Antoine" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="OHara" dst="Louis" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="OHara" dst="Julien" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="OHara" dst="St_Paul" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="OHara" dst="Mathematica" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="OHara" dst="LaTeX" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="OHara" dst="Sirois" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="OHara" dst="Monique" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="OHara" dst="Audy" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="OHara" dst="Bourassa" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="OHara" dst="Boston" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="OHara" dst="Papineau" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="OHara" dst="Fraser" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="OHara" dst="Browne" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="OHara" dst="SunOS" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="OHara" dst="Varennes" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="OHara" dst="Jacques" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="OHara" dst="Thierry" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="OHara" dst="Lachapelle" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="OHara" dst="kV" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="OHara" dst="Yolande" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="OHara" dst="Pronovost" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="OHara" dst="SPICE" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="OHara" dst="Europe" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="OHara" dst="Roy" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="OHara" dst="Amadeus" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="OHara" dst="Intel" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="OHara" dst="Cambridge" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="OHara" dst="Tremblay" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="OHara" dst="UNIX" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="OHara" dst="Domey" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="OHara" dst="St_Bruno" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="OHara" dst="Jean_Claude" symmetrical="NO"><link_ctn id="163"/><link_ctn id="160"/></route>
+ <route src="OHara" dst="Doyon" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="OHara" dst="Fafard" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="OHara" dst="Croteau" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="OHara" dst="Dodge" symmetrical="NO"><link_ctn id="163"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Boston" dst="Jacquelin" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Boston" dst="Boivin" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Boston" dst="Jean_Yves" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Boston" dst="TeX" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Boston" dst="Geoff" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Boston" dst="Disney" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Boston" dst="iRMX" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Boston" dst="McGee" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Boston" dst="Gatien" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Boston" dst="Laroche" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Boston" dst="Tanguay" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Boston" dst="Morin" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Boston" dst="Ethernet" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Boston" dst="Bellemarre" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Boston" dst="Kuenning" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Boston" dst="Gaston" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Boston" dst="Harry" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Boston" dst="Bousquet" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Boston" dst="Paul" symmetrical="NO"><link_ctn id="95"/><link_ctn id="93"/></route>
+ <route src="Boston" dst="St_Jean" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Boston" dst="Jill" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Boston" dst="Marcel" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Boston" dst="Wright" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Boston" dst="Jackson" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Boston" dst="Fernand" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Boston" dst="Soucy" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Boston" dst="Ste_Julie" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Boston" dst="Victoria" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Boston" dst="Lessard" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Boston" dst="Florient" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Boston" dst="Marcoux" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Boston" dst="Gavrel" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Boston" dst="Bescherelle" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Boston" dst="Pierre" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Boston" dst="Jamie" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Boston" dst="Rubin" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Boston" dst="Olivier" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Boston" dst="Boucherville" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Boston" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Boston" dst="Kansas" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Boston" dst="King" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Boston" dst="Lapointe" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Boston" dst="Julian" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Boston" dst="Lafontaine" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Boston" dst="Gordon" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Boston" dst="Drouin" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Boston" dst="Robert" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Boston" dst="Jocelyne" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Boston" dst="Stephen" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Boston" dst="Provost" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Boston" dst="Juneau" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Boston" dst="Casavant" symmetrical="NO"><link_ctn id="95"/><link_ctn id="92"/></route>
+ <route src="Boston" dst="St_Antoine" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Boston" dst="Louis" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Boston" dst="Julien" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Boston" dst="St_Paul" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Boston" dst="Mathematica" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Boston" dst="LaTeX" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Boston" dst="Sirois" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Boston" dst="Monique" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Boston" dst="Audy" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Boston" dst="Bourassa" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Boston" dst="OHara" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Boston" dst="Papineau" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Boston" dst="Fraser" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Boston" dst="Browne" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Boston" dst="SunOS" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Boston" dst="Varennes" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Boston" dst="Jacques" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Boston" dst="Thierry" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Boston" dst="Lachapelle" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Boston" dst="kV" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Boston" dst="Yolande" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Boston" dst="Pronovost" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Boston" dst="SPICE" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Boston" dst="Europe" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Boston" dst="Roy" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Boston" dst="Amadeus" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Boston" dst="Intel" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Boston" dst="Cambridge" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Boston" dst="Tremblay" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Boston" dst="UNIX" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Boston" dst="Domey" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Boston" dst="St_Bruno" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Boston" dst="Jean_Claude" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Boston" dst="Doyon" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Boston" dst="Fafard" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Boston" dst="Croteau" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Boston" dst="Dodge" symmetrical="NO"><link_ctn id="95"/><link_ctn id="29"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Papineau" dst="Jacquelin" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Papineau" dst="Boivin" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Papineau" dst="Jean_Yves" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Papineau" dst="TeX" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Papineau" dst="Geoff" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Papineau" dst="Disney" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Papineau" dst="iRMX" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Papineau" dst="McGee" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Papineau" dst="Gatien" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Papineau" dst="Laroche" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Papineau" dst="Tanguay" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Papineau" dst="Morin" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Papineau" dst="Ethernet" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Papineau" dst="Bellemarre" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Papineau" dst="Kuenning" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Papineau" dst="Gaston" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Papineau" dst="Harry" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Papineau" dst="Bousquet" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Papineau" dst="Paul" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Papineau" dst="St_Jean" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Papineau" dst="Jill" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Papineau" dst="Marcel" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Papineau" dst="Wright" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Papineau" dst="Jackson" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Papineau" dst="Fernand" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Papineau" dst="Soucy" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Papineau" dst="Ste_Julie" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Papineau" dst="Victoria" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Papineau" dst="Lessard" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Papineau" dst="Florient" symmetrical="NO"><link_ctn id="182"/><link_ctn id="181"/></route>
+ <route src="Papineau" dst="Marcoux" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Papineau" dst="Gavrel" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Papineau" dst="Bescherelle" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Papineau" dst="Pierre" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Papineau" dst="Jamie" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Papineau" dst="Rubin" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Papineau" dst="Olivier" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Papineau" dst="Boucherville" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Papineau" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Papineau" dst="Kansas" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Papineau" dst="King" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Papineau" dst="Lapointe" symmetrical="NO"><link_ctn id="182"/></route>
+ <route src="Papineau" dst="Julian" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Papineau" dst="Lafontaine" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Papineau" dst="Gordon" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Papineau" dst="Drouin" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Papineau" dst="Robert" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Papineau" dst="Jocelyne" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Papineau" dst="Stephen" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Papineau" dst="Provost" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Papineau" dst="Juneau" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Papineau" dst="Casavant" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Papineau" dst="St_Antoine" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Papineau" dst="Louis" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Papineau" dst="Julien" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Papineau" dst="St_Paul" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Papineau" dst="Mathematica" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Papineau" dst="LaTeX" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Papineau" dst="Sirois" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Papineau" dst="Monique" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Papineau" dst="Audy" symmetrical="NO"><link_ctn id="182"/><link_ctn id="183"/></route>
+ <route src="Papineau" dst="Bourassa" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Papineau" dst="OHara" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Papineau" dst="Boston" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Papineau" dst="Fraser" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Papineau" dst="Browne" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Papineau" dst="SunOS" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Papineau" dst="Varennes" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Papineau" dst="Jacques" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Papineau" dst="Thierry" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Papineau" dst="Lachapelle" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Papineau" dst="kV" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Papineau" dst="Yolande" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Papineau" dst="Pronovost" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Papineau" dst="SPICE" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Papineau" dst="Europe" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Papineau" dst="Roy" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Papineau" dst="Amadeus" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Papineau" dst="Intel" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Papineau" dst="Cambridge" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Papineau" dst="Tremblay" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Papineau" dst="UNIX" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Papineau" dst="Domey" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Papineau" dst="St_Bruno" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Papineau" dst="Jean_Claude" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Papineau" dst="Doyon" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Papineau" dst="Fafard" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Papineau" dst="Croteau" symmetrical="NO"><link_ctn id="182"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Papineau" dst="Dodge" symmetrical="NO"><link_ctn id="182"/><link_ctn id="180"/></route>
+ <route src="Fraser" dst="Jacquelin" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Fraser" dst="Boivin" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Fraser" dst="Jean_Yves" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Fraser" dst="TeX" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Fraser" dst="Geoff" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Fraser" dst="Disney" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Fraser" dst="iRMX" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Fraser" dst="McGee" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Fraser" dst="Gatien" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Fraser" dst="Laroche" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Fraser" dst="Tanguay" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Fraser" dst="Morin" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Fraser" dst="Ethernet" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Fraser" dst="Bellemarre" symmetrical="NO"><link_ctn id="96"/></route>
+ <route src="Fraser" dst="Kuenning" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Fraser" dst="Gaston" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Fraser" dst="Harry" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Fraser" dst="Bousquet" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Fraser" dst="Paul" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Fraser" dst="St_Jean" symmetrical="NO"><link_ctn id="96"/><link_ctn id="97"/></route>
+ <route src="Fraser" dst="Jill" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Fraser" dst="Marcel" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Fraser" dst="Wright" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Fraser" dst="Jackson" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Fraser" dst="Fernand" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Fraser" dst="Soucy" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Fraser" dst="Ste_Julie" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Fraser" dst="Victoria" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Fraser" dst="Lessard" symmetrical="NO"><link_ctn id="96"/><link_ctn id="99"/></route>
+ <route src="Fraser" dst="Florient" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Fraser" dst="Marcoux" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Fraser" dst="Gavrel" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Fraser" dst="Bescherelle" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Fraser" dst="Pierre" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Fraser" dst="Jamie" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Fraser" dst="Rubin" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Fraser" dst="Olivier" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Fraser" dst="Boucherville" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Fraser" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Fraser" dst="Kansas" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Fraser" dst="King" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Fraser" dst="Lapointe" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Fraser" dst="Julian" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Fraser" dst="Lafontaine" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Fraser" dst="Gordon" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Fraser" dst="Drouin" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Fraser" dst="Robert" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Fraser" dst="Jocelyne" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Fraser" dst="Stephen" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Fraser" dst="Provost" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Fraser" dst="Juneau" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Fraser" dst="Casavant" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Fraser" dst="St_Antoine" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Fraser" dst="Louis" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Fraser" dst="Julien" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Fraser" dst="St_Paul" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Fraser" dst="Mathematica" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Fraser" dst="LaTeX" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Fraser" dst="Sirois" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Fraser" dst="Monique" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Fraser" dst="Audy" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Fraser" dst="Bourassa" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Fraser" dst="OHara" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Fraser" dst="Boston" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Fraser" dst="Papineau" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Fraser" dst="Browne" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Fraser" dst="SunOS" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Fraser" dst="Varennes" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Fraser" dst="Jacques" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Fraser" dst="Thierry" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Fraser" dst="Lachapelle" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Fraser" dst="kV" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Fraser" dst="Yolande" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Fraser" dst="Pronovost" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Fraser" dst="SPICE" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Fraser" dst="Europe" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Fraser" dst="Roy" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Fraser" dst="Amadeus" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Fraser" dst="Intel" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Fraser" dst="Cambridge" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Fraser" dst="Tremblay" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Fraser" dst="UNIX" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Fraser" dst="Domey" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Fraser" dst="St_Bruno" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Fraser" dst="Jean_Claude" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Fraser" dst="Doyon" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Fraser" dst="Fafard" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Fraser" dst="Croteau" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Fraser" dst="Dodge" symmetrical="NO"><link_ctn id="96"/><link_ctn id="34"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Browne" dst="Jacquelin" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Browne" dst="Boivin" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Browne" dst="Jean_Yves" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Browne" dst="TeX" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Browne" dst="Geoff" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Browne" dst="Disney" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Browne" dst="iRMX" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Browne" dst="McGee" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Browne" dst="Gatien" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Browne" dst="Laroche" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Browne" dst="Tanguay" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Browne" dst="Morin" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Browne" dst="Ethernet" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Browne" dst="Bellemarre" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Browne" dst="Kuenning" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Browne" dst="Gaston" symmetrical="NO"><link_ctn id="152"/><link_ctn id="153"/></route>
+ <route src="Browne" dst="Harry" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Browne" dst="Bousquet" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Browne" dst="Paul" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Browne" dst="St_Jean" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Browne" dst="Jill" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Browne" dst="Marcel" symmetrical="NO"><link_ctn id="152"/><link_ctn id="155"/></route>
+ <route src="Browne" dst="Wright" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Browne" dst="Jackson" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Browne" dst="Fernand" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Browne" dst="Soucy" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Browne" dst="Ste_Julie" symmetrical="NO"><link_ctn id="152"/></route>
+ <route src="Browne" dst="Victoria" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Browne" dst="Lessard" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Browne" dst="Florient" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Browne" dst="Marcoux" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Browne" dst="Gavrel" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Browne" dst="Bescherelle" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Browne" dst="Pierre" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Browne" dst="Jamie" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Browne" dst="Rubin" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Browne" dst="Olivier" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Browne" dst="Boucherville" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Browne" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Browne" dst="Kansas" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Browne" dst="King" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Browne" dst="Lapointe" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Browne" dst="Julian" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Browne" dst="Lafontaine" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Browne" dst="Gordon" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Browne" dst="Drouin" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Browne" dst="Robert" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Browne" dst="Jocelyne" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Browne" dst="Stephen" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Browne" dst="Provost" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Browne" dst="Juneau" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Browne" dst="Casavant" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Browne" dst="St_Antoine" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Browne" dst="Louis" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Browne" dst="Julien" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Browne" dst="St_Paul" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Browne" dst="Mathematica" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Browne" dst="LaTeX" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Browne" dst="Sirois" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Browne" dst="Monique" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Browne" dst="Audy" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Browne" dst="Bourassa" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Browne" dst="OHara" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Browne" dst="Boston" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Browne" dst="Papineau" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Browne" dst="Fraser" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Browne" dst="SunOS" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Browne" dst="Varennes" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Browne" dst="Jacques" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Browne" dst="Thierry" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Browne" dst="Lachapelle" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Browne" dst="kV" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Browne" dst="Yolande" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Browne" dst="Pronovost" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Browne" dst="SPICE" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Browne" dst="Europe" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Browne" dst="Roy" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Browne" dst="Amadeus" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Browne" dst="Intel" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Browne" dst="Cambridge" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Browne" dst="Tremblay" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Browne" dst="UNIX" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Browne" dst="Domey" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Browne" dst="St_Bruno" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Browne" dst="Jean_Claude" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Browne" dst="Doyon" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Browne" dst="Fafard" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Browne" dst="Croteau" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Browne" dst="Dodge" symmetrical="NO"><link_ctn id="152"/><link_ctn id="75"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="SunOS" dst="Jacquelin" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="SunOS" dst="Boivin" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="SunOS" dst="Jean_Yves" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="SunOS" dst="TeX" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="SunOS" dst="Geoff" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="SunOS" dst="Disney" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="SunOS" dst="iRMX" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="SunOS" dst="McGee" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="41"/></route>
+ <route src="SunOS" dst="Gatien" symmetrical="NO"><link_ctn id="114"/><link_ctn id="115"/></route>
+ <route src="SunOS" dst="Laroche" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="SunOS" dst="Tanguay" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="SunOS" dst="Morin" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="SunOS" dst="Ethernet" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="SunOS" dst="Bellemarre" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="SunOS" dst="Kuenning" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="SunOS" dst="Gaston" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="SunOS" dst="Harry" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="SunOS" dst="Bousquet" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="SunOS" dst="Paul" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="SunOS" dst="St_Jean" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="SunOS" dst="Jill" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="SunOS" dst="Marcel" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="SunOS" dst="Wright" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="SunOS" dst="Jackson" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="SunOS" dst="Fernand" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="SunOS" dst="Soucy" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="SunOS" dst="Ste_Julie" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="SunOS" dst="Victoria" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="SunOS" dst="Lessard" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="SunOS" dst="Florient" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="SunOS" dst="Marcoux" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="SunOS" dst="Gavrel" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="SunOS" dst="Bescherelle" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="SunOS" dst="Pierre" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="SunOS" dst="Jamie" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="SunOS" dst="Rubin" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="SunOS" dst="Olivier" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="SunOS" dst="Boucherville" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="SunOS" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="SunOS" dst="Kansas" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="SunOS" dst="King" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="SunOS" dst="Lapointe" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="SunOS" dst="Julian" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="SunOS" dst="Lafontaine" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="SunOS" dst="Gordon" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="SunOS" dst="Drouin" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="SunOS" dst="Robert" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="SunOS" dst="Jocelyne" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="SunOS" dst="Stephen" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="SunOS" dst="Provost" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="SunOS" dst="Juneau" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="SunOS" dst="Casavant" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="SunOS" dst="St_Antoine" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="SunOS" dst="Louis" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="SunOS" dst="Julien" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="SunOS" dst="St_Paul" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="SunOS" dst="Mathematica" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="SunOS" dst="LaTeX" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="SunOS" dst="Sirois" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="SunOS" dst="Monique" symmetrical="NO"><link_ctn id="114"/><link_ctn id="113"/></route>
+ <route src="SunOS" dst="Audy" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="SunOS" dst="Bourassa" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="SunOS" dst="OHara" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="SunOS" dst="Boston" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="SunOS" dst="Papineau" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="SunOS" dst="Fraser" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="SunOS" dst="Browne" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="SunOS" dst="Varennes" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="SunOS" dst="Jacques" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="SunOS" dst="Thierry" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="SunOS" dst="Lachapelle" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="SunOS" dst="kV" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="SunOS" dst="Yolande" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="SunOS" dst="Pronovost" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="SunOS" dst="SPICE" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="SunOS" dst="Europe" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="SunOS" dst="Roy" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="SunOS" dst="Amadeus" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="SunOS" dst="Intel" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="SunOS" dst="Cambridge" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="SunOS" dst="Tremblay" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="SunOS" dst="UNIX" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="SunOS" dst="Domey" symmetrical="NO"><link_ctn id="114"/></route>
+ <route src="SunOS" dst="St_Bruno" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="SunOS" dst="Jean_Claude" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="SunOS" dst="Doyon" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="SunOS" dst="Fafard" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="SunOS" dst="Croteau" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="SunOS" dst="Dodge" symmetrical="NO"><link_ctn id="114"/><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Varennes" dst="Jacquelin" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Varennes" dst="Boivin" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Varennes" dst="Jean_Yves" symmetrical="NO"><link_ctn id="136"/><link_ctn id="138"/></route>
+ <route src="Varennes" dst="TeX" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Varennes" dst="Geoff" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="Varennes" dst="Disney" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Varennes" dst="iRMX" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Varennes" dst="McGee" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Varennes" dst="Gatien" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Varennes" dst="Laroche" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Varennes" dst="Tanguay" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Varennes" dst="Morin" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Varennes" dst="Ethernet" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Varennes" dst="Bellemarre" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Varennes" dst="Kuenning" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Varennes" dst="Gaston" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Varennes" dst="Harry" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Varennes" dst="Bousquet" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Varennes" dst="Paul" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Varennes" dst="St_Jean" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Varennes" dst="Jill" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Varennes" dst="Marcel" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Varennes" dst="Wright" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Varennes" dst="Jackson" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="62"/></route>
+ <route src="Varennes" dst="Fernand" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Varennes" dst="Soucy" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Varennes" dst="Ste_Julie" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Varennes" dst="Victoria" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Varennes" dst="Lessard" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Varennes" dst="Florient" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Varennes" dst="Marcoux" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Varennes" dst="Gavrel" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Varennes" dst="Bescherelle" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Varennes" dst="Pierre" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Varennes" dst="Jamie" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Varennes" dst="Rubin" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Varennes" dst="Olivier" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Varennes" dst="Boucherville" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Varennes" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Varennes" dst="Kansas" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Varennes" dst="King" symmetrical="NO"><link_ctn id="136"/><link_ctn id="137"/></route>
+ <route src="Varennes" dst="Lapointe" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Varennes" dst="Julian" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Varennes" dst="Lafontaine" symmetrical="NO"><link_ctn id="136"/><link_ctn id="139"/></route>
+ <route src="Varennes" dst="Gordon" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Varennes" dst="Drouin" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Varennes" dst="Robert" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Varennes" dst="Jocelyne" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Varennes" dst="Stephen" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Varennes" dst="Provost" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Varennes" dst="Juneau" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Varennes" dst="Casavant" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Varennes" dst="St_Antoine" symmetrical="NO"><link_ctn id="136"/></route>
+ <route src="Varennes" dst="Louis" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Varennes" dst="Julien" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Varennes" dst="St_Paul" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Varennes" dst="Mathematica" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Varennes" dst="LaTeX" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Varennes" dst="Sirois" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Varennes" dst="Monique" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Varennes" dst="Audy" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Varennes" dst="Bourassa" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Varennes" dst="OHara" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Varennes" dst="Boston" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Varennes" dst="Papineau" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Varennes" dst="Fraser" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Varennes" dst="Browne" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Varennes" dst="SunOS" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Varennes" dst="Jacques" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Varennes" dst="Thierry" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Varennes" dst="Lachapelle" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Varennes" dst="kV" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Varennes" dst="Yolande" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Varennes" dst="Pronovost" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Varennes" dst="SPICE" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Varennes" dst="Europe" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Varennes" dst="Roy" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Varennes" dst="Amadeus" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Varennes" dst="Intel" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Varennes" dst="Cambridge" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Varennes" dst="Tremblay" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Varennes" dst="UNIX" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Varennes" dst="Domey" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Varennes" dst="St_Bruno" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Varennes" dst="Jean_Claude" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Varennes" dst="Doyon" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Varennes" dst="Fafard" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Varennes" dst="Croteau" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Varennes" dst="Dodge" symmetrical="NO"><link_ctn id="136"/><link_ctn id="63"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Jacques" dst="Jacquelin" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Jacques" dst="Boivin" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Jacques" dst="Jean_Yves" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Jacques" dst="TeX" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Jacques" dst="Geoff" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Jacques" dst="Disney" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Jacques" dst="iRMX" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Jacques" dst="McGee" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Jacques" dst="Gatien" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Jacques" dst="Laroche" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Jacques" dst="Tanguay" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Jacques" dst="Morin" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Jacques" dst="Ethernet" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Jacques" dst="Bellemarre" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Jacques" dst="Kuenning" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Jacques" dst="Gaston" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Jacques" dst="Harry" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Jacques" dst="Bousquet" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Jacques" dst="Paul" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Jacques" dst="St_Jean" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Jacques" dst="Jill" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Jacques" dst="Marcel" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Jacques" dst="Wright" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Jacques" dst="Jackson" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Jacques" dst="Fernand" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Jacques" dst="Soucy" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Jacques" dst="Ste_Julie" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Jacques" dst="Victoria" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Jacques" dst="Lessard" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Jacques" dst="Florient" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Jacques" dst="Marcoux" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Jacques" dst="Gavrel" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Jacques" dst="Bescherelle" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Jacques" dst="Pierre" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Jacques" dst="Jamie" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Jacques" dst="Rubin" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Jacques" dst="Olivier" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Jacques" dst="Boucherville" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Jacques" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Jacques" dst="Kansas" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Jacques" dst="King" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Jacques" dst="Lapointe" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Jacques" dst="Julian" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Jacques" dst="Lafontaine" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Jacques" dst="Gordon" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Jacques" dst="Drouin" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Jacques" dst="Robert" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Jacques" dst="Jocelyne" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Jacques" dst="Stephen" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Jacques" dst="Provost" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Jacques" dst="Juneau" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Jacques" dst="Casavant" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Jacques" dst="St_Antoine" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Jacques" dst="Louis" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Jacques" dst="Julien" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Jacques" dst="St_Paul" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Jacques" dst="Mathematica" symmetrical="NO"><link_ctn id="159"/><link_ctn id="157"/></route>
+ <route src="Jacques" dst="LaTeX" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Jacques" dst="Sirois" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Jacques" dst="Monique" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Jacques" dst="Audy" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Jacques" dst="Bourassa" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Jacques" dst="OHara" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Jacques" dst="Boston" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Jacques" dst="Papineau" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Jacques" dst="Fraser" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Jacques" dst="Browne" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Jacques" dst="SunOS" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Jacques" dst="Varennes" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Jacques" dst="Thierry" symmetrical="NO"><link_ctn id="159"/><link_ctn id="156"/></route>
+ <route src="Jacques" dst="Lachapelle" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Jacques" dst="kV" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Jacques" dst="Yolande" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Jacques" dst="Pronovost" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Jacques" dst="SPICE" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Jacques" dst="Europe" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Jacques" dst="Roy" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Jacques" dst="Amadeus" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Jacques" dst="Intel" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Jacques" dst="Cambridge" symmetrical="NO"><link_ctn id="159"/><link_ctn id="158"/></route>
+ <route src="Jacques" dst="Tremblay" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Jacques" dst="UNIX" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Jacques" dst="Domey" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Jacques" dst="St_Bruno" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Jacques" dst="Jean_Claude" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Jacques" dst="Doyon" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Jacques" dst="Fafard" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Jacques" dst="Croteau" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Jacques" dst="Dodge" symmetrical="NO"><link_ctn id="159"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Thierry" dst="Jacquelin" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Thierry" dst="Boivin" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Thierry" dst="Jean_Yves" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Thierry" dst="TeX" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Thierry" dst="Geoff" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Thierry" dst="Disney" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Thierry" dst="iRMX" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Thierry" dst="McGee" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Thierry" dst="Gatien" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Thierry" dst="Laroche" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Thierry" dst="Tanguay" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Thierry" dst="Morin" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Thierry" dst="Ethernet" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Thierry" dst="Bellemarre" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Thierry" dst="Kuenning" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Thierry" dst="Gaston" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Thierry" dst="Harry" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Thierry" dst="Bousquet" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Thierry" dst="Paul" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Thierry" dst="St_Jean" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Thierry" dst="Jill" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Thierry" dst="Marcel" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Thierry" dst="Wright" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Thierry" dst="Jackson" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Thierry" dst="Fernand" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Thierry" dst="Soucy" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Thierry" dst="Ste_Julie" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Thierry" dst="Victoria" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Thierry" dst="Lessard" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Thierry" dst="Florient" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Thierry" dst="Marcoux" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Thierry" dst="Gavrel" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Thierry" dst="Bescherelle" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Thierry" dst="Pierre" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Thierry" dst="Jamie" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Thierry" dst="Rubin" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Thierry" dst="Olivier" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Thierry" dst="Boucherville" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Thierry" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Thierry" dst="Kansas" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Thierry" dst="King" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Thierry" dst="Lapointe" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Thierry" dst="Julian" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Thierry" dst="Lafontaine" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Thierry" dst="Gordon" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Thierry" dst="Drouin" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Thierry" dst="Robert" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Thierry" dst="Jocelyne" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Thierry" dst="Stephen" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Thierry" dst="Provost" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Thierry" dst="Juneau" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Thierry" dst="Casavant" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Thierry" dst="St_Antoine" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Thierry" dst="Louis" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Thierry" dst="Julien" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Thierry" dst="St_Paul" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Thierry" dst="Mathematica" symmetrical="NO"><link_ctn id="156"/><link_ctn id="157"/></route>
+ <route src="Thierry" dst="LaTeX" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Thierry" dst="Sirois" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Thierry" dst="Monique" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Thierry" dst="Audy" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Thierry" dst="Bourassa" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Thierry" dst="OHara" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Thierry" dst="Boston" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Thierry" dst="Papineau" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Thierry" dst="Fraser" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Thierry" dst="Browne" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Thierry" dst="SunOS" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Thierry" dst="Varennes" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Thierry" dst="Jacques" symmetrical="NO"><link_ctn id="156"/><link_ctn id="159"/></route>
+ <route src="Thierry" dst="Lachapelle" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Thierry" dst="kV" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Thierry" dst="Yolande" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Thierry" dst="Pronovost" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Thierry" dst="SPICE" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Thierry" dst="Europe" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Thierry" dst="Roy" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Thierry" dst="Amadeus" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Thierry" dst="Intel" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Thierry" dst="Cambridge" symmetrical="NO"><link_ctn id="156"/><link_ctn id="158"/></route>
+ <route src="Thierry" dst="Tremblay" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Thierry" dst="UNIX" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Thierry" dst="Domey" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Thierry" dst="St_Bruno" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Thierry" dst="Jean_Claude" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Thierry" dst="Doyon" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Thierry" dst="Fafard" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Thierry" dst="Croteau" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Thierry" dst="Dodge" symmetrical="NO"><link_ctn id="156"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Lachapelle" dst="Jacquelin" symmetrical="NO"><link_ctn id="146"/><link_ctn id="145"/></route>
+ <route src="Lachapelle" dst="Boivin" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Lachapelle" dst="Jean_Yves" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Lachapelle" dst="TeX" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Lachapelle" dst="Geoff" symmetrical="NO"><link_ctn id="146"/></route>
+ <route src="Lachapelle" dst="Disney" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Lachapelle" dst="iRMX" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Lachapelle" dst="McGee" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Lachapelle" dst="Gatien" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Lachapelle" dst="Laroche" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Lachapelle" dst="Tanguay" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Lachapelle" dst="Morin" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Lachapelle" dst="Ethernet" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Lachapelle" dst="Bellemarre" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Lachapelle" dst="Kuenning" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Lachapelle" dst="Gaston" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Lachapelle" dst="Harry" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Lachapelle" dst="Bousquet" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Lachapelle" dst="Paul" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Lachapelle" dst="St_Jean" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Lachapelle" dst="Jill" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Lachapelle" dst="Marcel" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Lachapelle" dst="Wright" symmetrical="NO"><link_ctn id="146"/><link_ctn id="147"/></route>
+ <route src="Lachapelle" dst="Jackson" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Lachapelle" dst="Fernand" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Lachapelle" dst="Soucy" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Lachapelle" dst="Ste_Julie" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Lachapelle" dst="Victoria" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Lachapelle" dst="Lessard" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Lachapelle" dst="Florient" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Lachapelle" dst="Marcoux" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Lachapelle" dst="Gavrel" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Lachapelle" dst="Bescherelle" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Lachapelle" dst="Pierre" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Lachapelle" dst="Jamie" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Lachapelle" dst="Rubin" symmetrical="NO"><link_ctn id="146"/><link_ctn id="144"/></route>
+ <route src="Lachapelle" dst="Olivier" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Lachapelle" dst="Boucherville" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Lachapelle" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Lachapelle" dst="Kansas" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Lachapelle" dst="King" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Lachapelle" dst="Lapointe" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Lachapelle" dst="Julian" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Lachapelle" dst="Lafontaine" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Lachapelle" dst="Gordon" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Lachapelle" dst="Drouin" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Lachapelle" dst="Robert" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Lachapelle" dst="Jocelyne" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Lachapelle" dst="Stephen" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Lachapelle" dst="Provost" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Lachapelle" dst="Juneau" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Lachapelle" dst="Casavant" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Lachapelle" dst="St_Antoine" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Lachapelle" dst="Louis" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Lachapelle" dst="Julien" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Lachapelle" dst="St_Paul" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Lachapelle" dst="Mathematica" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Lachapelle" dst="LaTeX" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Lachapelle" dst="Sirois" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Lachapelle" dst="Monique" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Lachapelle" dst="Audy" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Lachapelle" dst="Bourassa" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Lachapelle" dst="OHara" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Lachapelle" dst="Boston" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Lachapelle" dst="Papineau" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Lachapelle" dst="Fraser" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Lachapelle" dst="Browne" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Lachapelle" dst="SunOS" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Lachapelle" dst="Varennes" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Lachapelle" dst="Jacques" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Lachapelle" dst="Thierry" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Lachapelle" dst="kV" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Lachapelle" dst="Yolande" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Lachapelle" dst="Pronovost" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Lachapelle" dst="SPICE" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Lachapelle" dst="Europe" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Lachapelle" dst="Roy" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Lachapelle" dst="Amadeus" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Lachapelle" dst="Intel" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Lachapelle" dst="Cambridge" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Lachapelle" dst="Tremblay" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Lachapelle" dst="UNIX" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Lachapelle" dst="Domey" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Lachapelle" dst="St_Bruno" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Lachapelle" dst="Jean_Claude" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Lachapelle" dst="Doyon" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Lachapelle" dst="Fafard" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Lachapelle" dst="Croteau" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Lachapelle" dst="Dodge" symmetrical="NO"><link_ctn id="146"/><link_ctn id="59"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="kV" dst="Jacquelin" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="kV" dst="Boivin" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="kV" dst="Jean_Yves" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="kV" dst="TeX" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="kV" dst="Geoff" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="kV" dst="Disney" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="kV" dst="iRMX" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="kV" dst="McGee" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="kV" dst="Gatien" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="kV" dst="Laroche" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="kV" dst="Tanguay" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="kV" dst="Morin" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="kV" dst="Ethernet" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="kV" dst="Bellemarre" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="kV" dst="Kuenning" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="kV" dst="Gaston" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="kV" dst="Harry" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="kV" dst="Bousquet" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="kV" dst="Paul" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="kV" dst="St_Jean" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="kV" dst="Jill" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="kV" dst="Marcel" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="kV" dst="Wright" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="kV" dst="Jackson" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="kV" dst="Fernand" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="kV" dst="Soucy" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="kV" dst="Ste_Julie" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="kV" dst="Victoria" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="kV" dst="Lessard" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="kV" dst="Florient" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="kV" dst="Marcoux" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="kV" dst="Gavrel" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="kV" dst="Bescherelle" symmetrical="NO"><link_ctn id="140"/></route>
+ <route src="kV" dst="Pierre" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="kV" dst="Jamie" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="kV" dst="Rubin" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="kV" dst="Olivier" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="kV" dst="Boucherville" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="kV" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="kV" dst="Kansas" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="kV" dst="King" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="kV" dst="Lapointe" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="kV" dst="Julian" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="kV" dst="Lafontaine" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="kV" dst="Gordon" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="kV" dst="Drouin" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="kV" dst="Robert" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="kV" dst="Jocelyne" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="kV" dst="Stephen" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="kV" dst="Provost" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="kV" dst="Juneau" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="kV" dst="Casavant" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="kV" dst="St_Antoine" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="kV" dst="Louis" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="kV" dst="Julien" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="kV" dst="St_Paul" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="kV" dst="Mathematica" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="kV" dst="LaTeX" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="kV" dst="Sirois" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="kV" dst="Monique" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="kV" dst="Audy" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="kV" dst="Bourassa" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="kV" dst="OHara" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="kV" dst="Boston" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="kV" dst="Papineau" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="kV" dst="Fraser" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="kV" dst="Browne" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="kV" dst="SunOS" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="kV" dst="Varennes" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="kV" dst="Jacques" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="kV" dst="Thierry" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="kV" dst="Lachapelle" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="kV" dst="Yolande" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="kV" dst="Pronovost" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="kV" dst="SPICE" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="kV" dst="Europe" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="kV" dst="Roy" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="kV" dst="Amadeus" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="kV" dst="Intel" symmetrical="NO"><link_ctn id="141"/></route>
+ <route src="kV" dst="Cambridge" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="kV" dst="Tremblay" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="kV" dst="UNIX" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="kV" dst="Domey" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="kV" dst="St_Bruno" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="kV" dst="Jean_Claude" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="kV" dst="Doyon" symmetrical="NO"><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="kV" dst="Fafard" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="kV" dst="Croteau" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="kV" dst="Dodge" symmetrical="NO"><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Yolande" dst="Jacquelin" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Yolande" dst="Boivin" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Yolande" dst="Jean_Yves" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Yolande" dst="TeX" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Yolande" dst="Geoff" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Yolande" dst="Disney" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Yolande" dst="iRMX" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Yolande" dst="McGee" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Yolande" dst="Gatien" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Yolande" dst="Laroche" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Yolande" dst="Tanguay" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Yolande" dst="Morin" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Yolande" dst="Ethernet" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Yolande" dst="Bellemarre" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Yolande" dst="Kuenning" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Yolande" dst="Gaston" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Yolande" dst="Harry" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Yolande" dst="Bousquet" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Yolande" dst="Paul" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Yolande" dst="St_Jean" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Yolande" dst="Jill" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Yolande" dst="Marcel" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Yolande" dst="Wright" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Yolande" dst="Jackson" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Yolande" dst="Fernand" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Yolande" dst="Soucy" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Yolande" dst="Ste_Julie" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Yolande" dst="Victoria" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Yolande" dst="Lessard" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Yolande" dst="Florient" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Yolande" dst="Marcoux" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Yolande" dst="Gavrel" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Yolande" dst="Bescherelle" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Yolande" dst="Pierre" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Yolande" dst="Jamie" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Yolande" dst="Rubin" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Yolande" dst="Olivier" symmetrical="NO"><link_ctn id="168"/><link_ctn id="171"/></route>
+ <route src="Yolande" dst="Boucherville" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Yolande" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Yolande" dst="Kansas" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Yolande" dst="King" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Yolande" dst="Lapointe" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Yolande" dst="Julian" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Yolande" dst="Lafontaine" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Yolande" dst="Gordon" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Yolande" dst="Drouin" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Yolande" dst="Robert" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Yolande" dst="Jocelyne" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Yolande" dst="Stephen" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Yolande" dst="Provost" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Yolande" dst="Juneau" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Yolande" dst="Casavant" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Yolande" dst="St_Antoine" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Yolande" dst="Louis" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Yolande" dst="Julien" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Yolande" dst="St_Paul" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Yolande" dst="Mathematica" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Yolande" dst="LaTeX" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Yolande" dst="Sirois" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Yolande" dst="Monique" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Yolande" dst="Audy" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Yolande" dst="Bourassa" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Yolande" dst="OHara" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Yolande" dst="Boston" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Yolande" dst="Papineau" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Yolande" dst="Fraser" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Yolande" dst="Browne" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Yolande" dst="SunOS" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Yolande" dst="Varennes" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Yolande" dst="Jacques" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Yolande" dst="Thierry" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Yolande" dst="Lachapelle" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Yolande" dst="kV" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Yolande" dst="Pronovost" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Yolande" dst="SPICE" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Yolande" dst="Europe" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Yolande" dst="Roy" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Yolande" dst="Amadeus" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Yolande" dst="Intel" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Yolande" dst="Cambridge" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Yolande" dst="Tremblay" symmetrical="NO"><link_ctn id="168"/><link_ctn id="170"/></route>
+ <route src="Yolande" dst="UNIX" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Yolande" dst="Domey" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Yolande" dst="St_Bruno" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Yolande" dst="Jean_Claude" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Yolande" dst="Doyon" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Yolande" dst="Fafard" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Yolande" dst="Croteau" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Yolande" dst="Dodge" symmetrical="NO"><link_ctn id="168"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Pronovost" dst="Jacquelin" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Pronovost" dst="Boivin" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Pronovost" dst="Jean_Yves" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Pronovost" dst="TeX" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Pronovost" dst="Geoff" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Pronovost" dst="Disney" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Pronovost" dst="iRMX" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Pronovost" dst="McGee" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Pronovost" dst="Gatien" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Pronovost" dst="Laroche" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Pronovost" dst="Tanguay" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Pronovost" dst="Morin" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Pronovost" dst="Ethernet" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Pronovost" dst="Bellemarre" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Pronovost" dst="Kuenning" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Pronovost" dst="Gaston" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Pronovost" dst="Harry" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Pronovost" dst="Bousquet" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Pronovost" dst="Paul" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Pronovost" dst="St_Jean" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Pronovost" dst="Jill" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Pronovost" dst="Marcel" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Pronovost" dst="Wright" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Pronovost" dst="Jackson" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Pronovost" dst="Fernand" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Pronovost" dst="Soucy" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Pronovost" dst="Ste_Julie" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Pronovost" dst="Victoria" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Pronovost" dst="Lessard" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Pronovost" dst="Florient" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Pronovost" dst="Marcoux" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Pronovost" dst="Gavrel" symmetrical="NO"><link_ctn id="151"/><link_ctn id="148"/></route>
+ <route src="Pronovost" dst="Bescherelle" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Pronovost" dst="Pierre" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Pronovost" dst="Jamie" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Pronovost" dst="Rubin" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Pronovost" dst="Olivier" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Pronovost" dst="Boucherville" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Pronovost" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Pronovost" dst="Kansas" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Pronovost" dst="King" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Pronovost" dst="Lapointe" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Pronovost" dst="Julian" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Pronovost" dst="Lafontaine" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Pronovost" dst="Gordon" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Pronovost" dst="Drouin" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Pronovost" dst="Robert" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Pronovost" dst="Jocelyne" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Pronovost" dst="Stephen" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Pronovost" dst="Provost" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Pronovost" dst="Juneau" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Pronovost" dst="Casavant" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Pronovost" dst="St_Antoine" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Pronovost" dst="Louis" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Pronovost" dst="Julien" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Pronovost" dst="St_Paul" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Pronovost" dst="Mathematica" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Pronovost" dst="LaTeX" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Pronovost" dst="Sirois" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Pronovost" dst="Monique" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Pronovost" dst="Audy" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Pronovost" dst="Bourassa" symmetrical="NO"><link_ctn id="151"/><link_ctn id="150"/></route>
+ <route src="Pronovost" dst="OHara" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Pronovost" dst="Boston" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Pronovost" dst="Papineau" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Pronovost" dst="Fraser" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Pronovost" dst="Browne" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Pronovost" dst="SunOS" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Pronovost" dst="Varennes" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Pronovost" dst="Jacques" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Pronovost" dst="Thierry" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Pronovost" dst="Lachapelle" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Pronovost" dst="kV" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Pronovost" dst="Yolande" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Pronovost" dst="SPICE" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Pronovost" dst="Europe" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Pronovost" dst="Roy" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Pronovost" dst="Amadeus" symmetrical="NO"><link_ctn id="151"/></route>
+ <route src="Pronovost" dst="Intel" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Pronovost" dst="Cambridge" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Pronovost" dst="Tremblay" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Pronovost" dst="UNIX" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Pronovost" dst="Domey" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Pronovost" dst="St_Bruno" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Pronovost" dst="Jean_Claude" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Pronovost" dst="Doyon" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Pronovost" dst="Fafard" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Pronovost" dst="Croteau" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Pronovost" dst="Dodge" symmetrical="NO"><link_ctn id="151"/><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="SPICE" dst="Jacquelin" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="SPICE" dst="Boivin" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="SPICE" dst="Jean_Yves" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="SPICE" dst="TeX" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="SPICE" dst="Geoff" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="SPICE" dst="Disney" symmetrical="NO"><link_ctn id="110"/><link_ctn id="111"/></route>
+ <route src="SPICE" dst="iRMX" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="SPICE" dst="McGee" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="SPICE" dst="Gatien" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="SPICE" dst="Laroche" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="SPICE" dst="Tanguay" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="SPICE" dst="Morin" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="SPICE" dst="Ethernet" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="SPICE" dst="Bellemarre" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/></route>
+ <route src="SPICE" dst="Kuenning" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="SPICE" dst="Gaston" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="SPICE" dst="Harry" symmetrical="NO"><link_ctn id="110"/><link_ctn id="108"/></route>
+ <route src="SPICE" dst="Bousquet" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="SPICE" dst="Paul" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="SPICE" dst="St_Jean" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="SPICE" dst="Jill" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="SPICE" dst="Marcel" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="SPICE" dst="Wright" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="SPICE" dst="Jackson" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="SPICE" dst="Fernand" symmetrical="NO"><link_ctn id="110"/><link_ctn id="109"/></route>
+ <route src="SPICE" dst="Soucy" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="SPICE" dst="Ste_Julie" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="SPICE" dst="Victoria" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="SPICE" dst="Lessard" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="SPICE" dst="Florient" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="SPICE" dst="Marcoux" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="SPICE" dst="Gavrel" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="SPICE" dst="Bescherelle" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="SPICE" dst="Pierre" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="SPICE" dst="Jamie" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="SPICE" dst="Rubin" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="SPICE" dst="Olivier" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="SPICE" dst="Boucherville" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="SPICE" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="SPICE" dst="Kansas" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="SPICE" dst="King" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="SPICE" dst="Lapointe" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="SPICE" dst="Julian" symmetrical="NO"><link_ctn id="110"/></route>
+ <route src="SPICE" dst="Lafontaine" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="SPICE" dst="Gordon" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="SPICE" dst="Drouin" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="SPICE" dst="Robert" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="SPICE" dst="Jocelyne" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="SPICE" dst="Stephen" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="SPICE" dst="Provost" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="SPICE" dst="Juneau" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="SPICE" dst="Casavant" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="SPICE" dst="St_Antoine" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="SPICE" dst="Louis" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="SPICE" dst="Julien" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="SPICE" dst="St_Paul" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="SPICE" dst="Mathematica" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="SPICE" dst="LaTeX" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="SPICE" dst="Sirois" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="SPICE" dst="Monique" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="SPICE" dst="Audy" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="SPICE" dst="Bourassa" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="SPICE" dst="OHara" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="SPICE" dst="Boston" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="SPICE" dst="Papineau" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="SPICE" dst="Fraser" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="SPICE" dst="Browne" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="SPICE" dst="SunOS" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="SPICE" dst="Varennes" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="SPICE" dst="Jacques" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="SPICE" dst="Thierry" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="SPICE" dst="Lachapelle" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="SPICE" dst="kV" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="SPICE" dst="Yolande" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="SPICE" dst="Pronovost" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="SPICE" dst="Europe" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="SPICE" dst="Roy" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="SPICE" dst="Amadeus" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="SPICE" dst="Intel" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="SPICE" dst="Cambridge" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="SPICE" dst="Tremblay" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="SPICE" dst="UNIX" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="SPICE" dst="Domey" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="SPICE" dst="St_Bruno" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="SPICE" dst="Jean_Claude" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="SPICE" dst="Doyon" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="7"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="SPICE" dst="Fafard" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="SPICE" dst="Croteau" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="SPICE" dst="Dodge" symmetrical="NO"><link_ctn id="110"/><link_ctn id="33"/><link_ctn id="32"/><link_ctn id="30"/><link_ctn id="27"/><link_ctn id="28"/><link_ctn id="19"/><link_ctn id="20"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Europe" dst="Jacquelin" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Europe" dst="Boivin" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Europe" dst="Jean_Yves" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Europe" dst="TeX" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Europe" dst="Geoff" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Europe" dst="Disney" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Europe" dst="iRMX" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Europe" dst="McGee" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Europe" dst="Gatien" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Europe" dst="Laroche" symmetrical="NO"><link_ctn id="185"/></route>
+ <route src="Europe" dst="Tanguay" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Europe" dst="Morin" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Europe" dst="Ethernet" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Europe" dst="Bellemarre" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Europe" dst="Kuenning" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Europe" dst="Gaston" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Europe" dst="Harry" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Europe" dst="Bousquet" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Europe" dst="Paul" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Europe" dst="St_Jean" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Europe" dst="Jill" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Europe" dst="Marcel" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Europe" dst="Wright" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Europe" dst="Jackson" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Europe" dst="Fernand" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Europe" dst="Soucy" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Europe" dst="Ste_Julie" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Europe" dst="Victoria" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Europe" dst="Lessard" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Europe" dst="Florient" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Europe" dst="Marcoux" symmetrical="NO"><link_ctn id="185"/><link_ctn id="186"/></route>
+ <route src="Europe" dst="Gavrel" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Europe" dst="Bescherelle" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Europe" dst="Pierre" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Europe" dst="Jamie" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Europe" dst="Rubin" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Europe" dst="Olivier" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Europe" dst="Boucherville" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Europe" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="185"/><link_ctn id="184"/></route>
+ <route src="Europe" dst="Kansas" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Europe" dst="King" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Europe" dst="Lapointe" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Europe" dst="Julian" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Europe" dst="Lafontaine" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Europe" dst="Gordon" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Europe" dst="Drouin" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Europe" dst="Robert" symmetrical="NO"><link_ctn id="185"/><link_ctn id="187"/></route>
+ <route src="Europe" dst="Jocelyne" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Europe" dst="Stephen" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Europe" dst="Provost" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Europe" dst="Juneau" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Europe" dst="Casavant" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Europe" dst="St_Antoine" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Europe" dst="Louis" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Europe" dst="Julien" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Europe" dst="St_Paul" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Europe" dst="Mathematica" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Europe" dst="LaTeX" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Europe" dst="Sirois" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Europe" dst="Monique" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Europe" dst="Audy" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Europe" dst="Bourassa" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Europe" dst="OHara" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Europe" dst="Boston" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Europe" dst="Papineau" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Europe" dst="Fraser" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Europe" dst="Browne" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Europe" dst="SunOS" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Europe" dst="Varennes" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Europe" dst="Jacques" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Europe" dst="Thierry" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Europe" dst="Lachapelle" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Europe" dst="kV" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Europe" dst="Yolande" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Europe" dst="Pronovost" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Europe" dst="SPICE" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Europe" dst="Roy" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Europe" dst="Amadeus" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Europe" dst="Intel" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Europe" dst="Cambridge" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Europe" dst="Tremblay" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Europe" dst="UNIX" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Europe" dst="Domey" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Europe" dst="St_Bruno" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Europe" dst="Jean_Claude" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Europe" dst="Doyon" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Europe" dst="Fafard" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Europe" dst="Croteau" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Europe" dst="Dodge" symmetrical="NO"><link_ctn id="185"/><link_ctn id="91"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Roy" dst="Jacquelin" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Roy" dst="Boivin" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Roy" dst="Jean_Yves" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Roy" dst="TeX" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Roy" dst="Geoff" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Roy" dst="Disney" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Roy" dst="iRMX" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Roy" dst="McGee" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Roy" dst="Gatien" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Roy" dst="Laroche" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Roy" dst="Tanguay" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Roy" dst="Morin" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Roy" dst="Ethernet" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Roy" dst="Bellemarre" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Roy" dst="Kuenning" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Roy" dst="Gaston" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Roy" dst="Harry" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Roy" dst="Bousquet" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Roy" dst="Paul" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Roy" dst="St_Jean" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Roy" dst="Jill" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Roy" dst="Marcel" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Roy" dst="Wright" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Roy" dst="Jackson" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Roy" dst="Fernand" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Roy" dst="Soucy" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Roy" dst="Ste_Julie" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Roy" dst="Victoria" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Roy" dst="Lessard" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Roy" dst="Florient" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Roy" dst="Marcoux" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Roy" dst="Gavrel" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Roy" dst="Bescherelle" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Roy" dst="Pierre" symmetrical="NO"><link_ctn id="167"/></route>
+ <route src="Roy" dst="Jamie" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Roy" dst="Rubin" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Roy" dst="Olivier" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Roy" dst="Boucherville" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Roy" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Roy" dst="Kansas" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Roy" dst="King" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Roy" dst="Lapointe" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Roy" dst="Julian" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Roy" dst="Lafontaine" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Roy" dst="Gordon" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Roy" dst="Drouin" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Roy" dst="Robert" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Roy" dst="Jocelyne" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Roy" dst="Stephen" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Roy" dst="Provost" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Roy" dst="Juneau" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Roy" dst="Casavant" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Roy" dst="St_Antoine" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Roy" dst="Louis" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Roy" dst="Julien" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Roy" dst="St_Paul" symmetrical="NO"><link_ctn id="165"/></route>
+ <route src="Roy" dst="Mathematica" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Roy" dst="LaTeX" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Roy" dst="Sirois" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Roy" dst="Monique" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Roy" dst="Audy" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Roy" dst="Bourassa" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Roy" dst="OHara" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Roy" dst="Boston" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Roy" dst="Papineau" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Roy" dst="Fraser" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Roy" dst="Browne" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Roy" dst="SunOS" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Roy" dst="Varennes" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Roy" dst="Jacques" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Roy" dst="Thierry" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Roy" dst="Lachapelle" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Roy" dst="kV" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Roy" dst="Yolande" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Roy" dst="Pronovost" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Roy" dst="SPICE" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Roy" dst="Europe" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Roy" dst="Amadeus" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Roy" dst="Intel" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Roy" dst="Cambridge" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Roy" dst="Tremblay" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Roy" dst="UNIX" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Roy" dst="Domey" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Roy" dst="St_Bruno" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Roy" dst="Jean_Claude" symmetrical="NO"><link_ctn id="76"/><link_ctn id="74"/><link_ctn id="73"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Roy" dst="Doyon" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Roy" dst="Fafard" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Roy" dst="Croteau" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Roy" dst="Dodge" symmetrical="NO"><link_ctn id="76"/><link_ctn id="15"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Amadeus" dst="Jacquelin" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Amadeus" dst="Boivin" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Amadeus" dst="Jean_Yves" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Amadeus" dst="TeX" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Amadeus" dst="Geoff" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Amadeus" dst="Disney" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Amadeus" dst="iRMX" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Amadeus" dst="McGee" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Amadeus" dst="Gatien" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Amadeus" dst="Laroche" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Amadeus" dst="Tanguay" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Amadeus" dst="Morin" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Amadeus" dst="Ethernet" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Amadeus" dst="Bellemarre" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Amadeus" dst="Kuenning" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Amadeus" dst="Gaston" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Amadeus" dst="Harry" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Amadeus" dst="Bousquet" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Amadeus" dst="Paul" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Amadeus" dst="St_Jean" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Amadeus" dst="Jill" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Amadeus" dst="Marcel" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Amadeus" dst="Wright" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Amadeus" dst="Jackson" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Amadeus" dst="Fernand" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Amadeus" dst="Soucy" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Amadeus" dst="Ste_Julie" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Amadeus" dst="Victoria" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Amadeus" dst="Lessard" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Amadeus" dst="Florient" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Amadeus" dst="Marcoux" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Amadeus" dst="Gavrel" symmetrical="NO"><link_ctn id="148"/></route>
+ <route src="Amadeus" dst="Bescherelle" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Amadeus" dst="Pierre" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Amadeus" dst="Jamie" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Amadeus" dst="Rubin" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Amadeus" dst="Olivier" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Amadeus" dst="Boucherville" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Amadeus" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Amadeus" dst="Kansas" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Amadeus" dst="King" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Amadeus" dst="Lapointe" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Amadeus" dst="Julian" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Amadeus" dst="Lafontaine" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Amadeus" dst="Gordon" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Amadeus" dst="Drouin" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Amadeus" dst="Robert" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Amadeus" dst="Jocelyne" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Amadeus" dst="Stephen" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Amadeus" dst="Provost" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Amadeus" dst="Juneau" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Amadeus" dst="Casavant" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Amadeus" dst="St_Antoine" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Amadeus" dst="Louis" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Amadeus" dst="Julien" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Amadeus" dst="St_Paul" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Amadeus" dst="Mathematica" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Amadeus" dst="LaTeX" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Amadeus" dst="Sirois" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Amadeus" dst="Monique" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Amadeus" dst="Audy" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Amadeus" dst="Bourassa" symmetrical="NO"><link_ctn id="150"/></route>
+ <route src="Amadeus" dst="OHara" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Amadeus" dst="Boston" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Amadeus" dst="Papineau" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Amadeus" dst="Fraser" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Amadeus" dst="Browne" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Amadeus" dst="SunOS" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Amadeus" dst="Varennes" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Amadeus" dst="Jacques" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Amadeus" dst="Thierry" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Amadeus" dst="Lachapelle" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Amadeus" dst="kV" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Amadeus" dst="Yolande" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Amadeus" dst="Pronovost" symmetrical="NO"><link_ctn id="151"/></route>
+ <route src="Amadeus" dst="SPICE" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Amadeus" dst="Europe" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Amadeus" dst="Roy" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Amadeus" dst="Intel" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Amadeus" dst="Cambridge" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Amadeus" dst="Tremblay" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Amadeus" dst="UNIX" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Amadeus" dst="Domey" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Amadeus" dst="St_Bruno" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Amadeus" dst="Jean_Claude" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Amadeus" dst="Doyon" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Amadeus" dst="Fafard" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Amadeus" dst="Croteau" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Amadeus" dst="Dodge" symmetrical="NO"><link_ctn id="53"/><link_ctn id="52"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Intel" dst="Jacquelin" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Intel" dst="Boivin" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Intel" dst="Jean_Yves" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Intel" dst="TeX" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Intel" dst="Geoff" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Intel" dst="Disney" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Intel" dst="iRMX" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Intel" dst="McGee" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Intel" dst="Gatien" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Intel" dst="Laroche" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Intel" dst="Tanguay" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Intel" dst="Morin" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Intel" dst="Ethernet" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Intel" dst="Bellemarre" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Intel" dst="Kuenning" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Intel" dst="Gaston" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Intel" dst="Harry" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Intel" dst="Bousquet" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Intel" dst="Paul" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Intel" dst="St_Jean" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Intel" dst="Jill" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Intel" dst="Marcel" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Intel" dst="Wright" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Intel" dst="Jackson" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Intel" dst="Fernand" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Intel" dst="Soucy" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Intel" dst="Ste_Julie" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Intel" dst="Victoria" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Intel" dst="Lessard" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Intel" dst="Florient" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Intel" dst="Marcoux" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Intel" dst="Gavrel" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Intel" dst="Bescherelle" symmetrical="NO"><link_ctn id="141"/><link_ctn id="140"/></route>
+ <route src="Intel" dst="Pierre" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Intel" dst="Jamie" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Intel" dst="Rubin" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Intel" dst="Olivier" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Intel" dst="Boucherville" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Intel" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Intel" dst="Kansas" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Intel" dst="King" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Intel" dst="Lapointe" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Intel" dst="Julian" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Intel" dst="Lafontaine" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Intel" dst="Gordon" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Intel" dst="Drouin" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Intel" dst="Robert" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Intel" dst="Jocelyne" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Intel" dst="Stephen" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Intel" dst="Provost" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Intel" dst="Juneau" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Intel" dst="Casavant" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Intel" dst="St_Antoine" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Intel" dst="Louis" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Intel" dst="Julien" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Intel" dst="St_Paul" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Intel" dst="Mathematica" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Intel" dst="LaTeX" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Intel" dst="Sirois" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Intel" dst="Monique" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Intel" dst="Audy" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Intel" dst="Bourassa" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Intel" dst="OHara" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Intel" dst="Boston" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Intel" dst="Papineau" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Intel" dst="Fraser" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Intel" dst="Browne" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Intel" dst="SunOS" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Intel" dst="Varennes" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Intel" dst="Jacques" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Intel" dst="Thierry" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Intel" dst="Lachapelle" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Intel" dst="kV" symmetrical="NO"><link_ctn id="141"/></route>
+ <route src="Intel" dst="Yolande" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Intel" dst="Pronovost" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Intel" dst="SPICE" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Intel" dst="Europe" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Intel" dst="Roy" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Intel" dst="Amadeus" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Intel" dst="Cambridge" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Intel" dst="Tremblay" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Intel" dst="UNIX" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Intel" dst="Domey" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Intel" dst="St_Bruno" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Intel" dst="Jean_Claude" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Intel" dst="Doyon" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Intel" dst="Fafard" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Intel" dst="Croteau" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Intel" dst="Dodge" symmetrical="NO"><link_ctn id="141"/><link_ctn id="57"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Cambridge" dst="Jacquelin" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Cambridge" dst="Boivin" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Cambridge" dst="Jean_Yves" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Cambridge" dst="TeX" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Cambridge" dst="Geoff" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Cambridge" dst="Disney" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Cambridge" dst="iRMX" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Cambridge" dst="McGee" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Cambridge" dst="Gatien" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Cambridge" dst="Laroche" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Cambridge" dst="Tanguay" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Cambridge" dst="Morin" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Cambridge" dst="Ethernet" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Cambridge" dst="Bellemarre" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Cambridge" dst="Kuenning" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Cambridge" dst="Gaston" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Cambridge" dst="Harry" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Cambridge" dst="Bousquet" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Cambridge" dst="Paul" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Cambridge" dst="St_Jean" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Cambridge" dst="Jill" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Cambridge" dst="Marcel" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Cambridge" dst="Wright" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Cambridge" dst="Jackson" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Cambridge" dst="Fernand" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Cambridge" dst="Soucy" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Cambridge" dst="Ste_Julie" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Cambridge" dst="Victoria" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Cambridge" dst="Lessard" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Cambridge" dst="Florient" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Cambridge" dst="Marcoux" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Cambridge" dst="Gavrel" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Cambridge" dst="Bescherelle" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Cambridge" dst="Pierre" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Cambridge" dst="Jamie" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Cambridge" dst="Rubin" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Cambridge" dst="Olivier" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Cambridge" dst="Boucherville" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Cambridge" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Cambridge" dst="Kansas" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Cambridge" dst="King" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Cambridge" dst="Lapointe" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Cambridge" dst="Julian" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Cambridge" dst="Lafontaine" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Cambridge" dst="Gordon" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Cambridge" dst="Drouin" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Cambridge" dst="Robert" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Cambridge" dst="Jocelyne" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Cambridge" dst="Stephen" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Cambridge" dst="Provost" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Cambridge" dst="Juneau" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Cambridge" dst="Casavant" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Cambridge" dst="St_Antoine" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Cambridge" dst="Louis" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Cambridge" dst="Julien" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Cambridge" dst="St_Paul" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Cambridge" dst="Mathematica" symmetrical="NO"><link_ctn id="158"/><link_ctn id="157"/></route>
+ <route src="Cambridge" dst="LaTeX" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Cambridge" dst="Sirois" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Cambridge" dst="Monique" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Cambridge" dst="Audy" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Cambridge" dst="Bourassa" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Cambridge" dst="OHara" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Cambridge" dst="Boston" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Cambridge" dst="Papineau" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Cambridge" dst="Fraser" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Cambridge" dst="Browne" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Cambridge" dst="SunOS" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Cambridge" dst="Varennes" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Cambridge" dst="Jacques" symmetrical="NO"><link_ctn id="158"/><link_ctn id="159"/></route>
+ <route src="Cambridge" dst="Thierry" symmetrical="NO"><link_ctn id="158"/><link_ctn id="156"/></route>
+ <route src="Cambridge" dst="Lachapelle" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Cambridge" dst="kV" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Cambridge" dst="Yolande" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Cambridge" dst="Pronovost" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Cambridge" dst="SPICE" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Cambridge" dst="Europe" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Cambridge" dst="Roy" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Cambridge" dst="Amadeus" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Cambridge" dst="Intel" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Cambridge" dst="Tremblay" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Cambridge" dst="UNIX" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Cambridge" dst="Domey" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Cambridge" dst="St_Bruno" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Cambridge" dst="Jean_Claude" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Cambridge" dst="Doyon" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Cambridge" dst="Fafard" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Cambridge" dst="Croteau" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Cambridge" dst="Dodge" symmetrical="NO"><link_ctn id="158"/><link_ctn id="66"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Tremblay" dst="Jacquelin" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Tremblay" dst="Boivin" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Tremblay" dst="Jean_Yves" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Tremblay" dst="TeX" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Tremblay" dst="Geoff" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Tremblay" dst="Disney" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Tremblay" dst="iRMX" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Tremblay" dst="McGee" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Tremblay" dst="Gatien" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Tremblay" dst="Laroche" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Tremblay" dst="Tanguay" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Tremblay" dst="Morin" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Tremblay" dst="Ethernet" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Tremblay" dst="Bellemarre" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Tremblay" dst="Kuenning" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Tremblay" dst="Gaston" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Tremblay" dst="Harry" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Tremblay" dst="Bousquet" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Tremblay" dst="Paul" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Tremblay" dst="St_Jean" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Tremblay" dst="Jill" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Tremblay" dst="Marcel" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Tremblay" dst="Wright" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Tremblay" dst="Jackson" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Tremblay" dst="Fernand" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Tremblay" dst="Soucy" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Tremblay" dst="Ste_Julie" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Tremblay" dst="Victoria" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Tremblay" dst="Lessard" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Tremblay" dst="Florient" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Tremblay" dst="Marcoux" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Tremblay" dst="Gavrel" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Tremblay" dst="Bescherelle" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Tremblay" dst="Pierre" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Tremblay" dst="Jamie" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Tremblay" dst="Rubin" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Tremblay" dst="Olivier" symmetrical="NO"><link_ctn id="170"/><link_ctn id="171"/></route>
+ <route src="Tremblay" dst="Boucherville" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Tremblay" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Tremblay" dst="Kansas" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Tremblay" dst="King" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Tremblay" dst="Lapointe" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Tremblay" dst="Julian" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Tremblay" dst="Lafontaine" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Tremblay" dst="Gordon" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Tremblay" dst="Drouin" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Tremblay" dst="Robert" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Tremblay" dst="Jocelyne" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Tremblay" dst="Stephen" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Tremblay" dst="Provost" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Tremblay" dst="Juneau" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Tremblay" dst="Casavant" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Tremblay" dst="St_Antoine" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Tremblay" dst="Louis" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Tremblay" dst="Julien" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Tremblay" dst="St_Paul" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Tremblay" dst="Mathematica" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Tremblay" dst="LaTeX" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Tremblay" dst="Sirois" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Tremblay" dst="Monique" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Tremblay" dst="Audy" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Tremblay" dst="Bourassa" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Tremblay" dst="OHara" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Tremblay" dst="Boston" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Tremblay" dst="Papineau" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Tremblay" dst="Fraser" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Tremblay" dst="Browne" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Tremblay" dst="SunOS" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Tremblay" dst="Varennes" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Tremblay" dst="Jacques" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Tremblay" dst="Thierry" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Tremblay" dst="Lachapelle" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Tremblay" dst="kV" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Tremblay" dst="Yolande" symmetrical="NO"><link_ctn id="170"/><link_ctn id="168"/></route>
+ <route src="Tremblay" dst="Pronovost" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Tremblay" dst="SPICE" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Tremblay" dst="Europe" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Tremblay" dst="Roy" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="73"/><link_ctn id="74"/><link_ctn id="76"/></route>
+ <route src="Tremblay" dst="Amadeus" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Tremblay" dst="Intel" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Tremblay" dst="Cambridge" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Tremblay" dst="UNIX" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Tremblay" dst="Domey" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Tremblay" dst="St_Bruno" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Tremblay" dst="Jean_Claude" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Tremblay" dst="Doyon" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Tremblay" dst="Fafard" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Tremblay" dst="Croteau" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Tremblay" dst="Dodge" symmetrical="NO"><link_ctn id="170"/><link_ctn id="72"/><link_ctn id="65"/><link_ctn id="64"/><link_ctn id="69"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="UNIX" dst="Jacquelin" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="UNIX" dst="Boivin" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="UNIX" dst="Jean_Yves" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="UNIX" dst="TeX" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="UNIX" dst="Geoff" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="UNIX" dst="Disney" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="UNIX" dst="iRMX" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="UNIX" dst="McGee" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="UNIX" dst="Gatien" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="UNIX" dst="Laroche" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="UNIX" dst="Tanguay" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="UNIX" dst="Morin" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="UNIX" dst="Ethernet" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="UNIX" dst="Bellemarre" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="UNIX" dst="Kuenning" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="UNIX" dst="Gaston" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="UNIX" dst="Harry" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="UNIX" dst="Bousquet" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="UNIX" dst="Paul" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="UNIX" dst="St_Jean" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="UNIX" dst="Jill" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="UNIX" dst="Marcel" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="UNIX" dst="Wright" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="UNIX" dst="Jackson" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="UNIX" dst="Fernand" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="UNIX" dst="Soucy" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="UNIX" dst="Ste_Julie" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="UNIX" dst="Victoria" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="UNIX" dst="Lessard" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="UNIX" dst="Florient" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="UNIX" dst="Marcoux" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="UNIX" dst="Gavrel" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="UNIX" dst="Bescherelle" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="UNIX" dst="Pierre" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="UNIX" dst="Jamie" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="UNIX" dst="Rubin" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="UNIX" dst="Olivier" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="UNIX" dst="Boucherville" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="UNIX" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="UNIX" dst="Kansas" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="UNIX" dst="King" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="UNIX" dst="Lapointe" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="UNIX" dst="Julian" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="UNIX" dst="Lafontaine" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="UNIX" dst="Gordon" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="UNIX" dst="Drouin" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="UNIX" dst="Robert" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="UNIX" dst="Jocelyne" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="UNIX" dst="Stephen" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="UNIX" dst="Provost" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="UNIX" dst="Juneau" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="UNIX" dst="Casavant" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="UNIX" dst="St_Antoine" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="UNIX" dst="Louis" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="UNIX" dst="Julien" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="UNIX" dst="St_Paul" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="UNIX" dst="Mathematica" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="UNIX" dst="LaTeX" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="UNIX" dst="Sirois" symmetrical="NO"><link_ctn id="129"/></route>
+ <route src="UNIX" dst="Monique" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="UNIX" dst="Audy" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="UNIX" dst="Bourassa" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="UNIX" dst="OHara" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="UNIX" dst="Boston" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="UNIX" dst="Papineau" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="UNIX" dst="Fraser" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="UNIX" dst="Browne" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="UNIX" dst="SunOS" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="UNIX" dst="Varennes" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="UNIX" dst="Jacques" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="UNIX" dst="Thierry" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="UNIX" dst="Lachapelle" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="UNIX" dst="kV" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="UNIX" dst="Yolande" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="UNIX" dst="Pronovost" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="UNIX" dst="SPICE" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="UNIX" dst="Europe" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="UNIX" dst="Roy" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="UNIX" dst="Amadeus" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="UNIX" dst="Intel" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="UNIX" dst="Cambridge" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="UNIX" dst="Tremblay" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="UNIX" dst="Domey" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="UNIX" dst="St_Bruno" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="48"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="UNIX" dst="Jean_Claude" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="UNIX" dst="Doyon" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="UNIX" dst="Fafard" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="UNIX" dst="Croteau" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="UNIX" dst="Dodge" symmetrical="NO"><link_ctn id="43"/><link_ctn id="42"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Domey" dst="Jacquelin" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Domey" dst="Boivin" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/></route>
+ <route src="Domey" dst="Jean_Yves" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Domey" dst="TeX" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Domey" dst="Geoff" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Domey" dst="Disney" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Domey" dst="iRMX" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Domey" dst="McGee" symmetrical="NO"><link_ctn id="40"/><link_ctn id="41"/></route>
+ <route src="Domey" dst="Gatien" symmetrical="NO"><link_ctn id="115"/></route>
+ <route src="Domey" dst="Laroche" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Domey" dst="Tanguay" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Domey" dst="Morin" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Domey" dst="Ethernet" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Domey" dst="Bellemarre" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Domey" dst="Kuenning" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Domey" dst="Gaston" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Domey" dst="Harry" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Domey" dst="Bousquet" symmetrical="NO"><link_ctn id="40"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Domey" dst="Paul" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Domey" dst="St_Jean" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Domey" dst="Jill" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Domey" dst="Marcel" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Domey" dst="Wright" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Domey" dst="Jackson" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Domey" dst="Fernand" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Domey" dst="Soucy" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Domey" dst="Ste_Julie" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Domey" dst="Victoria" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Domey" dst="Lessard" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Domey" dst="Florient" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Domey" dst="Marcoux" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Domey" dst="Gavrel" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Domey" dst="Bescherelle" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Domey" dst="Pierre" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Domey" dst="Jamie" symmetrical="NO"><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Domey" dst="Rubin" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Domey" dst="Olivier" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Domey" dst="Boucherville" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Domey" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Domey" dst="Kansas" symmetrical="NO"><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Domey" dst="King" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Domey" dst="Lapointe" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Domey" dst="Julian" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Domey" dst="Lafontaine" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Domey" dst="Gordon" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Domey" dst="Drouin" symmetrical="NO"><link_ctn id="40"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Domey" dst="Robert" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Domey" dst="Jocelyne" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Domey" dst="Stephen" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Domey" dst="Provost" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Domey" dst="Juneau" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Domey" dst="Casavant" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Domey" dst="St_Antoine" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Domey" dst="Louis" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Domey" dst="Julien" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Domey" dst="St_Paul" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Domey" dst="Mathematica" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Domey" dst="LaTeX" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Domey" dst="Sirois" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Domey" dst="Monique" symmetrical="NO"><link_ctn id="113"/></route>
+ <route src="Domey" dst="Audy" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Domey" dst="Bourassa" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Domey" dst="OHara" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Domey" dst="Boston" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Domey" dst="Papineau" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Domey" dst="Fraser" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Domey" dst="Browne" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Domey" dst="SunOS" symmetrical="NO"><link_ctn id="114"/></route>
+ <route src="Domey" dst="Varennes" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Domey" dst="Jacques" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Domey" dst="Thierry" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Domey" dst="Lachapelle" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Domey" dst="kV" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Domey" dst="Yolande" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Domey" dst="Pronovost" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Domey" dst="SPICE" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Domey" dst="Europe" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Domey" dst="Roy" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Domey" dst="Amadeus" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Domey" dst="Intel" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Domey" dst="Cambridge" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Domey" dst="Tremblay" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Domey" dst="UNIX" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Domey" dst="St_Bruno" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="49"/><link_ctn id="46"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Domey" dst="Jean_Claude" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Domey" dst="Doyon" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Domey" dst="Fafard" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Domey" dst="Croteau" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Domey" dst="Dodge" symmetrical="NO"><link_ctn id="40"/><link_ctn id="38"/><link_ctn id="48"/><link_ctn id="8"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="St_Bruno" dst="Jacquelin" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="St_Bruno" dst="Boivin" symmetrical="NO"><link_ctn id="119"/></route>
+ <route src="St_Bruno" dst="Jean_Yves" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="St_Bruno" dst="TeX" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="St_Bruno" dst="Geoff" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="St_Bruno" dst="Disney" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="St_Bruno" dst="iRMX" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="St_Bruno" dst="McGee" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="St_Bruno" dst="Gatien" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="St_Bruno" dst="Laroche" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="St_Bruno" dst="Tanguay" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="St_Bruno" dst="Morin" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="St_Bruno" dst="Ethernet" symmetrical="NO"><link_ctn id="119"/><link_ctn id="118"/></route>
+ <route src="St_Bruno" dst="Bellemarre" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="St_Bruno" dst="Kuenning" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="St_Bruno" dst="Gaston" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="St_Bruno" dst="Harry" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="St_Bruno" dst="Bousquet" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="St_Bruno" dst="Paul" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="St_Bruno" dst="St_Jean" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="St_Bruno" dst="Jill" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="St_Bruno" dst="Marcel" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="St_Bruno" dst="Wright" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="St_Bruno" dst="Jackson" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="St_Bruno" dst="Fernand" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="St_Bruno" dst="Soucy" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="St_Bruno" dst="Ste_Julie" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="St_Bruno" dst="Victoria" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="St_Bruno" dst="Lessard" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="St_Bruno" dst="Florient" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="St_Bruno" dst="Marcoux" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="St_Bruno" dst="Gavrel" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="St_Bruno" dst="Bescherelle" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="St_Bruno" dst="Pierre" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="St_Bruno" dst="Jamie" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="St_Bruno" dst="Rubin" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="St_Bruno" dst="Olivier" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="St_Bruno" dst="Boucherville" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="St_Bruno" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="St_Bruno" dst="Kansas" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="St_Bruno" dst="King" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="St_Bruno" dst="Lapointe" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="St_Bruno" dst="Julian" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="St_Bruno" dst="Lafontaine" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="St_Bruno" dst="Gordon" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="St_Bruno" dst="Drouin" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="St_Bruno" dst="Robert" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="St_Bruno" dst="Jocelyne" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="St_Bruno" dst="Stephen" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="St_Bruno" dst="Provost" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="St_Bruno" dst="Juneau" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="St_Bruno" dst="Casavant" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="St_Bruno" dst="St_Antoine" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="St_Bruno" dst="Louis" symmetrical="NO"><link_ctn id="119"/><link_ctn id="117"/></route>
+ <route src="St_Bruno" dst="Julien" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="St_Bruno" dst="St_Paul" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="St_Bruno" dst="Mathematica" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="St_Bruno" dst="LaTeX" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="St_Bruno" dst="Sirois" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="St_Bruno" dst="Monique" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="St_Bruno" dst="Audy" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="St_Bruno" dst="Bourassa" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="St_Bruno" dst="OHara" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="St_Bruno" dst="Boston" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="St_Bruno" dst="Papineau" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="St_Bruno" dst="Fraser" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="St_Bruno" dst="Browne" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="St_Bruno" dst="SunOS" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="St_Bruno" dst="Varennes" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="St_Bruno" dst="Jacques" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="St_Bruno" dst="Thierry" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="St_Bruno" dst="Lachapelle" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="St_Bruno" dst="kV" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="St_Bruno" dst="Yolande" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="St_Bruno" dst="Pronovost" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="St_Bruno" dst="SPICE" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="St_Bruno" dst="Europe" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="St_Bruno" dst="Roy" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="St_Bruno" dst="Amadeus" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="St_Bruno" dst="Intel" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="St_Bruno" dst="Cambridge" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="St_Bruno" dst="Tremblay" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="St_Bruno" dst="UNIX" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="48"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="St_Bruno" dst="Domey" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="46"/><link_ctn id="49"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="St_Bruno" dst="Jean_Claude" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="St_Bruno" dst="Doyon" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="St_Bruno" dst="Fafard" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="St_Bruno" dst="Croteau" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="St_Bruno" dst="Dodge" symmetrical="NO"><link_ctn id="119"/><link_ctn id="47"/><link_ctn id="44"/><link_ctn id="11"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Jean_Claude" dst="Jacquelin" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Jean_Claude" dst="Boivin" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Jean_Claude" dst="Jean_Yves" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Jean_Claude" dst="TeX" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Jean_Claude" dst="Geoff" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Jean_Claude" dst="Disney" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Jean_Claude" dst="iRMX" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Jean_Claude" dst="McGee" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Jean_Claude" dst="Gatien" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Jean_Claude" dst="Laroche" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Jean_Claude" dst="Tanguay" symmetrical="NO"><link_ctn id="160"/><link_ctn id="162"/></route>
+ <route src="Jean_Claude" dst="Morin" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Jean_Claude" dst="Ethernet" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Jean_Claude" dst="Bellemarre" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Jean_Claude" dst="Kuenning" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Jean_Claude" dst="Gaston" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Jean_Claude" dst="Harry" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Jean_Claude" dst="Bousquet" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Jean_Claude" dst="Paul" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Jean_Claude" dst="St_Jean" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Jean_Claude" dst="Jill" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Jean_Claude" dst="Marcel" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Jean_Claude" dst="Wright" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Jean_Claude" dst="Jackson" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Jean_Claude" dst="Fernand" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Jean_Claude" dst="Soucy" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Jean_Claude" dst="Ste_Julie" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/></route>
+ <route src="Jean_Claude" dst="Victoria" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Jean_Claude" dst="Lessard" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Jean_Claude" dst="Florient" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Jean_Claude" dst="Marcoux" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Jean_Claude" dst="Gavrel" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Jean_Claude" dst="Bescherelle" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Jean_Claude" dst="Pierre" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Jean_Claude" dst="Jamie" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Jean_Claude" dst="Rubin" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Jean_Claude" dst="Olivier" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Jean_Claude" dst="Boucherville" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Jean_Claude" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Jean_Claude" dst="Kansas" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Jean_Claude" dst="King" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Jean_Claude" dst="Lapointe" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Jean_Claude" dst="Julian" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Jean_Claude" dst="Lafontaine" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Jean_Claude" dst="Gordon" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Jean_Claude" dst="Drouin" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Jean_Claude" dst="Robert" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Jean_Claude" dst="Jocelyne" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Jean_Claude" dst="Stephen" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Jean_Claude" dst="Provost" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Jean_Claude" dst="Juneau" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Jean_Claude" dst="Casavant" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Jean_Claude" dst="St_Antoine" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Jean_Claude" dst="Louis" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Jean_Claude" dst="Julien" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Jean_Claude" dst="St_Paul" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Jean_Claude" dst="Mathematica" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Jean_Claude" dst="LaTeX" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Jean_Claude" dst="Sirois" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Jean_Claude" dst="Monique" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Jean_Claude" dst="Audy" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Jean_Claude" dst="Bourassa" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Jean_Claude" dst="OHara" symmetrical="NO"><link_ctn id="160"/><link_ctn id="163"/></route>
+ <route src="Jean_Claude" dst="Boston" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Jean_Claude" dst="Papineau" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Jean_Claude" dst="Fraser" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Jean_Claude" dst="Browne" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="73"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Jean_Claude" dst="SunOS" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Jean_Claude" dst="Varennes" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Jean_Claude" dst="Jacques" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Jean_Claude" dst="Thierry" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Jean_Claude" dst="Lachapelle" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Jean_Claude" dst="kV" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Jean_Claude" dst="Yolande" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Jean_Claude" dst="Pronovost" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Jean_Claude" dst="SPICE" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Jean_Claude" dst="Europe" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Jean_Claude" dst="Roy" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Jean_Claude" dst="Amadeus" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Jean_Claude" dst="Intel" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Jean_Claude" dst="Cambridge" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Jean_Claude" dst="Tremblay" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Jean_Claude" dst="UNIX" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Jean_Claude" dst="Domey" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Jean_Claude" dst="St_Bruno" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Jean_Claude" dst="Doyon" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Jean_Claude" dst="Fafard" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Jean_Claude" dst="Croteau" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Jean_Claude" dst="Dodge" symmetrical="NO"><link_ctn id="160"/><link_ctn id="70"/><link_ctn id="3"/><link_ctn id="0"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Doyon" dst="Jacquelin" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Doyon" dst="Boivin" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Doyon" dst="Jean_Yves" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Doyon" dst="TeX" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Doyon" dst="Geoff" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/></route>
+ <route src="Doyon" dst="Disney" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Doyon" dst="iRMX" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Doyon" dst="McGee" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Doyon" dst="Gatien" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Doyon" dst="Laroche" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Doyon" dst="Tanguay" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Doyon" dst="Morin" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Doyon" dst="Ethernet" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Doyon" dst="Bellemarre" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Doyon" dst="Kuenning" symmetrical="NO"><link_ctn id="132"/><link_ctn id="135"/></route>
+ <route src="Doyon" dst="Gaston" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Doyon" dst="Harry" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Doyon" dst="Bousquet" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Doyon" dst="Paul" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Doyon" dst="St_Jean" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Doyon" dst="Jill" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Doyon" dst="Marcel" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Doyon" dst="Wright" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Doyon" dst="Jackson" symmetrical="NO"><link_ctn id="132"/></route>
+ <route src="Doyon" dst="Fernand" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Doyon" dst="Soucy" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Doyon" dst="Ste_Julie" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Doyon" dst="Victoria" symmetrical="NO"><link_ctn id="132"/><link_ctn id="133"/></route>
+ <route src="Doyon" dst="Lessard" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Doyon" dst="Florient" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Doyon" dst="Marcoux" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Doyon" dst="Gavrel" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Doyon" dst="Bescherelle" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Doyon" dst="Pierre" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Doyon" dst="Jamie" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Doyon" dst="Rubin" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Doyon" dst="Olivier" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Doyon" dst="Boucherville" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Doyon" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Doyon" dst="Kansas" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Doyon" dst="King" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Doyon" dst="Lapointe" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/></route>
+ <route src="Doyon" dst="Julian" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Doyon" dst="Lafontaine" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Doyon" dst="Gordon" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Doyon" dst="Drouin" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Doyon" dst="Robert" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Doyon" dst="Jocelyne" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Doyon" dst="Stephen" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Doyon" dst="Provost" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Doyon" dst="Juneau" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Doyon" dst="Casavant" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Doyon" dst="St_Antoine" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="63"/></route>
+ <route src="Doyon" dst="Louis" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Doyon" dst="Julien" symmetrical="NO"><link_ctn id="132"/><link_ctn id="134"/></route>
+ <route src="Doyon" dst="St_Paul" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Doyon" dst="Mathematica" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Doyon" dst="LaTeX" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Doyon" dst="Sirois" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Doyon" dst="Monique" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Doyon" dst="Audy" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Doyon" dst="Bourassa" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Doyon" dst="OHara" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Doyon" dst="Boston" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Doyon" dst="Papineau" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Doyon" dst="Fraser" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Doyon" dst="Browne" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Doyon" dst="SunOS" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Doyon" dst="Varennes" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Doyon" dst="Jacques" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Doyon" dst="Thierry" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Doyon" dst="Lachapelle" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Doyon" dst="kV" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/></route>
+ <route src="Doyon" dst="Yolande" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Doyon" dst="Pronovost" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Doyon" dst="SPICE" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="7"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Doyon" dst="Europe" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Doyon" dst="Roy" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Doyon" dst="Amadeus" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Doyon" dst="Intel" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Doyon" dst="Cambridge" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Doyon" dst="Tremblay" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Doyon" dst="UNIX" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Doyon" dst="Domey" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Doyon" dst="St_Bruno" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Doyon" dst="Jean_Claude" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Doyon" dst="Fafard" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Doyon" dst="Croteau" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Doyon" dst="Dodge" symmetrical="NO"><link_ctn id="132"/><link_ctn id="62"/><link_ctn id="58"/><link_ctn id="56"/><link_ctn id="54"/><link_ctn id="17"/><link_ctn id="16"/><link_ctn id="10"/><link_ctn id="6"/><link_ctn id="9"/><link_ctn id="79"/><link_ctn id="78"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Fafard" dst="Jacquelin" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Fafard" dst="Boivin" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Fafard" dst="Jean_Yves" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Fafard" dst="TeX" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Fafard" dst="Geoff" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Fafard" dst="Disney" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Fafard" dst="iRMX" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Fafard" dst="McGee" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Fafard" dst="Gatien" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Fafard" dst="Laroche" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/></route>
+ <route src="Fafard" dst="Tanguay" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Fafard" dst="Morin" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Fafard" dst="Ethernet" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Fafard" dst="Bellemarre" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Fafard" dst="Kuenning" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Fafard" dst="Gaston" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Fafard" dst="Harry" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Fafard" dst="Bousquet" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Fafard" dst="Paul" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Fafard" dst="St_Jean" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Fafard" dst="Jill" symmetrical="NO"><link_ctn id="179"/></route>
+ <route src="Fafard" dst="Marcel" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Fafard" dst="Wright" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Fafard" dst="Jackson" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Fafard" dst="Fernand" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Fafard" dst="Soucy" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Fafard" dst="Ste_Julie" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Fafard" dst="Victoria" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Fafard" dst="Lessard" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Fafard" dst="Florient" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Fafard" dst="Marcoux" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Fafard" dst="Gavrel" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Fafard" dst="Bescherelle" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Fafard" dst="Pierre" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Fafard" dst="Jamie" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Fafard" dst="Rubin" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Fafard" dst="Olivier" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Fafard" dst="Boucherville" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="89"/></route>
+ <route src="Fafard" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Fafard" dst="Kansas" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Fafard" dst="King" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Fafard" dst="Lapointe" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Fafard" dst="Julian" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Fafard" dst="Lafontaine" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Fafard" dst="Gordon" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Fafard" dst="Drouin" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Fafard" dst="Robert" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Fafard" dst="Jocelyne" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Fafard" dst="Stephen" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Fafard" dst="Provost" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Fafard" dst="Juneau" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Fafard" dst="Casavant" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Fafard" dst="St_Antoine" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Fafard" dst="Louis" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Fafard" dst="Julien" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Fafard" dst="St_Paul" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Fafard" dst="Mathematica" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Fafard" dst="LaTeX" symmetrical="NO"><link_ctn id="179"/><link_ctn id="177"/></route>
+ <route src="Fafard" dst="Sirois" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Fafard" dst="Monique" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Fafard" dst="Audy" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Fafard" dst="Bourassa" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Fafard" dst="OHara" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Fafard" dst="Boston" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Fafard" dst="Papineau" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Fafard" dst="Fraser" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Fafard" dst="Browne" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Fafard" dst="SunOS" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Fafard" dst="Varennes" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Fafard" dst="Jacques" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Fafard" dst="Thierry" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Fafard" dst="Lachapelle" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Fafard" dst="kV" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Fafard" dst="Yolande" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Fafard" dst="Pronovost" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Fafard" dst="SPICE" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Fafard" dst="Europe" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Fafard" dst="Roy" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Fafard" dst="Amadeus" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Fafard" dst="Intel" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Fafard" dst="Cambridge" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Fafard" dst="Tremblay" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Fafard" dst="UNIX" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Fafard" dst="Domey" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Fafard" dst="St_Bruno" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Fafard" dst="Jean_Claude" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Fafard" dst="Doyon" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Fafard" dst="Croteau" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ <route src="Fafard" dst="Dodge" symmetrical="NO"><link_ctn id="179"/><link_ctn id="90"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Croteau" dst="Jacquelin" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Croteau" dst="Boivin" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Croteau" dst="Jean_Yves" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Croteau" dst="TeX" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Croteau" dst="Geoff" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Croteau" dst="Disney" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Croteau" dst="iRMX" symmetrical="NO"><link_ctn id="175"/><link_ctn id="172"/></route>
+ <route src="Croteau" dst="McGee" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Croteau" dst="Gatien" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Croteau" dst="Laroche" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/></route>
+ <route src="Croteau" dst="Tanguay" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Croteau" dst="Morin" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Croteau" dst="Ethernet" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Croteau" dst="Bellemarre" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Croteau" dst="Kuenning" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Croteau" dst="Gaston" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Croteau" dst="Harry" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Croteau" dst="Bousquet" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Croteau" dst="Paul" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Croteau" dst="St_Jean" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Croteau" dst="Jill" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="90"/></route>
+ <route src="Croteau" dst="Marcel" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Croteau" dst="Wright" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Croteau" dst="Jackson" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Croteau" dst="Fernand" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Croteau" dst="Soucy" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Croteau" dst="Ste_Julie" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Croteau" dst="Victoria" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Croteau" dst="Lessard" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Croteau" dst="Florient" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="181"/></route>
+ <route src="Croteau" dst="Marcoux" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Croteau" dst="Gavrel" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Croteau" dst="Bescherelle" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Croteau" dst="Pierre" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Croteau" dst="Jamie" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Croteau" dst="Rubin" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Croteau" dst="Olivier" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Croteau" dst="Boucherville" symmetrical="NO"><link_ctn id="175"/></route>
+ <route src="Croteau" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Croteau" dst="Kansas" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Croteau" dst="King" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Croteau" dst="Lapointe" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/></route>
+ <route src="Croteau" dst="Julian" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Croteau" dst="Lafontaine" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Croteau" dst="Gordon" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/></route>
+ <route src="Croteau" dst="Drouin" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Croteau" dst="Robert" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Croteau" dst="Jocelyne" symmetrical="NO"><link_ctn id="175"/><link_ctn id="173"/></route>
+ <route src="Croteau" dst="Stephen" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Croteau" dst="Provost" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Croteau" dst="Juneau" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Croteau" dst="Casavant" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Croteau" dst="St_Antoine" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Croteau" dst="Louis" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Croteau" dst="Julien" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Croteau" dst="St_Paul" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Croteau" dst="Mathematica" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Croteau" dst="LaTeX" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Croteau" dst="Sirois" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Croteau" dst="Monique" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Croteau" dst="Audy" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="183"/></route>
+ <route src="Croteau" dst="Bourassa" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Croteau" dst="OHara" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Croteau" dst="Boston" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Croteau" dst="Papineau" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="182"/></route>
+ <route src="Croteau" dst="Fraser" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Croteau" dst="Browne" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Croteau" dst="SunOS" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Croteau" dst="Varennes" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Croteau" dst="Jacques" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Croteau" dst="Thierry" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Croteau" dst="Lachapelle" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Croteau" dst="kV" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Croteau" dst="Yolande" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Croteau" dst="Pronovost" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Croteau" dst="SPICE" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Croteau" dst="Europe" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Croteau" dst="Roy" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Croteau" dst="Amadeus" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Croteau" dst="Intel" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Croteau" dst="Cambridge" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Croteau" dst="Tremblay" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Croteau" dst="UNIX" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Croteau" dst="Domey" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Croteau" dst="St_Bruno" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Croteau" dst="Jean_Claude" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Croteau" dst="Doyon" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Croteau" dst="Fafard" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Croteau" dst="Dodge" symmetrical="NO"><link_ctn id="175"/><link_ctn id="89"/><link_ctn id="88"/><link_ctn id="87"/><link_ctn id="82"/><link_ctn id="80"/><link_ctn id="81"/><link_ctn id="180"/></route>
+ <route src="Dodge" dst="Jacquelin" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="145"/></route>
+ <route src="Dodge" dst="Boivin" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/></route>
+ <route src="Dodge" dst="Jean_Yves" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="138"/></route>
+ <route src="Dodge" dst="TeX" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="100"/></route>
+ <route src="Dodge" dst="Geoff" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/></route>
+ <route src="Dodge" dst="Disney" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="111"/></route>
+ <route src="Dodge" dst="iRMX" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="172"/></route>
+ <route src="Dodge" dst="McGee" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/></route>
+ <route src="Dodge" dst="Gatien" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="115"/></route>
+ <route src="Dodge" dst="Laroche" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/></route>
+ <route src="Dodge" dst="Tanguay" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="162"/></route>
+ <route src="Dodge" dst="Morin" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="31"/><link_ctn id="106"/></route>
+ <route src="Dodge" dst="Ethernet" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="118"/></route>
+ <route src="Dodge" dst="Bellemarre" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/></route>
+ <route src="Dodge" dst="Kuenning" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="135"/></route>
+ <route src="Dodge" dst="Gaston" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="153"/></route>
+ <route src="Dodge" dst="Harry" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="108"/></route>
+ <route src="Dodge" dst="Bousquet" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="36"/><link_ctn id="37"/><link_ctn id="124"/></route>
+ <route src="Dodge" dst="Paul" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="93"/></route>
+ <route src="Dodge" dst="St_Jean" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="97"/></route>
+ <route src="Dodge" dst="Jill" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/></route>
+ <route src="Dodge" dst="Marcel" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="155"/></route>
+ <route src="Dodge" dst="Wright" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="147"/></route>
+ <route src="Dodge" dst="Jackson" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/></route>
+ <route src="Dodge" dst="Fernand" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="109"/></route>
+ <route src="Dodge" dst="Soucy" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="191"/></route>
+ <route src="Dodge" dst="Ste_Julie" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/></route>
+ <route src="Dodge" dst="Victoria" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="133"/></route>
+ <route src="Dodge" dst="Lessard" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="99"/></route>
+ <route src="Dodge" dst="Florient" symmetrical="NO"><link_ctn id="180"/><link_ctn id="181"/></route>
+ <route src="Dodge" dst="Marcoux" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="186"/></route>
+ <route src="Dodge" dst="Gavrel" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="148"/></route>
+ <route src="Dodge" dst="Bescherelle" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="140"/></route>
+ <route src="Dodge" dst="Pierre" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="167"/></route>
+ <route src="Dodge" dst="Jamie" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="120"/></route>
+ <route src="Dodge" dst="Rubin" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="144"/></route>
+ <route src="Dodge" dst="Olivier" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="171"/></route>
+ <route src="Dodge" dst="Boucherville" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/></route>
+ <route src="Dodge" dst="Pointe_Claire" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="184"/></route>
+ <route src="Dodge" dst="Kansas" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="122"/></route>
+ <route src="Dodge" dst="King" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="137"/></route>
+ <route src="Dodge" dst="Lapointe" symmetrical="NO"><link_ctn id="180"/></route>
+ <route src="Dodge" dst="Julian" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/></route>
+ <route src="Dodge" dst="Lafontaine" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="139"/></route>
+ <route src="Dodge" dst="Gordon" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/></route>
+ <route src="Dodge" dst="Drouin" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="41"/><link_ctn id="123"/></route>
+ <route src="Dodge" dst="Robert" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="187"/></route>
+ <route src="Dodge" dst="Jocelyne" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="173"/></route>
+ <route src="Dodge" dst="Stephen" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="101"/></route>
+ <route src="Dodge" dst="Provost" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="35"/><link_ctn id="103"/></route>
+ <route src="Dodge" dst="Juneau" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="83"/><link_ctn id="189"/></route>
+ <route src="Dodge" dst="Casavant" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="92"/></route>
+ <route src="Dodge" dst="St_Antoine" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/></route>
+ <route src="Dodge" dst="Louis" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="117"/></route>
+ <route src="Dodge" dst="Julien" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="134"/></route>
+ <route src="Dodge" dst="St_Paul" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/><link_ctn id="165"/></route>
+ <route src="Dodge" dst="Mathematica" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="157"/></route>
+ <route src="Dodge" dst="LaTeX" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="177"/></route>
+ <route src="Dodge" dst="Sirois" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/><link_ctn id="129"/></route>
+ <route src="Dodge" dst="Monique" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="113"/></route>
+ <route src="Dodge" dst="Audy" symmetrical="NO"><link_ctn id="180"/><link_ctn id="183"/></route>
+ <route src="Dodge" dst="Bourassa" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="150"/></route>
+ <route src="Dodge" dst="OHara" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="163"/></route>
+ <route src="Dodge" dst="Boston" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="29"/><link_ctn id="95"/></route>
+ <route src="Dodge" dst="Papineau" symmetrical="NO"><link_ctn id="180"/><link_ctn id="182"/></route>
+ <route src="Dodge" dst="Fraser" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="34"/><link_ctn id="96"/></route>
+ <route src="Dodge" dst="Browne" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="74"/><link_ctn id="75"/><link_ctn id="152"/></route>
+ <route src="Dodge" dst="SunOS" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/><link_ctn id="114"/></route>
+ <route src="Dodge" dst="Varennes" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="63"/><link_ctn id="136"/></route>
+ <route src="Dodge" dst="Jacques" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="159"/></route>
+ <route src="Dodge" dst="Thierry" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="156"/></route>
+ <route src="Dodge" dst="Lachapelle" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="59"/><link_ctn id="146"/></route>
+ <route src="Dodge" dst="kV" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/></route>
+ <route src="Dodge" dst="Yolande" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="168"/></route>
+ <route src="Dodge" dst="Pronovost" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/><link_ctn id="151"/></route>
+ <route src="Dodge" dst="SPICE" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="20"/><link_ctn id="19"/><link_ctn id="28"/><link_ctn id="27"/><link_ctn id="30"/><link_ctn id="32"/><link_ctn id="33"/><link_ctn id="110"/></route>
+ <route src="Dodge" dst="Europe" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="91"/><link_ctn id="185"/></route>
+ <route src="Dodge" dst="Roy" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="15"/><link_ctn id="76"/></route>
+ <route src="Dodge" dst="Amadeus" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="52"/><link_ctn id="53"/></route>
+ <route src="Dodge" dst="Intel" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="57"/><link_ctn id="141"/></route>
+ <route src="Dodge" dst="Cambridge" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="66"/><link_ctn id="158"/></route>
+ <route src="Dodge" dst="Tremblay" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="69"/><link_ctn id="64"/><link_ctn id="65"/><link_ctn id="72"/><link_ctn id="170"/></route>
+ <route src="Dodge" dst="UNIX" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="42"/><link_ctn id="43"/></route>
+ <route src="Dodge" dst="Domey" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="8"/><link_ctn id="48"/><link_ctn id="38"/><link_ctn id="40"/></route>
+ <route src="Dodge" dst="St_Bruno" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="11"/><link_ctn id="44"/><link_ctn id="47"/><link_ctn id="119"/></route>
+ <route src="Dodge" dst="Jean_Claude" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="0"/><link_ctn id="3"/><link_ctn id="70"/><link_ctn id="160"/></route>
+ <route src="Dodge" dst="Doyon" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="78"/><link_ctn id="79"/><link_ctn id="9"/><link_ctn id="6"/><link_ctn id="10"/><link_ctn id="16"/><link_ctn id="17"/><link_ctn id="54"/><link_ctn id="56"/><link_ctn id="58"/><link_ctn id="62"/><link_ctn id="132"/></route>
+ <route src="Dodge" dst="Fafard" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="90"/><link_ctn id="179"/></route>
+ <route src="Dodge" dst="Croteau" symmetrical="NO"><link_ctn id="180"/><link_ctn id="81"/><link_ctn id="80"/><link_ctn id="82"/><link_ctn id="87"/><link_ctn id="88"/><link_ctn id="89"/><link_ctn id="175"/></route>
+ </AS>
+ </platform>
--- /dev/null
+-- See routing_cluster.xml for description.
+--
+
+require "simgrid"
+simgrid.platf.open()
+simgrid.platf.AS_open{id="AS0",mode="Full"}
+ simgrid.platf.AS_open{id="my_cluster1",mode="Cluster"}
+ simgrid.platf.router_new{id="router1"}
+
+ simgrid.platf.host_new{id="host1",power="1Gf"};
+ simgrid.platf.link_new{id="l1_UP",bandwidth="125MBps",lat="100us"};
+ simgrid.platf.link_new{id="l1_DOWN",bandwidth="125MBps",lat="100us"};
+ simgrid.platf.host_link_new{id="host1",up="l1_UP",down="l1_DOWN"};
+
+ simgrid.platf.host_new{id="host2",power="1Gf"};
+ simgrid.platf.link_new{id="l2",bandwidth="125MBps",lat="100us",sharing_policy="FULLDUPLEX"};
+ simgrid.platf.host_link_new{id="host2",up="l2_UP",down="l2_DOWN"};
+
+ simgrid.platf.host_new{id="host3",power="1Gf"};
+ simgrid.platf.link_new{id="l3",bandwidth="125MBps",lat="100us"};
+ simgrid.platf.host_link_new{id="host3",up="l3",down="l3"};
+
+ simgrid.platf.backbone_new{id="backbone1",bandwidth="2.25GBps",lat="500us"};
+
+ simgrid.platf.AS_close()
+ simgrid.platf.AS_open{id="my_cluster2",mode="Cluster"}
+ simgrid.platf.router_new{id="router2"}
+
+ simgrid.platf.host_new{id="host4",power="1Gf"};
+ simgrid.platf.link_new{id="l4_UP",bandwidth="125MBps",lat="100us"};
+ simgrid.platf.link_new{id="l4_DOWN",bandwidth="125MBps",lat="100us"};
+ simgrid.platf.host_link_new{id="host4",up="l4_UP",down="l4_DOWN"};
+
+ simgrid.platf.host_new{id="host5",power="1Gf"};
+ simgrid.platf.link_new{id="l5",bandwidth="125MBps",lat="100us",sharing_policy="FULLDUPLEX"};
+ simgrid.platf.host_link_new{id="host5",up="l5_UP",down="l5_DOWN"};
+
+ simgrid.platf.host_new{id="host6",power="1Gf"};
+ simgrid.platf.link_new{id="l6",bandwidth="125MBps",lat="100us"};
+ simgrid.platf.host_link_new{id="host6",up="l6",down="l6"};
+
+ simgrid.platf.backbone_new{id="backbone2",bandwidth="2.25GBps",lat="500us"}
+
+ simgrid.platf.AS_close()
+ simgrid.platf.link_new{id="link1-2",bandwidth="2.25GBps",lat="500us"};
+
+ simgrid.platf.ASroute_new{src="my_cluster1", dst="my_cluster2",
+ gw_src="router1", gw_dst="router2", links="link1-2",symmetrical="YES"}
+
+simgrid.platf.AS_close()
+simgrid.platf.close()
--- /dev/null
+-- Copyright (c) 2011, 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.
+
+
+ -- This platform.lua file is equivalent to small_platform.xml
+ -- So don't change anything in here unless you change the xml file too!
+ --
+ require("simgrid")
+ simgrid.platf.open();
+ simgrid.platf.AS_open{id="AS0",mode="Full"};
+
+ simgrid.platf.host_new{AS="AS0",id="Tremblay",power=98095000};
+ simgrid.platf.host_new{AS="AS0",id="Jupiter",power=76296000};
+ simgrid.platf.host_new{AS="AS0",id="Fafard",power=76296000};
+ simgrid.platf.host_new{AS="AS0",id="Ginette",power=48492000};
+ simgrid.platf.host_new{AS="AS0",id="Bourassa",power=48492000};
+
+ -- create Links
+ simgrid.platf.link_new{AS="AS0",id=0,bandwidth=41279125,lat=0.000059904};
+ simgrid.platf.link_new{AS="AS0",id=1,bandwidth=34285625,lat=0.000514433};
+ simgrid.platf.link_new{AS="AS0",id=2,bandwidth=118682500,lat=0.000136931};
+ simgrid.platf.link_new{AS="AS0",id=3,bandwidth=34285625,lat=0.000514433};
+ simgrid.platf.link_new{AS="AS0",id=4,bandwidth=10099625,lat=0.00047978};
+ simgrid.platf.link_new{AS="AS0",id=5,bandwidth=27946250,lat=0.000278066};
+ simgrid.platf.link_new{AS="AS0",id=6,bandwidth=41279125,lat=0.000059904};
+ simgrid.platf.link_new{AS="AS0",id=7,bandwidth=11618875,lat=0.00018998};
+ simgrid.platf.link_new{AS="AS0",id=8,bandwidth=8158000,lat=0.000270544};
+ simgrid.platf.link_new{AS="AS0",id=9,bandwidth=7209750,lat=0.001461517};
+ simgrid.platf.link_new{AS="AS0",id="loopback",bandwidth=498000000,lat=0.000015,sharing_policy="FATPIPE"};
+
+ -- Register loopback links
+ for i=1,5,1 do
+ local hostname = simgrid.host.name(simgrid.host.at(i))
+ simgrid.platf.route_new{AS="AS0",src=hostname,dest=hostname,links="loopback"}
+ end
+
+ simgrid.platf.route_new{AS="AS0",src="Tremblay",dest="Jupiter",links="9"};
+ simgrid.platf.route_new{AS="AS0",src="Tremblay",dest="Fafard",links="4,3,2,0,1,8"};
+ simgrid.platf.route_new{AS="AS0",src="Tremblay",dest="Ginette",links="4,3,5"};
+ simgrid.platf.route_new{AS="AS0",src="Tremblay",dest="Bourassa",links="4,3,2,0,1,6,7"};
+
+ simgrid.platf.route_new{AS="AS0",src="Jupiter",dest="Fafard",links="9,4,3,2,0,1,8"};
+ simgrid.platf.route_new{AS="AS0",src="Jupiter",dest="Ginette",links="9,4,3,5"};
+ simgrid.platf.route_new{AS="AS0",src="Jupiter",dest="Bourassa",links="9,4,3,2,0,1,6,7"};
+
+ simgrid.platf.route_new{AS="AS0",src="Fafard",dest="Ginette",links="8,1,0,2,5"};
+ simgrid.platf.route_new{AS="AS0",src="Fafard",dest="Bourassa",links="8,6,7"};
+
+ simgrid.platf.route_new{AS="AS0",src="Ginette",dest="Bourassa",links="5,2,0,1,6,7"};
+
+ simgrid.platf.AS_close();
+
+ simgrid.platf.close();
--- /dev/null
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/basic)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/io)
+
+set(tesh_files
+ ${tesh_files}
+ PARENT_SCOPE
+ )
+set(xml_files
+ ${xml_files}
+ PARENT_SCOPE
+ )
+set(examples_src
+ ${examples_src}
+ PARENT_SCOPE
+ )
+set(bin_files
+ ${bin_files}
+ PARENT_SCOPE
+ )
+set(txt_files
+ ${txt_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/README
+ PARENT_SCOPE
+ )
\ No newline at end of file
--- /dev/null
+S4U (Simgrid for you) is the next interface of SimGrid, expected to be
+released with SimGrid 4.0.
+
+Even if it's in a very preliminary state so far, you are welcome to
+try it an report any interface glitches that you see. Be however
+warned that the interface will be modified until its final release.
+You will have to adapt your code on the way.
\ No newline at end of file
--- /dev/null
+set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
+add_executable(s4u_basic s4u_basic.cpp)
+
+### Add definitions for compile
+target_link_libraries(s4u_basic simgrid)
+
+set(tesh_files
+ ${tesh_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/s4u_basic.tesh
+ PARENT_SCOPE
+ )
+set(xml_files
+ ${xml_files}
+ PARENT_SCOPE
+ )
+set(examples_src
+ ${examples_src}
+ ${CMAKE_CURRENT_SOURCE_DIR}/s4u_basic.cpp
+ PARENT_SCOPE
+ )
+set(bin_files
+ ${bin_files}
+ PARENT_SCOPE
+ )
+set(txt_files
+ ${txt_files}
+ PARENT_SCOPE
+ )
--- /dev/null
+/* Copyright (c) 2006-2015. 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 "simgrid/s4u.h"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "a sample log category");
+
+class Worker : simgrid::s4u::Actor {
+public:
+ Worker(const char*procname, simgrid::s4u::Host *host,int argc, char **argv)
+ : simgrid::s4u::Actor(procname,host,argc,argv){}
+
+ int main(int argc, char **argv) {
+ XBT_INFO("Hello s4u, I'm ready to serve");
+
+ char *msg = (char*)recv(*simgrid::s4u::Mailbox::byName("worker"));
+ XBT_INFO("I received '%s'",msg);
+ XBT_INFO("I'm done. See you.");
+ return 1;
+ }
+};
+
+class Master : simgrid::s4u::Actor {
+public:
+ Master(const char*procname, simgrid::s4u::Host *host,int argc, char **argv)
+ : Actor(procname,host,argc,argv){}
+
+ int main(int argc, char **argv) {
+ const char *msg = "GaBuZoMeu";
+ XBT_INFO("Hello s4u, I have something to send");
+ send(*simgrid::s4u::Mailbox::byName("worker"), xbt_strdup(msg), strlen(msg));
+
+ XBT_INFO("I'm done. See you.");
+ return 1;
+ }
+};
+
+
+int main(int argc, char **argv) {
+ simgrid::s4u::Engine *e = new simgrid::s4u::Engine(&argc,argv);
+ e->loadPlatform("../../platforms/two_hosts_platform.xml");
+
+ new Worker("worker", simgrid::s4u::Host::byName("host0"), 0, NULL);
+ new Master("master", simgrid::s4u::Host::byName("host1"), 0, NULL);
+ e->run();
+ return 0;
+}
--- /dev/null
+#! ./tesh
+
+$ $SG_TEST_EXENV ${bindir:=.}/s4u_basic
+> [host0:worker:(0) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to serve
+> [host1:master:(0) 0.000000] [s4u_test/INFO] Hello s4u, I have something to send
+> [host0:worker:(0) 0.001301] [s4u_test/INFO] I received 'GaBuZoMeu'
+> [host0:worker:(0) 0.001301] [s4u_test/INFO] I'm done. See you.
+> [host1:master:(0) 0.001301] [s4u_test/INFO] I'm done. See you.
--- /dev/null
+s4u_io_test
--- /dev/null
+set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
+add_executable(s4u_io_test ${CMAKE_CURRENT_SOURCE_DIR}/s4u_io_test.cpp)
+target_link_libraries(s4u_io_test simgrid)
+
+set(tesh_files
+ ${tesh_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/s4u_io.tesh
+ PARENT_SCOPE)
+set(xml_files
+ ${xml_files}
+ PARENT_SCOPE)
+set(examples_src
+ ${examples_src}
+ ${CMAKE_CURRENT_SOURCE_DIR}/s4u_io_test.cpp
+ PARENT_SCOPE)
+set(bin_files
+ ${bin_files}
+ PARENT_SCOPE)
+set(txt_files
+ ${txt_files}
+ PARENT_SCOPE)
--- /dev/null
+#! ./tesh
+
+$ $SG_TEST_EXENV ${bindir:=.}/s4u_io_test
+> [denise:host:(0) 0.000000] [s4u_test/INFO] Storage info on denise:
+> [denise:host:(0) 0.000000] [s4u_test/INFO] Disk4 (/home) Used: 13221994; Free: 536857690006; Total: 536870912000.
+> [denise:host:(0) 0.000000] [s4u_test/INFO] Disk2 (c:) Used: 2391537133; Free: 534479374867; Total: 536870912000.
+> [denise:host:(0) 0.003333] [s4u_test/INFO] Create a 200000 bytes file named '/home/tmp/data.txt' on /sd1
+> [denise:host:(0) 0.003333] [s4u_test/INFO] Storage info on denise:
+> [denise:host:(0) 0.003333] [s4u_test/INFO] Disk4 (/home) Used: 13421994; Free: 536857490006; Total: 536870912000.
+> [denise:host:(0) 0.003333] [s4u_test/INFO] Disk2 (c:) Used: 2391537133; Free: 534479374867; Total: 536870912000.
+> [denise:host:(0) 0.004333] [s4u_test/INFO] Read 200000 bytes on /home/tmp/data.txt
+> [denise:host:(0) 0.006000] [s4u_test/INFO] Write 100000 bytes on /home/tmp/data.txt
+> [denise:host:(0) 0.006000] [s4u_test/INFO] Move '/home/tmp/data.txt' to '/home/tmp/simgrid.readme'
+> [denise:host:(0) 0.006000] [s4u_test/INFO] User data attached to the file: 777
+> [denise:host:(0) 0.006000] [s4u_test/INFO] Get/set data for storage element: Disk4
+> [denise:host:(0) 0.006000] [s4u_test/INFO] Uninitialized storage data: '(null)'
+> [denise:host:(0) 0.006000] [s4u_test/INFO] Set and get data: 'Some user data'
--- /dev/null
+/* Copyright (c) 2006-2015. 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 <map>
+#include <unordered_map>
+#include <vector>
+
+#include "simgrid/s4u.h"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "a sample log category");
+
+class myHost : simgrid::s4u::Actor {
+public:
+ myHost(const char*procname, simgrid::s4u::Host *host,int argc, char **argv)
+: simgrid::s4u::Actor(procname,host,argc,argv){}
+
+ void show_info(boost::unordered_map <std::string, simgrid::s4u::Storage &> &mounts) {
+ XBT_INFO("Storage info on %s:", simgrid::s4u::Host::current()->name());
+
+ for (const auto&kv : mounts) {
+ const char* mountpoint = kv.first.c_str();
+ simgrid::s4u::Storage &storage = kv.second;
+
+ // Retrieve disk's information
+ sg_size_t free_size = storage.size_free();
+ sg_size_t used_size = storage.size_used();
+ sg_size_t size = storage.size();
+
+ XBT_INFO(" %s (%s) Used: %llu; Free: %llu; Total: %llu.",
+ storage.name(), mountpoint, used_size, free_size, size);
+ }
+ }
+
+ int main(int argc, char **argv) {
+ boost::unordered_map <std::string, simgrid::s4u::Storage &> &mounts =
+ simgrid::s4u::Host::current()->mountedStorages();
+
+ show_info(mounts);
+
+ // Open an non-existing file to create it
+ const char *filename = "/home/tmp/data.txt";
+ simgrid::s4u::File *file = new simgrid::s4u::File(filename, NULL);
+ sg_size_t write, read, file_size;
+
+ write = file->write(200000); // Write 200,000 bytes
+ XBT_INFO("Create a %llu bytes file named '%s' on /sd1", write, filename);
+
+ // check that sizes have changed
+ show_info(mounts);
+
+ // Now retrieve the size of created file and read it completely
+ file_size = file->size();
+ file->seek(0);
+ read = file->read(file_size);
+ XBT_INFO("Read %llu bytes on %s", read, filename);
+
+ // Now write 100,000 bytes in tmp/data.txt
+ write = file->write(100000); // Write 100,000 bytes
+ XBT_INFO("Write %llu bytes on %s", write, filename);
+
+ simgrid::s4u::Storage &storage = simgrid::s4u::Storage::byName("Disk4");
+
+ // Now rename file from ./tmp/data.txt to ./tmp/simgrid.readme
+ const char *newpath = "/home/tmp/simgrid.readme";
+ XBT_INFO("Move '%s' to '%s'", file->path(), newpath);
+ file->move(newpath);
+
+ // Test attaching some user data to the file
+ file->set_userdata(xbt_strdup("777"));
+ XBT_INFO("User data attached to the file: %s", (char*)file->userdata());
+
+ // Close the file
+ delete file;
+
+ // Now attach some user data to disk1
+ XBT_INFO("Get/set data for storage element: %s",storage.name());
+ XBT_INFO(" Uninitialized storage data: '%s'", (char*)storage.userdata());
+
+ storage.set_userdata(xbt_strdup("Some user data"));
+ XBT_INFO(" Set and get data: '%s'", (char*)storage.userdata());
+
+ /*
+ // Dump disks contents
+ XBT_INFO("*** Dump content of %s ***",Host::current()->name());
+ xbt_dict_t contents = NULL;
+ contents = MSG_host_get_storage_content(MSG_host_self()); // contents is a dict of dicts
+ xbt_dict_cursor_t curs, curs2 = NULL;
+ char* mountname;
+ xbt_dict_t content;
+ char* path;
+ sg_size_t *size;
+ xbt_dict_foreach(contents, curs, mountname, content){
+ XBT_INFO("Print the content of mount point: %s",mountname);
+ xbt_dict_foreach(content,curs2,path,size){
+ XBT_INFO("%s size: %llu bytes", path,*((sg_size_t*)size));
+ }
+ xbt_dict_free(&content);
+ }
+ xbt_dict_free(&contents);
+ */
+ return 0;
+ }
+};
+
+int main(int argc, char **argv) {
+ simgrid::s4u::Engine *e = new simgrid::s4u::Engine(&argc,argv);
+ e->loadPlatform("../../platforms/storage/storage.xml");
+
+ new myHost("host", simgrid::s4u::Host::byName("denise"), 0, NULL);
+ e->run();
+ return 0;
+}
! output sort 19
$ java -classpath ${classpath:=.} master_slave_bypass/MsBypass ${srcdir:=.}/../platforms/small_platform.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [Jupiter:process1:(1) 0.000000] [jmsg/INFO] Master Hello!
> [Jupiter:process1:(1) 0.000000] [jmsg/INFO] Create process on host 'Tremblay'
> [Tremblay:process2:(2) 0.000000] [jmsg/INFO] Slave Hello!
! output sort 19
$ java -classpath ${classpath:=.} master_slave_kill/MsKill ${srcdir:=.}/../platforms/small_platform.xml
-> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Using regular java threads.
> [Jupiter:master:(1) 0.000000] [jmsg/INFO] Master Hello!
> [Jupiter:master:(1) 0.000000] [jmsg/INFO] Create process on host 'alice'
> [Tremblay:slave:(2) 0.000000] [jmsg/INFO] Slave Hello!
! output sort 19
$ java -classpath ${classpath:=.} masterslave/Masterslave ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/masterslave/masterslaveDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [ 0.000000] (0:@) Using regular java threads. Coroutines could speed your simulation up.
+> [ 0.000000] (0:@) Using regular java threads.
> [ 0.000000] (1:masterslave.Master@Jacquelin) Hello! Got 7 slaves and 5 tasks to process
> [ 0.000000] (2:masterslave.Forwarder@Jackson) Receiving on 'slave_0'
> [ 0.000000] (3:masterslave.Forwarder@Casavant) Receiving on 'slave_1'
-- create Links
for i=0,11 do
- simgrid.link.new{id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087};
+ simgrid.link.new{id=i,bandwidth=252750+ i*768,lat=0.000270544+i*0.087};
end
-- simgrid.route.new(src_id,des_id,links_nb,links_list)
simgrid.route.new("Tremblay","Jupiter",{"1"});
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/cpu_threshold' to '-1'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'plugin' to 'Energy'
-> [0.000000] [rank 1] Pstates: 1; Powers: 100000000
> [0.000000] [rank 0] Pstates: 3; Powers: 100000000, 50000000, 20000000
-> [0.000000] [rank 1] Current pstate: 0; Current power: 100000000
+> [0.000000] [rank 1] Pstates: 3; Powers: 100000000, 50000000, 20000000
> [0.000000] [rank 0] Current pstate: 0; Current power: 100000000
-> [10.000000] [rank 1] Energy consumed: 2000 Joules.
+> [0.000000] [rank 1] Current pstate: 0; Current power: 100000000
> [10.000000] [rank 0] Energy consumed: 2000 Joules.
+> [10.000000] [rank 1] Energy consumed: 2000 Joules.
> [10.000000] [rank 0] Current pstate: 1; Current power: 50000000
+> [10.000000] [rank 1] Current pstate: 1; Current power: 50000000
> [30.000000] [rank 0] Energy consumed: 5400 Joules.
+> [30.000000] [rank 1] Energy consumed: 5400 Joules.
> [30.000000] [rank 0] Current pstate: 2; Current power: 20000000
+> [30.000000] [rank 1] Current pstate: 2; Current power: 20000000
> [80.000000] [rank 0] Energy consumed: 12900 Joules.
+> [80.000000] [rank 1] Energy consumed: 12900 Joules.
> [80.000000] [surf_energy/INFO] Total energy of host MyHost1: 12900.000000 Joules
-> [80.000000] [surf_energy/INFO] Total energy of host MyHost2: 9000.000000 Joules
+> [80.000000] [surf_energy/INFO] Total energy of host MyHost2: 12900.000000 Joules
+> [80.000000] [surf_energy/INFO] Total energy of host MyHost3: 8000.000000 Joules
p Test smpi bindings for dvfs functions (Fortran 77 example)
-! output sort 1
+
$ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../platforms/energy_platform.xml --cfg=smpi/cpu_threshold:-1 ${bindir:=.}/f77/sef --cfg=plugin:Energy --log=smpi_kernel.thres:warning
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/cpu_threshold' to '-1'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'plugin' to 'Energy'
-> [80.000000] [surf_energy/INFO] Total energy of host MyHost1: 12900.000000 Joules
-> [80.000000] [surf_energy/INFO] Total energy of host MyHost2: 9000.000000 Joules
> [ 0.0000000000000000 ] [rank 0 ] 3 pstates available
-> [ 0.0000000000000000 ] [rank 1 ] 1 pstates available
+> [ 0.0000000000000000 ] [rank 1 ] 3 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 1 ] Power: 50000000.000000000
> [ 0.0000000000000000 ] [rank 0 ] Power: 20000000.000000000
-> [ 0.0000000000000000 ] [rank 1 ] Current pstate: 0 ; Current power: 100000000.00000000
+> [ 0.0000000000000000 ] [rank 1 ] Power: 20000000.000000000
> [ 0.0000000000000000 ] [rank 0 ] Current pstate: 0 ; Current power: 100000000.00000000
-> [ 10.000000000000000 ] [rank 1 ] Energy consumed (Joules): 2000.0000000000000
+> [ 0.0000000000000000 ] [rank 1 ] Current pstate: 0 ; Current power: 100000000.00000000
> [ 10.000000000000000 ] [rank 0 ] Energy consumed (Joules): 2000.0000000000000
+> [ 10.000000000000000 ] [rank 1 ] Energy consumed (Joules): 2000.0000000000000
> [ 10.000000000000000 ] [rank 0 ] Current pstate: 1 ; Current power: 50000000.000000000
+> [ 10.000000000000000 ] [rank 1 ] Current pstate: 1 ; Current power: 50000000.000000000
> [ 30.000000000000000 ] [rank 0 ] Energy consumed (Joules): 5400.0000000000000
+> [ 30.000000000000000 ] [rank 1 ] Energy consumed (Joules): 5400.0000000000000
> [ 30.000000000000000 ] [rank 0 ] Current pstate: 2 ; Current power: 20000000.000000000
+> [ 30.000000000000000 ] [rank 1 ] Current pstate: 2 ; Current power: 20000000.000000000
> [ 80.000000000000000 ] [rank 0 ] Energy consumed (Joules): 12900.000000000000
+> [ 80.000000000000000 ] [rank 1 ] Energy consumed (Joules): 12900.000000000000
+> [80.000000] [surf_energy/INFO] Total energy of host MyHost1: 12900.000000 Joules
+> [80.000000] [surf_energy/INFO] Total energy of host MyHost2: 12900.000000 Joules
+> [80.000000] [surf_energy/INFO] Total energy of host MyHost3: 8000.000000 Joules
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/cpu_threshold' to '-1'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'plugin' to 'Energy'
-> [80.000000] [surf_energy/INFO] Total energy of host MyHost1: 12900.000000 Joules
-> [80.000000] [surf_energy/INFO] Total energy of host MyHost2: 9000.000000 Joules
> [ 0.0000000000000000 ] [rank 0 ] 3 pstates available
-> [ 0.0000000000000000 ] [rank 1 ] 1 pstates available
+> [ 0.0000000000000000 ] [rank 1 ] 3 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 1 ] Power: 50000000.000000000
> [ 0.0000000000000000 ] [rank 0 ] Power: 20000000.000000000
-> [ 0.0000000000000000 ] [rank 1 ] Current pstate: 0 ; Current power: 100000000.00000000
+> [ 0.0000000000000000 ] [rank 1 ] Power: 20000000.000000000
> [ 0.0000000000000000 ] [rank 0 ] Current pstate: 0 ; Current power: 100000000.00000000
-> [ 10.000000000000000 ] [rank 1 ] Energy consumed (Joules): 2000.0000000000000
+> [ 0.0000000000000000 ] [rank 1 ] Current pstate: 0 ; Current power: 100000000.00000000
> [ 10.000000000000000 ] [rank 0 ] Energy consumed (Joules): 2000.0000000000000
+> [ 10.000000000000000 ] [rank 1 ] Energy consumed (Joules): 2000.0000000000000
> [ 10.000000000000000 ] [rank 0 ] Current pstate: 1 ; Current power: 50000000.000000000
+> [ 10.000000000000000 ] [rank 1 ] Current pstate: 1 ; Current power: 50000000.000000000
> [ 30.000000000000000 ] [rank 0 ] Energy consumed (Joules): 5400.0000000000000
+> [ 30.000000000000000 ] [rank 1 ] Energy consumed (Joules): 5400.0000000000000
> [ 30.000000000000000 ] [rank 0 ] Current pstate: 2 ; Current power: 20000000.000000000
+> [ 30.000000000000000 ] [rank 1 ] Current pstate: 2 ; Current power: 20000000.000000000
> [ 80.000000000000000 ] [rank 0 ] Energy consumed (Joules): 12900.000000000000
+> [ 80.000000000000000 ] [rank 1 ] Energy consumed (Joules): 12900.000000000000
+> [80.000000] [surf_energy/INFO] Total energy of host MyHost1: 12900.000000 Joules
+> [80.000000] [surf_energy/INFO] Total energy of host MyHost2: 12900.000000 Joules
+> [80.000000] [surf_energy/INFO] Total energy of host MyHost3: 8000.000000 Joules
/* Create a log channel to have nice outputs. */
#include "xbt/log.h"
#include "xbt/asserts.h"
-#include "smpi/private.h"
XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,
"Messages specific for this msg example");
--- /dev/null
+/* Copyright (c) 2004-2015. 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 SG_PLATF_TYPES_H
+#define SG_PLATF_TYPES_H
+
+#include <xbt.h>
+
+#ifdef __cplusplus
+
+namespace simgrid {
+namespace surf {
+
+class Cpu;
+class RoutingEdge;
+class As;
+class Link;
+
+}
+}
+
+typedef simgrid::surf::Cpu surf_Cpu;
+typedef simgrid::surf::RoutingEdge surf_RoutingEdge;
+typedef simgrid::surf::As surf_As;
+typedef simgrid::surf::Link Link;
+
+#else
+
+typedef struct surf_Cpu surf_Cpu;
+typedef struct surf_RoutingEdge surf_RoutingEdge;
+typedef struct surf_As surf_As;
+typedef struct Link Link;
+
+#endif
+
+typedef surf_Cpu *surf_cpu_t;
+typedef surf_RoutingEdge *routing_edge_t;
+typedef surf_RoutingEdge *sg_routing_edge_t;
+typedef surf_As *AS_t;
+
+// Types which are in fact dictelmt:
+
+typedef xbt_dictelm_t sg_host_t;
+typedef xbt_dictelm_t sg_storage_t;
+
+
+typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */
+
+typedef void *sg_routing_link_t; /* FIXME:The actual type is model-dependent so use void* instead*/
+
+/** @ingroup SURF_interface
+* @brief Defines whether a given resource is working or not */
+typedef enum {
+ SURF_RESOURCE_ON = 1, /**< Up & ready */
+ SURF_RESOURCE_OFF = 0 /**< Down & broken */
+} e_surf_resource_state_t;
+
+typedef enum {
+ SURF_LINK_FULLDUPLEX = 2,
+ SURF_LINK_SHARED = 1,
+ SURF_LINK_FATPIPE = 0
+} e_surf_link_sharing_policy_t;
+
+typedef enum {
+ SURF_TRACE_CONNECT_KIND_HOST_AVAIL = 4,
+ SURF_TRACE_CONNECT_KIND_POWER = 3,
+ SURF_TRACE_CONNECT_KIND_LINK_AVAIL = 2,
+ SURF_TRACE_CONNECT_KIND_BANDWIDTH = 1,
+ SURF_TRACE_CONNECT_KIND_LATENCY = 0
+} e_surf_trace_connect_kind_t;
+
+typedef enum {
+ SURF_PROCESS_ON_FAILURE_DIE = 1,
+ SURF_PROCESS_ON_FAILURE_RESTART = 0
+} e_surf_process_on_failure_t;
+
+typedef enum {
+ SURF_CLUSTER_FAT_TREE=2,
+ SURF_CLUSTER_FLAT = 1,
+ SURF_CLUSTER_TORUS = 0
+} e_surf_cluster_topology_t;
+
+
+/** @ingroup m_datatypes_management_details
+ * @brief Type for any simgrid size
+ */
+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
+ * chances of switching arguments by error, and reduce the burden when we add a new attribute:
+ * old models can just continue to ignore it without having to update their headers.
+ *
+ * It shouldn't be too costly at runtime, provided that structures living on the stack are
+ * used, instead of malloced structures.
+ */
+
+typedef struct {
+ const char* id;
+ xbt_dynar_t speed_peak;
+ int pstate;
+ int core_amount;
+ double speed_scale;
+ tmgr_trace_t speed_trace;
+ e_surf_resource_state_t initial_state;
+ tmgr_trace_t state_trace;
+ const char* coord;
+ xbt_dict_t properties;
+} s_sg_platf_host_cbarg_t, *sg_platf_host_cbarg_t;
+
+#define SG_PLATF_HOST_INITIALIZER { \
+ NULL, 0, 1, 1, 1., NULL, SURF_RESOURCE_ON, NULL, \
+ NULL, NULL \
+}
+
+typedef struct {
+ const char* id;
+ const char* link_up;
+ const char* link_down;
+} s_sg_platf_host_link_cbarg_t, *sg_platf_host_link_cbarg_t;
+
+#define SG_PLATF_HOST_LINK_INITIALIZER {NULL,NULL,NULL}
+
+typedef struct {
+ const char* id;
+ const char* coord;
+} s_sg_platf_router_cbarg_t, *sg_platf_router_cbarg_t;
+
+#define SG_PLATF_ROUTER_INITIALIZER {NULL,NULL}
+
+typedef struct {
+ const char* id;
+ double bandwidth;
+ tmgr_trace_t bandwidth_trace;
+ double latency;
+ tmgr_trace_t latency_trace;
+ e_surf_resource_state_t state;
+ tmgr_trace_t state_trace;
+ e_surf_link_sharing_policy_t policy;
+ xbt_dict_t properties;
+} s_sg_platf_link_cbarg_t, *sg_platf_link_cbarg_t;
+
+#define SG_PLATF_LINK_INITIALIZER {\
+ NULL, 0., NULL, 0., NULL, SURF_RESOURCE_ON, \
+ NULL, SURF_LINK_SHARED, NULL \
+}
+
+typedef struct s_sg_platf_peer_cbarg *sg_platf_peer_cbarg_t;
+typedef struct s_sg_platf_peer_cbarg {
+ const char* id;
+ double speed;
+ double bw_in;
+ double bw_out;
+ double lat;
+ const char* coord;
+ tmgr_trace_t availability_trace;
+ tmgr_trace_t state_trace;
+} s_sg_platf_peer_cbarg_t;
+
+#define SG_PLATF_PEER_INITIALIZER {NULL,0.0,0.0,0.0,0.0,NULL,NULL,NULL}
+
+typedef struct s_sg_platf_route_cbarg *sg_platf_route_cbarg_t;
+typedef struct s_sg_platf_route_cbarg {
+ int symmetrical;
+ const char *src;
+ const char *dst;
+ sg_routing_edge_t gw_src;
+ sg_routing_edge_t gw_dst;
+ xbt_dynar_t link_list;
+} s_sg_platf_route_cbarg_t;
+
+#define SG_PLATF_ROUTE_INITIALIZER {1,NULL,NULL,NULL,NULL,NULL}
+
+typedef struct s_sg_platf_cluster_cbarg *sg_platf_cluster_cbarg_t;
+typedef struct s_sg_platf_cluster_cbarg {
+ const char* id;
+ const char* prefix;
+ const char* suffix;
+ const char* radical;
+ double speed;
+ int core_amount;
+ double bw;
+ double lat;
+ double bb_bw;
+ double bb_lat;
+ double loopback_bw;
+ double loopback_lat;
+ double limiter_link;
+ e_surf_cluster_topology_t topology;
+ const char* topo_parameters;
+ xbt_dict_t properties;
+ const char* router_id;
+ e_surf_link_sharing_policy_t sharing_policy;
+ e_surf_link_sharing_policy_t bb_sharing_policy;
+ const char* availability_trace; //don't convert to tmgr_trace_t since there is a trace per host and some rewriting is needed
+ const char* state_trace;
+} s_sg_platf_cluster_cbarg_t;
+
+#define SG_PLATF_CLUSTER_INITIALIZER {NULL,NULL,NULL,NULL,0.0,1 \
+ ,1.,1.,0.,0.,0.,0.,0. \
+ ,SURF_CLUSTER_FLAT,NULL,NULL,NULL, \
+ SURF_LINK_SHARED,SURF_LINK_SHARED,NULL \
+ ,NULL}
+
+typedef struct s_sg_platf_cabinet_cbarg *sg_platf_cabinet_cbarg_t;
+typedef struct s_sg_platf_cabinet_cbarg {
+ const char* id;
+ const char* prefix;
+ const char* suffix;
+ const char* radical;
+ double speed;
+ double bw;
+ double lat;
+} s_sg_platf_cabinet_cbarg_t;
+
+#define SG_PLATF_CABINET_INITIALIZER {NULL,NULL,NULL,NULL,0.0,0.0,0.0}
+
+typedef struct {
+ const char* id;
+ const char* type_id;
+ const char* content;
+ const char* content_type;
+ xbt_dict_t properties;
+ const char* attach;
+} s_sg_platf_storage_cbarg_t, *sg_platf_storage_cbarg_t;
+
+#define SG_PLATF_STORAGE_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL}
+
+typedef struct {
+ const char* id;
+ const char* model;
+ const char* content;
+ const char* content_type;
+ xbt_dict_t properties;
+ xbt_dict_t model_properties;
+ sg_size_t size;
+} s_sg_platf_storage_type_cbarg_t, *sg_platf_storage_type_cbarg_t;
+
+#define SG_PLATF_STORAGE_TYPE_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL}
+
+typedef struct {
+ const char* type_id;
+ const char* name;
+} s_sg_platf_mstorage_cbarg_t, *sg_platf_mstorage_cbarg_t;
+
+#define SG_PLATF_MSTORAGE_INITIALIZER {NULL,NULL}
+
+typedef struct {
+ const char* storageId;
+ const char* name;
+} s_sg_platf_mount_cbarg_t, *sg_platf_mount_cbarg_t;
+
+#define SG_PLATF_MOUNT_INITIALIZER {NULL,NULL}
+
+typedef struct s_sg_platf_prop_cbarg *sg_platf_prop_cbarg_t;
+typedef struct s_sg_platf_prop_cbarg {
+ const char *id;
+ const char *value;
+} s_sg_platf_prop_cbarg_t;
+
+#define SG_PLATF_PROP_INITIALIZER {NULL,NULL}
+
+typedef struct s_sg_platf_trace_cbarg *sg_platf_trace_cbarg_t;
+typedef struct s_sg_platf_trace_cbarg {
+ const char *id;
+ const char *file;
+ double periodicity;
+ const char *pc_data;
+} s_sg_platf_trace_cbarg_t;
+
+#define SG_PLATF_TRACE_INITIALIZER {NULL,NULL,0.0,NULL}
+
+typedef struct s_sg_platf_trace_connect_cbarg *sg_platf_trace_connect_cbarg_t;
+typedef struct s_sg_platf_trace_connect_cbarg {
+ e_surf_trace_connect_kind_t kind;
+ const char *trace;
+ const char *element;
+} s_sg_platf_trace_connect_cbarg_t;
+
+#define SG_PLATF_TRACE_CONNECT_INITIALIZER {SURF_TRACE_CONNECT_KIND_LATENCY,NULL,NULL}
+
+typedef struct s_sg_platf_process_cbarg *sg_platf_process_cbarg_t;
+typedef struct s_sg_platf_process_cbarg {
+ const char **argv;
+ int argc;
+ xbt_dict_t properties;
+ const char *host;
+ const char *function;
+ double start_time;
+ double kill_time;
+ e_surf_process_on_failure_t on_failure;
+} s_sg_platf_process_cbarg_t;
+
+#define SG_PLATF_PROCESS_INITIALIZER {NULL,0,NULL,NULL,NULL,-1.0,-1.0,SURF_PROCESS_ON_FAILURE_DIE}
+
+typedef struct s_sg_platf_AS_cbarg *sg_platf_AS_cbarg_t;
+typedef struct s_sg_platf_AS_cbarg {
+ const char *id;
+ int routing;
+} s_sg_platf_AS_cbarg_t;
+
+#define SG_PLATF_AS_INITIALIZER {NULL,0}
+
+/** opaque structure defining a event generator for availability based on a probability distribution */
+typedef struct probabilist_event_generator *probabilist_event_generator_t;
+
+#endif
#include <xbt/dict.h>
#include <xbt/dynar.h>
+
+#include <simgrid/forward.h>
+
SG_BEGIN_DECL()
-typedef xbt_dictelm_t sg_host_t;
XBT_PUBLIC(sg_host_t) sg_host_by_name(const char *name);
XBT_PUBLIC(sg_host_t) sg_host_by_name_or_create(const char *name);
static XBT_INLINE char *sg_host_get_name(sg_host_t host){
}
XBT_PUBLIC(xbt_dynar_t) sg_hosts_as_dynar(void);
-#ifdef __cplusplus
-#define DEFINE_EXTERNAL_CLASS(klass) class klass;
-class Cpu;
-#else
-#define DEFINE_EXTERNAL_CLASS(klass) typedef struct klass klass;
-#endif
+// ========== User Data ==============
+XBT_PUBLIC(void*) sg_host_user(sg_host_t host);
+XBT_PUBLIC(void) sg_host_user_set(sg_host_t host, void* userdata);
+XBT_PUBLIC(void) sg_host_user_destroy(sg_host_t host);
// ========== MSG Layer ==============
typedef struct s_msg_host_priv *msg_host_priv_t;
XBT_PUBLIC(void) sg_host_simix_destroy(sg_host_t host);
// ========== SURF CPU ============
-DEFINE_EXTERNAL_CLASS(Cpu);
-typedef Cpu *surf_cpu_t;
XBT_PUBLIC(surf_cpu_t) sg_host_surfcpu(sg_host_t host);
XBT_PUBLIC(void) sg_host_surfcpu_set(sg_host_t host, surf_cpu_t cpu);
+XBT_PUBLIC(void) sg_host_surfcpu_register(sg_host_t host, surf_cpu_t cpu);
XBT_PUBLIC(void) sg_host_surfcpu_destroy(sg_host_t host);
// ========== RoutingEdge ============
-DEFINE_EXTERNAL_CLASS(RoutingEdge);
-XBT_PUBLIC(RoutingEdge*) sg_host_edge(sg_host_t host);
-XBT_PUBLIC(void) sg_host_edge_set(sg_host_t host, RoutingEdge* edge);
+XBT_PUBLIC(routing_edge_t) sg_host_edge(sg_host_t host);
+XBT_PUBLIC(void) sg_host_edge_set(sg_host_t host, routing_edge_t edge);
XBT_PUBLIC(void) sg_host_edge_destroy(sg_host_t host, int do_callback);
// Module initializer. Won't survive the conversion to C++. Hopefully.
XBT_PUBLIC(void) sg_host_init(void);
+// =========== user-level functions ===============
+XBT_PUBLIC(double) sg_host_get_speed(sg_host_t host);
+XBT_PUBLIC(double) sg_host_get_available_speed(sg_host_t host);
+XBT_PUBLIC(int) sg_host_get_core(sg_host_t host);
+XBT_PUBLIC(int) sg_host_get_state(sg_host_t host);
+
+XBT_PUBLIC(int) sg_host_get_nb_pstates(sg_host_t host);
+XBT_PUBLIC(int) sg_host_get_pstate(sg_host_t host);
+XBT_PUBLIC(double) sg_host_get_consumed_energy(sg_host_t host);
+
SG_END_DECL()
#endif /* SIMGRID_HOST_H_ */
#include "simgrid/msg.h"
#include "simgrid/simdag.h"
+SG_BEGIN_DECL()
+
/*
* Functions to manage tracing categories
*/
XBT_PUBLIC(void) TRACE_pause (void);
XBT_PUBLIC(void) TRACE_resume (void);
+SG_END_DECL()
+
#endif /* INSTR_H_ */
#ifndef INCLUDE_SIMGRID_LINK_H_
#define INCLUDE_SIMGRID_LINK_H_
-
-#ifdef __cplusplus
-class Link;
-#else
-typedef struct Link Link;
-#endif
-
-
+#include <simgrid/forward.h>
/* C interface */
SG_BEGIN_DECL()
#include "xbt.h"
#include "xbt/lib.h"
+#include "simgrid/forward.h"
#include "simgrid/simix.h"
#include "simgrid/platf.h"
typedef struct s_smx_rvpoint *msg_mailbox_t;
/* ******************************** Environment ************************************ */
-typedef struct As *msg_as_t;
+typedef surf_As *msg_as_t;
/* ******************************** Host ************************************ */
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);
-XBT_PUBLIC(const char *) MSG_file_get_name(msg_file_t storage);
+XBT_PUBLIC(const char *) MSG_file_get_name(msg_file_t file);
XBT_PUBLIC(msg_error_t) MSG_file_move(msg_file_t fd, const char* fullpath);
XBT_PUBLIC(msg_error_t) MSG_file_rcopy(msg_file_t fd, msg_host_t host, const char* fullpath);
XBT_PUBLIC(msg_error_t) MSG_file_rmove(msg_file_t fd, msg_host_t host, const char* fullpath);
#include <xbt.h>
#include <simgrid/host.h>
+#include "forward.h"
SG_BEGIN_DECL()
-typedef void *sg_routing_link_t; /* FIXME:The actual type is model-dependent so use void* instead*/
-typedef RoutingEdge *sg_routing_edge_t;
+static inline char* sg_storage_name(sg_storage_t storage) {
+ return storage->key;
+}
XBT_PUBLIC(sg_routing_edge_t) sg_routing_edge_by_name_or_null(const char *name);
-/** @ingroup SURF_interface
-* @brief Defines whether a given resource is working or not */
-typedef enum {
- SURF_RESOURCE_ON = 1, /**< Up & ready */
- SURF_RESOURCE_OFF = 0 /**< Down & broken */
-} e_surf_resource_state_t;
-
-typedef enum {
- SURF_LINK_FULLDUPLEX = 2,
- SURF_LINK_SHARED = 1,
- SURF_LINK_FATPIPE = 0
-} e_surf_link_sharing_policy_t;
-
-typedef enum {
- SURF_TRACE_CONNECT_KIND_HOST_AVAIL = 4,
- SURF_TRACE_CONNECT_KIND_POWER = 3,
- SURF_TRACE_CONNECT_KIND_LINK_AVAIL = 2,
- SURF_TRACE_CONNECT_KIND_BANDWIDTH = 1,
- SURF_TRACE_CONNECT_KIND_LATENCY = 0
-} e_surf_trace_connect_kind_t;
-
-typedef enum {
- SURF_PROCESS_ON_FAILURE_DIE = 1,
- SURF_PROCESS_ON_FAILURE_RESTART = 0
-} e_surf_process_on_failure_t;
-
-typedef enum {
- SURF_CLUSTER_FAT_TREE=2,
- SURF_CLUSTER_FLAT = 1,
- SURF_CLUSTER_TORUS = 0
-} e_surf_cluster_topology_t;
-
-
-typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */
-
-/** opaque structure defining a event generator for availability based on a probability distribution */
-typedef struct probabilist_event_generator *probabilist_event_generator_t;
-
XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_file(const char *filename);
XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_string(const char *id,
const char *input,
double scale,
double shape);
-static inline char* sg_host_name(sg_host_t host) {
- return host->key;
-}
-
-typedef xbt_dictelm_t sg_storage_t;
-static inline char* sg_storage_name(sg_storage_t storage) {
- return storage->key;
-}
-/** @ingroup m_datatypes_management_details
- * @brief Type for any simgrid size
- */
-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
- * chances of switching arguments by error, and reduce the burden when we add a new attribute:
- * old models can just continue to ignore it without having to update their headers.
- *
- * It shouldn't be too costly at runtime, provided that structures living on the stack are
- * used, instead of malloced structures.
- */
-
-typedef struct {
- const char* id;
- xbt_dynar_t power_peak;
- int pstate;
- int core_amount;
- double power_scale;
- tmgr_trace_t power_trace;
- e_surf_resource_state_t initial_state;
- tmgr_trace_t state_trace;
- const char* coord;
- xbt_dict_t properties;
-} s_sg_platf_host_cbarg_t, *sg_platf_host_cbarg_t;
-
-#define SG_PLATF_HOST_INITIALIZER { \
- NULL, 0, 1, 1, 1., NULL, SURF_RESOURCE_ON, NULL, \
- NULL, NULL \
-}
-
-typedef struct {
- const char* id;
- const char* link_up;
- const char* link_down;
-} s_sg_platf_host_link_cbarg_t, *sg_platf_host_link_cbarg_t;
-
-#define SG_PLATF_HOST_LINK_INITIALIZER {NULL,NULL,NULL}
-
-typedef struct {
- const char* id;
- const char* coord;
-} s_sg_platf_router_cbarg_t, *sg_platf_router_cbarg_t;
-
-#define SG_PLATF_ROUTER_INITIALIZER {NULL,NULL}
-
-typedef struct {
- const char* id;
- double bandwidth;
- tmgr_trace_t bandwidth_trace;
- double latency;
- tmgr_trace_t latency_trace;
- e_surf_resource_state_t state;
- tmgr_trace_t state_trace;
- e_surf_link_sharing_policy_t policy;
- xbt_dict_t properties;
-} s_sg_platf_link_cbarg_t, *sg_platf_link_cbarg_t;
-
-#define SG_PLATF_LINK_INITIALIZER {\
- NULL, 0., NULL, 0., NULL, SURF_RESOURCE_ON, \
- NULL, SURF_LINK_SHARED, NULL \
-}
-
-typedef struct s_sg_platf_peer_cbarg *sg_platf_peer_cbarg_t;
-typedef struct s_sg_platf_peer_cbarg {
- const char* id;
- double power;
- double bw_in;
- double bw_out;
- double lat;
- const char* coord;
- tmgr_trace_t availability_trace;
- tmgr_trace_t state_trace;
-} s_sg_platf_peer_cbarg_t;
-
-#define SG_PLATF_PEER_INITIALIZER {NULL,0.0,0.0,0.0,0.0,NULL,NULL,NULL}
-
-typedef struct s_sg_platf_route_cbarg *sg_platf_route_cbarg_t;
-typedef struct s_sg_platf_route_cbarg {
- int symmetrical;
- const char *src;
- const char *dst;
- sg_routing_edge_t gw_src;
- sg_routing_edge_t gw_dst;
- xbt_dynar_t link_list;
-} s_sg_platf_route_cbarg_t;
-
-#define SG_PLATF_ROUTE_INITIALIZER {1,NULL,NULL,NULL,NULL,NULL}
-
-typedef struct s_sg_platf_cluster_cbarg *sg_platf_cluster_cbarg_t;
-typedef struct s_sg_platf_cluster_cbarg {
- const char* id;
- const char* prefix;
- const char* suffix;
- const char* radical;
- double power;
- int core_amount;
- double bw;
- double lat;
- double bb_bw;
- double bb_lat;
- double loopback_bw;
- double loopback_lat;
- double limiter_link;
- e_surf_cluster_topology_t topology;
- const char* topo_parameters;
- xbt_dict_t properties;
- const char* router_id;
- e_surf_link_sharing_policy_t sharing_policy;
- e_surf_link_sharing_policy_t bb_sharing_policy;
- const char* availability_trace; //don't convert to tmgr_trace_t since there is a trace per host and some rewriting is needed
- const char* state_trace;
-} s_sg_platf_cluster_cbarg_t;
-
-#define SG_PLATF_CLUSTER_INITIALIZER {NULL,NULL,NULL,NULL,0.0,1 \
- ,1.,1.,0.,0.,0.,0.,0. \
- ,SURF_CLUSTER_FLAT,NULL,NULL,NULL, \
- SURF_LINK_SHARED,SURF_LINK_SHARED,NULL \
- ,NULL}
-
-typedef struct s_sg_platf_cabinet_cbarg *sg_platf_cabinet_cbarg_t;
-typedef struct s_sg_platf_cabinet_cbarg {
- const char* id;
- const char* prefix;
- const char* suffix;
- const char* radical;
- double power;
- double bw;
- double lat;
-} s_sg_platf_cabinet_cbarg_t;
-
-#define SG_PLATF_CABINET_INITIALIZER {NULL,NULL,NULL,NULL,0.0,0.0,0.0}
-
-typedef struct {
- const char* id;
- const char* type_id;
- const char* content;
- const char* content_type;
- xbt_dict_t properties;
- const char* attach;
-} s_sg_platf_storage_cbarg_t, *sg_platf_storage_cbarg_t;
-
-#define SG_PLATF_STORAGE_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL}
-
-typedef struct {
- const char* id;
- const char* model;
- const char* content;
- const char* content_type;
- xbt_dict_t properties;
- xbt_dict_t model_properties;
- sg_size_t size;
-} s_sg_platf_storage_type_cbarg_t, *sg_platf_storage_type_cbarg_t;
-
-#define SG_PLATF_STORAGE_TYPE_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL}
-
-typedef struct {
- const char* type_id;
- const char* name;
-} s_sg_platf_mstorage_cbarg_t, *sg_platf_mstorage_cbarg_t;
-
-#define SG_PLATF_MSTORAGE_INITIALIZER {NULL,NULL}
-
-typedef struct {
- const char* storageId;
- const char* name;
-} s_sg_platf_mount_cbarg_t, *sg_platf_mount_cbarg_t;
-
-#define SG_PLATF_MOUNT_INITIALIZER {NULL,NULL}
-
-typedef struct s_sg_platf_prop_cbarg *sg_platf_prop_cbarg_t;
-typedef struct s_sg_platf_prop_cbarg {
- const char *id;
- const char *value;
-} s_sg_platf_prop_cbarg_t;
-
-#define SG_PLATF_PROP_INITIALIZER {NULL,NULL}
-
-typedef struct s_sg_platf_trace_cbarg *sg_platf_trace_cbarg_t;
-typedef struct s_sg_platf_trace_cbarg {
- const char *id;
- const char *file;
- double periodicity;
- const char *pc_data;
-} s_sg_platf_trace_cbarg_t;
-
-#define SG_PLATF_TRACE_INITIALIZER {NULL,NULL,0.0,NULL}
-
-typedef struct s_sg_platf_trace_connect_cbarg *sg_platf_trace_connect_cbarg_t;
-typedef struct s_sg_platf_trace_connect_cbarg {
- e_surf_trace_connect_kind_t kind;
- const char *trace;
- const char *element;
-} s_sg_platf_trace_connect_cbarg_t;
-
-#define SG_PLATF_TRACE_CONNECT_INITIALIZER {SURF_TRACE_CONNECT_KIND_LATENCY,NULL,NULL}
-
-typedef struct s_sg_platf_process_cbarg *sg_platf_process_cbarg_t;
-typedef struct s_sg_platf_process_cbarg {
- const char **argv;
- int argc;
- xbt_dict_t properties;
- const char *host;
- const char *function;
- double start_time;
- double kill_time;
- e_surf_process_on_failure_t on_failure;
-} s_sg_platf_process_cbarg_t;
-
-#define SG_PLATF_PROCESS_INITIALIZER {NULL,0,NULL,NULL,NULL,-1.0,-1.0,SURF_PROCESS_ON_FAILURE_DIE}
-
-typedef struct s_sg_platf_AS_cbarg *sg_platf_AS_cbarg_t;
-typedef struct s_sg_platf_AS_cbarg {
- const char *id;
- int routing;
-} s_sg_platf_AS_cbarg_t;
-
-#define SG_PLATF_AS_INITIALIZER {NULL,0}
-
-/* ***************************************** */
-/* TUTORIAL: New TAG */
-
-typedef struct s_sg_platf_gpu_cbarg *sg_platf_gpu_cbarg_t;
-typedef struct s_sg_platf_gpu_cbarg {
- const char *name;
-} s_sg_platf_gpu_cbarg_t;
-
-#define SG_PLATF_GPU_INITIALIZER {NULL}
-
-
/* ***************************************** */
XBT_PUBLIC(void) sg_platf_begin(void); // Start a new platform
XBT_PUBLIC(void) sg_platf_new_ASroute (sg_platf_route_cbarg_t ASroute); // Add an ASroute
XBT_PUBLIC(void) sg_platf_new_bypassRoute (sg_platf_route_cbarg_t bypassroute); // Add a bypassRoute
XBT_PUBLIC(void) sg_platf_new_bypassASroute (sg_platf_route_cbarg_t bypassASroute); // Add an bypassASroute
-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_process(sg_platf_process_cbarg_t process);
-/* ***************************************** */
-/* TUTORIAL: New TAG */
-XBT_PUBLIC(void) sg_platf_new_gpu(sg_platf_gpu_cbarg_t gpu);
-/* ***************************************** */
-
// Add route and Asroute without xml file with those functions
XBT_PUBLIC(void) sg_platf_route_begin (sg_platf_route_cbarg_t route); // Initialize route
XBT_PUBLIC(void) sg_platf_route_end (sg_platf_route_cbarg_t route); // Finalize and add a route
XBT_PUBLIC(void) sg_platf_route_add_link (const char* link_id, sg_platf_route_cbarg_t route); // Add a link to link list
XBT_PUBLIC(void) sg_platf_ASroute_add_link (const char* link_id, sg_platf_route_cbarg_t ASroute); // Add a link to link list
-typedef void (*sg_platf_process_cb_t)(sg_platf_process_cbarg_t);
-XBT_PUBLIC(void) sg_platf_process_add_cb(sg_platf_process_cb_t fct);
-
SG_END_DECL()
#endif /* SG_PLATF_H */
--- /dev/null
+/* Copyright (c) 2004-2015. 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 SIMGRID_S4U_S4U_H
+#define SIMGRID_S4U_S4U_H
+
+#include "s4u/actor.hpp"
+#include "s4u/mailbox.hpp"
+#include "s4u/engine.hpp"
+#include "s4u/host.hpp"
+
+#include "s4u/async.hpp"
+#include "s4u/comm.hpp"
+
+#include "s4u/storage.hpp"
+#include "s4u/file.hpp"
+
+#endif /* SIMGRID_S4U_S4U_H */
--- /dev/null
+/* Copyright (c) 2006-2015. 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 SIMGRID_S4U_ACTOR_HPP
+#define SIMGRID_S4U_ACTOR_HPP
+
+#include <xbt/base.h>
+#include <simgrid/simix.h>
+
+namespace simgrid {
+namespace s4u {
+
+class Comm;
+class Host;
+class Mailbox;
+
+/** @brief Simulation Agent
+ *
+ * An actor may be defined as a code executing in a location (host).
+ *
+ * All actors should be started from the XML deployment file (using the @link{s4u::Engine::loadDeployment()}),
+ * even if you can also start new actors directly.
+ * Separating the deployment in the XML from the logic in the code is a good habit as it makes your simulation easier
+ * to adapt to new settings.
+ *
+ * The code that you define for a given actor should be placed in the main method that is virtual.
+ * For example, a Worker actor should be declared as follows:
+ *
+ * \verbatim
+ * #include "s4u/actor.hpp"
+ *
+ * class Worker : simgrid::s4u::Actor {
+ *
+ * int main(int argc, char **argv) {
+ * printf("Hello s4u");
+ * }
+ * };
+ * \endverbatim
+ *
+ */
+XBT_PUBLIC_CLASS Actor {
+ friend Comm;
+ Actor(smx_process_t smx_proc);
+public:
+ Actor(const char*name, s4u::Host *host, int argc, char **argv);
+ Actor(const char*name, s4u::Host *host, int argc, char **argv, double killTime);
+ virtual ~Actor() {}
+
+ /** The main method of your agent */
+ virtual int main(int argc, char **argv);
+
+ /** The Actor that is currently running */
+ static Actor *current();
+ /** Retrieves the actor that have the given PID (or NULL if not existing) */
+ static Actor *byPid(int pid);
+
+ /** Retrieves the name of that actor */
+ const char*getName();
+ /** Retrieves the host on which that actor is running */
+ s4u::Host *getHost();
+ /** Retrieves the PID of that actor */
+ int getPid();
+
+ /** If set to true, the actor will automatically restart when its host reboots */
+ void setAutoRestart(bool autorestart);
+ /** Sets the time at which that actor should be killed */
+ void setKillTime(double time);
+ /** Retrieves the time at which that actor will be killed (or -1 if not set) */
+ double getKillTime();
+
+ /** Ask kindly to all actors to die. Only the issuer will survive. */
+ static void killAll();
+ /** Ask the actor to die.
+ *
+ * It will only notice your request when doing a simcall next time (a communication or similar).
+ * SimGrid sometimes have issues when you kill actors that are currently communicating and such. We are working on it to fix the issues.
+ */
+ void kill();
+
+ /** Block the actor sleeping for that amount of seconds (may throws hostFailure) */
+ void sleep(double duration);
+
+ /** Block the actor, computing the given amount of flops */
+ e_smx_state_t execute(double flop);
+
+ /** Block the actor until it gets a message from the given mailbox.
+ *
+ * See \ref Comm for the full communication API (including non blocking communications).
+ */
+ void *recv(Mailbox &chan);
+
+ /** Block the actor until it delivers a message of the given simulated size to the given mailbox
+ *
+ * See \ref Comm for the full communication API (including non blocking communications).
+ */
+ void send(Mailbox &chan, void*payload, size_t simulatedSize);
+
+protected:
+ smx_process_t getInferior() {return p_smx_process;}
+private:
+ smx_process_t p_smx_process;
+};
+}} // namespace simgrid::s4u
+
+#endif /* SIMGRID_S4U_ACTOR_HPP */
+
+#if 0
+
+public abstract class Actor implements Runnable {
+ /** Suspends the process. See {@link #resume()} to resume it afterward */
+ public native void suspend();
+ /** Resume a process that was suspended by {@link #suspend()}. */
+ public native void resume();
+ /** Tests if a process is suspended. */
+ public native boolean isSuspended();
+
+ /**
+ * Returns the value of a given process property.
+ */
+ public native String getProperty(String name);
+
+
+ /**
+ * Migrates a process to another host.
+ *
+ * @param host The host where to migrate the process.
+ *
+ */
+ public native void migrate(Host host);
+
+ public native void exit();
+ /**
+ * This static method returns the current amount of processes running
+ *
+ * @return The count of the running processes
+ */
+ public native static int getCount();
+
+}
+#endif
--- /dev/null
+/* Copyright (c) 2006-2015. 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 SIMGRID_S4U_ASYNC_HPP
+#define SIMGRID_S4U_ASYNC_HPP
+
+#include <stdlib.h>
+#include <xbt/base.h>
+#include <xbt/misc.h>
+
+SG_BEGIN_DECL();
+typedef enum {
+ inited, started, finished
+} e_s4u_async_state_t;
+SG_END_DECL();
+
+namespace simgrid {
+namespace s4u {
+
+/* Forward declaration */
+class Comm;
+
+
+/** @brief Asynchronous Actions
+ *
+ * This class is the ancestor of every asynchronous actions, that is, of actions that do take time in the simulated world.
+ */
+XBT_PUBLIC_CLASS Async {
+ friend Comm;
+protected:
+ Async();
+ virtual ~Async();
+
+private:
+ struct s_smx_synchro *p_inferior = NULL;
+
+private:
+ e_s4u_async_state_t p_state = inited;
+public:
+ /** Starts a previously created async.
+ *
+ * This function is optional: you can call wait() even if you didn't call start()
+ */
+ virtual void start()=0;
+ /** Tests whether the given async is terminated yet */
+ //virtual bool test()=0;
+ /** Blocks until the async is terminated */
+ virtual void wait()=0;
+ /** Blocks until the async is terminated, or until the timeout is elapsed
+ * Raises: timeout exception.*/
+ virtual void wait(double timeout)=0;
+ /** Cancel that async */
+ //virtual void cancel();
+ /** Retrieve the current state of the async */
+ e_s4u_async_state_t getState() {return p_state;}
+
+private:
+ double p_remains = 0;
+public:
+ /** Get the remaining amount of work that this Async entails. When it's 0, it's done. */
+ double getRemains();
+ /** Set the [remaining] amount of work that this Async will entail
+ *
+ * It is forbidden to change the amount of work once the Async is started */
+ void setRemains(double remains);
+
+private:
+ void *p_userData = NULL;
+public:
+ /** Put some user data onto the Async */
+ void setUserData(void *data) {p_userData=data;}
+ /** Retrieve the user data of the Async */
+ void *getUserData() { return p_userData; }
+}; // class
+
+}}; // Namespace simgrid::s4u
+
+#endif /* SIMGRID_S4U_ASYNC_HPP */
--- /dev/null
+/* Copyright (c) 2006-2015. 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 SIMGRID_S4U_COMM_HPP
+#define SIMGRID_S4U_COMM_HPP
+
+#include <xbt/base.h>
+#include <simgrid/s4u/async.hpp>
+#include <simgrid/s4u/mailbox.hpp>
+
+namespace simgrid {
+namespace s4u {
+
+class Mailbox;
+
+/** @brief Communication async
+ *
+ * Represents all asynchronous communications, that you can test or wait onto.
+ */
+XBT_PUBLIC_CLASS Comm : public Async {
+ Comm() : Async() {}
+public:
+ virtual ~Comm();
+
+public:
+ /** Creates (but don't start) an async send to the mailbox #dest */
+ static Comm &send_init(Actor *sender, Mailbox &dest);
+ /** Creates and start an async send to the mailbox #dest */
+ static Comm &send_async(s4u::Actor *sender, Mailbox &dest, void *data, int simulatedByteAmount);
+ /** Creates (but don't start) an async recv onto the mailbox #from */
+ static Comm &recv_init(s4u::Actor *receiver, Mailbox &from);
+ /** Creates and start an async recv to the mailbox #from */
+ static Comm &recv_async(s4u::Actor *receiver, Mailbox &from, void **data);
+
+ void start() override;
+ void wait() override;
+ void wait(double timeout) override;
+
+private:
+ double p_rate=-1;
+public:
+ /** Sets the maximal communication rate (in byte/sec). Must be done before start */
+ void setRate(double rate);
+
+private:
+ void *p_dstBuff = NULL;
+ size_t p_dstBuffSize = 0;
+ void *p_srcBuff = NULL;
+ size_t p_srcBuffSize = sizeof(void*);
+public:
+ /** Specify the data to send */
+ void setSrcData(void * buff);
+ /** Specify the size of the data to send */
+ void setSrcDataSize(size_t size);
+ /** Specify the data to send and its size */
+ void setSrcData(void * buff, size_t size);
+
+ /** Specify where to receive the data */
+ void setDstData(void ** buff);
+ /** Specify the buffer in which the data should be received */
+ void setDstData(void ** buff, size_t size);
+ /** Retrieve the size of the received data */
+ size_t getDstDataSize();
+
+
+private: /* FIXME: expose these elements in the API */
+ int p_detached = 0;
+ int (*p_matchFunction)(void *, void *, smx_synchro_t) = NULL;
+ void (*p_cleanFunction)(void *) = NULL;
+ void (*p_copyDataFunction)(smx_synchro_t, void*, size_t) = NULL;
+
+private:
+ Actor *p_sender = NULL;
+ Actor *p_receiver = NULL;
+ Mailbox *p_mailbox = NULL;
+};
+
+}} // namespace simgrid::s4u
+
+#endif /* SIMGRID_S4U_COMM_HPP */
--- /dev/null
+/* Copyright (c) 2006-2015. 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 SIMGRID_S4U_ENGINE_HPP
+#define SIMGRID_S4U_ENGINE_HPP
+
+#include <xbt/base.h>
+
+namespace simgrid {
+namespace s4u {
+/** @brief Simulation engine
+ *
+ * This class is an interface to the simulation engine.
+ */
+XBT_PUBLIC_CLASS Engine {
+public:
+ /** Constructor, taking the command line parameters of your main function */
+ Engine(int *argc, char **argv);
+
+ /** @brief Load a platform file describing the environment
+ *
+ * The environment is either a XML file following the simgrid.dtd formalism, or a lua file.
+ * Some examples can be found in the directory examples/platforms.
+ */
+ void loadPlatform(const char *platf);
+
+ /** Registers the main function of an actor that will be launched from the deployment file */
+ void register_function(const char*name, int (*code)(int,char**));
+
+ /** Registers a function as the default main function of actors
+ *
+ * It will be used as fallback when the function requested from the deployment file was not registered.
+ * It is used for trace-based simulations (see examples/msg/actions).
+ */
+ void register_default(int (*code)(int,char**));
+
+ /** @brief Load a deployment file and launch the actors that it contains */
+ void loadDeployment(const char *deploy);
+
+ /** @brief Run the simulation */
+ void run();
+
+ /** @brief Retrieve the simulation time */
+ static double getClock();
+
+};
+}} // namespace simgrid::sgo
+
+#endif /* SIMGRID_S4U_ENGINE_HPP */
--- /dev/null
+/* Copyright (c) 2006-2015. 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 SIMGRID_S4U_FILE_HPP
+#define SIMGRID_S4U_FILE_HPP
+
+#include <boost/unordered_map.hpp>
+#include <vector>
+
+#include <xbt/base.h>
+#include <simgrid/simix.h>
+
+namespace simgrid {
+namespace s4u {
+
+class Actor;
+class Storage;
+
+/** @brief A simulated file
+ *
+ * Used to simulate the time it takes to access to a file, but does not really store any information.
+ *
+ * They are located on @link{simgrid::s4u::Storage}, that are accessed from a given @link{simgrid::s4u::Host} through mountpoints.
+ * For now, you cannot change the mountpoints programatically, and must declare them from your platform file.
+ */
+XBT_PUBLIC_CLASS File {
+public:
+ File(const char *fullpath, void* userdata);
+ ~File();
+private:
+ smx_file_t p_inferior;
+ const char *p_path;
+
+public:
+ /** Retrieves the path to the file */
+ const char *path() { return p_path;}
+public:
+ /** Simulates a read action. Returns the size of data actually read
+ *
+ * FIXME: reading from a remotely mounted disk is not implemented yet. Any storage is considered as local, and no network communication ever occur.
+ */
+ sg_size_t read(sg_size_t size);
+ /** Simulates a write action. Returns the size of data actually written.
+ *
+ * FIXME: reading from a remotely mounted disk is not implemented yet. Any storage is considered as local, and no network communication ever occur.
+ */
+ sg_size_t write(sg_size_t size);
+
+ /** Allows to store user data on that host */
+ void set_userdata(void *data) {p_userdata = data;}
+ /** Retrieves the previously stored data */
+ void* userdata() {return p_userdata;}
+private:
+ void *p_userdata=NULL;
+
+public:
+ /** Retrieve the datasize */
+ sg_size_t size();
+
+ /** Sets the file head to the given position. */
+ void seek(sg_size_t pos);
+ /** Retrieves the current file position */
+ sg_size_t tell();
+
+ /** Rename a file
+ *
+ * WARNING: It is forbidden to move the file to another mount point */
+ void move(const char*fullpath);
+
+ /** Remove a file from disk */
+ void unlink();
+
+ /* FIXME: add these to the S4U API:
+ XBT_PUBLIC(const char *) MSG_file_get_name(msg_file_t file);
+ XBT_PUBLIC(msg_error_t) MSG_file_rcopy(msg_file_t fd, msg_host_t host, const char* fullpath);
+ XBT_PUBLIC(msg_error_t) MSG_file_rmove(msg_file_t fd, msg_host_t host, const char* fullpath);
+ */
+
+};
+
+}} // namespace simgrid::s4u
+
+#endif /* SIMGRID_S4U_HOST_HPP */
--- /dev/null
+/* Copyright (c) 2006-2015. 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 SIMGRID_S4U_HOST_HPP
+#define SIMGRID_S4U_HOST_HPP
+
+#include <boost/unordered_map.hpp>
+#include <vector>
+
+#include "xbt/base.h"
+#include "simgrid/simix.h"
+
+namespace simgrid {
+namespace s4u {
+
+class Actor;
+class Storage;
+class File;
+
+/** @brief Simulated machine that can host some actors
+ *
+ * It represents some physical resource with computing and networking capabilities.
+ *
+ * All hosts are automatically created during the call of the method
+ * @link{simgrid::s4u::Engine::loadPlatform()}.
+ * You cannot create a host yourself.
+ *
+ * You can retrieve a particular host using @link{simgrid::s4u::Host.byName()},
+ * and actors can retrieve the host on which they run using @link{simgrid::s4u::Host.current()}.
+ */
+XBT_PUBLIC_CLASS Host {
+ friend Actor;
+ friend File;
+private:
+ Host(const char *name);
+protected:
+ ~Host();
+public:
+ /** Retrieves an host from its name. */
+ static s4u::Host *byName(std::string name);
+ /** Retrieves the host on which the current actor is running */
+ static s4u::Host *current();
+
+ const char* name();
+
+ /** Turns that host on if it was previously off
+ *
+ * All actors on that host which were marked autorestart will be restarted automatically.
+ * This call does nothing if the host is already on.
+ */
+ void turnOn();
+ /** Turns that host off. All actors are forcefully stopped. */
+ void turnOff();
+ /** Returns if that host is currently up and running */
+ bool isOn();
+
+
+ /** Allows to store user data on that host */
+ void set_userdata(void *data) {p_userdata = data;}
+ /** Retrieves the previously stored data */
+ void* userdata() {return p_userdata;}
+
+ /** Get an associative list [mount point]->[Storage] off all local mount points.
+ *
+ * This is defined in the platform file, and cannot be modified programatically (yet).
+ *
+ * Do not change the returned value in any way.
+ */
+ boost::unordered_map<std::string, Storage&> &mountedStorages();
+private:
+ boost::unordered_map<std::string, Storage&> *mounts = NULL; // caching
+
+protected:
+ sg_host_t inferior() {return p_inferior;}
+private:
+ void*p_userdata=NULL;
+ sg_host_t p_inferior;
+ static boost::unordered_map<std::string, s4u::Host *> *hosts;
+};
+
+}} // namespace simgrid::s4u
+
+#endif /* SIMGRID_S4U_HOST_HPP */
+
+#if 0
+/* Bindings to the MSG hosts */
+
+/* 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;
+
+import org.simgrid.msg.Storage;
+
+/*
+Host jacquelin;
+
+try {
+ jacquelin = Host.getByName("Jacquelin");
+} catch(HostNotFoundException e) {
+ System.err.println(e.toString());
+}
+...
+\endverbatim
+ *
+ */
+public class Host {
+ /**
+ * This static method returns all of the hosts of the installed platform.
+ *
+ * @return An array containing all the hosts installed.
+ *
+ */
+ public native static Host[] all();
+
+ /**
+ * This static method sets a mailbox to receive in asynchronous mode.
+ *
+ * All messages sent to this mailbox will be transferred to
+ * the receiver without waiting for the receive call.
+ * The receive call will still be necessary to use the received data.
+ * If there is a need to receive some messages asynchronously, and some not,
+ * two different mailboxes should be used.
+ *
+ * @param mailboxName The name of the mailbox
+ */
+ public static native void setAsyncMailbox(String mailboxName);
+
+ /**
+ * This method returns the number of tasks currently running on a host.
+ * The external load (comming from an availability trace) is not taken in account.
+ *
+ * @return The number of tasks currently running on a host.
+ */
+ public native int getLoad();
+
+ /**
+ * This method returns the speed of the processor of a host,
+ * regardless of the current load of the machine.
+ *
+ * @return The speed of the processor of the host in flops.
+ *
+ */
+ public native double getSpeed();
+
+ /**
+ * This method returns the number of core of a host.
+ *
+ * @return The speed of the processor of the host in flops.
+ *
+ */
+ public native double getCoreNumber();
+
+ /**
+ * Returns the value of a given host property (set from the platform file).
+ */
+ public native String getProperty(String name);
+
+ /**
+ * Change the value of a given host property.
+ */
+ public native void setProperty(String name, String value);
+
+ /** 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();
+
+
+}
+#endif
--- /dev/null
+/* Copyright (c) 2006-2015. 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 SIMGRID_S4U_MAILBOX_HPP
+#define SIMGRID_S4U_MAILBOX_HPP
+
+#include <boost/unordered_map.hpp>
+
+#include <xbt/base.h>
+#include <simgrid/s4u/actor.hpp>
+
+namespace simgrid {
+namespace s4u {
+
+class Comm;
+
+/** @brief Mailboxes
+ *
+ * Rendez-vous point for network communications, similar to URLs on which you could post and retrieve data.
+ * They are not network locations: you can post and retrieve on a given mailbox from anywhere on the network.
+ * You can access any mailbox without any latency. The network delay are only related to the location of the
+ * sender and receiver.
+ */
+XBT_PUBLIC_CLASS Mailbox {
+ friend Comm;
+
+private:
+ Mailbox(const char*name, smx_rdv_t inferior);
+public:
+ ~Mailbox();
+
+protected:
+ smx_rdv_t getInferior() { return p_inferior; }
+
+public:
+ /** Get the name of that mailbox */
+ const char *getName();
+ /** Retrieve the mailbox associated to the given string */
+ static Mailbox *byName(const char *name);
+
+private:
+ std::string p_name;
+ smx_rdv_t p_inferior;
+ static boost::unordered_map<std::string, Mailbox *> *mailboxes;
+};
+}} // namespace simgrid::s4u
+
+#endif /* SIMGRID_S4U_MAILBOX_HPP */
--- /dev/null
+/* Copyright (c) 2006-2015. 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 INCLUDE_SIMGRID_S4U_STORAGE_HPP_
+#define INCLUDE_SIMGRID_S4U_STORAGE_HPP_
+
+#include <boost/unordered_map.hpp>
+#include "xbt/base.h"
+#include "simgrid/simix.h"
+
+namespace simgrid {
+namespace s4u {
+
+XBT_PUBLIC_CLASS Storage {
+private:
+ Storage(std::string name, smx_storage_t inferior);
+ virtual ~Storage();
+public:
+ /** Retrieve a Storage by its name. It must exist in the platform file */
+ static Storage &byName(const char* name);
+ const char *name();
+ sg_size_t size_free();
+ sg_size_t size_used();
+ /** Retrieve the total amount of space of this storage element */
+ sg_size_t size();
+
+ /* TODO: missing API:
+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(xbt_dict_t) MSG_storage_get_content(msg_storage_t storage);
+XBT_PUBLIC(msg_error_t) MSG_storage_file_move(msg_file_t fd, msg_host_t dest, char* mount, char* fullname);
+XBT_PUBLIC(const char *) MSG_storage_get_host(msg_storage_t storage);
+ */
+protected:
+ smx_storage_t inferior();
+private:
+ static boost::unordered_map<std::string, Storage *> *storages;
+ std::string p_name;
+ smx_storage_t p_inferior;
+
+
+public:
+ void set_userdata(void *data) {p_userdata = data;}
+ void *userdata() {return p_userdata;}
+private:
+ void *p_userdata = NULL;
+
+};
+
+} /* namespace s4u */
+} /* namespace simgrid */
+
+#endif /* INCLUDE_SIMGRID_S4U_STORAGE_HPP_ */
#include "simgrid/datatypes.h"
#include "simgrid/host.h"
+
+#ifdef __cplusplus
+
+namespace simgrid {
+namespace simix {
+ class Context;
+ class ContextFactory;
+}
+}
+
+typedef simgrid::simix::Context *smx_context_t;
+
+#else
+
+typedef struct s_smx_context *smx_context_t;
+
+#endif
+
+
+
SG_BEGIN_DECL()
/**************************** Scalar Values **********************************/
XBT_PUBLIC(void*) SIMIX_comm_get_src_data(smx_synchro_t synchro);
XBT_PUBLIC(void*) SIMIX_comm_get_dst_data(smx_synchro_t synchro);
-/******************************** Context *************************************/
-typedef struct s_smx_context *smx_context_t;
-typedef struct s_smx_context_factory *smx_context_factory_t;
-
/* Process creation/destruction callbacks */
typedef void (*void_pfn_smxprocess_t) (smx_process_t);
-/* Process kill */
-typedef void (*void_pfn_smxprocess_t_smxprocess_t) (smx_process_t, smx_process_t);
/* for auto-restart function */
typedef void (*void_pfn_sghost_t) (sg_host_t);
-/* The following function pointer types describe the interface that any context
- factory should implement */
-
-
-typedef smx_context_t (*smx_pfn_context_factory_create_context_t)(
- xbt_main_func_t, int, char **, void_pfn_smxprocess_t, smx_process_t process);
-typedef int (*smx_pfn_context_factory_finalize_t) (smx_context_factory_t*);
-typedef void (*smx_pfn_context_free_t) (smx_context_t);
-typedef void (*smx_pfn_context_start_t) (smx_context_t);
-typedef void (*smx_pfn_context_stop_t) (smx_context_t);
-typedef void (*smx_pfn_context_suspend_t) (smx_context_t context);
-typedef void (*smx_pfn_context_runall_t) (void);
-typedef smx_context_t (*smx_pfn_context_self_t) (void);
-typedef smx_process_t (*smx_pfn_context_get_process_t) (smx_context_t context);
-
-/* interface of the context factories */
-typedef struct s_smx_context_factory {
- const char *name;
- smx_pfn_context_factory_create_context_t create_context;
- smx_pfn_context_factory_finalize_t finalize;
- smx_pfn_context_free_t free;
- smx_pfn_context_stop_t stop;
- smx_pfn_context_suspend_t suspend;
- smx_pfn_context_runall_t runall;
- smx_pfn_context_self_t self;
- smx_pfn_context_get_process_t get_process;
-} s_smx_context_factory_t;
-
-/* Hack: let msg load directly the right factory */
-typedef void (*smx_ctx_factory_initializer_t)(smx_context_factory_t*);
-XBT_PUBLIC_DATA(smx_ctx_factory_initializer_t) smx_factory_initializer_to_use;
extern char* smx_context_factory_name;
extern int smx_context_stack_size;
extern int smx_context_stack_size_was_set;
extern int smx_context_guard_size;
extern int smx_context_guard_size_was_set;
-/* *********************** */
-/* Context type definition */
-/* *********************** */
-/* the following function pointers types describe the interface that all context
- concepts must implement */
-/* each context type derive from this structure, so they must contain this structure
- * at their beginning -- OOP in C :/ */
-typedef struct s_smx_context {
- s_xbt_swag_hookup_t hookup;
- xbt_main_func_t code;
- void_pfn_smxprocess_t cleanup_func;
- smx_process_t process;
- char **argv;
- int argc;
- unsigned iwannadie:1;
-} s_smx_ctx_base_t;
-
-/* methods of this class */
-XBT_PUBLIC(void) smx_ctx_base_factory_init(smx_context_factory_t *factory);
-XBT_PUBLIC(int) smx_ctx_base_factory_finalize(smx_context_factory_t *factory);
-
-XBT_PUBLIC(smx_context_t)
-smx_ctx_base_factory_create_context_sized(size_t size, xbt_main_func_t code,
- int argc, char **argv,
- void_pfn_smxprocess_t cleanup,
- smx_process_t process);
-XBT_PUBLIC(void) smx_ctx_base_free(smx_context_t context);
-XBT_PUBLIC(void) smx_ctx_base_stop(smx_context_t context);
-XBT_PUBLIC(smx_context_t) smx_ctx_base_self(void);
-XBT_PUBLIC(smx_process_t) smx_ctx_base_get_process(smx_context_t context);
-
XBT_PUBLIC(xbt_dynar_t) SIMIX_process_get_runnable(void);
XBT_PUBLIC(smx_process_t) SIMIX_process_from_PID(int PID);
XBT_PUBLIC(xbt_dynar_t) SIMIX_processes_as_dynar(void);
XBT_PUBLIC(void) SIMIX_function_register_process_cleanup(void_pfn_smxprocess_t function);
XBT_PUBLIC(void) SIMIX_function_register_process_create(smx_creation_func_t function);
-XBT_PUBLIC(void) SIMIX_function_register_process_kill(void_pfn_smxprocess_t_smxprocess_t function);
+XBT_PUBLIC(void) SIMIX_function_register_process_kill(void_pfn_smxprocess_t function);
/* Simulation execution */
XBT_PUBLIC(void) SIMIX_run(void);
/* Timer functions FIXME: should these be public? */
typedef struct s_smx_timer* smx_timer_t;
-XBT_PUBLIC(smx_timer_t) SIMIX_timer_set(double date, void *function, void *arg);
+XBT_PUBLIC(smx_timer_t) SIMIX_timer_set(double date, void (*function)(void*), void *arg);
XBT_PUBLIC(void) SIMIX_timer_remove(smx_timer_t timer);
XBT_PUBLIC(double) SIMIX_timer_next(void);
XBT_PUBLIC(double) SIMIX_timer_get_date(smx_timer_t timer);
/*********************************** Host *************************************/
XBT_PUBLIC(sg_host_t) SIMIX_host_self(void);
XBT_PUBLIC(const char*) SIMIX_host_self_get_name(void);
-#define SIMIX_host_get_name(h) sg_host_name(h) /* DEPRECATED: SIMIX_host_get_name */
+#define SIMIX_host_get_name(h) sg_host_get_name(h) /* DEPRECATED: SIMIX_host_get_name */
XBT_PUBLIC(void) SIMIX_host_on(sg_host_t host);
XBT_PUBLIC(void) SIMIX_host_off(sg_host_t host, smx_process_t issuer);
XBT_PUBLIC(void) SIMIX_host_self_set_data(void *data);
/******************************* Host simcalls ********************************/
/* TODO use handlers and keep sg_host_t hidden from higher levels */
-XBT_PUBLIC(const char *) simcall_host_get_name(sg_host_t host);
XBT_PUBLIC(xbt_dict_t) simcall_host_get_properties(sg_host_t host);
XBT_PUBLIC(void) simcall_host_on(sg_host_t host);
XBT_PUBLIC(void) simcall_host_off(sg_host_t host);
-XBT_PUBLIC(int) simcall_host_get_core(sg_host_t host);
XBT_PUBLIC(xbt_swag_t) simcall_host_get_process_list(sg_host_t host);
-XBT_PUBLIC(double) simcall_host_get_speed(sg_host_t host);
-XBT_PUBLIC(double) simcall_host_get_available_speed(sg_host_t host);
-/* Two possible states, 1 - CPU ON and 0 CPU OFF */
-XBT_PUBLIC(int) simcall_host_get_state(sg_host_t host);
-XBT_PUBLIC(void *) simcall_host_get_data(sg_host_t host);
XBT_PUBLIC(void) simcall_host_set_data(sg_host_t host, void *data);
XBT_PUBLIC(double) simcall_host_get_current_power_peak(sg_host_t host);
XBT_PUBLIC(double) simcall_host_get_power_peak_at(sg_host_t host, int pstate_index);
-XBT_PUBLIC(int) simcall_host_get_nb_pstates(sg_host_t host);
XBT_PUBLIC(void) simcall_host_set_pstate(sg_host_t host, int pstate_index);
-XBT_PUBLIC(int) simcall_host_get_pstate(sg_host_t host);
-XBT_PUBLIC(double) simcall_host_get_consumed_energy(sg_host_t host);
XBT_PUBLIC(double) simcall_host_get_wattmin_at(sg_host_t host, int pstate);
XBT_PUBLIC(double) simcall_host_get_wattmax_at(sg_host_t host, int pstate);
--- /dev/null
+/* Copyright (c) 2007-2010, 2012-2015. 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 SIMGRID_SIMIX_HPP
+#define SIMGRID_SIMIX_HPP
+
+#include <cstddef>
+
+#include <string>
+#include <utility>
+#include <memory>
+#include <functional>
+
+#include <xbt/function_types.h>
+#include <simgrid/simix.h>
+
+namespace simgrid {
+namespace simix {
+
+class Context;
+class ContextFactory;
+
+class ContextFactory {
+private:
+ std::string name_;
+public:
+
+ ContextFactory(std::string name) : name_(std::move(name)) {}
+ virtual ~ContextFactory();
+ virtual Context* create_context(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup, smx_process_t process) = 0;
+ virtual void run_all() = 0;
+ virtual Context* self();
+ std::string const& name() const
+ {
+ return name_;
+ }
+private:
+ void declare_context(void* T, std::size_t size);
+protected:
+ template<class T, class... Args>
+ T* new_context(Args&&... args)
+ {
+ T* context = new T(std::forward<Args>(args)...);
+ this->declare_context(context, sizeof(T));
+ return context;
+ }
+};
+
+class Context {
+private:
+ std::function<void()> code_;
+ void_pfn_smxprocess_t cleanup_func_ = nullptr;
+ smx_process_t process_ = nullptr;
+public:
+ bool iwannadie;
+public:
+ Context(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t process);
+ void operator()()
+ {
+ code_();
+ }
+ bool has_code() const
+ {
+ return (bool) code_;
+ }
+ smx_process_t process()
+ {
+ return this->process_;
+ }
+ void set_cleanup(void_pfn_smxprocess_t cleanup)
+ {
+ cleanup_func_ = cleanup;
+ }
+
+ // Virtual methods
+ virtual ~Context();
+ virtual void stop();
+ virtual void suspend() = 0;
+};
+
+}
+}
+
+#endif
\ No newline at end of file
parameter(MPI_GROUP_NULL=-1)
parameter(MPI_GROUP_EMPTY=-2)
+ integer MPI_WIN_NULL
+ parameter(MPI_WIN_NULL=-1)
+
integer MPI_ERRORS_RETURN, MPI_ERRORS_ARE_FATAL
integer MPI_ERRHANDLER_NULL
parameter(MPI_ERRORS_RETURN=0)
parameter(MPI_BXOR=11)
INTEGER MPI_ADDRESS_KIND, MPI_OFFSET_KIND
- PARAMETER (MPI_ADDRESS_KIND=@MPI_ADDRESS_SIZE@)
- PARAMETER (MPI_OFFSET_KIND=@MPI_ADDRESS_SIZE@)
+ PARAMETER (MPI_ADDRESS_KIND=@CMAKE_SIZEOF_VOID_P@)
+ PARAMETER (MPI_OFFSET_KIND=@CMAKE_SIZEOF_VOID_P@)
integer MPI_COMBINER_NAMED, MPI_COMBINER_DUP
integer MPI_COMBINER_CONTIGUOUS, MPI_COMBINER_VECTOR
#define MPI_ROOT 0
#define MPI_INFO_NULL NULL
#define MPI_COMM_TYPE_SHARED 1
-#define MPI_WIN_NULL NULL
+#define MPI_WIN_NULL ((MPI_Win)NULL)
#define MPI_VERSION 1
#define MPI_SUBVERSION 1
XBT_PUBLIC_DATA(xbt_lib_t) storage_type_lib;
XBT_PUBLIC_DATA(int) ROUTING_STORAGE_TYPE_LEVEL; //Routing storage_type level
-/* The callbacks to register for the routing to work */
-void routing_AS_begin(sg_platf_AS_cbarg_t AS);
-void routing_AS_end(sg_platf_AS_cbarg_t AS);
-
-void routing_cluster_add_backbone(void* bb);
-
SG_END_DECL()
#endif /* _SURF_SURF_H */
XBT_PUBLIC(double) surf_parse_get_time(const char *string);
XBT_PUBLIC(double) surf_parse_get_size(const char *string);
XBT_PUBLIC(double) surf_parse_get_bandwidth(const char *string);
-XBT_PUBLIC(double) surf_parse_get_power(const char *string);
+XBT_PUBLIC(double) surf_parse_get_speed(const char *string);
/* Prototypes of the functions offered by flex */
XBT_PUBLIC(int) surf_parse_lex(void);
char *name;
};
+SG_BEGIN_DECL();
XBT_PUBLIC(int) RngStream_SetPackageSeed (unsigned long seed[6]);
XBT_PUBLIC(int) RngStream_RandInt (RngStream g, int i, int j);
+SG_END_DECL();
#endif
# define XBT_IMPORT_NO_EXPORT(type) type
# define XBT_PUBLIC_DATA(type) extern __declspec(dllexport) type
# define XBT_PUBLIC_CLASS class __declspec(dllexport)
-
+# define XBT_PRIVATE
/* Pack everything up statically */
#elif defined(DLL_STATIC)
# define XBT_IMPORT_NO_EXPORT(type) type
# define XBT_PUBLIC_DATA(type) extern type
# define XBT_PUBLIC_CLASS class
-
+# define XBT_PRIVATE
/* Link against the DLL */
#elif (defined(_XBT_WIN32) && !defined(DLL_EXPORT) && !defined(DLL_STATIC))
# define XBT_IMPORT_NO_EXPORT(type) __declspec(dllimport) type
# define XBT_PUBLIC_DATA(type) extern __declspec(dllimport) type
# define XBT_PUBLIC_CLASS class __declspec(dllimport)
+# define XBT_PRIVATE
-
-/* UNIX build */
#elif defined(__ELF__)
-
-# define XBT_PUBLIC(type) type
-# define XBT_EXPORT_NO_IMPORT(type) type
-# define XBT_IMPORT_NO_EXPORT(type) type
-# define XBT_PUBLIC_DATA(type) extern type
-# define XBT_PUBLIC_CLASS class
-
-#else
# define XBT_PUBLIC(type) __attribute__((visibility("default"))) type
# define XBT_EXPORT_NO_IMPORT(type) __attribute__((visibility("default"))) type
# define XBT_IMPORT_NO_EXPORT(type) __attribute__((visibility("default"))) type
# define XBT_PUBLIC_DATA(type) extern __attribute__((visibility("default"))) type
# define XBT_PUBLIC_CLASS class __attribute__((visibility("default")))
+# define XBT_PRIVATE __attribute__((visibility("hidden")))
-#endif
-
-#ifdef __ELF__
-#define XBT_PRIVATE __attribute__((visibility("hidden")))
#else
-#define XBT_PRIVATE
+# define XBT_PUBLIC(type) type
+# define XBT_EXPORT_NO_IMPORT(type) type
+# define XBT_IMPORT_NO_EXPORT(type) type
+# define XBT_PUBLIC_DATA(type) extern type
+# define XBT_PUBLIC_CLASS class
+# define XBT_PRIVATE
+
#endif
#ifdef _MSC_VER /* MSVC has no ssize_t, and I fail to use the SSIZE_T declared in BaseTsd.h */
* (that's where we get the process name for the logs and the exception storage)
* -- do not mess with it --
*/
-typedef struct {
+typedef struct xbt_running_ctx_t {
__ex_mctx_t *ctx_mctx; /* permanent machine context of enclosing try/catch */
int ctx_caught; /* temporary flag whether exception was caught */
volatile xbt_ex_t exception; /* temporary exception storage */
/* backtrace */ 0, NULL, /* bt[] */ } }
XBT_PUBLIC_DATA(const xbt_running_ctx_t) __xbt_ex_ctx_initializer;
-#define XBT_RUNNING_CTX_INITIALIZE(ctx) (*(ctx) = __xbt_ex_ctx_initializer)
+
+// #define XBT_RUNNING_CTX_INITIALIZE(ctx) (*(ctx) = __xbt_ex_ctx_initializer)
+
+#define XBT_RUNNING_CTX_INITIALIZE(ctx) \
+ (ctx)->ctx_mctx = NULL; \
+ (ctx)->ctx_caught = 0; \
+ (ctx)->exception.msg = NULL; \
+ (ctx)->exception.category = unknown_error; \
+ (ctx)->exception.value = 0; \
+ (ctx)->exception.procname = NULL; \
+ (ctx)->exception.pid = 0; \
+ (ctx)->exception.file = NULL; \
+ (ctx)->exception.line = 0; \
+ (ctx)->exception.used = 0; \
+ (ctx)->exception.bt_strings = NULL;
/* the exception context */
typedef xbt_running_ctx_t *(*xbt_running_ctx_fetcher_t) (void);
SG_BEGIN_DECL()
+/** Container for all the objects of a given type
+ *
+ * * each item is identified by a string name/identifier;
+ *
+ * * the lib itself is a dictionary from the element id to the element;
+ *
+ * * the element itself is represented aby the xbt_dictelm_t;
+ *
+ * * the element can store any number of associated facets/data structures
+ * (corresponding to the different layers of SimGrid or its extensions)
+ * in ((void**)dictelt->content)[level];
+ *
+ * * each level is allocated in the lib with `xbt_lib_add_level`.
+ *
+ * <pre>
+ * // Define a collection for the foo objects and two associated facets:
+ * typedef xbt_dictelm_t foo_t;
+ * xbt_lib_t foo_lib = xbt_lib_new();
+ * int BAR_FOO_LEVEL = xbt_lib_add_level(foo_lib, free_bar);
+ * int AUTH_FOO_LEVEL = xbt_lib_add_level(foo_lib, free_auth);
+ *
+ * // Store a bar:
+ * bar_t bar = bar_new();
+ * char* id = bar_name(bar);
+ * xbt_lib_set(id, id, BAR_FOO_LEVEL, bar);
+ *
+ * // Find the corresponding foo and the facet again:
+ * foo_t foo = xbt_lib_get_elm_or_null(foo_lib, id);
+ * bar_t bar2 = (bar_t) xbt_lib_get_level(foo, BAR_FOO_LEVEL);
+ * assert(bar == bar2);
+ *
+ * // Add authentication facet for the previous object:
+ * auth_t auth = auth_new();
+ * xbt_lib_set(foo_lib, id, AUTH_FOO_LEVEL, auth);
+ * </pre>
+ */
typedef struct s_xbt_lib {
xbt_dict_t dict;
int levels;
/** @ingroup XBT_log
* @hideinitializer
- * \param c the category on which to log
+ * \param categ the category on which to log
* \param ... the format string and its arguments
* @brief Log an event at the DEBUG priority on the specified category with these args.
*/
#include "xbt/dynar.h"
#include "xbt/dict.h"
-#include "mc/mc_forward.h"
+#include "src/mc/mc_forward.h"
SG_BEGIN_DECL()
+++ /dev/null
-/* 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. */
-
-#ifndef _XBT_SETSET_H
-#define _XBT_SETSET_H
-#include "xbt/misc.h"
-
-typedef struct s_xbt_setset *xbt_setset_t;
-
-typedef struct s_xbt_setset_set *xbt_setset_set_t;
-
-typedef struct s_xbt_setset_cursor *xbt_setset_cursor_t;
-
-#define XBT_SETSET_HEADERS \
- unsigned long ID
-
-/* Constructor */
-xbt_setset_t xbt_setset_new(unsigned int size);
-
-/* Destructor */
-void xbt_setset_destroy(xbt_setset_t setset);
-
-/* Add an object to the setset, this will calculate its ID */
-void xbt_setset_elm_add(xbt_setset_t setset, void *obj);
-
-/* Remove an object from the setset */
-void xbt_setset_elm_remove(xbt_setset_t setset, void *obj);
-
-/* Create a new set in the setset */
-xbt_setset_set_t xbt_setset_new_set(xbt_setset_t setset);
-
-/* Destroy a set in the setset */
-void xbt_setset_destroy_set(xbt_setset_set_t);
-
-/* Insert an element into a set */
-void xbt_setset_set_insert(xbt_setset_set_t set, void *obj);
-
-/* Remove an element from a set */
-void xbt_setset_set_remove(xbt_setset_set_t set, void *obj);
-
-/* Remove all the elements of a set */
-void xbt_setset_set_reset(xbt_setset_set_t set);
-
-/* Select one element of a set */
-void *xbt_setset_set_choose(xbt_setset_set_t set);
-
-/* Extract one element of a set */
-void *xbt_setset_set_extract(xbt_setset_set_t set);
-
-/* Test if an element belongs to a set */
-int xbt_setset_set_belongs(xbt_setset_set_t set, void *obj);
-
-/* Get the number of elements in a set */
-int xbt_setset_set_size(xbt_setset_set_t set);
-
-/* Add all elements of set2 to set1 */
-void xbt_setset_add(xbt_setset_set_t set1, xbt_setset_set_t set2);
-
-/* Substract all elements of set2 from set1 */
-void xbt_setset_substract(xbt_setset_set_t set1, xbt_setset_set_t set2);
-
-/* Intersect set1 and set2 storing the result in set1 */
-void xbt_setset_intersect(xbt_setset_set_t set1, xbt_setset_set_t set2);
-
-/* Get the cursor to point to the first element of a set */
-void xbt_setset_cursor_first(xbt_setset_set_t set,
- xbt_setset_cursor_t * cursor);
-
-/* Get the data pointed by a cursor */
-int xbt_setset_cursor_get_data(xbt_setset_cursor_t cursor, void **data);
-
-/* Advance a cursor to the next element */
-void xbt_setset_cursor_next(xbt_setset_cursor_t cursor);
-
-
-#define xbt_setset_foreach(set, cursor, data) \
- for(xbt_setset_cursor_first(set, &cursor); \
- xbt_setset_cursor_get_data(cursor, (void **)&data); \
- xbt_setset_cursor_next(cursor))
-
-#endif
Well, safely... Err. You can remove \a obj without having any
trouble at least. */
+#ifndef __cplusplus
+
#define xbt_swag_foreach_safe(obj,obj_next,swag) \
for((obj)=xbt_swag_getFirst((swag)), \
((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)): \
- (obj_next=NULL)); \
+ (obj_next=NULL)); \
(obj)!=NULL; \
(obj)=obj_next, \
((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)): \
(obj_next=NULL)) )
+
+#else
+
+#define xbt_swag_foreach_safe(obj,obj_next,swag) \
+ for((obj) = (decltype(obj)) xbt_swag_getFirst((swag)), \
+ ((obj)?(obj_next = (decltype(obj)) xbt_swag_getNext((obj),(swag)->offset)): \
+ (obj_next=NULL)); \
+ (obj) != NULL; \
+ (obj) = obj_next, \
+ ((obj)?(obj_next = (decltype(obj)) xbt_swag_getNext((obj),(swag)->offset)): \
+ (obj_next=NULL)) )
+
+#endif
+
/* @} */
SG_END_DECL()
#ifndef _XBT_SYSDEP_H
#define _XBT_SYSDEP_H
-#ifdef __cplusplus
-#include <type_traits>
-#endif
-
#include "xbt/log.h"
#include "xbt/misc.h"
#include "xbt/asserts.h"
SG_END_DECL()
-/** @brief like calloc, but xbt_die() on error and don't memset to 0
- @hideinitializer */
-#ifndef __cplusplus
-
#define xbt_new(type, count) ((type*)xbt_malloc (sizeof (type) * (count)))
/** @brief like calloc, but xbt_die() on error
@hideinitializer */
#define xbt_new0(type, count) ((type*)xbt_malloc0 (sizeof (type) * (count)))
-#else
-
-/** C++ wrapper for xtb_new
- *
- * This ensures that we do not xbt_new things that need a constructor.
- */
-template<typename T> inline
-T* xbt_new_(size_t count)
-{
- static_assert(std::is_trivial<T>(),
- "Cannot xbt_new this type");
- return (T*) xbt_malloc(sizeof(T) * count);
-}
-
-template<typename T> inline
-T* xbt_new0_(size_t count)
-{
- static_assert(std::is_trivial<T>(),
- "Cannot xbt_new0 this type");
- return (T*) xbt_malloc0(sizeof(T) * count);
-}
-
-#define xbt_new(type, count) ::xbt_new_<type>(count)
-#define xbt_new0(type, count) ::xbt_new0_<type>(count)
-
-#endif
-
/** @} */
#endif /* _XBT_SYSDEP_H */
+++ /dev/null
-#! /bin/sh
-set -x
-
-# Detection of java broken in cross compile, force the result
-if grep -q 'if test -n "$JAVAC"' configure ; then
- sed -i 's/.*if test -n "$JAVAC".*/if true ; then/' configure
-fi
-
-if [ -e win32 ] ; then
- cd win32
-else
- mkdir win32 || true
- cd win32
- # configure the cross compilation (lua broken in autotools)
- ../configure --host=i586-mingw32msvc --disable-lua --enable-maintainer-mode
-fi
-
-cd src
-# cross compilation raises some warnings I want to ignore
-sed -i s/-Werror// Makefile
-make libsimgrid.la
-cd ../..
-
-# Prepare the archive
-rm -rf simgrid-3.4.1-win32
-mkdir simgrid-3.4.1-win32
-cp win32/src/.libs/libsimgrid-2.dll simgrid-3.4.1-win32/simgrid.dll
-cp src/simgrid.jar simgrid-3.4.1-win32/
-cd simgrid-3.4.1-win32/
-cp /usr/share/doc/mingw32-runtime/mingwm10.dll.gz .
-gunzip mingwm10.dll.gz
-cat <<EOF >README
-This is the Windows port of the SimGrid Java bindings.
-
-
-INSTALLATION
-============
-
-To use it, put the simgrid.jar somewhere in your classpath, and the 2
-dlls (ie, simgrid.dll and mingw32.dll) in a directory used by your
-system. The directory from which you launch the java machine should
-work, as well as your system directory (c:\system or something).
-
-INSTALLATION WITH ECLIPSE
-=========================
-
-You should put the 3 files simgrid.jar simgrid.dll and mingw32.dll in
-a separate directory of your workspace (say, 'libs').
-
-Then, edit the properties of your project, item "Java Build Path".
-* Open the tab "Libraries" and click "Add JARs".
- Search for the simgrid.jar in your disk, and select it.
-* Open the tab "Source". Unfold the source directory (little triangle).
- Click on "Native Library Location", and then the "Edit" button.
- Then, select the path to the dlls (workspace:libs if you followed me).
-
-DOCUMENTATION
-=============
-Some examples are included in this archive, and the full documentation
-is available here:
-http://simgrid.gforge.inria.fr/doc/group__MSG__JAVA.html
-
-LIMITATIONS
-===========
-The Java bindings should work as well on Windows than on any other
-platform. If not, please report any bug you find at:
-http://gforge.inria.fr/tracker/?atid=165&group_id=12
-
-The C version may work, but you are on your own if you try to use it.
-We will assist you if possible, but our time (and ability with
-windows) are limited.
-
-In any case, any feedback is welcome on simgrid-user@listes.gforge.inria.fr
-
-Enjoy,
-the SimGrid team.
-
-EOF
-
-cd ../examples/java
-for n in `find -name '*java'` ; do
- mkdir --parent `dirname "../../simgrid-3.4.1-win32/examples/$n"`
- cp -p $n `dirname "../../simgrid-3.4.1-win32/examples/$n"`
-done
-
-for n in `find -name '*xml'` ; do
- cp -p $n `dirname "../../simgrid-3.4.1-win32/examples/$n"`
-done
-
-cd ../..
-rm -f simgrid-3.4.1-win32.zip
-zip -r simgrid-3.4.1-win32.zip simgrid-3.4.1-win32
-rm -rf simgrid-3.4.1-win32
\ No newline at end of file
--- /dev/null
+/* context_java - implementation of context switching for java threads */
+
+/* Copyright (c) 2009-2010, 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 <functional>
+#include <utility>
+
+#include <xbt/function_types.h>
+#include <simgrid/simix.h>
+#include <xbt/ex.h>
+#include "JavaContext.hpp"
+#include "jxbt_utilities.h"
+#include "xbt/dynar.h"
+#include "../../simix/smx_private.h"
+extern JavaVM *__java_vm;
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(jmsg, bindings, "MSG for Java(TM)");
+
+namespace simgrid {
+namespace java {
+
+simgrid::simix::ContextFactory* java_factory()
+{
+ XBT_INFO("Using regular java threads.");
+ return new JavaContextFactory();
+}
+
+JavaContextFactory::JavaContextFactory()
+ : ContextFactory("JavaContextFactory")
+{
+}
+
+JavaContextFactory::~JavaContextFactory()
+{
+}
+
+JavaContext* JavaContextFactory::self()
+{
+ return (JavaContext*) xbt_os_thread_get_extra_data();
+}
+
+JavaContext* JavaContextFactory::create_context(
+ std::function<void()> code,
+ void_pfn_smxprocess_t cleanup, smx_process_t process)
+{
+ return this->new_context<JavaContext>(std::move(code), cleanup, process);
+}
+
+void JavaContextFactory::run_all()
+{
+ xbt_dynar_t processes = SIMIX_process_get_runnable();
+ smx_process_t process;
+ unsigned int cursor;
+ xbt_dynar_foreach(processes, cursor, process) {
+ static_cast<JavaContext*>(SIMIX_process_get_context(process))->resume();
+ }
+}
+
+
+JavaContext::JavaContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t process)
+ : Context(std::move(code), cleanup_func, process)
+{
+ static int thread_amount=0;
+ thread_amount++;
+
+ /* If the user provided a function for the process then use it
+ otherwise is the context for maestro */
+ if (has_code()) {
+ this->jprocess = nullptr;
+ this->begin = xbt_os_sem_init(0);
+ this->end = xbt_os_sem_init(0);
+
+ TRY {
+ this->thread = xbt_os_thread_create(
+ nullptr, JavaContext::wrapper, this, nullptr);
+ }
+ CATCH_ANONYMOUS {
+ RETHROWF("Failed to create context #%d. You may want to switch to Java coroutines to increase your limits (error: %s)."
+ "See the Install section of simgrid-java documentation (in doc/install.html) for more on coroutines.",
+ thread_amount);
+ }
+ } else {
+ this->thread = nullptr;
+ xbt_os_thread_set_extra_data(this);
+ }
+}
+
+JavaContext::~JavaContext()
+{
+ if (this->thread) {
+ // We are not in maestro context
+ xbt_os_thread_join(this->thread, nullptr);
+ xbt_os_sem_destroy(this->begin);
+ xbt_os_sem_destroy(this->end);
+ }
+}
+
+void* JavaContext::wrapper(void *data)
+{
+ JavaContext* context = (JavaContext*)data;
+ xbt_os_thread_set_extra_data(context);
+ //Attach the thread to the JVM
+
+ JNIEnv *env;
+ XBT_ATTRIB_UNUSED jint error =
+ __java_vm->AttachCurrentThread((void **) &env, NULL);
+ xbt_assert((error == JNI_OK), "The thread could not be attached to the JVM");
+ context->jenv = get_current_thread_env();
+ //Wait for the first scheduling round to happen.
+ xbt_os_sem_acquire(context->begin);
+ //Create the "Process" object if needed.
+ (*context)();
+ context->stop();
+ return nullptr;
+}
+
+void JavaContext::stop()
+{
+ /* I am the current process and I am dying */
+ if (this->iwannadie) {
+ this->iwannadie = 0;
+ JNIEnv *env = get_current_thread_env();
+ XBT_DEBUG("Gonna launch Killed Error");
+ // TODO Adrien, if the process has not been created at the java layer, why should we raise the exception/error at the java level (this happens
+ // for instance during the migration process that creates at the C level two processes: one on the SRC node and one on the DST node, if the DST process is killed.
+ // it is not required to raise an exception at the JAVA level, the low level should be able to manage such an issue correctly but this is not the case right now unfortunately ...
+ // TODO it will be nice to have the name of the process to help the end-user to know which Process has been killed
+ // jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", bprintf("Process %s killed :) (file smx_context_java.c)", MSG_process_get_name( (msg_process_t)context) ));
+ jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError",
+ bprintf("Process %s killed :) (file JavaContext.cpp)",
+ simcall_process_get_name((smx_process_t) SIMIX_context_get_process(this))) );
+ XBT_DEBUG("Trigger a cancel error at the C level");
+ THROWF(cancel_error, 0, "process cancelled");
+ } else {
+ Context::stop();
+ /* detach the thread and kills it */
+ JNIEnv *env = this->jenv;
+ env->DeleteGlobalRef(this->jprocess);
+ XBT_ATTRIB_UNUSED jint error = __java_vm->DetachCurrentThread();
+ xbt_assert((error == JNI_OK), "The thread couldn't be detached.");
+ xbt_os_sem_release(this->end);
+ xbt_os_thread_exit(NULL);
+ }
+}
+
+void JavaContext::suspend()
+{
+ xbt_os_sem_release(this->end);
+ xbt_os_sem_acquire(this->begin);
+}
+
+// FIXME: inline those functions
+void JavaContext::resume()
+{
+ xbt_os_sem_release(this->begin);
+ xbt_os_sem_acquire(this->end);
+}
+
+}
+}
--- /dev/null
+/* Copyright (c) 2009-2010, 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 SIMGRID_JAVA_JAVA_CONTEXT_HPP
+#define SIMGRID_JAVA_JAVA_CONTEXT_HPP
+
+#include <functional>
+
+#include <jni.h>
+
+#include <xbt/misc.h>
+#include <simgrid/simix.h>
+#include <xbt/xbt_os_thread.h>
+
+#include "src/simix/smx_private.hpp"
+
+#include "jmsg.h"
+#include "jmsg_process.h"
+
+namespace simgrid {
+namespace java {
+
+class JavaContext;
+class JavacontextFactory;
+
+class JavaContext : public simgrid::simix::Context {
+public:
+ // The java process instance bound with the msg process structure:
+ jobject jprocess = nullptr;
+ // JNI interface pointer associated to this thread:
+ JNIEnv *jenv = nullptr;
+ xbt_os_thread_t thread = nullptr;
+ // Sempahore used to schedule/yield the process:
+ xbt_os_sem_t begin = nullptr;
+ // Semaphore used to schedule/unschedule the process:
+ xbt_os_sem_t end = nullptr;
+public:
+ friend class JavaContextFactory;
+ JavaContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t process);
+ ~JavaContext() override;
+ void stop() override;
+ void suspend() override;
+ void resume();
+private:
+ static void* wrapper(void *data);
+};
+
+class JavaContextFactory : public simgrid::simix::ContextFactory {
+public:
+ JavaContextFactory();
+ ~JavaContextFactory() override;
+ JavaContext* self() override;
+ JavaContext* create_context(std::function<void()> code,
+ void_pfn_smxprocess_t, smx_process_t process) override;
+ void run_all() override;
+};
+
+XBT_PRIVATE simgrid::simix::ContextFactory* java_factory();
+XBT_PRIVATE void java_main_jprocess(jobject process);
+
+}
+}
+
+#endif /* !_XBT_CONTEXT_JAVA_H */
#include <simgrid/simix.h>
#include <surf/surfxml_parse.h>
#include <locale.h>
-
-#include "smx_context_java.h"
-#include "smx_context_cojava.h"
+#include <src/simix/smx_private.h>
#include "jmsg_process.h"
#include "jmsg.h"
+#include "JavaContext.hpp"
+
/* Shut up some errors in eclipse online compiler. I wish such a pimple wouldn't be needed */
#ifndef JNIEXPORT
#define JNIEXPORT
#endif
/* end of eclipse-mandated pimple */
+SG_BEGIN_DECL()
+
int JAVA_HOST_LEVEL;
int JAVA_STORAGE_LEVEL;
-static int create_jprocess(int argc, char *argv[]);
-
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
JavaVM *__java_vm = NULL;
{
JNIEnv *env;
- (*__java_vm)->AttachCurrentThread(__java_vm, (void **) &env, NULL);
+ __java_vm->AttachCurrentThread((void **) &env, NULL);
return env;
}
jxbt_throw_task_cancelled(env,NULL);
break;
default:
- jxbt_throw_native(env,xbt_strdup("undefined message failed (please see jmsg_throw_status function in jmsg.c)"));
+ jxbt_throw_native(env,xbt_strdup("undefined message failed "
+ "(please see jmsg_throw_status function in jmsg.cpp)"));
}
}
XBT_LOG_CONNECT(jmsg);
XBT_LOG_CONNECT(jtrace);
- (*env)->GetJavaVM(env, &__java_vm);
+ env->GetJavaVM(&__java_vm);
- if ((*env)->FindClass(env, "java/dyn/Coroutine"))
- smx_factory_initializer_to_use = SIMIX_ctx_cojava_factory_init;
- else
- smx_factory_initializer_to_use = SIMIX_ctx_java_factory_init;
- jthrowable exc = (*env)->ExceptionOccurred(env);
+ simgrid::simix::factory_initializer = simgrid::java::java_factory;
+ jthrowable exc = env->ExceptionOccurred();
if (exc) {
- (*env)->ExceptionClear(env);
+ env->ExceptionClear();
}
setlocale(LC_NUMERIC,"C");
if (jargs)
- argc = (int) (*env)->GetArrayLength(env, jargs);
+ argc = (int) env->GetArrayLength(jargs);
argc++;
argv = xbt_new(char *, argc + 1);
argv[0] = xbt_strdup("java");
for (index = 0; index < argc - 1; index++) {
- jval = (jstring) (*env)->GetObjectArrayElement(env, jargs, index);
- tmp = (*env)->GetStringUTFChars(env, jval, 0);
+ jval = (jstring) env->GetObjectArrayElement(jargs, index);
+ tmp = env->GetStringUTFChars(jval, 0);
argv[index + 1] = xbt_strdup(tmp);
- (*env)->ReleaseStringUTFChars(env, jval, tmp);
+ env->ReleaseStringUTFChars(jval, tmp);
}
argv[argc] = NULL;
free(argv[index]);
free(argv);
-
- if (smx_factory_initializer_to_use == SIMIX_ctx_cojava_factory_init)
- XBT_INFO("Using Coroutines. Your simulation is on steroid.");
- else if (smx_factory_initializer_to_use == SIMIX_ctx_java_factory_init)
- XBT_INFO("Using regular java threads. Coroutines could speed your simulation up.");
- else
- xbt_die("Unknown context factory. Please report bug.");
}
JNIEXPORT void JNICALL
JNICALL Java_org_simgrid_msg_Msg_run(JNIEnv * env, jclass cls)
{
- msg_error_t rv;
- int index;
- xbt_dynar_t hosts, storages;
- jobject jhost, jstorage;
-
-
/* Run everything */
XBT_DEBUG("Ready to run MSG_MAIN");
- rv = MSG_main();
+ msg_error_t rv = MSG_main();
XBT_DEBUG("Done running MSG_MAIN");
jxbt_check_res("MSG_main()", rv, MSG_OK,
xbt_strdup("unexpected error : MSG_main() failed .. please report this bug "));
XBT_INFO("MSG_main finished; Cleaning up the simulation...");
/* Cleanup java hosts */
- hosts = MSG_hosts_as_dynar();
- for (index = 0; index < xbt_dynar_length(hosts) - 1; index++) {
- jhost = (jobject) xbt_lib_get_level(xbt_dynar_get_as(hosts,index,msg_host_t), JAVA_HOST_LEVEL);
+ xbt_dynar_t hosts = MSG_hosts_as_dynar();
+ for (unsigned long index = 0; index < xbt_dynar_length(hosts) - 1; index++) {
+ jobject jhost = (jobject) xbt_lib_get_level(xbt_dynar_get_as(hosts,index,msg_host_t), JAVA_HOST_LEVEL);
if (jhost)
jhost_unref(env, jhost);
xbt_dynar_free(&hosts);
/* Cleanup java storages */
- storages = MSG_storages_as_dynar();
+ xbt_dynar_t 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);
+ for (unsigned long index = 0; index < xbt_dynar_length(storages) - 1; index++) {
+ jobject jstorage = (jobject) xbt_lib_get_level(xbt_dynar_get_as(storages,index,msg_storage_t), JAVA_STORAGE_LEVEL);
if (jstorage)
jstorage_unref(env, jstorage);
}
{
const char *platformFile =
- (*env)->GetStringUTFChars(env, jplatformFile, 0);
+ env->GetStringUTFChars(jplatformFile, 0);
MSG_create_environment(platformFile);
- (*env)->ReleaseStringUTFChars(env, jplatformFile, platformFile);
+ env->ReleaseStringUTFChars(jplatformFile, platformFile);
}
JNIEXPORT jobject JNICALL
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_debug(JNIEnv * env, jclass cls, jstring js)
{
- const char *s = (*env)->GetStringUTFChars(env, js, 0);
+ const char *s = env->GetStringUTFChars(js, 0);
XBT_DEBUG("%s", s);
- (*env)->ReleaseStringUTFChars(env, js, s);
+ env->ReleaseStringUTFChars(js, s);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_verb(JNIEnv * env, jclass cls, jstring js)
{
- const char *s = (*env)->GetStringUTFChars(env, js, 0);
+ const char *s = env->GetStringUTFChars(js, 0);
XBT_VERB("%s", s);
- (*env)->ReleaseStringUTFChars(env, js, s);
+ env->ReleaseStringUTFChars(js, s);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_info(JNIEnv * env, jclass cls, jstring js)
{
- const char *s = (*env)->GetStringUTFChars(env, js, 0);
+ const char *s = env->GetStringUTFChars(js, 0);
XBT_INFO("%s", s);
- (*env)->ReleaseStringUTFChars(env, js, s);
+ env->ReleaseStringUTFChars(js, s);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_warn(JNIEnv * env, jclass cls, jstring js)
{
- const char *s = (*env)->GetStringUTFChars(env, js, 0);
+ const char *s = env->GetStringUTFChars(js, 0);
XBT_WARN("%s", s);
- (*env)->ReleaseStringUTFChars(env, js, s);
+ env->ReleaseStringUTFChars(js, s);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_error(JNIEnv * env, jclass cls, jstring js)
{
- const char *s = (*env)->GetStringUTFChars(env, js, 0);
+ const char *s = env->GetStringUTFChars(js, 0);
XBT_ERROR("%s", s);
- (*env)->ReleaseStringUTFChars(env, js, s);
+ env->ReleaseStringUTFChars(js, s);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_critical(JNIEnv * env, jclass cls, jstring js)
{
- const char *s = (*env)->GetStringUTFChars(env, js, 0);
+ const char *s = env->GetStringUTFChars(js, 0);
XBT_CRITICAL("%s", s);
- (*env)->ReleaseStringUTFChars(env, js, s);
+ env->ReleaseStringUTFChars(js, s);
}
+
+static int java_main(int argc, char *argv[]);
+
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_deployApplication(JNIEnv * env, jclass cls,
jstring jdeploymentFile)
{
const char *deploymentFile =
- (*env)->GetStringUTFChars(env, jdeploymentFile, 0);
+ env->GetStringUTFChars(jdeploymentFile, 0);
- SIMIX_function_register_default(create_jprocess);
+ SIMIX_function_register_default(java_main);
MSG_launch_application(deploymentFile);
}
-/**
- * Function called when there is the need to create the java Process object
- * (when we are using deployement files).
- * it HAS to be executed on the process context, else really bad things will happen.
+
+SG_END_DECL()
+
+/** Run a Java org.simgrid.msg.Process
+ *
+ * If needed, this waits for the process starting time.
+ * Then it calls the Process.run() method.
*/
-static int create_jprocess(int argc, char *argv[]) {
+static void run_jprocess(JNIEnv *env, jobject jprocess)
+{
+ xbt_assert(jprocess != nullptr, "Process not created...");
+ //wait for the process to be able to begin
+ //TODO: Cache it
+ jfieldID jprocess_field_Process_startTime = jxbt_get_sfield(env, "org/simgrid/msg/Process", "startTime", "D");
+ jdouble startTime = env->GetDoubleField(jprocess, jprocess_field_Process_startTime);
+ if (startTime > MSG_get_clock())
+ MSG_process_sleep(startTime - MSG_get_clock());
+ //Execution of the "run" method.
+ jmethodID id = jxbt_get_smethod(env, "org/simgrid/msg/Process", "run", "()V");
+ xbt_assert( (id != nullptr), "Method not found...");
+ env->CallVoidMethod(jprocess, id);
+}
+
+/** Create a Java org.simgrid.msg.Process with the arguments and run it */
+static int java_main(int argc, char *argv[])
+{
JNIEnv *env = get_current_thread_env();
+ simgrid::java::JavaContext* context =
+ (simgrid::java::JavaContext*) SIMIX_context_self();
+
//Change the "." in class name for "/".
xbt_str_subst(argv[0],'.','/',0);
- jclass class_Process = (*env)->FindClass(env, argv[0]);
+ jclass class_Process = env->FindClass(argv[0]);
xbt_str_subst(argv[0],'/','.',0);
//Retrieve the methodID for the constructor
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");
+ jmethodID constructor_Process = env->GetMethodID(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]);
//Retrieve the name of the process.
- jstring jname = (*env)->NewStringUTF(env, argv[0]);
+ jstring jname = env->NewStringUTF(argv[0]);
//Build the arguments
- jobjectArray args = (jobjectArray)((*env)->NewObjectArray(env,argc - 1,
- (*env)->FindClass(env,"java/lang/String"),
- (*env)->NewStringUTF(env,"")));
+ jobjectArray args = (jobjectArray)env->NewObjectArray(argc - 1,
+ env->FindClass("java/lang/String"),
+ env->NewStringUTF(""));
int i;
for (i = 1; i < argc; i++)
- (*env)->SetObjectArrayElement(env,args,i - 1,(*env)->NewStringUTF(env, argv[i]));
+ env->SetObjectArrayElement(args,i - 1,
+ env->NewStringUTF(argv[i]));
//Retrieve the host for the process.
- jstring jhostName = (*env)->NewStringUTF(env, MSG_host_get_name(MSG_host_self()));
+ jstring jhostName = env->NewStringUTF(MSG_host_get_name(MSG_host_self()));
jobject jhost = Java_org_simgrid_msg_Host_getByName(env, NULL, jhostName);
//creates the process
- jobject jprocess = (*env)->NewObject(env, class_Process, constructor_Process, jhost, jname, args);
+ jobject jprocess = env->NewObject(class_Process, constructor_Process, jhost, jname, args);
xbt_assert((jprocess != NULL), "Process allocation failed.");
- jprocess = (*env)->NewGlobalRef(env, jprocess);
+ jprocess = env->NewGlobalRef(jprocess);
//bind the process to the context
msg_process_t process = MSG_process_self();
- smx_ctx_java_t context = (smx_ctx_java_t)MSG_process_get_smx_ctx(process);
+
context->jprocess = jprocess;
-/* sets the PID and the PPID of the process */
-(*env)->SetIntField(env, jprocess, jprocess_field_Process_pid,(jint) MSG_process_get_PID(process));
-(*env)->SetIntField(env, jprocess, jprocess_field_Process_ppid, (jint) MSG_process_get_PPID(process));
+ /* sets the PID and the PPID of the process */
+ env->SetIntField(jprocess, jprocess_field_Process_pid,(jint) MSG_process_get_PID(process));
+ env->SetIntField(jprocess, jprocess_field_Process_ppid, (jint) MSG_process_get_PPID(process));
jprocess_bind(jprocess, process, env);
+ run_jprocess(env, context->jprocess);
return 0;
}
+
+namespace simgrid {
+namespace java {
+
+/** Run the Java org.simgrid.msg.Process */
+void java_main_jprocess(jobject jprocess)
+{
+ JNIEnv *env = get_current_thread_env();
+ simgrid::java::JavaContext* context =
+ (simgrid::java::JavaContext*) SIMIX_context_self();
+ context->jprocess = jprocess;
+ smx_process_t process = SIMIX_process_self();
+ jprocess_bind(context->jprocess, process, env);
+
+ // Adrien, ugly path, just to bypass creation of context at low levels
+ // (i.e such as for the VM migration for instance)
+ if (context->jprocess == nullptr)
+ return;
+ else
+ run_jprocess(env, context->jprocess);
+}
+
+}
+}
+
#include <simgrid/msg.h>
#include <jni.h>
-extern int JAVA_HOST_LEVEL;
-extern xbt_lib_t host_lib;
+SG_BEGIN_DECL()
+extern int JAVA_HOST_LEVEL;
extern int JAVA_STORAGE_LEVEL;
-extern xbt_lib_t storage_lib;
JavaVM *get_java_VM(void);
JNIEnv *get_current_thread_env(void);
Java_org_simgrid_msg_Msg_deployApplication(JNIEnv * env, jclass cls,
jstring jdeploymentFile);
+SG_END_DECL()
+
#endif /* !MSG4JAVA_H */
jobject jas_new_instance(JNIEnv * env) {
jclass cls = jxbt_get_class(env, "org/simgrid/msg/As");
- return (*env)->NewObject(env, cls, jas_method_As_constructor);
+ return env->NewObject(cls, jas_method_As_constructor);
}
jobject jas_ref(JNIEnv * env, jobject jas) {
- return (*env)->NewGlobalRef(env, jas);
+ return env->NewGlobalRef(jas);
}
void jas_unref(JNIEnv * env, jobject jas) {
- (*env)->DeleteGlobalRef(env, jas);
+ env->DeleteGlobalRef(jas);
}
void jas_bind(jobject jas, msg_as_t as, JNIEnv * env) {
- (*env)->SetLongField(env, jas, jas_field_As_bind, (jlong) (uintptr_t) (as));
+ env->SetLongField(jas, jas_field_As_bind, (jlong) (uintptr_t) (as));
}
msg_as_t jas_get_native(JNIEnv * env, jobject jas) {
- return (msg_as_t) (uintptr_t) (*env)->GetLongField(env, jas, jas_field_As_bind);
+ return (msg_as_t) (uintptr_t) env->GetLongField(jas, jas_field_As_bind);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_As_nativeInit(JNIEnv *env, jclass cls) {
- jclass class_As = (*env)->FindClass(env, "org/simgrid/msg/As");
- jas_method_As_constructor = (*env)->GetMethodID(env, class_As, "<init>", "()V");
+ jclass class_As = env->FindClass("org/simgrid/msg/As");
+ jas_method_As_constructor = env->GetMethodID(class_As, "<init>", "()V");
jas_field_As_bind = jxbt_get_jfield(env,class_As, "bind", "J");
if (!class_As || !jas_method_As_constructor || !jas_field_As_bind) {
jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug."));
JNIEXPORT jobject JNICALL
Java_org_simgrid_msg_As_getName(JNIEnv * env, jobject jas) {
msg_as_t as = jas_get_native(env, jas);
- return (*env)->NewStringUTF(env, MSG_environment_as_get_name(as));
+ return env->NewStringUTF(MSG_environment_as_get_name(as));
}
JNIEXPORT jobjectArray JNICALL
xbt_dict_t dict = MSG_environment_as_get_routing_sons(self_as);
int count = xbt_dict_length(dict);
- jclass cls = (*env)->FindClass(env, "org/simgrid/msg/As");
+ jclass cls = env->FindClass("org/simgrid/msg/As");
if (!cls) {
return NULL;
}
- jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+ jtable = env->NewObjectArray((jsize) count, cls, NULL);
if (!jtable) {
jxbt_throw_jni(env, "Hosts table allocation failed");
}
jas_bind(tmp_jas, tmp_as, env);
- (*env)->SetObjectArrayElement(env, jtable, index, tmp_jas);
+ env->SetObjectArrayElement(jtable, index, tmp_jas);
index++;
}
jxbt_throw_notbound(env, "as", jas);
return NULL;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars((jstring) jname, 0);
const char *property = MSG_environment_as_get_property_value(as, name);
if (!property) {
return NULL;
}
- jobject jproperty = (*env)->NewStringUTF(env, property);
+ jobject jproperty = env->NewStringUTF(property);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars((jstring) jname, name);
return jproperty;
}
JNIEXPORT jobject JNICALL
Java_org_simgrid_msg_As_getModel(JNIEnv * env, jobject jas) {
msg_as_t as = jas_get_native(env, jas);
- return (*env)->NewStringUTF(env, MSG_environment_as_get_model(as));
+ return env->NewStringUTF(MSG_environment_as_get_model(as));
}
JNIEXPORT jobjectArray JNICALL
return NULL;
}
- jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+ jtable = env->NewObjectArray((jsize) count, cls, NULL);
if (!jtable) {
jxbt_throw_jni(env, "Hosts table allocation failed");
jhost = (jobject) xbt_lib_get_level(host, JAVA_HOST_LEVEL);
if (!jhost) {
- jname = (*env)->NewStringUTF(env, MSG_host_get_name(host));
+ jname = env->NewStringUTF(MSG_host_get_name(host));
jhost = Java_org_simgrid_msg_Host_getByName(env, cls, jname);
/* FIXME: leak of jname ? */
}
- (*env)->SetObjectArrayElement(env, jtable, index, jhost);
+ env->SetObjectArrayElement(jtable, index, jhost);
}
xbt_dynar_free(&table);
return jtable;
#include <jni.h>
#include "simgrid/msg.h"
+SG_BEGIN_DECL()
+
jobject jas_new_instance(JNIEnv * env);
jobject jas_ref(JNIEnv * env, jobject jas);
void jas_unref(JNIEnv * env, jobject jas);
JNIEXPORT jobjectArray JNICALL
Java_org_simgrid_msg_As_getHosts(JNIEnv * env, jobject jas);
+SG_END_DECL()
+
#endif /*!MSG_JAS_H */
static jfieldID jcomm_field_Comm_taskBind;
void jcomm_bind_task(JNIEnv *env, jobject jcomm) {
- msg_comm_t comm = (msg_comm_t) (uintptr_t) (*env)->GetLongField(env, jcomm, jcomm_field_Comm_bind);
+ msg_comm_t comm = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind);
//test if we are receiving or sending a task.
- jboolean jreceiving = (*env)->GetBooleanField(env, jcomm, jcomm_field_Comm_receiving);
+ jboolean jreceiving = env->GetBooleanField(jcomm, jcomm_field_Comm_receiving);
if (jreceiving == JNI_TRUE) {
//bind the task object.
msg_task_t task = MSG_comm_get_task(comm);
xbt_assert(task != NULL, "Task is NULL");
- jobject jtask_global = MSG_task_get_data(task);
+ jobject jtask_global = (jobject) MSG_task_get_data(task);
//case where the data has already been retrieved
if (jtask_global == NULL) {
return;
}
//Make sure the data will be correctly gc.
- jobject jtask_local = (*env)->NewLocalRef(env, jtask_global);
- (*env)->DeleteGlobalRef(env, jtask_global);
+ jobject jtask_local = env->NewLocalRef(jtask_global);
+ env->DeleteGlobalRef(jtask_global);
- (*env)->SetObjectField(env, jcomm, jtask_field_Comm_task, jtask_local);
+ env->SetObjectField(jcomm, jtask_field_Comm_task, jtask_local);
MSG_task_set_data(task, NULL);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Comm_nativeInit(JNIEnv *env, jclass cls) {
- jclass jfield_class_Comm = (*env)->FindClass(env, "org/simgrid/msg/Comm");
+ jclass jfield_class_Comm = env->FindClass("org/simgrid/msg/Comm");
if (!jfield_class_Comm) {
jxbt_throw_native(env,bprintf("Can't find the org/simgrid/msg/Comm class."));
return;
msg_comm_t comm;
msg_task_t *task_received;
- task_received = (msg_task_t*) (uintptr_t) (*env)->GetLongField(env, jcomm, jcomm_field_Comm_taskBind);
+ task_received = (msg_task_t*) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_taskBind);
xbt_free(task_received);
- comm = (msg_comm_t) (uintptr_t) (*env)->GetLongField(env, jcomm, jcomm_field_Comm_bind);
+ comm = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind);
MSG_comm_destroy(comm);
}
JNIEXPORT jboolean JNICALL
Java_org_simgrid_msg_Comm_test(JNIEnv *env, jobject jcomm) {
msg_comm_t comm;
- comm = (msg_comm_t) (uintptr_t) (*env)->GetLongField(env, jcomm, jcomm_field_Comm_bind);
+ comm = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind);
- jboolean finished = (*env)->GetBooleanField(env, jcomm, jcomm_field_Comm_finished);
+ jboolean finished = env->GetBooleanField(jcomm, jcomm_field_Comm_finished);
if (finished == JNI_TRUE) {
return JNI_TRUE;
}
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Comm_waitCompletion(JNIEnv *env, jobject jcomm, jdouble timeout) {
- msg_comm_t comm = (msg_comm_t) (uintptr_t) (*env)->GetLongField(env, jcomm, jcomm_field_Comm_bind);
+ msg_comm_t comm = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind);
if (!comm) {
jxbt_throw_native(env,bprintf("comm is null"));
return;
}
- jboolean finished = (*env)->GetBooleanField(env, jcomm, jcomm_field_Comm_finished);
+ jboolean finished = env->GetBooleanField(jcomm, jcomm_field_Comm_finished);
if (finished == JNI_TRUE) {
return;
}
msg_error_t status;
status = MSG_comm_wait(comm,(double)timeout);
- (*env)->SetBooleanField(env, jcomm, jcomm_field_Comm_finished, JNI_TRUE);
+ env->SetBooleanField(jcomm, jcomm_field_Comm_finished, JNI_TRUE);
if (status == MSG_OK) {
jcomm_bind_task(env,jcomm);
return;
#define MSG_JCOMM_H
#include <jni.h>
#include <simgrid/msg.h>
+
+SG_BEGIN_DECL()
+
/**
* This function binds the task associated with the communication to
* the java communication object.
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Comm_waitCompletion(JNIEnv *env, jobject jcomm, jdouble timeout);
+
+SG_END_DECL()
+
#endif /* MSG_JCOMM_H */
#include "jxbt_utilities.h"
void jfile_bind(JNIEnv *env, jobject jfile, msg_file_t fd) {
- (*env)->SetLongField(env, jfile, jfile_field_bind, (intptr_t)fd);
+ env->SetLongField(jfile, jfile_field_bind, (intptr_t)fd);
}
msg_file_t jfile_get_native(JNIEnv *env, jobject jfile) {
msg_file_t file =
- (msg_file_t)(intptr_t)(*env)->GetLongField(env, jfile, jfile_field_bind);
+ (msg_file_t)(intptr_t)env->GetLongField(jfile, jfile_field_bind);
return file;
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_File_nativeInit(JNIEnv *env, jclass cls) {
- jclass class_File = (*env)->FindClass(env, "org/simgrid/msg/File");
+ jclass class_File = env->FindClass("org/simgrid/msg/File");
jfile_field_bind = jxbt_get_jfield(env , class_File, "bind", "J");
xbt_assert((jfile_field_bind != NULL), "Can't find \"bind\" field in File class.");
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_File_open(JNIEnv *env, jobject jfile, jobject jpath) {
- const char *path = (*env)->GetStringUTFChars(env, jpath, 0);
+ const char *path = env->GetStringUTFChars((jstring) jpath, 0);
msg_file_t file;
file = MSG_file_open(path, NULL);
jfile_bind(env, jfile, file);
- (*env)->ReleaseStringUTFChars(env, jpath, path);
+ env->ReleaseStringUTFChars((jstring) jpath, path);
}
JNIEXPORT jlong JNICALL
Java_org_simgrid_msg_File_read(JNIEnv *env, jobject jfile, jlong jsize) {
#include <jni.h>
#include "simgrid/msg.h"
+SG_BEGIN_DECL()
+
jfieldID jfile_field_bind;
void jfile_bind(JNIEnv *env, jobject jfile, msg_file_t fd);
JNIEXPORT void JNICALL
Java_org_simgrid_msg_File_close(JNIEnv*, jobject);
+SG_END_DECL()
+
#endif
#include "jmsg_host.h"
#include "jxbt_utilities.h"
#include "jmsg_storage.h"
-
+#include <surf/surf_routing.h>
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
jobject jhost_new_instance(JNIEnv * env) {
jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
- return (*env)->NewObject(env, cls, jhost_method_Host_constructor);
+ return env->NewObject(cls, jhost_method_Host_constructor);
}
jobject jhost_ref(JNIEnv * env, jobject jhost) {
- return (*env)->NewGlobalRef(env, jhost);
+ return env->NewGlobalRef(jhost);
}
void jhost_unref(JNIEnv * env, jobject jhost) {
- (*env)->DeleteGlobalRef(env, jhost);
+ env->DeleteGlobalRef(jhost);
}
void jhost_bind(jobject jhost, msg_host_t host, JNIEnv * env) {
- (*env)->SetLongField(env, jhost, jhost_field_Host_bind, (jlong) (uintptr_t) (host));
+ env->SetLongField(jhost, jhost_field_Host_bind, (jlong) (uintptr_t) (host));
}
msg_host_t jhost_get_native(JNIEnv * env, jobject jhost) {
- return (msg_host_t) (uintptr_t) (*env)->GetLongField(env, jhost, jhost_field_Host_bind);
+ return (msg_host_t) (uintptr_t) env->GetLongField(jhost, jhost_field_Host_bind);
}
const char *jhost_get_name(jobject jhost, JNIEnv * env) {
}
jboolean jhost_is_valid(jobject jhost, JNIEnv * env) {
- if ((*env)->GetLongField(env, jhost, jhost_field_Host_bind)) {
+ if (env->GetLongField(jhost, jhost_field_Host_bind)) {
return JNI_TRUE;
} else {
return JNI_FALSE;
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Host_nativeInit(JNIEnv *env, jclass cls) {
- jclass class_Host = (*env)->FindClass(env, "org/simgrid/msg/Host");
- jhost_method_Host_constructor = (*env)->GetMethodID(env, class_Host, "<init>", "()V");
+ jclass class_Host = env->FindClass("org/simgrid/msg/Host");
+ jhost_method_Host_constructor = env->GetMethodID(class_Host, "<init>", "()V");
jhost_field_Host_bind = jxbt_get_jfield(env,class_Host, "bind", "J");
jhost_field_Host_name = jxbt_get_jfield(env, class_Host, "name", "Ljava/lang/String;");
if (!class_Host || !jhost_field_Host_name || !jhost_method_Host_constructor || !jhost_field_Host_bind) {
jxbt_throw_null(env,bprintf("No host can have a null name"));
return NULL;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars(jname, 0);
/* get the host by name (the hosts are created during the grid resolution) */
host = MSG_host_by_name(name);
if (!host) { /* invalid name */
jxbt_throw_host_not_found(env, name);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars(jname, name);
return NULL;
}
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars(jname, name);
if (!xbt_lib_get_level(host, JAVA_HOST_LEVEL)) { /* native host not associated yet with java host */
return NULL;
}
/* Sets the java host name */
- (*env)->SetObjectField(env, jhost, jhost_field_Host_name, jname);
+ env->SetObjectField(jhost, jhost_field_Host_name, jname);
/* bind the java host and the native host */
jhost_bind(jhost, host, env);
}
/* Sets the host name */
const char *name = MSG_host_get_name(host);
- jobject jname = (*env)->NewStringUTF(env,name);
- (*env)->SetObjectField(env, jhost, jhost_field_Host_name, jname);
+ jobject jname = env->NewStringUTF(name);
+ env->SetObjectField(jhost, jhost_field_Host_name, jname);
/* Bind & store it */
jhost_bind(jhost, host, env);
xbt_lib_set(host_lib, host->key, JAVA_HOST_LEVEL, (void *) jhost);
jxbt_throw_notbound(env, "host", jhost);
return NULL;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars((jstring) jname, 0);
const char *property = MSG_host_get_property_value(host, name);
if (!property) {
return NULL;
}
- jobject jproperty = (*env)->NewStringUTF(env, property);
+ jobject jproperty = env->NewStringUTF(property);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars((jstring) jname, name);
return jproperty;
}
jxbt_throw_notbound(env, "host", jhost);
return;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
- const char *value_java = (*env)->GetStringUTFChars(env, jvalue, 0);
+ const char *name = env->GetStringUTFChars((jstring) jname, 0);
+ const char *value_java = env->GetStringUTFChars((jstring) jvalue, 0);
char *value = xbt_strdup(value_java);
MSG_host_set_property_value(host, name, value, xbt_free_f);
- (*env)->ReleaseStringUTFChars(env, jvalue, value);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars((jstring) jvalue, value);
+ env->ReleaseStringUTFChars((jstring) jname, name);
}
JNIEXPORT jboolean JNICALL
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");
+ jclass cls = env->FindClass("org/simgrid/msg/Storage");
- jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+ jtable = env->NewObjectArray((jsize) count, cls, NULL);
if (!jtable) {
jxbt_throw_jni(env, "Storages table allocation failed");
const char *mount_name, *storage_name;
xbt_dict_foreach(dict,cursor,mount_name,storage_name) {
- jname = (*env)->NewStringUTF(env, storage_name);
+ jname = env->NewStringUTF(storage_name);
jstorage = Java_org_simgrid_msg_Storage_getByName(env,cls,jname);
- (*env)->SetObjectArrayElement(env, jtable, index, jstorage);
+ env->SetObjectArrayElement(jtable, index, jstorage);
index++;
}
xbt_dict_free(&dict);
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);
+ jtable = env->NewObjectArray((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);
+ storage_name = xbt_dynar_get_as(dyn,index,char*);
+ jstorage_name = env->NewStringUTF(storage_name);
+ env->SetObjectArrayElement(jtable, index, jstorage_name);
}
return jtable;
return NULL;
}
- jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+ jtable = env->NewObjectArray((jsize) count, cls, NULL);
if (!jtable) {
jxbt_throw_jni(env, "Hosts table allocation failed");
jhost = (jobject) (xbt_lib_get_level(host, JAVA_HOST_LEVEL));
if (!jhost) {
- jname = (*env)->NewStringUTF(env, MSG_host_get_name(host));
+ jname = env->NewStringUTF(MSG_host_get_name(host));
jhost =
Java_org_simgrid_msg_Host_getByName(env, cls_arg, jname);
/* FIXME: leak of jname ? */
}
- (*env)->SetObjectArrayElement(env, jtable, index, jhost);
+ env->SetObjectArrayElement(jtable, index, jhost);
}
xbt_dynar_free(&table);
return jtable;
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Host_setAsyncMailbox(JNIEnv * env, jclass cls_arg, jobject jname){
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars((jstring) jname, 0);
MSG_mailbox_set_async(name);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars((jstring) jname, name);
}
#include <jni.h>
#include "simgrid/msg.h"
+SG_BEGIN_DECL()
+
/**
* This function returns a new java host instance.
*
#endif /*!MSG_JHOST_H */
+SG_END_DECL()
#include "jmsg.h"
#include "jmsg_host.h"
#include "jxbt_utilities.h"
-#include "smx_context_java.h"
-#include "smx_context_cojava.h"
+#include "JavaContext.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
+extern "C" {
+
jfieldID jprocess_field_Process_bind;
jfieldID jprocess_field_Process_host;
jfieldID jprocess_field_Process_killTime;
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Process_exit(JNIEnv *env, jobject jprocess) {
- if (smx_factory_initializer_to_use == SIMIX_ctx_cojava_factory_init) {
- msg_process_t process = jprocess_to_native_process(jprocess, env);
- smx_context_t context = MSG_process_get_smx_ctx(process);
- smx_ctx_cojava_stop(context);
- }
+
}
jobject native_to_java_process(msg_process_t process)
{
- return ((smx_ctx_java_t)MSG_process_get_smx_ctx(process))->jprocess;
+ simgrid::java::JavaContext* context =
+ (simgrid::java::JavaContext*) MSG_process_get_smx_ctx(process);
+ return context->jprocess;
}
jobject jprocess_new_global_ref(jobject jprocess, JNIEnv * env)
{
- return (*env)->NewGlobalRef(env, jprocess);
+ return env->NewGlobalRef(jprocess);
}
void jprocess_delete_global_ref(jobject jprocess, JNIEnv * env)
{
- (*env)->DeleteGlobalRef(env, jprocess);
+ env->DeleteGlobalRef(jprocess);
}
void jprocess_join(jobject jprocess, JNIEnv * env)
{
msg_process_t process = jprocess_to_native_process(jprocess,env);
- smx_ctx_java_t context = (smx_ctx_java_t)MSG_process_get_smx_ctx(process);
+ simgrid::java::JavaContext* context =
+ (simgrid::java::JavaContext*) MSG_process_get_smx_ctx(process);
xbt_os_thread_join(context->thread,NULL);
}
msg_process_t jprocess_to_native_process(jobject jprocess, JNIEnv * env)
{
return
- (msg_process_t)(intptr_t)(*env)->GetLongField(env, jprocess,
+ (msg_process_t)(intptr_t)env->GetLongField(jprocess,
jprocess_field_Process_bind);
}
void jprocess_bind(jobject jprocess, msg_process_t process, JNIEnv * env)
{
- (*env)->SetLongField(env, jprocess, jprocess_field_Process_bind,
+ env->SetLongField(jprocess, jprocess_field_Process_bind,
(intptr_t)process);
}
jlong jprocess_get_id(jobject jprocess, JNIEnv * env)
{
return
- (intptr_t)(*env)->GetLongField(env, jprocess, jprocess_field_Process_id);
+ (intptr_t)env->GetLongField(jprocess, jprocess_field_Process_id);
}
jstring jprocess_get_name(jobject jprocess, JNIEnv * env)
{
- jstring jname = (jstring) (*env)->GetObjectField(env, jprocess, jprocess_field_Process_name);
- return (*env)->NewGlobalRef(env, jname);
-
+ jstring jname = (jstring) env->GetObjectField(jprocess, jprocess_field_Process_name);
+ return (jstring) env->NewGlobalRef(jname);
}
jboolean jprocess_is_valid(jobject jprocess, JNIEnv * env)
if (!id)
return JNI_FALSE;
- return (*env)->GetLongField(env, jprocess, id) ? JNI_TRUE : JNI_FALSE;
+ return env->GetLongField(jprocess, id) ? JNI_TRUE : JNI_FALSE;
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Process_nativeInit(JNIEnv *env, jclass cls) {
- jclass jprocess_class_Process = (*env)->FindClass(env, "org/simgrid/msg/Process");
+ jclass jprocess_class_Process = env->FindClass("org/simgrid/msg/Process");
jprocess_field_Process_name = jxbt_get_jfield(env, jprocess_class_Process, "name", "Ljava/lang/String;");
jprocess_field_Process_bind = jxbt_get_jfield(env, jprocess_class_Process, "bind", "J");
jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug."));
}
}
+
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Process_create(JNIEnv * env,
jobject jprocess_arg,
msg_process_t process; /* the native process to create */
msg_host_t host; /* Where that process lives */
- hostname = (*env)->GetStringUTFChars(env, jhostname, 0);
+ hostname = env->GetStringUTFChars((jstring) jhostname, 0);
/* get the name of the java process */
jname = jprocess_get_name(jprocess_arg, env);
}
/* build the C name of the process */
- name = (*env)->GetStringUTFChars(env, jname, 0);
+ name = env->GetStringUTFChars(jname, 0);
name = xbt_strdup(name);
/* Retrieve the kill time from the process */
- jdouble jkill = (*env)->GetDoubleField(env, jprocess, jprocess_field_Process_killTime);
+ jdouble jkill = env->GetDoubleField(jprocess, jprocess_field_Process_killTime);
/* Actually build the MSG process */
process = MSG_process_create_with_environment(name,
- (xbt_main_func_t) jprocess,
- /*data*/ jprocess,
+ [](int argc, char** argv) -> int {
+ smx_process_t process = SIMIX_process_self();
+ // This is the jprocess passed as environment.
+ // It would be simplet if we could use a closure.
+ jobject jprocess = (jobject) MSG_process_get_data(process);
+ simgrid::java::java_main_jprocess(jprocess);
+ return 0;
+ }, jprocess,
host,
/*argc, argv, properties*/
- 0,NULL,NULL);
+ 0, NULL, NULL);
MSG_process_set_kill_time(process, (double)jkill);
/* bind the java process instance to the native process */
jprocess_bind(jprocess, process, env);
/* release our reference to the process name (variable name becomes invalid) */
//FIXME : This line should be uncommented but with mac it doesn't work. BIG WARNING
- //(*env)->ReleaseStringUTFChars(env, jname, name);
- (*env)->ReleaseStringUTFChars(env, jhostname, hostname);
+ //env->ReleaseStringUTFChars(jname, name);
+ env->ReleaseStringUTFChars((jstring) jhostname, hostname);
/* sets the PID and the PPID of the process */
- (*env)->SetIntField(env, jprocess, jprocess_field_Process_pid,(jint) MSG_process_get_PID(process));
- (*env)->SetIntField(env, jprocess, jprocess_field_Process_ppid, (jint) MSG_process_get_PPID(process));
+ env->SetIntField(jprocess, jprocess_field_Process_pid,(jint) MSG_process_get_PID(process));
+ env->SetIntField(jprocess, jprocess_field_Process_ppid, (jint) MSG_process_get_PPID(process));
/* sets the Host of the process */
- jobject jhost = Java_org_simgrid_msg_Host_getByName(env,NULL,jhostname);
+ jobject jhost = Java_org_simgrid_msg_Host_getByName(env,NULL, (jstring)jhostname);
- (*env)->SetObjectField(env, jprocess, jprocess_field_Process_host, jhost);
+ env->SetObjectField(jprocess, jprocess_field_Process_host, jhost);
}
JNIEXPORT jint JNICALL
jxbt_throw_notbound(env, "process", jprocess);
return NULL;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars((jstring)jname, 0);
const char *property = MSG_process_get_property_value(process, name);
if (!property) {
return NULL;
}
- jobject jproperty = (*env)->NewStringUTF(env, property);
+ jobject jproperty = env->NewStringUTF(property);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars((jstring)jname, name);
return jproperty;
}
//jmsg_throw_status(env,rv);
- // adsein, the code above as been replaced by the code below. Indeed, according to the documentation, a sleep can only
+ // adsein, the code above as been replaced by the code below. Indeed, according to the documentation, a sleep can only
// trigger a host_failure exception. When the sleep crashes due to a host shutdown, the exception thrown by smx_context_java.c
// is a cancelled_error, see bindings/java/smx_context_java.c, function void smx_ctx_java_stop(smx_context_t context) and src/msg/msg_gos.c
// function msg_error_t MSG_process_sleep(double nb_sec)
{
msg_error_t rv;
rv = MSG_process_sleep((double)jseconds);
- if ((*env)->ExceptionOccurred(env))
+ if (env->ExceptionOccurred())
return;
if (rv != MSG_OK) {
XBT_DEBUG("Status NOK");
return;
}
/* change the host java side */
- (*env)->SetObjectField(env, jprocess, jprocess_field_Process_host, jhost);
+ env->SetObjectField(jprocess, jprocess_field_Process_host, jhost);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Process_setKillTime (JNIEnv *env , jobject jprocess, jdouble jkilltime) {
Java_org_simgrid_msg_Process_getCount(JNIEnv * env, jclass cls) {
return (jint) MSG_process_get_number();
}
+
+}
#include <simgrid/msg.h>
#include <simgrid/simix.h>
+SG_BEGIN_DECL();
+
//Cached java fields
extern jfieldID jprocess_field_Process_bind;
extern jfieldID jprocess_field_Process_host;
JNIEXPORT jint JNICALL
Java_org_simgrid_msg_Process_getCount(JNIEnv * env, jclass cls);
+SG_END_DECL();
#endif /* !MSG_JPROCESS_H */
RngStream jrngstream_to_native(JNIEnv *env, jobject jrngstream) {
RngStream rngstream =
- (RngStream)(intptr_t)(*env)->GetLongField(env, jrngstream, jrngstream_bind);
+ (RngStream)(intptr_t)env->GetLongField(jrngstream, jrngstream_bind);
if (!rngstream) {
jxbt_throw_notbound(env, "rngstream", jrngstream);
return NULL;
JNIEXPORT void JNICALL
Java_org_simgrid_msg_RngStream_nativeInit(JNIEnv *env, jclass cls) {
- jclass class_RngStream = (*env)->FindClass(env, "org/simgrid/msg/RngStream");
+ jclass class_RngStream = env->FindClass("org/simgrid/msg/RngStream");
jrngstream_bind = jxbt_get_jfield(env, class_RngStream, "bind", "J");
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_RngStream_create(JNIEnv *env, jobject jrngstream, jstring jname) {
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars(jname, 0);
RngStream rngstream = RngStream_CreateStream(name);
//Bind the RngStream object
- (*env)->SetLongField(env, jrngstream, jrngstream_bind, (intptr_t)rngstream);
+ env->SetLongField(jrngstream, jrngstream_bind, (intptr_t)rngstream);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars(jname, name);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_RngStream_nativeFinalize(JNIEnv *env, jobject jrngstream) {
RngStream rngstream = jrngstream_to_native(env, jrngstream);
RngStream_DeleteStream(&rngstream);
- (*env)->SetLongField(env, jrngstream, jrngstream_bind, (intptr_t)NULL);
+ env->SetLongField(jrngstream, jrngstream_bind, (intptr_t)NULL);
}
JNIEXPORT jboolean JNICALL
Java_org_simgrid_msg_RngStream_setPackageSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
jint buffer[6];
- (*env)->GetIntArrayRegion(env, jseed, 0, 6, buffer);
+ env->GetIntArrayRegion(jseed, 0, 6, buffer);
RngStream rngstream = jrngstream_to_native(env, jrngstream);
if (!rngstream)
Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, jobject jrngstream, jintArray jseed) {
jint buffer[6];
- (*env)->GetIntArrayRegion(env, jseed, 0, 6, buffer);
+ env->GetIntArrayRegion(jseed, 0, 6, buffer);
RngStream rngstream = jrngstream_to_native(env, jrngstream);
if (!rngstream)
#include <jni.h>
#include <xbt/RngStream.h>
+SG_BEGIN_DECL()
+
RngStream jrngstream_to_native(JNIEnv *env, jobject jrngstream);
JNIEXPORT void JNICALL
JNIEXPORT jint JNICALL
Java_org_simgrid_msg_RngStream_randInt(JNIEnv *env, jobject jrngstream, jint i, jint j);
+SG_END_DECL()
+
#endif /* MSG_RNGSTREAM_H */
/* 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 <xbt/str.h>
+#include <surf/surf_routing.h>
+
#include "simgrid/msg.h"
#include "jmsg.h"
#include "jmsg_storage.h"
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);
+ return env->NewObject(cls, jstorage_method_Storage_constructor);
}
msg_storage_t jstorage_get_native(JNIEnv * env, jobject jstorage) {
- return (msg_storage_t) (uintptr_t) (*env)->GetLongField(env, jstorage, jstorage_field_Storage_bind);
+ return (msg_storage_t) (uintptr_t) env->GetLongField(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");
+ jclass class_Storage = env->FindClass("org/simgrid/msg/Storage");
+ jstorage_method_Storage_constructor = env->GetMethodID(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) {
}
void jstorage_bind(jobject jstorage, msg_storage_t storage, JNIEnv * env) {
- (*env)->SetLongField(env, jstorage, jstorage_field_Storage_bind, (jlong) (uintptr_t) (storage));
+ env->SetLongField(jstorage, jstorage_field_Storage_bind, (jlong) (uintptr_t) (storage));
}
jobject jstorage_ref(JNIEnv * env, jobject jstorage) {
- return (*env)->NewGlobalRef(env, jstorage);
+ return env->NewGlobalRef(jstorage);
}
void jstorage_unref(JNIEnv * env, jobject jstorage) {
- (*env)->DeleteGlobalRef(env, jstorage);
+ env->DeleteGlobalRef(jstorage);
}
const char *jstorage_get_name(jobject jstorage, JNIEnv * env) {
jxbt_throw_null(env,bprintf("No host can have a null name"));
return NULL;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars(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);
+ env->ReleaseStringUTFChars(jname, name);
return NULL;
}
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars(jname, name);
if (!xbt_lib_get_level(storage, JAVA_STORAGE_LEVEL)) { /* native host not associated yet with java host */
return NULL;
}
/* Sets the java storage name */
- (*env)->SetObjectField(env, jstorage, jstorage_field_Storage_name, jname);
+ env->SetObjectField(jstorage, jstorage_field_Storage_name, jname);
/* bind the java storage and the native storage */
jstorage_bind(jstorage, storage, env);
jxbt_throw_notbound(env, "storage", jstorage);
return NULL;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars((jstring) jname, 0);
const char *property = MSG_storage_get_property_value(storage, name);
if (!property) {
return NULL;
}
- jobject jproperty = (*env)->NewStringUTF(env, property);
+ jobject jproperty = env->NewStringUTF(property);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars((jstring) jname, name);
return jproperty;
}
jxbt_throw_notbound(env, "storage", jstorage);
return;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
- const char *value_java = (*env)->GetStringUTFChars(env, jvalue, 0);
+ const char *name = env->GetStringUTFChars((jstring) jname, 0);
+ const char *value_java = env->GetStringUTFChars((jstring) jvalue, 0);
char *value = xbt_strdup(value_java);
MSG_storage_set_property_value(storage, name, value, xbt_free_f);
- (*env)->ReleaseStringUTFChars(env, jvalue, value);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars((jstring) jvalue, value);
+ env->ReleaseStringUTFChars((jstring) jname, name);
}
if (!host_name) {
return NULL;
}
- jobject jhost_name = (*env)->NewStringUTF(env, host_name);
+ jobject jhost_name = env->NewStringUTF(host_name);
return jhost_name;
}
return NULL;
}
- jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+ jtable = env->NewObjectArray((jsize) count, cls, NULL);
if (!jtable) {
jxbt_throw_jni(env, "Storages table allocation failed");
jstorage = (jobject) (xbt_lib_get_level(storage, JAVA_STORAGE_LEVEL));
if (!jstorage) {
- jname = (*env)->NewStringUTF(env, MSG_storage_get_name(storage));
+ jname = env->NewStringUTF(MSG_storage_get_name(storage));
jstorage = Java_org_simgrid_msg_Storage_getByName(env, cls_arg, jname);
}
- (*env)->SetObjectArrayElement(env, jtable, index, jstorage);
+ env->SetObjectArrayElement(jtable, index, jstorage);
}
xbt_dynar_free(&table);
return jtable;
#include <jni.h>
#include "simgrid/msg.h"
+SG_BEGIN_DECL()
+
/**
* This function returns a new java storage instance.
*
JNIEXPORT jobjectArray JNICALL
Java_org_simgrid_msg_Storage_all(JNIEnv *, jclass);
+SG_END_DECL()
#endif /*!MSG_JSTORAGE_H */
Java_org_simgrid_msg_Mutex_init(JNIEnv * env, jobject obj) {
xbt_mutex_t mutex = xbt_mutex_init();
- (*env)->SetLongField(env, obj, jsyncro_field_Mutex_bind, (jlong) (uintptr_t) (mutex));
+ env->SetLongField(obj, jsyncro_field_Mutex_bind, (jlong) (uintptr_t) (mutex));
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Mutex_acquire(JNIEnv * env, jobject obj) {
xbt_mutex_t mutex;
- mutex = (xbt_mutex_t) (uintptr_t) (*env)->GetLongField(env, obj, jsyncro_field_Mutex_bind);
+ mutex = (xbt_mutex_t) (uintptr_t) env->GetLongField(obj, jsyncro_field_Mutex_bind);
xbt_ex_t e;
TRY {
xbt_mutex_acquire(mutex);
Java_org_simgrid_msg_Mutex_release(JNIEnv * env, jobject obj) {
xbt_mutex_t mutex;
- mutex = (xbt_mutex_t) (uintptr_t) (*env)->GetLongField(env, obj, jsyncro_field_Mutex_bind);
+ mutex = (xbt_mutex_t) (uintptr_t) env->GetLongField(obj, jsyncro_field_Mutex_bind);
xbt_mutex_release(mutex);
}
Java_org_simgrid_msg_Mutex_nativeFinalize(JNIEnv * env, jobject obj) {
xbt_mutex_t mutex;
- mutex = (xbt_mutex_t) (uintptr_t) (*env)->GetLongField(env, obj, jsyncro_field_Mutex_bind);
+ mutex = (xbt_mutex_t) (uintptr_t) env->GetLongField(obj, jsyncro_field_Mutex_bind);
xbt_mutex_destroy(mutex);
}
Java_org_simgrid_msg_Semaphore_init(JNIEnv * env, jobject obj, jint capacity) {
msg_sem_t sem = MSG_sem_init((int) capacity);
- (*env)->SetLongField(env, obj, jsyncro_field_Semaphore_bind, (jlong) (uintptr_t) (sem));
+ env->SetLongField(obj, jsyncro_field_Semaphore_bind, (jlong) (uintptr_t) (sem));
}
Java_org_simgrid_msg_Semaphore_acquire(JNIEnv * env, jobject obj, jdouble timeout) {
msg_sem_t sem;
- sem = (msg_sem_t) (uintptr_t) (*env)->GetLongField(env, obj, jsyncro_field_Semaphore_bind);
+ sem = (msg_sem_t) (uintptr_t) env->GetLongField(obj, jsyncro_field_Semaphore_bind);
msg_error_t res = MSG_sem_acquire_timeout(sem, (double) timeout);
if (res != MSG_OK) {
jmsg_throw_status(env, res);
Java_org_simgrid_msg_Semaphore_release(JNIEnv * env, jobject obj) {
msg_sem_t sem;
- sem = (msg_sem_t) (uintptr_t) (*env)->GetLongField(env, obj, jsyncro_field_Semaphore_bind);
+ sem = (msg_sem_t) (uintptr_t) env->GetLongField(obj, jsyncro_field_Semaphore_bind);
MSG_sem_release(sem);
}
JNIEXPORT jboolean JNICALL
Java_org_simgrid_msg_Semaphore_wouldBlock(JNIEnv * env, jobject obj) {
msg_sem_t sem;
- sem = (msg_sem_t) (uintptr_t) (*env)->GetLongField(env, obj, jsyncro_field_Semaphore_bind);
+ sem = (msg_sem_t) (uintptr_t) env->GetLongField(obj, jsyncro_field_Semaphore_bind);
int res = MSG_sem_would_block(sem);
return (jboolean) res;
}
Java_org_simgrid_msg_Semaphore_nativeFinalize(JNIEnv * env, jobject obj) {
msg_sem_t sem;
- sem = (msg_sem_t) (uintptr_t) (*env)->GetLongField(env, obj, jsyncro_field_Semaphore_bind);
+ sem = (msg_sem_t) (uintptr_t) env->GetLongField(obj, jsyncro_field_Semaphore_bind);
MSG_sem_destroy(sem);
}
#include <simgrid/msg.h>
#include <simgrid/simix.h>
+SG_BEGIN_DECL()
+
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Mutex_nativeInit(JNIEnv *env, jclass cls);
Java_org_simgrid_msg_Semaphore_wouldBlock(JNIEnv * env, jobject obj);
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Semaphore_nativeFinalize(JNIEnv * env, jobject obj);
+
+SG_END_DECL()
+
#endif /* !MSG_JPROCESS_H */
#include "jmsg.h"
-#include "smx_context_java.h"
-
#include "jmsg_host.h"
#include "jmsg_task.h"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
+jobject native_to_java_process(msg_process_t process);
+
static jmethodID jtask_method_Comm_constructor;
static jfieldID jtask_field_Task_bind;
void jtask_bind(jobject jtask, msg_task_t task, JNIEnv * env)
{
- (*env)->SetLongField(env, jtask, jtask_field_Task_bind, (intptr_t)task);
+ env->SetLongField(jtask, jtask_field_Task_bind, (intptr_t)task);
}
msg_task_t jtask_to_native_task(jobject jtask, JNIEnv * env)
{
- return (msg_task_t)(intptr_t)(*env)->GetLongField(env, jtask, jtask_field_Task_bind);
+ return (msg_task_t)(intptr_t)env->GetLongField(jtask, jtask_field_Task_bind);
}
jboolean jtask_is_valid(jobject jtask, JNIEnv * env)
{
- return (*env)->GetLongField(env, jtask, jtask_field_Task_bind) ? JNI_TRUE : JNI_FALSE;
+ return env->GetLongField(jtask, jtask_field_Task_bind) ? JNI_TRUE : JNI_FALSE;
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Task_nativeInit(JNIEnv *env, jclass cls) {
- jclass jtask_class_Comm = (*env)->FindClass(env, "org/simgrid/msg/Comm");
- jclass jtask_class_Task = (*env)->FindClass(env, "org/simgrid/msg/Task");
+ jclass jtask_class_Comm = env->FindClass("org/simgrid/msg/Comm");
+ jclass jtask_class_Task = env->FindClass("org/simgrid/msg/Task");
- jtask_method_Comm_constructor = (*env)->GetMethodID(env, jtask_class_Comm, "<init>", "()V");
+ jtask_method_Comm_constructor = env->GetMethodID(jtask_class_Comm, "<init>", "()V");
jtask_field_Task_bind = jxbt_get_jfield(env, jtask_class_Task, "bind", "J");
jtask_field_Task_name = jxbt_get_jfield(env, jtask_class_Task, "name", "Ljava/lang/String;");
jtask_field_Task_messageSize = jxbt_get_jfield(env, jtask_class_Task, "messageSize", "D");
if (jname) {
/* get the C string from the java string */
- name = (*env)->GetStringUTFChars(env, jname, 0);
+ name = env->GetStringUTFChars(jname, 0);
}
/* create the task */
MSG_task_create(name, (double) jflopsAmount,
(double) jbytesAmount, NULL);
if (jname)
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars(jname, name);
/* sets the task name */
- (*env)->SetObjectField(env, jtask, jtask_field_Task_name, jname);
+ env->SetObjectField(jtask, jtask_field_Task_name, jname);
/* bind & store the task */
jtask_bind(jtask, task, env);
MSG_task_set_data(task, jtask);
return;
}
- host_count = (int) (*env)->GetArrayLength(env, jhosts);
+ host_count = (int) env->GetArrayLength(jhosts);
hosts = xbt_new0(msg_host_t, host_count);
messageSizes = xbt_new0(double, host_count * host_count);
jcomputeDurations =
- (*env)->GetDoubleArrayElements(env, jcomputeDurations_arg, 0);
+ env->GetDoubleArrayElements(jcomputeDurations_arg, 0);
jmessageSizes =
- (*env)->GetDoubleArrayElements(env, jmessageSizes_arg, 0);
+ env->GetDoubleArrayElements(jmessageSizes_arg, 0);
for (index = 0; index < host_count; index++) {
- jhost = (*env)->GetObjectArrayElement(env, jhosts, index);
+ jhost = env->GetObjectArrayElement(jhosts, index);
hosts[index] = jhost_get_native(env, jhost);
computeDurations[index] = jcomputeDurations[index];
}
messageSizes[index] = jmessageSizes[index];
}
- (*env)->ReleaseDoubleArrayElements(env, jcomputeDurations_arg,
+ env->ReleaseDoubleArrayElements(jcomputeDurations_arg,
jcomputeDurations, 0);
- (*env)->ReleaseDoubleArrayElements(env, jmessageSizes_arg, jmessageSizes,
- 0);
-
+ env->ReleaseDoubleArrayElements(jmessageSizes_arg, jmessageSizes, 0);
/* get the C string from the java string */
- name = (*env)->GetStringUTFChars(env, jname, 0);
+ name = env->GetStringUTFChars(jname, 0);
task =
MSG_parallel_task_create(name, host_count, hosts, computeDurations,
messageSizes, NULL);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars(jname, name);
/* sets the task name */
- (*env)->SetObjectField(env, jtask, jtask_field_Task_name, jname);
+ env->SetObjectField(jtask, jtask_field_Task_name, jname);
/* associate the java task object and the native task */
jtask_bind(jtask, task, env);
}
msg_error_t rv;
rv = MSG_task_execute(task);
- if ((*env)->ExceptionOccurred(env))
+ if (env->ExceptionOccurred())
return;
if (rv != MSG_OK) {
jmsg_throw_status(env, rv);
return NULL;
}
- return (*env)->NewStringUTF(env, MSG_task_get_name(task));
+ return env->NewStringUTF(MSG_task_get_name(task));
}
JNIEXPORT jobject JNICALL
jxbt_throw_notbound(env, "task", jtask);
return;
}
- const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+ const char *name = env->GetStringUTFChars((jstring) jname, 0);
- (*env)->SetObjectField(env, jtask, jtask_field_Task_name, jname);
+ env->SetObjectField(jtask, jtask_field_Task_name, jname);
MSG_task_set_name(task, name);
- (*env)->ReleaseStringUTFChars(env, jname, name);
+ env->ReleaseStringUTFChars((jstring) jname, name);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Task_setPriority(JNIEnv * env,
jxbt_throw_notbound(env, "task", jtask);
return;
}
- (*env)->SetDoubleField(env, jtask, jtask_field_Task_messageSize, dataSize);
+ env->SetDoubleField(jtask, jtask_field_Task_messageSize, dataSize);
MSG_task_set_bytes_amount(task, (double) dataSize);
}
jdouble jtimeout)
{
msg_error_t rv;
- const char *alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ const char *alias = env->GetStringUTFChars(jalias, 0);
msg_task_t task = jtask_to_native_task(jtask, env);
if (!task) {
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
jxbt_throw_notbound(env, "task", jtask);
return;
}
/* Pass a global ref to the Jtask into the Ctask so that the receiver can use it */
- MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
+ MSG_task_set_data(task, (void *) env->NewGlobalRef(jtask));
rv = MSG_task_send_with_timeout(task, alias, (double) jtimeout);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
if (rv != MSG_OK) {
jmsg_throw_status(env, rv);
jdouble maxrate)
{
msg_error_t rv;
- const char *alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ const char *alias = env->GetStringUTFChars(jalias, 0);
msg_task_t task = jtask_to_native_task(jtask, env);
if (!task) {
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
jxbt_throw_notbound(env, "task", jtask);
return;
}
/* Pass a global ref to the Jtask into the Ctask so that the receiver can use it */
- MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
+ MSG_task_set_data(task, (void *) env->NewGlobalRef(jtask));
rv = MSG_task_send_with_timeout_bounded(task, alias, (double) jtimeout, (double) maxrate);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
if (rv != MSG_OK) {
jmsg_throw_status(env, rv);
}
}
- alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ alias = env->GetStringUTFChars(jalias, 0);
rv = MSG_task_receive_ext(task, alias, (double) jtimeout, host);
- if ((*env)->ExceptionOccurred(env))
+ if (env->ExceptionOccurred())
return NULL;
if (rv != MSG_OK) {
jmsg_throw_status(env,rv);
return NULL;
}
- jtask_global = MSG_task_get_data(*task);
+ jtask_global = (jobject) MSG_task_get_data(*task);
/* Convert the global ref into a local ref so that the JVM can free the stuff */
- jtask_local = (*env)->NewLocalRef(env, jtask_global);
- (*env)->DeleteGlobalRef(env, jtask_global);
+ jtask_local = env->NewLocalRef(jtask_global);
+ env->DeleteGlobalRef(jtask_global);
MSG_task_set_data(*task, NULL);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
xbt_free(task);
msg_task_t *task = xbt_new(msg_task_t,1);
*task = NULL;
/* There should be a cache here */
- comm_class = (*env)->FindClass(env, "org/simgrid/msg/Comm");
+ comm_class = env->FindClass("org/simgrid/msg/Comm");
if (!comm_class) {
jxbt_throw_native(env,bprintf("fieldID or methodID or class not found."));
return NULL;
}
- jobject jcomm = (*env)->NewObject(env, comm_class, jtask_method_Comm_constructor);
+ jobject jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
if (!jcomm) {
jxbt_throw_native(env,bprintf("Can't create a Comm object."));
return NULL;
}
- mailbox = (*env)->GetStringUTFChars(env, jmailbox, 0);
+ mailbox = env->GetStringUTFChars(jmailbox, 0);
comm = MSG_task_irecv(task,mailbox);
- (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
- (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(task));
- (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_TRUE);
+ env->SetLongField(jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
+ env->SetLongField(jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(task));
+ env->SetBooleanField(jcomm, jtask_field_Comm_receiving, JNI_TRUE);
- (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
+ env->ReleaseStringUTFChars(jmailbox, mailbox);
return jcomm;
}
}
}
- alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ alias = env->GetStringUTFChars(jalias, 0);
rv = MSG_task_receive_ext_bounded(task, alias, (double) jtimeout, host, (double) rate);
- if ((*env)->ExceptionOccurred(env))
+ if (env->ExceptionOccurred())
return NULL;
if (rv != MSG_OK) {
jmsg_throw_status(env,rv);
return NULL;
}
- jtask_global = MSG_task_get_data(*task);
+ jtask_global = (jobject) MSG_task_get_data(*task);
/* Convert the global ref into a local ref so that the JVM can free the stuff */
- jtask_local = (*env)->NewLocalRef(env, jtask_global);
- (*env)->DeleteGlobalRef(env, jtask_global);
+ jtask_local = env->NewLocalRef(jtask_global);
+ env->DeleteGlobalRef(jtask_global);
MSG_task_set_data(*task, NULL);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
xbt_free(task);
//pointer to store the task object pointer.
msg_task_t *task = xbt_new(msg_task_t,1);
*task = NULL;
- /* There should be a cache here */
- comm_class = (*env)->FindClass(env, "org/simgrid/msg/Comm");
+ /* There should be a cac hee */
+ comm_class = env->FindClass("org/simgrid/msg/Comm");
if (!comm_class) {
jxbt_throw_native(env,bprintf("fieldID or methodID or class not found."));
return NULL;
}
- jobject jcomm = (*env)->NewObject(env, comm_class, jtask_method_Comm_constructor);
+ jobject jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
if (!jcomm) {
jxbt_throw_native(env,bprintf("Can't create a Comm object."));
return NULL;
}
- mailbox = (*env)->GetStringUTFChars(env, jmailbox, 0);
+ mailbox = env->GetStringUTFChars(jmailbox, 0);
comm = MSG_task_irecv_bounded(task,mailbox, (double) rate);
- (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
- (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(task));
- (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_TRUE);
+ env->SetLongField(jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
+ env->SetLongField(jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(task));
+ env->SetBooleanField(jcomm, jtask_field_Comm_receiving, JNI_TRUE);
- (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
+ env->ReleaseStringUTFChars(jmailbox, mailbox);
return jcomm;
}
jobject jcomm;
msg_comm_t comm;
- comm_class = (*env)->FindClass(env, "org/simgrid/msg/Comm");
+ comm_class = env->FindClass("org/simgrid/msg/Comm");
if (!comm_class) return NULL;
- jcomm = (*env)->NewObject(env, comm_class, jtask_method_Comm_constructor);
- mailbox = (*env)->GetStringUTFChars(env, jmailbox, 0);
+ jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
+ mailbox = env->GetStringUTFChars(jmailbox, 0);
task = jtask_to_native_task(jtask, env);
if (!task) {
- (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
- (*env)->DeleteLocalRef(env, jcomm);
+ env->ReleaseStringUTFChars(jmailbox, mailbox);
+ env->DeleteLocalRef(jcomm);
jxbt_throw_notbound(env, "task", jtask);
return NULL;
}
-MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
+MSG_task_set_data(task, (void *) env->NewGlobalRef(jtask));
comm = MSG_task_isend(task,mailbox);
- (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
- (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(NULL));
- (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_FALSE);
+ env->SetLongField(jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
+ env->SetLongField(jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(NULL));
+ env->SetBooleanField(jcomm, jtask_field_Comm_receiving, JNI_FALSE);
- (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
+ env->ReleaseStringUTFChars(jmailbox, mailbox);
return jcomm;
}
jobject jcomm;
msg_comm_t comm;
- comm_class = (*env)->FindClass(env, "org/simgrid/msg/Comm");
+ comm_class = env->FindClass("org/simgrid/msg/Comm");
if (!comm_class) return NULL;
- jcomm = (*env)->NewObject(env, comm_class, jtask_method_Comm_constructor);
- mailbox = (*env)->GetStringUTFChars(env, jmailbox, 0);
+ jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
+ mailbox = env->GetStringUTFChars(jmailbox, 0);
task = jtask_to_native_task(jtask, env);
if (!task) {
- (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
- (*env)->DeleteLocalRef(env, jcomm);
+ env->ReleaseStringUTFChars(jmailbox, mailbox);
+ env->DeleteLocalRef(jcomm);
jxbt_throw_notbound(env, "task", jtask);
return NULL;
}
-MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
+ MSG_task_set_data(task, (void *) env->NewGlobalRef(jtask));
comm = MSG_task_isend_bounded(task,mailbox,maxrate);
- (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
- (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(NULL));
- (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_FALSE);
+ env->SetLongField(jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
+ env->SetLongField(jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(NULL));
+ env->SetBooleanField(jcomm, jtask_field_Comm_receiving, JNI_FALSE);
- (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
+ env->ReleaseStringUTFChars(jmailbox, mailbox);
return jcomm;
}
}
static void msg_task_cancel_on_failed_dsend(void*t) {
- msg_task_t task = t;
+ msg_task_t task = (msg_task_t) t;
JNIEnv *env =get_current_thread_env();
- jobject jtask_global = MSG_task_get_data(task);
+ jobject jtask_global = (jobject) MSG_task_get_data(task);
/* Destroy the global ref so that the JVM can free the stuff */
- (*env)->DeleteGlobalRef(env, jtask_global);
+ env->DeleteGlobalRef(jtask_global);
MSG_task_set_data(task, NULL);
MSG_task_destroy(task);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Task_dsend(JNIEnv * env, jobject jtask,
jstring jalias) {
- const char *alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ const char *alias = env->GetStringUTFChars(jalias, 0);
msg_task_t task = jtask_to_native_task(jtask, env);
if (!task) {
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
jxbt_throw_notbound(env, "task", jtask);
return;
}
/* Pass a global ref to the Jtask into the Ctask so that the receiver can use it */
- MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
+ MSG_task_set_data(task, (void *) env->NewGlobalRef(jtask));
MSG_task_dsend(task, alias, msg_task_cancel_on_failed_dsend);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Task_dsendBounded(JNIEnv * env, jobject jtask,
jstring jalias, jdouble maxrate) {
- const char *alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ const char *alias = env->GetStringUTFChars(jalias, 0);
msg_task_t task = jtask_to_native_task(jtask, env);
if (!task) {
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
jxbt_throw_notbound(env, "task", jtask);
return;
}
/* Pass a global ref to the Jtask into the Ctask so that the receiver can use it */
- MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
+ MSG_task_set_data(task, (void *) env->NewGlobalRef(jtask));
MSG_task_dsend_bounded(task, alias, msg_task_cancel_on_failed_dsend,(double)maxrate);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
}
const char *alias;
int rv;
- alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ alias = env->GetStringUTFChars(jalias, 0);
rv = MSG_task_listen(alias);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
return (jboolean) rv;
}
jxbt_throw_notbound(env, "host", jhost);
return -1;
}
- alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ alias = env->GetStringUTFChars(jalias, 0);
rv = MSG_task_listen_from_host(alias, host);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
return (jint) rv;
}
Java_org_simgrid_msg_Task_listenFrom(JNIEnv * env, jclass cls, jstring jalias)
{
int rv;
- const char *alias = (*env)->GetStringUTFChars(env, jalias, 0);
+ const char *alias = env->GetStringUTFChars(jalias, 0);
rv = MSG_task_listen_from(alias);
- (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ env->ReleaseStringUTFChars(jalias, alias);
return (jint) rv;
}
#include <jni.h>
#include "simgrid/msg.h"
+SG_BEGIN_DECL()
/**
* This function associated a native task to a java task instance.
JNIEXPORT jint JNICALL
Java_org_simgrid_msg_Task_listenFrom(JNIEnv *, jclass, jstring);
-
+SG_END_DECL()
#endif /* !MSG_JTASK_H */
#include "jmsg_process.h"
#include "jxbt_utilities.h"
#include "simgrid/msg.h"
+#include <surf/surf_routing.h>
+
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
static jfieldID jvm_field_bind;
void jvm_bind(JNIEnv *env, jobject jvm, msg_vm_t vm) {
- (*env)->SetLongField(env, jvm, jvm_field_bind, (intptr_t)vm);
+ env->SetLongField(jvm, jvm_field_bind, (intptr_t)vm);
}
msg_vm_t jvm_get_native(JNIEnv *env, jobject jvm) {
- return (msg_vm_t)(intptr_t)(*env)->GetLongField(env, jvm, jvm_field_bind);
+ return (msg_vm_t)(intptr_t)env->GetLongField(jvm, jvm_field_bind);
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_VM_nativeInit(JNIEnv *env, jclass cls) {
- jclass jprocess_class_VM = (*env)->FindClass(env, "org/simgrid/msg/VM");
+ jclass jprocess_class_VM = env->FindClass("org/simgrid/msg/VM");
jvm_field_bind = jxbt_get_jfield(env, jprocess_class_VM, "bind", "J");
if (!jvm_field_bind ) {
jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug."));
msg_host_t host = jhost_get_native(env, jhost);
const char *name;
- name = (*env)->GetStringUTFChars(env, jname, 0);
+ name = env->GetStringUTFChars(jname, 0);
name = xbt_strdup(name);
// TODO disk concerns are not taken into account yet
}
/* Sets the host name */
const char *name = MSG_host_get_name(host);
- jobject jname = (*env)->NewStringUTF(env,name);
- (*env)->SetObjectField(env, jhost, jxbt_get_jfield(env, (*env)->FindClass(env, "org/simgrid/msg/Host"), "name", "Ljava/lang/String;"), jname);
+ jobject jname = env->NewStringUTF(name);
+ env->SetObjectField(jhost, jxbt_get_jfield(env,
+ env->FindClass("org/simgrid/msg/Host"), "name", "Ljava/lang/String;"),
+ jname);
/* Bind & store it */
jhost_bind(jhost, host, env);
xbt_lib_set(host_lib, host->key, JAVA_HOST_LEVEL, (void *) jhost);
#include <jni.h>
#include "simgrid/msg.h"
+SG_BEGIN_DECL()
+
void jvm_bind(JNIEnv *env, jobject jvm, msg_vm_t vm);
msg_vm_t jvm_get_native(JNIEnv *env, jobject jvm);
JNIEXPORT jobject JNICALL
Java_org_simgrid_msg_VM_get_pm(JNIEnv *env, jobject jvm);
+
+SG_END_DECL()
+
#endif
/* 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. */
-// Please note, this file strongly relies on the jmsg.c,
+// Please note, this file strongly relies on the jmsg.cpp,
// It will be great that a JNI expert gives a look to validate it - Adrien ;)
#include "jtrace.h"
JNIEXPORT void JNICALL
Java_org_simgrid_trace_Trace_hostStateDeclare(JNIEnv * env, jclass cls, jstring js)
{
- const char *s = (*env)->GetStringUTFChars(env, js, 0);
+ const char *s = env->GetStringUTFChars(js, 0);
TRACE_host_state_declare(s);
- (*env)->ReleaseStringUTFChars(env, js, s);
+ env->ReleaseStringUTFChars(js, s);
}
JNIEXPORT void JNICALL
Java_org_simgrid_trace_Trace_hostStateDeclareValue
(JNIEnv *env, jclass cls, jstring js_state, jstring js_value, jstring js_color)
{
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
- const char *value = (*env)->GetStringUTFChars(env, js_value, 0);
- const char *color = (*env)->GetStringUTFChars(env, js_color, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
+ const char *value = env->GetStringUTFChars(js_value, 0);
+ const char *color = env->GetStringUTFChars(js_color, 0);
TRACE_host_state_declare_value(state, value, color);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
- (*env)->ReleaseStringUTFChars(env, js_value, value);
- (*env)->ReleaseStringUTFChars(env, js_color, color);
+ env->ReleaseStringUTFChars(js_state, state);
+ env->ReleaseStringUTFChars(js_value, value);
+ env->ReleaseStringUTFChars(js_color, color);
}
JNIEXPORT void JNICALL
Java_org_simgrid_trace_Trace_hostSetState
(JNIEnv *env, jclass cls, jstring js_host, jstring js_state, jstring js_value)
{
- const char *host = (*env)->GetStringUTFChars(env, js_host, 0);
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
- const char *value = (*env)->GetStringUTFChars(env, js_value, 0);
+ const char *host = env->GetStringUTFChars(js_host, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
+ const char *value = env->GetStringUTFChars(js_value, 0);
TRACE_host_set_state(host, state, value);
- (*env)->ReleaseStringUTFChars(env, js_host, host);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
- (*env)->ReleaseStringUTFChars(env, js_value, value);
+ env->ReleaseStringUTFChars(js_host, host);
+ env->ReleaseStringUTFChars(js_state, state);
+ env->ReleaseStringUTFChars(js_value, value);
}
JNIEXPORT void JNICALL
Java_org_simgrid_trace_Trace_hostPushState
(JNIEnv *env, jclass cls, jstring js_host, jstring js_state, jstring js_value)
{
- const char *host = (*env)->GetStringUTFChars(env, js_host, 0);
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
- const char *value = (*env)->GetStringUTFChars(env, js_value, 0);
+ const char *host = env->GetStringUTFChars(js_host, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
+ const char *value = env->GetStringUTFChars(js_value, 0);
TRACE_host_push_state(host, state, value);
- (*env)->ReleaseStringUTFChars(env, js_host, host);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
- (*env)->ReleaseStringUTFChars(env, js_value, value);
+ env->ReleaseStringUTFChars(js_host, host);
+ env->ReleaseStringUTFChars(js_state, state);
+ env->ReleaseStringUTFChars(js_value, value);
}
JNIEXPORT void JNICALL
Java_org_simgrid_trace_Trace_hostPopState
(JNIEnv *env, jclass cls, jstring js_host, jstring js_state)
{
- const char *host = (*env)->GetStringUTFChars(env, js_host, 0);
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+ const char *host = env->GetStringUTFChars(js_host, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
TRACE_host_pop_state(host, state);
- (*env)->ReleaseStringUTFChars(env, js_host, host);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
+ env->ReleaseStringUTFChars(js_host, host);
+ env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableDeclare
(JNIEnv *env, jclass cls, jstring js_state)
{
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
TRACE_host_variable_declare(state);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
+ env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableSet
(JNIEnv *env, jclass cls, jstring js_host, jstring js_state, jdouble value)
{
- const char *host = (*env)->GetStringUTFChars(env, js_host, 0);
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+ const char *host = env->GetStringUTFChars(js_host, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
TRACE_host_variable_set(host, state, value);
- (*env)->ReleaseStringUTFChars(env, js_host, host);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
+ env->ReleaseStringUTFChars(js_host, host);
+ env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableSub
(JNIEnv *env, jclass cls, jstring js_host, jstring js_state, jdouble value)
{
- const char *host = (*env)->GetStringUTFChars(env, js_host, 0);
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+ const char *host = env->GetStringUTFChars(js_host, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
TRACE_host_variable_sub(host, state, value);
- (*env)->ReleaseStringUTFChars(env, js_host, host);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
+ env->ReleaseStringUTFChars(js_host, host);
+ env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_vmVariableDeclare
(JNIEnv *env, jclass cls, jstring js_state)
{
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
TRACE_vm_variable_declare(state);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
+ env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_vmVariableSet
(JNIEnv *env, jclass cls, jstring js_vm, jstring js_state, jdouble value)
{
- const char *vm = (*env)->GetStringUTFChars(env, js_vm, 0);
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+ const char *vm = env->GetStringUTFChars(js_vm, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
TRACE_vm_variable_set(vm, state, value);
- (*env)->ReleaseStringUTFChars(env, js_vm, vm);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
+ env->ReleaseStringUTFChars(js_vm, vm);
+ env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableAdd
(JNIEnv *env, jclass cls, jstring js_host, jstring js_state, jdouble value) {
- const char *host = (*env)->GetStringUTFChars(env, js_host, 0);
- const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+ const char *host = env->GetStringUTFChars(js_host, 0);
+ const char *state = env->GetStringUTFChars(js_state, 0);
TRACE_host_variable_set(host, state, value);
- (*env)->ReleaseStringUTFChars(env, js_host, host);
- (*env)->ReleaseStringUTFChars(env, js_state, state);
+ env->ReleaseStringUTFChars(js_host, host);
+ env->ReleaseStringUTFChars(js_state, state);
}
jclass jxbt_get_class(JNIEnv * env, const char *name)
{
- jclass cls = (*env)->FindClass(env, name);
+ jclass cls = env->FindClass(name);
if (!cls) {
char *m = bprintf("Class %s not found", name);
if (!cls)
return 0;
- id = (*env)->GetMethodID(env, cls, name, signature);
+ id = env->GetMethodID(cls, name, signature);
if (!id) {
jmethodID tostr_id =
- (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;");
+ env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
jstring jclassname =
- (jstring) (*env)->CallObjectMethod(env, cls, tostr_id, NULL);
- const char *classname = (*env)->GetStringUTFChars(env, jclassname, 0);
+ (jstring) env->CallObjectMethod(cls, tostr_id, NULL);
+ const char *classname = env->GetStringUTFChars(jclassname, 0);
char *m = bprintf("Cannot find method %s(%s) in %s", name, signature,
classname);
- (*env)->ReleaseStringUTFChars(env, jclassname, classname);
+ env->ReleaseStringUTFChars(jclassname, classname);
jxbt_throw_jni(env, m);
if (!cls)
return 0;
- id = (*env)->GetStaticMethodID(env, cls, name, signature);
+ id = env->GetStaticMethodID(cls, name, signature);
if (!id) {
jmethodID tostr_id =
- (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;");
+ env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
jstring jclassname =
- (jstring) (*env)->CallObjectMethod(env, cls, tostr_id, NULL);
- const char *classname = (*env)->GetStringUTFChars(env, jclassname, 0);
+ (jstring) env->CallObjectMethod(cls, tostr_id, NULL);
+ const char *classname = env->GetStringUTFChars(jclassname, 0);
char *m =
bprintf("Cannot find static method %s(%s) in %s", name, signature,
classname);
- (*env)->ReleaseStringUTFChars(env, jclassname, classname);
+ env->ReleaseStringUTFChars(jclassname, classname);
jxbt_throw_jni(env, m);
if (!cls)
return 0;
- id = (*env)->GetStaticMethodID(env, cls, name, signature);
+ id = env->GetStaticMethodID(cls, name, signature);
if (!id) {
char *m =
if (!cls)
return 0;
- id = (*env)->GetMethodID(env, cls, name, signature);
+ id = env->GetMethodID(cls, name, signature);
if (!id) {
char *m = bprintf("Cannot find method %s(%s) in %s", name, signature,
if (!cls)
return 0;
- id = (*env)->GetFieldID(env, cls, name, signature);
+ id = env->GetFieldID(cls, name, signature);
if (!id) {
jmethodID getname_id =
- (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;");
+ env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
jstring jclassname =
- (jstring) (*env)->CallObjectMethod(env, cls, getname_id, NULL);
- const char *classname = (*env)->GetStringUTFChars(env, jclassname, 0);
+ (jstring) env->CallObjectMethod(cls, getname_id, NULL);
+ const char *classname = env->GetStringUTFChars(jclassname, 0);
char *m = bprintf("Cannot find field %s %s in %s", signature, name,
classname);
- (*env)->ReleaseStringUTFChars(env, jclassname, classname);
+ env->ReleaseStringUTFChars(jclassname, classname);
jxbt_throw_jni(env, m);
if (!cls)
return 0;
- id = (*env)->GetFieldID(env, cls, name, signature);
+ id = env->GetFieldID(cls, name, signature);
if (!id) {
char *m = bprintf("Cannot find field %s %s in %s", signature, name,
/* ***************** */
void jxbt_throw_by_name(JNIEnv * env, const char *name, char *msg)
{
- jclass cls = (*env)->FindClass(env, name);
+ jclass cls = env->FindClass(name);
xbt_assert(cls, "%s (Plus severe error: class %s not found)\n", msg,
name);
- (*env)->ThrowNew(env, cls, msg);
+ env->ThrowNew(cls, msg);
free(msg);
}
/* JNI GETTERS */
/* *********** */
+SG_BEGIN_DECL()
+
/* Search a class and throw an exception if not found */
jclass jxbt_get_class(JNIEnv * env, const char *name);
/* Search a method in a class and throw an exception if not found
(it's ok to to pass a NULL class: it's a noop) */
-jmethodID jxbt_get_jmethod(JNIEnv * env, jclass class,
+jmethodID jxbt_get_jmethod(JNIEnv * env, jclass cls,
const char *name, const char *signature);
/* Like the jxbt_get_class() but get a static method */
/* Search a field in a class and throw an exception if not found
(it's ok to to pass a NULL class: it's a noop) */
-jfieldID jxbt_get_jfield(JNIEnv * env, jclass class,
+jfieldID jxbt_get_jfield(JNIEnv * env, jclass cls,
const char *name, const char *signature);
/** 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 */
+
+SG_END_DECL()
if (System.getProperty("os.name").toLowerCase().startsWith("win"))
NativeLib.nativeInit("winpthread-1");
+ try {
+ NativeLib.nativeInit("boost_context");
+ } catch (Exception e) {/* Dont care */}
NativeLib.nativeInit("simgrid");
NativeLib.nativeInit("surf-java");
NativeLib.nativeInit("simgrid-java");
*/
public native static int listenFrom(String mailbox);
/**
- * Listen whether there is a waiting task on the mailbox identified by the specified alias
+ * Listen whether there is a task waiting (either for a send or a recv) on the mailbox identified by the specified alias
*/
public native static boolean listen(String mailbox);
package org.simgrid.surf;
-/**
- * An action created by a Resource (e.g., a communication, an execution)
- * @see Model
- * @see Resource
- */
public class Action {
private long swigCPtr;
protected boolean swigCMemOwn;
}
}
- protected static long[] cArrayUnwrap(Action[] arrayWrapper) {
- long[] cArray = new long[arrayWrapper.length];
- for (int i=0; i<arrayWrapper.length; i++)
- cArray[i] = Action.getCPtr(arrayWrapper[i]);
- return cArray;
- }
-
- protected static Action[] cArrayWrap(long[] cArray, boolean cMemoryOwn) {
- Action[] arrayWrapper = new Action[cArray.length];
- for (int i=0; i<cArray.length; i++)
- arrayWrapper[i] = new Action(cArray[i], cMemoryOwn);
- return arrayWrapper;
- }
-
-
- /**
- * Action constructor
- * @param model The model associated
- * @param cost The cost of the action (e.g., flops, bytes)
- * @param failed If the action has failed
- */
public Action(Model model, double cost, boolean failed) {
this(SurfJNI.new_Action(Model.getCPtr(model), model, cost, failed), true);
}
-
- /**
- * @return The model associated
- */
public Model getModel() {
long cPtr = SurfJNI.Action_getModel(swigCPtr, this);
return (cPtr == 0) ? null : new Model(cPtr, false);
}
-
- /**
- * @return The variable associatied (if using LMM)
- */
public LmmVariable getVariable() {
long cPtr = SurfJNI.Action_getVariable(swigCPtr, this);
return (cPtr == 0) ? null : new LmmVariable(cPtr, false);
}
-
- /**
- * @return The state of the action
- */
public ActionState getState() {
return ActionState.swigToEnum(SurfJNI.Action_getState(swigCPtr, this));
}
-
- /**
- * @return True if suspended
- */
public boolean isSuspended() {
return SurfJNI.Action_isSuspended(swigCPtr, this);
}
-
- /**
- * @return TODO
- */
public double getBound() {
return SurfJNI.Action_getBound(swigCPtr, this);
}
-
- /**
- * @param bound TODO
- */
public void setBound(double bound) {
SurfJNI.Action_setBound(swigCPtr, this, bound);
}
-
- /**
- * Update remaining amount of cost to do
- * @param delta Difference of time since last call to this function
- */
public void updateRemains(double delta) {
SurfJNI.Action_updateRemains(swigCPtr, this, delta);
}
-
- /**
- * @return The remaining amount of cost to do
- */
public double getRemains() {
return SurfJNI.Action_getRemains(swigCPtr, this);
}
-
- /**
- * @param priority The new priority of the action
- */
public void setPriority(double priority) {
SurfJNI.Action_setPriority(swigCPtr, this, priority);
}
-
- /**
- * @param state The new state
- */
public void setState(ActionState state) {
SurfJNI.Action_setState(swigCPtr, this, state.swigValue());
}
package org.simgrid.surf;
-/**
- * A generic resource for the cpu component
- * @see CpuModel
- * @see CpuAction
- */
public class Cpu extends Resource {
private long swigCPtr;
SurfJNI.Cpu_change_ownership(this, swigCPtr, true);
}
-
- /**
- * A cpu constructor (using LMM)
- * @param model
- * @param name
- * @param props
- * @param constraint
- * @param core
- * @param powerPeak
- * @param powerScale
- */
public Cpu(Model model, String name, XbtDict props, LmmConstraint constraint, int core, double powerPeak, double powerScale) {
this(SurfJNI.new_Cpu__SWIG_0(Model.getCPtr(model), model, name, XbtDict.getCPtr(props), props, LmmConstraint.getCPtr(constraint), constraint, core, powerPeak, powerScale), true);
SurfJNI.Cpu_director_connect(this, swigCPtr, swigCMemOwn, true);
}
-
- /**
- * A cpu constructor
- * @param model
- * @param name
- * @param props
- * @param core
- * @param powerPeak
- * @param powerScale
- */
public Cpu(Model model, String name, XbtDict props, int core, double powerPeak, double powerScale) {
this(SurfJNI.new_Cpu__SWIG_1(Model.getCPtr(model), model, name, XbtDict.getCPtr(props), props, core, powerPeak, powerScale), true);
SurfJNI.Cpu_director_connect(this, swigCPtr, swigCMemOwn, true);
}
-
- /**
- * @return The current power peak
- */
public double getCurrentPowerPeak() {
return (getClass() == Cpu.class) ? SurfJNI.Cpu_getCurrentPowerPeak(swigCPtr, this) : SurfJNI.Cpu_getCurrentPowerPeakSwigExplicitCpu(swigCPtr, this);
}
-
- /**
- * Execute some quantity of computation
- * @param size The processing amount (in flop) needed to process
- * @return A cpu action representing code execution
- */
public CpuAction execute(double size) {
- long cPtr = SurfJNI.Cpu_execute(swigCPtr, this, size);
- return (CpuAction)Surf.getCpuDirector(cPtr);
-}
+ long cPtr = SurfJNI.Cpu_execute(swigCPtr, this, size);
+ return (cPtr == 0) ? null : new CpuAction(cPtr, false);
+ }
-
- /**
- * Make a process sleep for duration
- * @param duration The number of seconds to sleep
- * @return A cpu action representing sleeping
- */
public CpuAction sleep(double duration) {
- long cPtr = SurfJNI.Cpu_sleep(swigCPtr, this, duration);
- return (CpuAction)Surf.getCpuDirector(cPtr);
-}
+ long cPtr = SurfJNI.Cpu_sleep(swigCPtr, this, duration);
+ return (cPtr == 0) ? null : new CpuAction(cPtr, false);
+ }
-
- /**
- * @return The number of cores on the cpu
- */
public int getCore() {
return (getClass() == Cpu.class) ? SurfJNI.Cpu_getCore(swigCPtr, this) : SurfJNI.Cpu_getCoreSwigExplicitCpu(swigCPtr, this);
}
-
- /**
- * TODO
- * @param load
- */
public double getSpeed(double load) {
return (getClass() == Cpu.class) ? SurfJNI.Cpu_getSpeed(swigCPtr, this, load) : SurfJNI.Cpu_getSpeedSwigExplicitCpu(swigCPtr, this, load);
}
-
- /**
- * TODO
- */
public double getAvailableSpeed() {
return (getClass() == Cpu.class) ? SurfJNI.Cpu_getAvailableSpeed(swigCPtr, this) : SurfJNI.Cpu_getAvailableSpeedSwigExplicitCpu(swigCPtr, this);
}
-
- /**
- * @param pstate_index index of power peak to get
- * @return Power peak at index
- */
public double getPowerPeakAt(int pstate_index) {
return SurfJNI.Cpu_getPowerPeakAt(swigCPtr, this, pstate_index);
}
-
- /**
- * @return Number of power peak
- */
public int getNbPstates() {
return SurfJNI.Cpu_getNbPstates(swigCPtr, this);
}
return SurfJNI.Cpu_getPstate(swigCPtr, this);
}
-
- /**
- * @param state The new state of the cpu
- */
public void setState(ResourceState state) {
SurfJNI.Cpu_setState(swigCPtr, this, state.swigValue());
}
package org.simgrid.surf;
-/**
- * An cpu action created by a Cpu
- * @see CpuModel
- * @see Cpu
- */
public class CpuAction extends Action {
private long swigCPtr;
SurfJNI.CpuAction_change_ownership(this, swigCPtr, true);
}
-
- /**
- * CpuAction constructor
- * @param model The model associated
- * @param cost The cost of the action (e.g., flops, bytes)
- * @param failed If the action has failed
- */
public CpuAction(Model model, double cost, boolean failed) {
this(SurfJNI.new_CpuAction(Model.getCPtr(model), model, cost, failed), true);
SurfJNI.CpuAction_director_connect(this, swigCPtr, swigCMemOwn, true);
}
-
- /**
- * @return The associated cpu
- */
public Cpu getCpu() {
- long cPtr = SurfJNI.CpuAction_getCpu(swigCPtr, this);
- return (Cpu)Surf.getCpuDirector(cPtr);
-}
+ long cPtr = SurfJNI.CpuAction_getCpu(swigCPtr, this);
+ return (cPtr == 0) ? null : new Cpu(cPtr, false);
+ }
}
package org.simgrid.surf;
-/**
- * The generic model for the Cpu component
- * @see Cpu
- * @see CpuAction
- */
public class CpuModel extends Model {
private long swigCPtr;
SurfJNI.CpuModel_director_connect(this, swigCPtr, swigCMemOwn, true);
}
-
- /**
- * Create a new Cpu
- *
- * @param name
- * @param power_peak
- * @param pstate
- * @param power_scale
- * @param power_trace
- * @param core
- * @param state_initial
- * @param state_trace
- * @param cpu_properties
- * @return The new Cpu
- * @see Cpu
- */
public Cpu createCpu(String name, double[] power_peak, int pstate, double power_scale, TmgrTrace power_trace, int core, ResourceState state_initial, TmgrTrace state_trace, XbtDict cpu_properties) {
- long cPtr = SurfJNI.CpuModel_createCpu(swigCPtr, this, name, power_peak, pstate, power_scale, TmgrTrace.getCPtr(power_trace), power_trace, core, state_initial.swigValue(), TmgrTrace.getCPtr(state_trace), state_trace, XbtDict.getCPtr(cpu_properties), cpu_properties);
- return (Cpu)Surf.getCpuDirector(cPtr);
-}
+ long cPtr = SurfJNI.CpuModel_createCpu(swigCPtr, this, name, power_peak, pstate, power_scale, TmgrTrace.getCPtr(power_trace), power_trace, core, state_initial.swigValue(), TmgrTrace.getCPtr(state_trace), state_trace, XbtDict.getCPtr(cpu_properties), cpu_properties);
+ return (cPtr == 0) ? null : new Cpu(cPtr, false);
+ }
}
package org.simgrid.surf;
-/**
- * A generic resource for the network component
- */
public class Link extends Resource {
private long swigCPtr;
return arrayWrapper;
}
-
- /**
- * @return The bandwidth of the link
- */
public double getBandwidth() {
return SurfJNI.Link_getBandwidth(swigCPtr, this);
}
-
- /**
- * @param value The new bandwidth
- */
public void updateBandwidth(double value, double date) {
SurfJNI.Link_updateBandwidth__SWIG_0(swigCPtr, this, value, date);
}
-
- /**
- * @param value The new bandwidth
- */
public void updateBandwidth(double value) {
SurfJNI.Link_updateBandwidth__SWIG_1(swigCPtr, this, value);
}
-
- /**
- * @return The latency of the link
- */
public double getLatency() {
return SurfJNI.Link_getLatency(swigCPtr, this);
}
-
- /**
- * @param value The new latency
- */
public void updateLatency(double value, double date) {
SurfJNI.Link_updateLatency__SWIG_0(swigCPtr, this, value, date);
}
-
- /**
- * @param value The new latency
- */
public void updateLatency(double value) {
SurfJNI.Link_updateLatency__SWIG_1(swigCPtr, this, value);
}
package org.simgrid.surf;
-/**
- * A component (e.g., Cpu, Network, Storage, ...) is composed of three classes:
- * <ul>
- * <li> Model: It handle the interactions between resoucses and actions</li>
- * <li> Resource: A resource used by the model (e.g., a cpu, a network link)</li>
- * <li> Action: An action generated by the resources (e.g., execution, communication)</li>
- * </ul>
- * @see Resource
- * @see Action
- */
public class Model {
private long swigCPtr;
protected boolean swigCMemOwn;
}
}
-
- /**
- * Share the resources between the actions
- * @param now the current time
- * @return the date of the next action of the model will finish
- */
public double shareResources(double now) {
return SurfJNI.Model_shareResources(swigCPtr, this, now);
}
return SurfJNI.Model_shareResourcesFull(swigCPtr, this, now);
}
-
- /**
- * Update time of actions and eventually their states
- * @param now the new current time
- * @param delta the delta between previous and new current time
- */
public void updateActionsState(double now, double delta) {
SurfJNI.Model_updateActionsState(swigCPtr, this, now, delta);
}
SurfJNI.Model_updateActionsStateFull(swigCPtr, this, now, delta);
}
-
- /**
- * Get the List of running Actions
- */
public ActionList getRunningActionSet() {
long cPtr = SurfJNI.Model_getRunningActionSet(swigCPtr, this);
return (cPtr == 0) ? null : new ActionList(cPtr, false);
package org.simgrid.surf;
-/**
- * An network action created by network model
- * @see Link
- */
public class NetworkAction extends Action {
private long swigCPtr;
super.delete();
}
-
- /**
- * @return The latency of the action
- */
public double getLatency() {
return SurfJNI.NetworkAction_getLatency(swigCPtr, this);
}
package org.simgrid.surf;
-/**
- * A resource used by a model (e.g., a cpu, a network link)
- * @see Model
- * @see Action
- */
public class Resource {
private long swigCPtr;
protected boolean swigCMemOwn;
}
}
-
- /**
- * @return The name of the resource
- */
public String getName() {
return SurfJNI.Resource_getName(swigCPtr, this);
}
-
- /**
- * @return True if the Resource is used
- */
public boolean isUsed() {
return SurfJNI.Resource_isUsed(swigCPtr, this);
}
-
- /**
- * @return The model associated to this Resource
- */
public Model getModel() {
long cPtr = SurfJNI.Resource_getModel(swigCPtr, this);
return (cPtr == 0) ? null : new Model(cPtr, false);
}
-
- /**
- * @return The state of the resource
- * @see ResourceState
- */
public ResourceState getState() {
return ResourceState.swigToEnum(SurfJNI.Resource_getState(swigCPtr, this));
}
-
- /**
- * @return The constraint associatied (if using LMM)
- */
public LmmConstraint getConstraint() {
long cPtr = SurfJNI.Resource_getConstraint(swigCPtr, this);
return (cPtr == 0) ? null : new LmmConstraint(cPtr, false);
}
-
- /**
- * @return The XbtDict of properties associated to this Resource
- */
public XbtDict getProperties() {
long cPtr = SurfJNI.Resource_getProperties(swigCPtr, this);
return (cPtr == 0) ? null : new XbtDict(cPtr, false);
}
-
- /**
- * Update the state of the Resource
- * @param event_type
- * @param value
- * @param date
- */
public void updateState(TmgrTraceEvent event_type, double value, double date) {
SurfJNI.Resource_updateState(swigCPtr, this, TmgrTraceEvent.getCPtr(event_type), event_type, value, date);
}
}
public static CpuModel getCpuModel() {
- long cPtr = SurfJNI.getCpuModel();
- return (CpuModel)Surf.getCpuModelDirector(cPtr);
-}
+ long cPtr = SurfJNI.getCpuModel();
+ return (cPtr == 0) ? null : new CpuModel(cPtr, false);
+ }
public static void setCpuModel(CpuModel cpuModel) {
SurfJNI.setCpuModel(CpuModel.getCPtr(cpuModel), cpuModel);
typedef struct lmm_constraint *lmm_constraint_t;
typedef xbt_dynar_t DoubleDynar;
-SWIGINTERN ActionArrayPtr ActionList_getArray(ActionList *self){
+SWIGINTERN ActionArrayPtr simgrid_surf_ActionList_getArray(simgrid::surf::ActionList *self){
return self;
}
SWIGINTERN unsigned int tmgr_trace_event_getIdx(tmgr_trace_event *self){return 0;}
-SWIGINTERN Cpu *CpuAction_getCpu(CpuAction *self){return getActionCpu(self);}
-SWIGINTERN double NetworkAction_getLatency(NetworkAction *self){return self->m_latency;}
+SWIGINTERN simgrid::surf::Cpu *simgrid_surf_CpuAction_getCpu(simgrid::surf::CpuAction *self){return getActionCpu(self);}
+SWIGINTERN double simgrid_surf_NetworkAction_getLatency(simgrid::surf::NetworkAction *self){return self->m_latency;}
SWIGINTERN double lmm_constraint_getUsage(lmm_constraint *self){return lmm_constraint_get_usage(self);}
SWIGINTERN double lmm_variable_getValue(lmm_variable *self){return lmm_variable_getvalue(self);}
SWIGINTERN char *s_xbt_dict_getValue(s_xbt_dict *self,char *key){return (char*)xbt_dict_get_or_null(self, key);}
}
-void SwigDirector_Plugin::cpuCreatedCallback(Cpu *cpu) {
+void SwigDirector_Plugin::cpuCreatedCallback(simgrid::surf::Cpu *cpu) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((Cpu **)&jcpu) = (Cpu *) cpu;
+ *((simgrid::surf::Cpu **)&jcpu) = (simgrid::surf::Cpu *) cpu;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[0], swigjobj, jcpu);
if (jenv->ExceptionCheck() == JNI_TRUE) return ;
} else {
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-void SwigDirector_Plugin::cpuDestructedCallback(Cpu *cpu) {
+void SwigDirector_Plugin::cpuDestructedCallback(simgrid::surf::Cpu *cpu) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((Cpu **)&jcpu) = (Cpu *) cpu;
+ *((simgrid::surf::Cpu **)&jcpu) = (simgrid::surf::Cpu *) cpu;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[1], swigjobj, jcpu);
if (jenv->ExceptionCheck() == JNI_TRUE) return ;
} else {
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-void SwigDirector_Plugin::cpuStateChangedCallback(Cpu *cpu, e_surf_resource_state_t arg1, e_surf_resource_state_t arg2) {
+void SwigDirector_Plugin::cpuStateChangedCallback(simgrid::surf::Cpu *cpu, e_surf_resource_state_t arg1, e_surf_resource_state_t arg2) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((Cpu **)&jcpu) = (Cpu *) cpu;
+ *((simgrid::surf::Cpu **)&jcpu) = (simgrid::surf::Cpu *) cpu;
jarg1 = (jint) arg1;
jarg2 = (jint) arg2;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[2], swigjobj, jcpu, jarg1, jarg2);
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-void SwigDirector_Plugin::cpuActionStateChangedCallback(CpuAction *action, e_surf_action_state_t arg1, e_surf_action_state_t arg2) {
+void SwigDirector_Plugin::cpuActionStateChangedCallback(simgrid::surf::CpuAction *action, e_surf_action_state_t arg1, e_surf_action_state_t arg2) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((CpuAction **)&jaction) = (CpuAction *) action;
+ *((simgrid::surf::CpuAction **)&jaction) = (simgrid::surf::CpuAction *) action;
jarg1 = (jint) arg1;
jarg2 = (jint) arg2;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[3], swigjobj, jaction, jarg1, jarg2);
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-void SwigDirector_Plugin::networkLinkCreatedCallback(Link *link) {
+void SwigDirector_Plugin::networkLinkCreatedCallback(simgrid::surf::Link *link) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((Link **)&jlink) = (Link *) link;
+ *((simgrid::surf::Link **)&jlink) = (simgrid::surf::Link *) link;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[4], swigjobj, jlink);
if (jenv->ExceptionCheck() == JNI_TRUE) return ;
} else {
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-void SwigDirector_Plugin::networkLinkDestructedCallback(Link *link) {
+void SwigDirector_Plugin::networkLinkDestructedCallback(simgrid::surf::Link *link) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((Link **)&jlink) = (Link *) link;
+ *((simgrid::surf::Link **)&jlink) = (simgrid::surf::Link *) link;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[5], swigjobj, jlink);
if (jenv->ExceptionCheck() == JNI_TRUE) return ;
} else {
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-void SwigDirector_Plugin::networkLinkStateChangedCallback(Link *link, e_surf_resource_state_t arg1, e_surf_resource_state_t arg2) {
+void SwigDirector_Plugin::networkLinkStateChangedCallback(simgrid::surf::Link *link, e_surf_resource_state_t arg1, e_surf_resource_state_t arg2) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((Link **)&jlink) = (Link *) link;
+ *((simgrid::surf::Link **)&jlink) = (simgrid::surf::Link *) link;
jarg1 = (jint) arg1;
jarg2 = (jint) arg2;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[6], swigjobj, jlink, jarg1, jarg2);
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-void SwigDirector_Plugin::networkActionStateChangedCallback(NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t cur) {
+void SwigDirector_Plugin::networkActionStateChangedCallback(simgrid::surf::NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t cur) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((NetworkAction **)&jaction) = (NetworkAction *) action;
+ *((simgrid::surf::NetworkAction **)&jaction) = (simgrid::surf::NetworkAction *) action;
jold = (jint) old;
jcur = (jint) cur;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[7], swigjobj, jaction, jold, jcur);
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-void SwigDirector_Plugin::networkCommunicateCallback(NetworkAction *action, RoutingEdge *src, RoutingEdge *dst, double size, double rate) {
+void SwigDirector_Plugin::networkCommunicateCallback(simgrid::surf::NetworkAction *action, simgrid::surf::RoutingEdge *src, simgrid::surf::RoutingEdge *dst, double size, double rate) {
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
- *((NetworkAction **)&jaction) = (NetworkAction *) action;
- *((RoutingEdge **)&jsrc) = (RoutingEdge *) src;
- *((RoutingEdge **)&jdst) = (RoutingEdge *) dst;
+ *((simgrid::surf::NetworkAction **)&jaction) = (simgrid::surf::NetworkAction *) action;
+ *((simgrid::surf::RoutingEdge **)&jsrc) = (simgrid::surf::RoutingEdge *) src;
+ *((simgrid::surf::RoutingEdge **)&jdst) = (simgrid::surf::RoutingEdge *) dst;
jsize = (jdouble) size;
jrate = (jdouble) rate;
jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[8], swigjobj, jaction, jsrc, jdst, jsize, jrate);
}
-SwigDirector_CpuModel::SwigDirector_CpuModel(JNIEnv *jenv) : CpuModel(), Swig::Director(jenv) {
+SwigDirector_CpuModel::SwigDirector_CpuModel(JNIEnv *jenv) : simgrid::surf::CpuModel(), Swig::Director(jenv) {
}
double SwigDirector_CpuModel::shareResources(double now) {
jdouble jnow ;
if (!swig_override[0]) {
- return Model::shareResources(now);
+ return simgrid::surf::Model::shareResources(now);
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jdouble jnow ;
if (!swig_override[1]) {
- return Model::shareResourcesLazy(now);
+ return simgrid::surf::Model::shareResourcesLazy(now);
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jdouble jnow ;
if (!swig_override[2]) {
- return Model::shareResourcesFull(now);
+ return simgrid::surf::Model::shareResourcesFull(now);
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jdouble jdelta ;
if (!swig_override[3]) {
- Model::updateActionsState(now,delta);
+ simgrid::surf::Model::updateActionsState(now,delta);
return;
}
swigjobj = swig_get_self(jenv);
jdouble jdelta ;
if (!swig_override[4]) {
- Model::updateActionsStateLazy(now,delta);
+ simgrid::surf::Model::updateActionsStateLazy(now,delta);
return;
}
swigjobj = swig_get_self(jenv);
jdouble jdelta ;
if (!swig_override[5]) {
- Model::updateActionsStateFull(now,delta);
+ simgrid::surf::Model::updateActionsStateFull(now,delta);
return;
}
swigjobj = swig_get_self(jenv);
if (swigjobj) jenv->DeleteLocalRef(swigjobj);
}
-ActionList *SwigDirector_CpuModel::getRunningActionSet() {
- ActionList *c_result = 0 ;
+simgrid::surf::ActionList *SwigDirector_CpuModel::getRunningActionSet() {
+ simgrid::surf::ActionList *c_result = 0 ;
jlong jresult = 0 ;
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jobject swigjobj = (jobject) NULL ;
if (!swig_override[6]) {
- return Model::getRunningActionSet();
+ return simgrid::surf::Model::getRunningActionSet();
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jresult = (jlong) jenv->CallStaticLongMethod(Swig::jclass_SurfJNI, Swig::director_methids[15], swigjobj);
if (jenv->ExceptionCheck() == JNI_TRUE) return c_result;
- c_result = *(ActionList **)&jresult;
+ c_result = *(simgrid::surf::ActionList **)&jresult;
} else {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object");
}
jobject swigjobj = (jobject) NULL ;
if (!swig_override[7]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method CpuModel::addTraces.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::CpuModel::addTraces.");
return;
}
swigjobj = swig_get_self(jenv);
}
-Cpu *SwigDirector_CpuModel::createCpu(char const *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties) {
- Cpu *c_result = 0 ;
+simgrid::surf::Cpu *SwigDirector_CpuModel::createCpu(char const *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties) {
+ simgrid::surf::Cpu *c_result = 0 ;
jlong jresult = 0 ;
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jlong jcpu_properties = 0 ;
if (!swig_override[8]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method CpuModel::createCpu.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::CpuModel::createCpu.");
return c_result;
}
swigjobj = swig_get_self(jenv);
long l = xbt_dynar_length(power_peak);
jpower_peak = jenv->NewDoubleArray(l);
- double *lout = (double *)xbt_dynar_to_array(power_peak);
+ double *lout = (double *) xbt_dynar_get_ptr(power_peak, 0);
jenv->SetDoubleArrayRegion(jpower_peak, 0, l, (jdouble*)lout);
- free(lout);
jpstate = (jint) pstate;
jpower_scale = (jdouble) power_scale;
*((s_xbt_dict **)&jcpu_properties) = (s_xbt_dict *) cpu_properties;
jresult = (jlong) jenv->CallStaticLongMethod(Swig::jclass_SurfJNI, Swig::director_methids[17], swigjobj, jname, jpower_peak, jpstate, jpower_scale, jpower_trace, jcore, jstate_initial, jstate_trace, jcpu_properties);
if (jenv->ExceptionCheck() == JNI_TRUE) return c_result;
- c_result = *(Cpu **)&jresult;
+ c_result = *(simgrid::surf::Cpu **)&jresult;
} else {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object");
}
}
-SwigDirector_Cpu::SwigDirector_Cpu(JNIEnv *jenv, Model *model, char const *name, s_xbt_dict *props, lmm_constraint *constraint, int core, double powerPeak, double powerScale) : Cpu(model, name, props, constraint, core, powerPeak, powerScale), Swig::Director(jenv) {
+SwigDirector_Cpu::SwigDirector_Cpu(JNIEnv *jenv, simgrid::surf::Model *model, char const *name, s_xbt_dict *props, lmm_constraint *constraint, int core, double powerPeak, double powerScale) : simgrid::surf::Cpu(model, name, props, constraint, core, powerPeak, powerScale), Swig::Director(jenv) {
}
-SwigDirector_Cpu::SwigDirector_Cpu(JNIEnv *jenv, Model *model, char const *name, s_xbt_dict *props, int core, double powerPeak, double powerScale) : Cpu(model, name, props, core, powerPeak, powerScale), Swig::Director(jenv) {
+SwigDirector_Cpu::SwigDirector_Cpu(JNIEnv *jenv, simgrid::surf::Model *model, char const *name, s_xbt_dict *props, int core, double powerPeak, double powerScale) : simgrid::surf::Cpu(model, name, props, core, powerPeak, powerScale), Swig::Director(jenv) {
}
bool SwigDirector_Cpu::isUsed() {
jobject swigjobj = (jobject) NULL ;
if (!swig_override[0]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method Cpu::isUsed.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::Cpu::isUsed.");
return c_result;
}
swigjobj = swig_get_self(jenv);
jobject swigjobj = (jobject) NULL ;
if (!swig_override[1]) {
- return Resource::getState();
+ return simgrid::surf::Resource::getState();
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jdouble jdate ;
if (!swig_override[2]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method Cpu::updateState.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::Cpu::updateState.");
return;
}
swigjobj = swig_get_self(jenv);
jobject swigjobj = (jobject) NULL ;
if (!swig_override[3]) {
- return Cpu::getCurrentPowerPeak();
+ return simgrid::surf::Cpu::getCurrentPowerPeak();
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
return c_result;
}
-CpuAction *SwigDirector_Cpu::execute(double size) {
- CpuAction *c_result = 0 ;
+simgrid::surf::CpuAction *SwigDirector_Cpu::execute(double size) {
+ simgrid::surf::CpuAction *c_result = 0 ;
jlong jresult = 0 ;
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jdouble jsize ;
if (!swig_override[4]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method Cpu::execute.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::Cpu::execute.");
return c_result;
}
swigjobj = swig_get_self(jenv);
jsize = (jdouble) size;
jresult = (jlong) jenv->CallStaticLongMethod(Swig::jclass_SurfJNI, Swig::director_methids[22], swigjobj, jsize);
if (jenv->ExceptionCheck() == JNI_TRUE) return c_result;
- c_result = *(CpuAction **)&jresult;
+ c_result = *(simgrid::surf::CpuAction **)&jresult;
} else {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object");
}
return c_result;
}
-CpuAction *SwigDirector_Cpu::sleep(double duration) {
- CpuAction *c_result = 0 ;
+simgrid::surf::CpuAction *SwigDirector_Cpu::sleep(double duration) {
+ simgrid::surf::CpuAction *c_result = 0 ;
jlong jresult = 0 ;
JNIEnvWrapper swigjnienv(this) ;
JNIEnv * jenv = swigjnienv.getJNIEnv() ;
jdouble jduration ;
if (!swig_override[5]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method Cpu::sleep.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::Cpu::sleep.");
return c_result;
}
swigjobj = swig_get_self(jenv);
jduration = (jdouble) duration;
jresult = (jlong) jenv->CallStaticLongMethod(Swig::jclass_SurfJNI, Swig::director_methids[23], swigjobj, jduration);
if (jenv->ExceptionCheck() == JNI_TRUE) return c_result;
- c_result = *(CpuAction **)&jresult;
+ c_result = *(simgrid::surf::CpuAction **)&jresult;
} else {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object");
}
jobject swigjobj = (jobject) NULL ;
if (!swig_override[6]) {
- return Cpu::getCore();
+ return simgrid::surf::Cpu::getCore();
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jdouble jload ;
if (!swig_override[7]) {
- return Cpu::getSpeed(load);
+ return simgrid::surf::Cpu::getSpeed(load);
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jobject swigjobj = (jobject) NULL ;
if (!swig_override[8]) {
- return Cpu::getAvailableSpeed();
+ return simgrid::surf::Cpu::getAvailableSpeed();
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jint jpstate_index ;
if (!swig_override[9]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method Cpu::getPowerPeakAt.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::Cpu::getPowerPeakAt.");
return c_result;
}
swigjobj = swig_get_self(jenv);
jobject swigjobj = (jobject) NULL ;
if (!swig_override[10]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method Cpu::getNbPstates.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::Cpu::getNbPstates.");
return c_result;
}
swigjobj = swig_get_self(jenv);
jint jpstate_index ;
if (!swig_override[11]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method Cpu::setPstate.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::Cpu::setPstate.");
return;
}
swigjobj = swig_get_self(jenv);
jobject swigjobj = (jobject) NULL ;
if (!swig_override[12]) {
- SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method Cpu::getPstate.");
+ SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method simgrid::surf::Cpu::getPstate.");
return c_result;
}
swigjobj = swig_get_self(jenv);
}
-SwigDirector_CpuAction::SwigDirector_CpuAction(JNIEnv *jenv, Model *model, double cost, bool failed) : CpuAction(model, cost, failed), Swig::Director(jenv) {
+SwigDirector_CpuAction::SwigDirector_CpuAction(JNIEnv *jenv, simgrid::surf::Model *model, double cost, bool failed) : simgrid::surf::CpuAction(model, cost, failed), Swig::Director(jenv) {
}
SwigDirector_CpuAction::~SwigDirector_CpuAction() {
jobject swigjobj = (jobject) NULL ;
if (!swig_override[0]) {
- return Action::getRemains();
+ return simgrid::surf::Action::getRemains();
}
swigjobj = swig_get_self(jenv);
if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
jdouble jpriority ;
if (!swig_override[1]) {
- Action::setPriority(priority);
+ simgrid::surf::Action::setPriority(priority);
return;
}
swigjobj = swig_get_self(jenv);
jint jstate ;
if (!swig_override[2]) {
- Action::setState(state);
+ simgrid::surf::Action::setState(state);
return;
}
swigjobj = swig_get_self(jenv);
#endif
JNIEXPORT jobject JNICALL Java_org_simgrid_surf_SurfJNI_getAction(JNIEnv *env, jclass cls, jlong jarg1) {
- Action * action = (Action *)jarg1;
+ simgrid::surf::Action * action = (simgrid::surf::Action *)jarg1;
jobject res;
- CpuAction *cpu_action = dynamic_cast<CpuAction*>(action);
+ simgrid::surf::CpuAction *cpu_action =
+ dynamic_cast<simgrid::surf::CpuAction*>(action);
if (cpu_action) {
- SwigDirector_CpuAction *dir_cpu_action = dynamic_cast<SwigDirector_CpuAction*>(cpu_action);
+ SwigDirector_CpuAction *dir_cpu_action =
+ dynamic_cast<SwigDirector_CpuAction*>(cpu_action);
if (dir_cpu_action) {
res = dir_cpu_action->swig_get_self(env);\
} else {
#define GETDIRECTOR(NAME) \
JNIEXPORT jobject JNICALL Java_org_simgrid_surf_SurfJNI_get## NAME ## Director(JNIEnv *env, jclass cls, jlong jarg1)\
{\
- NAME * arg1 = (NAME*)jarg1;\
+ simgrid::surf::NAME * arg1 = (simgrid::surf::NAME*)jarg1;\
SwigDirector_ ##NAME *director = dynamic_cast<SwigDirector_ ##NAME *>(arg1);\
jobject res;\
if (director) {\
SWIGEXPORT jlongArray JNICALL Java_org_simgrid_surf_SurfJNI_ActionList_1getArray(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlongArray jresult = 0 ;
- ActionList *arg1 = (ActionList *) 0 ;
+ simgrid::surf::ActionList *arg1 = (simgrid::surf::ActionList *) 0 ;
ActionArrayPtr result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(ActionList **)&jarg1;
- result = (ActionArrayPtr)ActionList_getArray(arg1);
+ arg1 = *(simgrid::surf::ActionList **)&jarg1;
+ result = (ActionArrayPtr)simgrid_surf_ActionList_getArray(arg1);
{
long l = 0;
- for(ActionList::iterator it(result->begin()), itend(result->end()); it != itend ; ++it) {
+ for(simgrid::surf::ActionList::iterator it(result->begin()), itend(result->end()); it != itend ; ++it) {
l++;
}
jresult = jenv->NewLongArray(l);
jlong *elts = jenv->GetLongArrayElements(jresult, NULL);
l = 0;
- for(ActionList::iterator it(result->begin()), itend(result->end()); it != itend ; ++it) {
- elts[l++] = (jlong)static_cast<Action*>(&*it);
+ for(simgrid::surf::ActionList::iterator it(result->begin()), itend(result->end()); it != itend ; ++it) {
+ elts[l++] = (jlong)static_cast<simgrid::surf::Action*>(&*it);
}
jenv->ReleaseLongArrayElements(jresult, elts, 0);
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_new_1ActionList(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
- ActionList *result = 0 ;
+ simgrid::surf::ActionList *result = 0 ;
(void)jenv;
(void)jcls;
- result = (ActionList *)new ActionList();
- *(ActionList **)&jresult = result;
+ result = (simgrid::surf::ActionList *)new simgrid::surf::ActionList();
+ *(simgrid::surf::ActionList **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1ActionList(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- ActionList *arg1 = (ActionList *) 0 ;
+ simgrid::surf::ActionList *arg1 = (simgrid::surf::ActionList *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(ActionList **)&jarg1;
+ arg1 = *(simgrid::surf::ActionList **)&jarg1;
delete arg1;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_getCpuModel(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
- CpuModel *result = 0 ;
+ simgrid::surf::CpuModel *result = 0 ;
(void)jenv;
(void)jcls;
- result = (CpuModel *)getCpuModel();
- *(CpuModel **)&jresult = result;
+ result = (simgrid::surf::CpuModel *)getCpuModel();
+ *(simgrid::surf::CpuModel **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_setCpuModel(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
- CpuModel *arg1 = (CpuModel *) 0 ;
+ simgrid::surf::CpuModel *arg1 = (simgrid::surf::CpuModel *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(CpuModel **)&jarg1;
+ arg1 = *(simgrid::surf::CpuModel **)&jarg1;
setCpuModel(arg1);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_setCpu(JNIEnv *jenv, jclass jcls, jstring jarg1, jlong jarg2, jobject jarg2_) {
char *arg1 = (char *) 0 ;
- Cpu *arg2 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg2 = (simgrid::surf::Cpu *) 0 ;
(void)jenv;
(void)jcls;
arg1 = (char *)jenv->GetStringUTFChars(jarg1, 0);
if (!arg1) return ;
}
- arg2 = *(Cpu **)&jarg2;
+ arg2 = *(simgrid::surf::Cpu **)&jarg2;
setCpu(arg1,arg2);
{
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1cpuCreatedCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
Plugin *arg1 = (Plugin *) 0 ;
- Cpu *arg2 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg2 = (simgrid::surf::Cpu *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Cpu **)&jarg2;
+ arg2 = *(simgrid::surf::Cpu **)&jarg2;
(arg1)->cpuCreatedCallback(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1cpuCreatedCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
Plugin *arg1 = (Plugin *) 0 ;
- Cpu *arg2 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg2 = (simgrid::surf::Cpu *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Cpu **)&jarg2;
+ arg2 = *(simgrid::surf::Cpu **)&jarg2;
(arg1)->Plugin::cpuCreatedCallback(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1cpuDestructedCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
Plugin *arg1 = (Plugin *) 0 ;
- Cpu *arg2 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg2 = (simgrid::surf::Cpu *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Cpu **)&jarg2;
+ arg2 = *(simgrid::surf::Cpu **)&jarg2;
(arg1)->cpuDestructedCallback(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1cpuDestructedCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
Plugin *arg1 = (Plugin *) 0 ;
- Cpu *arg2 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg2 = (simgrid::surf::Cpu *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Cpu **)&jarg2;
+ arg2 = *(simgrid::surf::Cpu **)&jarg2;
(arg1)->Plugin::cpuDestructedCallback(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1cpuStateChangedCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3, jint jarg4) {
Plugin *arg1 = (Plugin *) 0 ;
- Cpu *arg2 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg2 = (simgrid::surf::Cpu *) 0 ;
e_surf_resource_state_t arg3 ;
e_surf_resource_state_t arg4 ;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Cpu **)&jarg2;
+ arg2 = *(simgrid::surf::Cpu **)&jarg2;
arg3 = (e_surf_resource_state_t)jarg3;
arg4 = (e_surf_resource_state_t)jarg4;
(arg1)->cpuStateChangedCallback(arg2,arg3,arg4);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1cpuStateChangedCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3, jint jarg4) {
Plugin *arg1 = (Plugin *) 0 ;
- Cpu *arg2 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg2 = (simgrid::surf::Cpu *) 0 ;
e_surf_resource_state_t arg3 ;
e_surf_resource_state_t arg4 ;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Cpu **)&jarg2;
+ arg2 = *(simgrid::surf::Cpu **)&jarg2;
arg3 = (e_surf_resource_state_t)jarg3;
arg4 = (e_surf_resource_state_t)jarg4;
(arg1)->Plugin::cpuStateChangedCallback(arg2,arg3,arg4);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1cpuActionStateChangedCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3, jint jarg4) {
Plugin *arg1 = (Plugin *) 0 ;
- CpuAction *arg2 = (CpuAction *) 0 ;
+ simgrid::surf::CpuAction *arg2 = (simgrid::surf::CpuAction *) 0 ;
e_surf_action_state_t arg3 ;
e_surf_action_state_t arg4 ;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(CpuAction **)&jarg2;
+ arg2 = *(simgrid::surf::CpuAction **)&jarg2;
arg3 = (e_surf_action_state_t)jarg3;
arg4 = (e_surf_action_state_t)jarg4;
(arg1)->cpuActionStateChangedCallback(arg2,arg3,arg4);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1cpuActionStateChangedCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3, jint jarg4) {
Plugin *arg1 = (Plugin *) 0 ;
- CpuAction *arg2 = (CpuAction *) 0 ;
+ simgrid::surf::CpuAction *arg2 = (simgrid::surf::CpuAction *) 0 ;
e_surf_action_state_t arg3 ;
e_surf_action_state_t arg4 ;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(CpuAction **)&jarg2;
+ arg2 = *(simgrid::surf::CpuAction **)&jarg2;
arg3 = (e_surf_action_state_t)jarg3;
arg4 = (e_surf_action_state_t)jarg4;
(arg1)->Plugin::cpuActionStateChangedCallback(arg2,arg3,arg4);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkLinkCreatedCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
Plugin *arg1 = (Plugin *) 0 ;
- Link *arg2 = (Link *) 0 ;
+ simgrid::surf::Link *arg2 = (simgrid::surf::Link *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Link **)&jarg2;
+ arg2 = *(simgrid::surf::Link **)&jarg2;
(arg1)->networkLinkCreatedCallback(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkLinkCreatedCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
Plugin *arg1 = (Plugin *) 0 ;
- Link *arg2 = (Link *) 0 ;
+ simgrid::surf::Link *arg2 = (simgrid::surf::Link *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Link **)&jarg2;
+ arg2 = *(simgrid::surf::Link **)&jarg2;
(arg1)->Plugin::networkLinkCreatedCallback(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkLinkDestructedCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
Plugin *arg1 = (Plugin *) 0 ;
- Link *arg2 = (Link *) 0 ;
+ simgrid::surf::Link *arg2 = (simgrid::surf::Link *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Link **)&jarg2;
+ arg2 = *(simgrid::surf::Link **)&jarg2;
(arg1)->networkLinkDestructedCallback(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkLinkDestructedCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
Plugin *arg1 = (Plugin *) 0 ;
- Link *arg2 = (Link *) 0 ;
+ simgrid::surf::Link *arg2 = (simgrid::surf::Link *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Link **)&jarg2;
+ arg2 = *(simgrid::surf::Link **)&jarg2;
(arg1)->Plugin::networkLinkDestructedCallback(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkLinkStateChangedCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3, jint jarg4) {
Plugin *arg1 = (Plugin *) 0 ;
- Link *arg2 = (Link *) 0 ;
+ simgrid::surf::Link *arg2 = (simgrid::surf::Link *) 0 ;
e_surf_resource_state_t arg3 ;
e_surf_resource_state_t arg4 ;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Link **)&jarg2;
+ arg2 = *(simgrid::surf::Link **)&jarg2;
arg3 = (e_surf_resource_state_t)jarg3;
arg4 = (e_surf_resource_state_t)jarg4;
(arg1)->networkLinkStateChangedCallback(arg2,arg3,arg4);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkLinkStateChangedCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3, jint jarg4) {
Plugin *arg1 = (Plugin *) 0 ;
- Link *arg2 = (Link *) 0 ;
+ simgrid::surf::Link *arg2 = (simgrid::surf::Link *) 0 ;
e_surf_resource_state_t arg3 ;
e_surf_resource_state_t arg4 ;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(Link **)&jarg2;
+ arg2 = *(simgrid::surf::Link **)&jarg2;
arg3 = (e_surf_resource_state_t)jarg3;
arg4 = (e_surf_resource_state_t)jarg4;
(arg1)->Plugin::networkLinkStateChangedCallback(arg2,arg3,arg4);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkActionStateChangedCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3, jint jarg4) {
Plugin *arg1 = (Plugin *) 0 ;
- NetworkAction *arg2 = (NetworkAction *) 0 ;
+ simgrid::surf::NetworkAction *arg2 = (simgrid::surf::NetworkAction *) 0 ;
e_surf_action_state_t arg3 ;
e_surf_action_state_t arg4 ;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(NetworkAction **)&jarg2;
+ arg2 = *(simgrid::surf::NetworkAction **)&jarg2;
arg3 = (e_surf_action_state_t)jarg3;
arg4 = (e_surf_action_state_t)jarg4;
(arg1)->networkActionStateChangedCallback(arg2,arg3,arg4);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkActionStateChangedCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3, jint jarg4) {
Plugin *arg1 = (Plugin *) 0 ;
- NetworkAction *arg2 = (NetworkAction *) 0 ;
+ simgrid::surf::NetworkAction *arg2 = (simgrid::surf::NetworkAction *) 0 ;
e_surf_action_state_t arg3 ;
e_surf_action_state_t arg4 ;
(void)jarg1_;
(void)jarg2_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(NetworkAction **)&jarg2;
+ arg2 = *(simgrid::surf::NetworkAction **)&jarg2;
arg3 = (e_surf_action_state_t)jarg3;
arg4 = (e_surf_action_state_t)jarg4;
(arg1)->Plugin::networkActionStateChangedCallback(arg2,arg3,arg4);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkCommunicateCallback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_, jlong jarg4, jobject jarg4_, jdouble jarg5, jdouble jarg6) {
Plugin *arg1 = (Plugin *) 0 ;
- NetworkAction *arg2 = (NetworkAction *) 0 ;
- RoutingEdge *arg3 = (RoutingEdge *) 0 ;
- RoutingEdge *arg4 = (RoutingEdge *) 0 ;
+ simgrid::surf::NetworkAction *arg2 = (simgrid::surf::NetworkAction *) 0 ;
+ simgrid::surf::RoutingEdge *arg3 = (simgrid::surf::RoutingEdge *) 0 ;
+ simgrid::surf::RoutingEdge *arg4 = (simgrid::surf::RoutingEdge *) 0 ;
double arg5 ;
double arg6 ;
(void)jarg3_;
(void)jarg4_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(NetworkAction **)&jarg2;
- arg3 = *(RoutingEdge **)&jarg3;
- arg4 = *(RoutingEdge **)&jarg4;
+ arg2 = *(simgrid::surf::NetworkAction **)&jarg2;
+ arg3 = *(simgrid::surf::RoutingEdge **)&jarg3;
+ arg4 = *(simgrid::surf::RoutingEdge **)&jarg4;
arg5 = (double)jarg5;
arg6 = (double)jarg6;
(arg1)->networkCommunicateCallback(arg2,arg3,arg4,arg5,arg6);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Plugin_1networkCommunicateCallbackSwigExplicitPlugin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_, jlong jarg4, jobject jarg4_, jdouble jarg5, jdouble jarg6) {
Plugin *arg1 = (Plugin *) 0 ;
- NetworkAction *arg2 = (NetworkAction *) 0 ;
- RoutingEdge *arg3 = (RoutingEdge *) 0 ;
- RoutingEdge *arg4 = (RoutingEdge *) 0 ;
+ simgrid::surf::NetworkAction *arg2 = (simgrid::surf::NetworkAction *) 0 ;
+ simgrid::surf::RoutingEdge *arg3 = (simgrid::surf::RoutingEdge *) 0 ;
+ simgrid::surf::RoutingEdge *arg4 = (simgrid::surf::RoutingEdge *) 0 ;
double arg5 ;
double arg6 ;
(void)jarg3_;
(void)jarg4_;
arg1 = *(Plugin **)&jarg1;
- arg2 = *(NetworkAction **)&jarg2;
- arg3 = *(RoutingEdge **)&jarg3;
- arg4 = *(RoutingEdge **)&jarg4;
+ arg2 = *(simgrid::surf::NetworkAction **)&jarg2;
+ arg3 = *(simgrid::surf::RoutingEdge **)&jarg3;
+ arg4 = *(simgrid::surf::RoutingEdge **)&jarg4;
arg5 = (double)jarg5;
arg6 = (double)jarg6;
(arg1)->Plugin::networkCommunicateCallback(arg2,arg3,arg4,arg5,arg6);
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Model_1shareResources(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
jdouble jresult = 0 ;
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
double arg2 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = (double)jarg2;
result = (double)(arg1)->shareResources(arg2);
jresult = (jdouble)result;
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Model_1shareResourcesLazy(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
jdouble jresult = 0 ;
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
double arg2 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = (double)jarg2;
result = (double)(arg1)->shareResourcesLazy(arg2);
jresult = (jdouble)result;
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Model_1shareResourcesFull(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
jdouble jresult = 0 ;
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
double arg2 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = (double)jarg2;
result = (double)(arg1)->shareResourcesFull(arg2);
jresult = (jdouble)result;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Model_1updateActionsState(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2, jdouble jarg3) {
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
double arg2 ;
double arg3 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = (double)jarg2;
arg3 = (double)jarg3;
(arg1)->updateActionsState(arg2,arg3);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Model_1updateActionsStateLazy(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2, jdouble jarg3) {
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
double arg2 ;
double arg3 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = (double)jarg2;
arg3 = (double)jarg3;
(arg1)->updateActionsStateLazy(arg2,arg3);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Model_1updateActionsStateFull(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2, jdouble jarg3) {
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
double arg2 ;
double arg3 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = (double)jarg2;
arg3 = (double)jarg3;
(arg1)->updateActionsStateFull(arg2,arg3);
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Model_1getRunningActionSet(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
- Model *arg1 = (Model *) 0 ;
- ActionList *result = 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
+ simgrid::surf::ActionList *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
- result = (ActionList *)(arg1)->getRunningActionSet();
- *(ActionList **)&jresult = result;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
+ result = (simgrid::surf::ActionList *)(arg1)->getRunningActionSet();
+ *(simgrid::surf::ActionList **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Model_1addTraces(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
(arg1)->addTraces();
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1Model(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
delete arg1;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_new_1CpuModel(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
- CpuModel *result = 0 ;
+ simgrid::surf::CpuModel *result = 0 ;
(void)jenv;
(void)jcls;
- result = (CpuModel *)new SwigDirector_CpuModel(jenv);
- *(CpuModel **)&jresult = result;
+ result = (simgrid::surf::CpuModel *)new SwigDirector_CpuModel(jenv);
+ *(simgrid::surf::CpuModel **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1CpuModel(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- CpuModel *arg1 = (CpuModel *) 0 ;
+ simgrid::surf::CpuModel *arg1 = (simgrid::surf::CpuModel *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(CpuModel **)&jarg1;
+ arg1 = *(simgrid::surf::CpuModel **)&jarg1;
delete arg1;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1createCpu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jdoubleArray jarg3, jint jarg4, jdouble jarg5, jlong jarg6, jobject jarg6_, jint jarg7, jint jarg8, jlong jarg9, jobject jarg9_, jlong jarg10, jobject jarg10_) {
jlong jresult = 0 ;
- CpuModel *arg1 = (CpuModel *) 0 ;
+ simgrid::surf::CpuModel *arg1 = (simgrid::surf::CpuModel *) 0 ;
char *arg2 = (char *) 0 ;
DoubleDynar arg3 ;
int arg4 ;
tmgr_trace *arg9 = (tmgr_trace *) 0 ;
s_xbt_dict *arg10 = (s_xbt_dict *) 0 ;
DoubleDynar *argp3 ;
- Cpu *result = 0 ;
+ simgrid::surf::Cpu *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg6_;
(void)jarg9_;
(void)jarg10_;
- arg1 = *(CpuModel **)&jarg1;
+ arg1 = *(simgrid::surf::CpuModel **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
arg8 = (e_surf_resource_state_t)jarg8;
arg9 = *(tmgr_trace **)&jarg9;
arg10 = *(s_xbt_dict **)&jarg10;
- result = (Cpu *)(arg1)->createCpu((char const *)arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10);
- *(Cpu **)&jresult = result;
+ result = (simgrid::surf::Cpu *)(arg1)->createCpu((char const *)arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10);
+ *(simgrid::surf::Cpu **)&jresult = result;
{
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1director_1connect(JNIEnv *jenv, jclass jcls, jobject jself, jlong objarg, jboolean jswig_mem_own, jboolean jweak_global) {
- CpuModel *obj = *((CpuModel **)&objarg);
+ simgrid::surf::CpuModel *obj = *((simgrid::surf::CpuModel **)&objarg);
(void)jcls;
SwigDirector_CpuModel *director = dynamic_cast<SwigDirector_CpuModel *>(obj);
if (director) {
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1change_1ownership(JNIEnv *jenv, jclass jcls, jobject jself, jlong objarg, jboolean jtake_or_release) {
- CpuModel *obj = *((CpuModel **)&objarg);
+ simgrid::surf::CpuModel *obj = *((simgrid::surf::CpuModel **)&objarg);
SwigDirector_CpuModel *director = dynamic_cast<SwigDirector_CpuModel *>(obj);
(void)jcls;
if (director) {
SWIGEXPORT jstring JNICALL Java_org_simgrid_surf_SurfJNI_Resource_1getName(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
- Resource *arg1 = (Resource *) 0 ;
+ simgrid::surf::Resource *arg1 = (simgrid::surf::Resource *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Resource **)&jarg1;
+ arg1 = *(simgrid::surf::Resource **)&jarg1;
result = (char *)(arg1)->getName();
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
SWIGEXPORT jboolean JNICALL Java_org_simgrid_surf_SurfJNI_Resource_1isUsed(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jboolean jresult = 0 ;
- Resource *arg1 = (Resource *) 0 ;
+ simgrid::surf::Resource *arg1 = (simgrid::surf::Resource *) 0 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Resource **)&jarg1;
+ arg1 = *(simgrid::surf::Resource **)&jarg1;
result = (bool)(arg1)->isUsed();
jresult = (jboolean)result;
return jresult;
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Resource_1getModel(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
- Resource *arg1 = (Resource *) 0 ;
- Model *result = 0 ;
+ simgrid::surf::Resource *arg1 = (simgrid::surf::Resource *) 0 ;
+ simgrid::surf::Model *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Resource **)&jarg1;
- result = (Model *)(arg1)->getModel();
- *(Model **)&jresult = result;
+ arg1 = *(simgrid::surf::Resource **)&jarg1;
+ result = (simgrid::surf::Model *)(arg1)->getModel();
+ *(simgrid::surf::Model **)&jresult = result;
return jresult;
}
SWIGEXPORT jint JNICALL Java_org_simgrid_surf_SurfJNI_Resource_1getState(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
- Resource *arg1 = (Resource *) 0 ;
+ simgrid::surf::Resource *arg1 = (simgrid::surf::Resource *) 0 ;
e_surf_resource_state_t result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Resource **)&jarg1;
+ arg1 = *(simgrid::surf::Resource **)&jarg1;
result = (e_surf_resource_state_t)(arg1)->getState();
jresult = (jint)result;
return jresult;
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Resource_1getConstraint(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
- Resource *arg1 = (Resource *) 0 ;
+ simgrid::surf::Resource *arg1 = (simgrid::surf::Resource *) 0 ;
lmm_constraint *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Resource **)&jarg1;
+ arg1 = *(simgrid::surf::Resource **)&jarg1;
result = (lmm_constraint *)(arg1)->getConstraint();
*(lmm_constraint **)&jresult = result;
return jresult;
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Resource_1getProperties(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
- Resource *arg1 = (Resource *) 0 ;
+ simgrid::surf::Resource *arg1 = (simgrid::surf::Resource *) 0 ;
s_xbt_dict *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Resource **)&jarg1;
+ arg1 = *(simgrid::surf::Resource **)&jarg1;
result = (s_xbt_dict *)(arg1)->getProperties();
*(s_xbt_dict **)&jresult = result;
return jresult;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Resource_1updateState(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jdouble jarg3, jdouble jarg4) {
- Resource *arg1 = (Resource *) 0 ;
+ simgrid::surf::Resource *arg1 = (simgrid::surf::Resource *) 0 ;
tmgr_trace_event *arg2 = (tmgr_trace_event *) 0 ;
double arg3 ;
double arg4 ;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
- arg1 = *(Resource **)&jarg1;
+ arg1 = *(simgrid::surf::Resource **)&jarg1;
arg2 = *(tmgr_trace_event **)&jarg2;
arg3 = (double)jarg3;
arg4 = (double)jarg4;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1Resource(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- Resource *arg1 = (Resource *) 0 ;
+ simgrid::surf::Resource *arg1 = (simgrid::surf::Resource *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(Resource **)&jarg1;
+ arg1 = *(simgrid::surf::Resource **)&jarg1;
delete arg1;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_new_1Cpu_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jlong jarg3, jobject jarg3_, jlong jarg4, jobject jarg4_, jint jarg5, jdouble jarg6, jdouble jarg7) {
jlong jresult = 0 ;
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
char *arg2 = (char *) 0 ;
s_xbt_dict *arg3 = (s_xbt_dict *) 0 ;
lmm_constraint *arg4 = (lmm_constraint *) 0 ;
int arg5 ;
double arg6 ;
double arg7 ;
- Cpu *result = 0 ;
+ simgrid::surf::Cpu *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg3_;
(void)jarg4_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
arg5 = (int)jarg5;
arg6 = (double)jarg6;
arg7 = (double)jarg7;
- result = (Cpu *)new SwigDirector_Cpu(jenv,arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
- *(Cpu **)&jresult = result;
+ result = (simgrid::surf::Cpu *)new SwigDirector_Cpu(jenv,arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
+ *(simgrid::surf::Cpu **)&jresult = result;
{
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_new_1Cpu_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jlong jarg3, jobject jarg3_, jint jarg4, jdouble jarg5, jdouble jarg6) {
jlong jresult = 0 ;
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
char *arg2 = (char *) 0 ;
s_xbt_dict *arg3 = (s_xbt_dict *) 0 ;
int arg4 ;
double arg5 ;
double arg6 ;
- Cpu *result = 0 ;
+ simgrid::surf::Cpu *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg3_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = 0;
if (jarg2) {
arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
arg4 = (int)jarg4;
arg5 = (double)jarg5;
arg6 = (double)jarg6;
- result = (Cpu *)new SwigDirector_Cpu(jenv,arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
- *(Cpu **)&jresult = result;
+ result = (simgrid::surf::Cpu *)new SwigDirector_Cpu(jenv,arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+ *(simgrid::surf::Cpu **)&jresult = result;
{
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1Cpu(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
delete arg1;
}
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getCurrentPowerPeak(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
result = (double)(arg1)->getCurrentPowerPeak();
jresult = (jdouble)result;
return jresult;
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getCurrentPowerPeakSwigExplicitCpu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
- result = (double)(arg1)->Cpu::getCurrentPowerPeak();
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
+ result = (double)(arg1)->simgrid::surf::Cpu::getCurrentPowerPeak();
jresult = (jdouble)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1execute(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
jlong jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
double arg2 ;
- CpuAction *result = 0 ;
+ simgrid::surf::CpuAction *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
arg2 = (double)jarg2;
- result = (CpuAction *)(arg1)->execute(arg2);
- *(CpuAction **)&jresult = result;
+ result = (simgrid::surf::CpuAction *)(arg1)->execute(arg2);
+ *(simgrid::surf::CpuAction **)&jresult = result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1sleep(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
jlong jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
double arg2 ;
- CpuAction *result = 0 ;
+ simgrid::surf::CpuAction *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
arg2 = (double)jarg2;
- result = (CpuAction *)(arg1)->sleep(arg2);
- *(CpuAction **)&jresult = result;
+ result = (simgrid::surf::CpuAction *)(arg1)->sleep(arg2);
+ *(simgrid::surf::CpuAction **)&jresult = result;
return jresult;
}
SWIGEXPORT jint JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getCore(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
result = (int)(arg1)->getCore();
jresult = (jint)result;
return jresult;
SWIGEXPORT jint JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getCoreSwigExplicitCpu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
- result = (int)(arg1)->Cpu::getCore();
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
+ result = (int)(arg1)->simgrid::surf::Cpu::getCore();
jresult = (jint)result;
return jresult;
}
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getSpeed(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
jdouble jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
double arg2 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
arg2 = (double)jarg2;
result = (double)(arg1)->getSpeed(arg2);
jresult = (jdouble)result;
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getSpeedSwigExplicitCpu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
jdouble jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
double arg2 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
arg2 = (double)jarg2;
- result = (double)(arg1)->Cpu::getSpeed(arg2);
+ result = (double)(arg1)->simgrid::surf::Cpu::getSpeed(arg2);
jresult = (jdouble)result;
return jresult;
}
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getAvailableSpeed(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
result = (double)(arg1)->getAvailableSpeed();
jresult = (jdouble)result;
return jresult;
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getAvailableSpeedSwigExplicitCpu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
- result = (double)(arg1)->Cpu::getAvailableSpeed();
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
+ result = (double)(arg1)->simgrid::surf::Cpu::getAvailableSpeed();
jresult = (jdouble)result;
return jresult;
}
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getPowerPeakAt(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
jdouble jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
int arg2 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
arg2 = (int)jarg2;
result = (double)(arg1)->getPowerPeakAt(arg2);
jresult = (jdouble)result;
SWIGEXPORT jint JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getNbPstates(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
result = (int)(arg1)->getNbPstates();
jresult = (jint)result;
return jresult;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1setPstate(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
int arg2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
arg2 = (int)jarg2;
(arg1)->setPstate(arg2);
}
SWIGEXPORT jint JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1getPstate(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
result = (int)(arg1)->getPstate();
jresult = (jint)result;
return jresult;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1setState(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
- Cpu *arg1 = (Cpu *) 0 ;
+ simgrid::surf::Cpu *arg1 = (simgrid::surf::Cpu *) 0 ;
e_surf_resource_state_t arg2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Cpu **)&jarg1;
+ arg1 = *(simgrid::surf::Cpu **)&jarg1;
arg2 = (e_surf_resource_state_t)jarg2;
(arg1)->setState(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1director_1connect(JNIEnv *jenv, jclass jcls, jobject jself, jlong objarg, jboolean jswig_mem_own, jboolean jweak_global) {
- Cpu *obj = *((Cpu **)&objarg);
+ simgrid::surf::Cpu *obj = *((simgrid::surf::Cpu **)&objarg);
(void)jcls;
SwigDirector_Cpu *director = dynamic_cast<SwigDirector_Cpu *>(obj);
if (director) {
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Cpu_1change_1ownership(JNIEnv *jenv, jclass jcls, jobject jself, jlong objarg, jboolean jtake_or_release) {
- Cpu *obj = *((Cpu **)&objarg);
+ simgrid::surf::Cpu *obj = *((simgrid::surf::Cpu **)&objarg);
SwigDirector_Cpu *director = dynamic_cast<SwigDirector_Cpu *>(obj);
(void)jcls;
if (director) {
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1Link(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- Link *arg1 = (Link *) 0 ;
+ simgrid::surf::Link *arg1 = (simgrid::surf::Link *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(Link **)&jarg1;
+ arg1 = *(simgrid::surf::Link **)&jarg1;
delete arg1;
}
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Link_1getBandwidth(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- Link *arg1 = (Link *) 0 ;
+ simgrid::surf::Link *arg1 = (simgrid::surf::Link *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Link **)&jarg1;
+ arg1 = *(simgrid::surf::Link **)&jarg1;
result = (double)(arg1)->getBandwidth();
jresult = (jdouble)result;
return jresult;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Link_1updateBandwidth_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2, jdouble jarg3) {
- Link *arg1 = (Link *) 0 ;
+ simgrid::surf::Link *arg1 = (simgrid::surf::Link *) 0 ;
double arg2 ;
double arg3 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Link **)&jarg1;
+ arg1 = *(simgrid::surf::Link **)&jarg1;
arg2 = (double)jarg2;
arg3 = (double)jarg3;
(arg1)->updateBandwidth(arg2,arg3);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Link_1updateBandwidth_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
- Link *arg1 = (Link *) 0 ;
+ simgrid::surf::Link *arg1 = (simgrid::surf::Link *) 0 ;
double arg2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Link **)&jarg1;
+ arg1 = *(simgrid::surf::Link **)&jarg1;
arg2 = (double)jarg2;
(arg1)->updateBandwidth(arg2);
}
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Link_1getLatency(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- Link *arg1 = (Link *) 0 ;
+ simgrid::surf::Link *arg1 = (simgrid::surf::Link *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Link **)&jarg1;
+ arg1 = *(simgrid::surf::Link **)&jarg1;
result = (double)(arg1)->getLatency();
jresult = (jdouble)result;
return jresult;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Link_1updateLatency_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2, jdouble jarg3) {
- Link *arg1 = (Link *) 0 ;
+ simgrid::surf::Link *arg1 = (simgrid::surf::Link *) 0 ;
double arg2 ;
double arg3 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Link **)&jarg1;
+ arg1 = *(simgrid::surf::Link **)&jarg1;
arg2 = (double)jarg2;
arg3 = (double)jarg3;
(arg1)->updateLatency(arg2,arg3);
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Link_1updateLatency_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
- Link *arg1 = (Link *) 0 ;
+ simgrid::surf::Link *arg1 = (simgrid::surf::Link *) 0 ;
double arg2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Link **)&jarg1;
+ arg1 = *(simgrid::surf::Link **)&jarg1;
arg2 = (double)jarg2;
(arg1)->updateLatency(arg2);
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_new_1Action(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2, jboolean jarg3) {
jlong jresult = 0 ;
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
double arg2 ;
bool arg3 ;
- Action *result = 0 ;
+ simgrid::surf::Action *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = (double)jarg2;
arg3 = jarg3 ? true : false;
- result = (Action *)new Action(arg1,arg2,arg3);
- *(Action **)&jresult = result;
+ result = (simgrid::surf::Action *)new simgrid::surf::Action(arg1,arg2,arg3);
+ *(simgrid::surf::Action **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1Action(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
delete arg1;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Action_1getModel(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
- Action *arg1 = (Action *) 0 ;
- Model *result = 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
+ simgrid::surf::Model *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
- result = (Model *)(arg1)->getModel();
- *(Model **)&jresult = result;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
+ result = (simgrid::surf::Model *)(arg1)->getModel();
+ *(simgrid::surf::Model **)&jresult = result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Action_1getVariable(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
lmm_variable *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
result = (lmm_variable *)(arg1)->getVariable();
*(lmm_variable **)&jresult = result;
return jresult;
SWIGEXPORT jint JNICALL Java_org_simgrid_surf_SurfJNI_Action_1getState(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jint jresult = 0 ;
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
e_surf_action_state_t result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
result = (e_surf_action_state_t)(arg1)->getState();
jresult = (jint)result;
return jresult;
SWIGEXPORT jboolean JNICALL Java_org_simgrid_surf_SurfJNI_Action_1isSuspended(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jboolean jresult = 0 ;
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
bool result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
result = (bool)(arg1)->isSuspended();
jresult = (jboolean)result;
return jresult;
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Action_1getBound(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
result = (double)(arg1)->getBound();
jresult = (jdouble)result;
return jresult;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Action_1setBound(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
double arg2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
arg2 = (double)jarg2;
(arg1)->setBound(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Action_1updateRemains(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
double arg2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
arg2 = (double)jarg2;
(arg1)->updateRemains(arg2);
}
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_Action_1getRemains(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
result = (double)(arg1)->getRemains();
jresult = (jdouble)result;
return jresult;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Action_1setPriority(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) {
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
double arg2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
arg2 = (double)jarg2;
(arg1)->setPriority(arg2);
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Action_1setState(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
- Action *arg1 = (Action *) 0 ;
+ simgrid::surf::Action *arg1 = (simgrid::surf::Action *) 0 ;
e_surf_action_state_t arg2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Action **)&jarg1;
+ arg1 = *(simgrid::surf::Action **)&jarg1;
arg2 = (e_surf_action_state_t)jarg2;
(arg1)->setState(arg2);
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_new_1CpuAction(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2, jboolean jarg3) {
jlong jresult = 0 ;
- Model *arg1 = (Model *) 0 ;
+ simgrid::surf::Model *arg1 = (simgrid::surf::Model *) 0 ;
double arg2 ;
bool arg3 ;
- CpuAction *result = 0 ;
+ simgrid::surf::CpuAction *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(Model **)&jarg1;
+ arg1 = *(simgrid::surf::Model **)&jarg1;
arg2 = (double)jarg2;
arg3 = jarg3 ? true : false;
- result = (CpuAction *)new SwigDirector_CpuAction(jenv,arg1,arg2,arg3);
- *(CpuAction **)&jresult = result;
+ result = (simgrid::surf::CpuAction *)new SwigDirector_CpuAction(jenv,arg1,arg2,arg3);
+ *(simgrid::surf::CpuAction **)&jresult = result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_CpuAction_1getCpu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
- CpuAction *arg1 = (CpuAction *) 0 ;
- Cpu *result = 0 ;
+ simgrid::surf::CpuAction *arg1 = (simgrid::surf::CpuAction *) 0 ;
+ simgrid::surf::Cpu *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(CpuAction **)&jarg1;
- result = (Cpu *)CpuAction_getCpu(arg1);
- *(Cpu **)&jresult = result;
+ arg1 = *(simgrid::surf::CpuAction **)&jarg1;
+ result = (simgrid::surf::Cpu *)simgrid_surf_CpuAction_getCpu(arg1);
+ *(simgrid::surf::Cpu **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1CpuAction(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- CpuAction *arg1 = (CpuAction *) 0 ;
+ simgrid::surf::CpuAction *arg1 = (simgrid::surf::CpuAction *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(CpuAction **)&jarg1;
+ arg1 = *(simgrid::surf::CpuAction **)&jarg1;
delete arg1;
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_CpuAction_1director_1connect(JNIEnv *jenv, jclass jcls, jobject jself, jlong objarg, jboolean jswig_mem_own, jboolean jweak_global) {
- CpuAction *obj = *((CpuAction **)&objarg);
+ simgrid::surf::CpuAction *obj = *((simgrid::surf::CpuAction **)&objarg);
(void)jcls;
SwigDirector_CpuAction *director = dynamic_cast<SwigDirector_CpuAction *>(obj);
if (director) {
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_CpuAction_1change_1ownership(JNIEnv *jenv, jclass jcls, jobject jself, jlong objarg, jboolean jtake_or_release) {
- CpuAction *obj = *((CpuAction **)&objarg);
+ simgrid::surf::CpuAction *obj = *((simgrid::surf::CpuAction **)&objarg);
SwigDirector_CpuAction *director = dynamic_cast<SwigDirector_CpuAction *>(obj);
(void)jcls;
if (director) {
SWIGEXPORT jdouble JNICALL Java_org_simgrid_surf_SurfJNI_NetworkAction_1getLatency(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jdouble jresult = 0 ;
- NetworkAction *arg1 = (NetworkAction *) 0 ;
+ simgrid::surf::NetworkAction *arg1 = (simgrid::surf::NetworkAction *) 0 ;
double result;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(NetworkAction **)&jarg1;
- result = (double)NetworkAction_getLatency(arg1);
+ arg1 = *(simgrid::surf::NetworkAction **)&jarg1;
+ result = (double)simgrid_surf_NetworkAction_getLatency(arg1);
jresult = (jdouble)result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1NetworkAction(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- NetworkAction *arg1 = (NetworkAction *) 0 ;
+ simgrid::surf::NetworkAction *arg1 = (simgrid::surf::NetworkAction *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(NetworkAction **)&jarg1;
+ arg1 = *(simgrid::surf::NetworkAction **)&jarg1;
delete arg1;
}
SWIGEXPORT jstring JNICALL Java_org_simgrid_surf_SurfJNI_RoutingEdge_1getName(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jstring jresult = 0 ;
- RoutingEdge *arg1 = (RoutingEdge *) 0 ;
+ simgrid::surf::RoutingEdge *arg1 = (simgrid::surf::RoutingEdge *) 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
- arg1 = *(RoutingEdge **)&jarg1;
+ arg1 = *(simgrid::surf::RoutingEdge **)&jarg1;
result = (char *)(arg1)->getName();
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1RoutingEdge(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- RoutingEdge *arg1 = (RoutingEdge *) 0 ;
+ simgrid::surf::RoutingEdge *arg1 = (simgrid::surf::RoutingEdge *) 0 ;
(void)jenv;
(void)jcls;
- arg1 = *(RoutingEdge **)&jarg1;
+ arg1 = *(simgrid::surf::RoutingEdge **)&jarg1;
delete arg1;
}
jlong baseptr = 0;
(void)jenv;
(void)jcls;
- *(Model **)&baseptr = *(CpuModel **)&jarg1;
+ *(simgrid::surf::Model **)&baseptr = *(simgrid::surf::CpuModel **)&jarg1;
return baseptr;
}
jlong baseptr = 0;
(void)jenv;
(void)jcls;
- *(Resource **)&baseptr = *(Cpu **)&jarg1;
+ *(simgrid::surf::Resource **)&baseptr = *(simgrid::surf::Cpu **)&jarg1;
return baseptr;
}
jlong baseptr = 0;
(void)jenv;
(void)jcls;
- *(Resource **)&baseptr = *(Link **)&jarg1;
+ *(simgrid::surf::Resource **)&baseptr = *(simgrid::surf::Link **)&jarg1;
return baseptr;
}
jlong baseptr = 0;
(void)jenv;
(void)jcls;
- *(Action **)&baseptr = *(CpuAction **)&jarg1;
+ *(simgrid::surf::Action **)&baseptr = *(simgrid::surf::CpuAction **)&jarg1;
return baseptr;
}
jlong baseptr = 0;
(void)jenv;
(void)jcls;
- *(Action **)&baseptr = *(NetworkAction **)&jarg1;
+ *(simgrid::surf::Action **)&baseptr = *(simgrid::surf::NetworkAction **)&jarg1;
return baseptr;
}
void swig_connect_director(JNIEnv *jenv, jobject jself, jclass jcls, bool swig_mem_own, bool weak_global);
SwigDirector_Plugin(JNIEnv *jenv);
virtual ~SwigDirector_Plugin();
- virtual void cpuCreatedCallback(Cpu *cpu);
- virtual void cpuDestructedCallback(Cpu *cpu);
- virtual void cpuStateChangedCallback(Cpu *cpu, e_surf_resource_state_t arg1, e_surf_resource_state_t arg2);
- virtual void cpuActionStateChangedCallback(CpuAction *action, e_surf_action_state_t arg1, e_surf_action_state_t arg2);
- virtual void networkLinkCreatedCallback(Link *link);
- virtual void networkLinkDestructedCallback(Link *link);
- virtual void networkLinkStateChangedCallback(Link *link, e_surf_resource_state_t arg1, e_surf_resource_state_t arg2);
- virtual void networkActionStateChangedCallback(NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t cur);
- virtual void networkCommunicateCallback(NetworkAction *action, RoutingEdge *src, RoutingEdge *dst, double size, double rate);
+ virtual void cpuCreatedCallback(simgrid::surf::Cpu *cpu);
+ virtual void cpuDestructedCallback(simgrid::surf::Cpu *cpu);
+ virtual void cpuStateChangedCallback(simgrid::surf::Cpu *cpu, e_surf_resource_state_t arg1, e_surf_resource_state_t arg2);
+ virtual void cpuActionStateChangedCallback(simgrid::surf::CpuAction *action, e_surf_action_state_t arg1, e_surf_action_state_t arg2);
+ virtual void networkLinkCreatedCallback(simgrid::surf::Link *link);
+ virtual void networkLinkDestructedCallback(simgrid::surf::Link *link);
+ virtual void networkLinkStateChangedCallback(simgrid::surf::Link *link, e_surf_resource_state_t arg1, e_surf_resource_state_t arg2);
+ virtual void networkActionStateChangedCallback(simgrid::surf::NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t cur);
+ virtual void networkCommunicateCallback(simgrid::surf::NetworkAction *action, simgrid::surf::RoutingEdge *src, simgrid::surf::RoutingEdge *dst, double size, double rate);
public:
bool swig_overrides(int n) {
return (n < 9 ? swig_override[n] : false);
bool swig_override[9];
};
-class SwigDirector_CpuModel : public CpuModel, public Swig::Director {
+class SwigDirector_CpuModel : public simgrid::surf::CpuModel, public Swig::Director {
public:
void swig_connect_director(JNIEnv *jenv, jobject jself, jclass jcls, bool swig_mem_own, bool weak_global);
virtual void updateActionsState(double now, double delta);
virtual void updateActionsStateLazy(double now, double delta);
virtual void updateActionsStateFull(double now, double delta);
- virtual ActionList *getRunningActionSet();
+ virtual simgrid::surf::ActionList *getRunningActionSet();
virtual void addTraces();
virtual ~SwigDirector_CpuModel();
- virtual Cpu *createCpu(char const *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties);
+ virtual simgrid::surf::Cpu *createCpu(char const *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties);
public:
bool swig_overrides(int n) {
return (n < 9 ? swig_override[n] : false);
bool swig_override[9];
};
-class SwigDirector_Cpu : public Cpu, public Swig::Director {
+class SwigDirector_Cpu : public simgrid::surf::Cpu, public Swig::Director {
public:
void swig_connect_director(JNIEnv *jenv, jobject jself, jclass jcls, bool swig_mem_own, bool weak_global);
- SwigDirector_Cpu(JNIEnv *jenv, Model *model, char const *name, s_xbt_dict *props, lmm_constraint *constraint, int core, double powerPeak, double powerScale);
- SwigDirector_Cpu(JNIEnv *jenv, Model *model, char const *name, s_xbt_dict *props, int core, double powerPeak, double powerScale);
+ SwigDirector_Cpu(JNIEnv *jenv, simgrid::surf::Model *model, char const *name, s_xbt_dict *props, lmm_constraint *constraint, int core, double powerPeak, double powerScale);
+ SwigDirector_Cpu(JNIEnv *jenv, simgrid::surf::Model *model, char const *name, s_xbt_dict *props, int core, double powerPeak, double powerScale);
virtual bool isUsed();
virtual e_surf_resource_state_t getState();
virtual void updateState(tmgr_trace_event *event_type, double value, double date);
virtual ~SwigDirector_Cpu();
virtual double getCurrentPowerPeak();
- virtual CpuAction *execute(double size);
- virtual CpuAction *sleep(double duration);
+ virtual simgrid::surf::CpuAction *execute(double size);
+ virtual simgrid::surf::CpuAction *sleep(double duration);
virtual int getCore();
virtual double getSpeed(double load);
virtual double getAvailableSpeed();
bool swig_override[13];
};
-class SwigDirector_CpuAction : public CpuAction, public Swig::Director {
+class SwigDirector_CpuAction : public simgrid::surf::CpuAction, public Swig::Director {
public:
void swig_connect_director(JNIEnv *jenv, jobject jself, jclass jcls, bool swig_mem_own, bool weak_global);
- SwigDirector_CpuAction(JNIEnv *jenv, Model *model, double cost, bool failed);
+ SwigDirector_CpuAction(JNIEnv *jenv, simgrid::surf::Model *model, double cost, bool failed);
virtual ~SwigDirector_CpuAction();
virtual double getRemains();
virtual void setPriority(double priority);
+++ /dev/null
-/* context_cojava - implementation of context switching for java coroutines */
-
-/* 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/function_types.h>
-#include <simgrid/simix.h>
-#include <xbt/ex.h>
-#include "smx_context_cojava.h"
-#include "jxbt_utilities.h"
-#include "xbt/dynar.h"
-
-
-//Coroutine methodID/class cache.
-jclass coclass;
-jmethodID coroutine_init;
-jmethodID coroutine_yield;
-jmethodID coroutine_yieldTo;
-jmethodID coroutine_stop;
-//Maestro java coroutine
-jobject cojava_maestro_coroutine;
-
-JNIEnv *global_env;
-
-static smx_context_t my_current_context = NULL;
-static smx_context_t maestro_context = NULL;
-
-
-xbt_dynar_t cojava_processes;
-static unsigned long int cojava_process_index = 0;
-
-extern JavaVM *__java_vm;
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
-
-
-static smx_context_t
-smx_ctx_cojava_factory_create_context(xbt_main_func_t code,
- int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process);
-
-static void smx_ctx_cojava_free(smx_context_t context);
-static void smx_ctx_cojava_suspend(smx_context_t context);
-static void smx_ctx_cojava_resume(smx_context_t new_context);
-static void smx_ctx_cojava_runall(void);
-static void* smx_ctx_cojava_run(void *data);
-static void smx_ctx_cojava_create_coroutine(smx_ctx_cojava_t context);
-void SIMIX_ctx_cojava_factory_init(smx_context_factory_t * factory)
-{
- /* instantiate the context factory */
- smx_ctx_base_factory_init(factory);
-
- (*factory)->create_context = smx_ctx_cojava_factory_create_context;
- /* Leave default behavior of (*factory)->finalize */
- (*factory)->free = smx_ctx_cojava_free;
- (*factory)->stop = smx_ctx_cojava_stop;
- (*factory)->suspend = smx_ctx_cojava_suspend;
- (*factory)->runall = smx_ctx_cojava_runall;
- (*factory)->name = "ctx_cojava_factory";
- //(*factory)->finalize = smx_ctx_base_factory_finalize;
- (*factory)->self = smx_ctx_cojava_self;
- (*factory)->get_process = smx_ctx_base_get_process;
-
- global_env = get_current_thread_env();
-
- coclass = (*global_env)->FindClass(global_env, "java/dyn/Coroutine");
- xbt_assert((coclass != NULL), "Can't find java.dyn.Coroutine class.");
- //Cache the method id we are going to use
- coroutine_init = (*global_env)->GetMethodID(global_env, coclass, "<init>", "(Ljava/lang/Runnable;)V");
- xbt_assert((coroutine_init != NULL), "Can't find <init>");
- coroutine_stop = (*global_env)->GetMethodID(global_env, coclass, "stop", "()V");
- xbt_assert((coroutine_stop != NULL), "Method not found...");
- coroutine_yield = (*global_env)->GetStaticMethodID(global_env, coclass, "yield", "()V");
- xbt_assert((coroutine_yield != NULL), "Method yield not found.");
- coroutine_yieldTo = (*global_env)->GetStaticMethodID(global_env, coclass, "yieldTo", "(Ljava/dyn/Coroutine;)V");
- xbt_assert((coroutine_yieldTo != NULL), "Method yieldTo not found.");
-
- jclass class_thread = (*global_env)->FindClass(global_env, "java/lang/Thread");
- xbt_assert((class_thread != NULL), "Can't find java.lang.Thread class");
-
- jclass class_coroutine_support = (*global_env)->FindClass(global_env, "java/dyn/CoroutineSupport");
- xbt_assert((class_coroutine_support != NULL), "Can't find java.dyn.CoroutineSupport class");
- jmethodID thread_get_current = (*global_env)->GetStaticMethodID(global_env, class_thread, "currentThread", "()Ljava/lang/Thread;");
- xbt_assert((thread_get_current != NULL), "Can't find Thread.currentThread() method.");
-
- /**
- * Retrieve maetro coroutine object
- */
- jobject jthread;
- jthread = (*global_env)->CallStaticObjectMethod(global_env, class_thread, thread_get_current);
- xbt_assert((jthread != NULL), "Can't find current thread.");
-
- jmethodID thread_get_coroutine_support = (*global_env)->GetMethodID(global_env, class_thread, "getCoroutineSupport", "()Ljava/dyn/CoroutineSupport;");
- xbt_assert((thread_get_coroutine_support != NULL), "Can't find Thread.getCoroutineSupport method");
-
- jobject jcoroutine_support;
- jcoroutine_support = (*global_env)->CallObjectMethod(global_env, jthread, thread_get_coroutine_support);
- xbt_assert((jcoroutine_support != NULL), "Can't find coroutine support object");
- //FIXME ? Be careful, might change in the implementation (we are relying on private fields, so...).
- jfieldID coroutine_support_thread_coroutine = (*global_env)->GetFieldID(global_env, class_coroutine_support, "threadCoroutine", "Ljava/dyn/Coroutine;");
- xbt_assert((coroutine_support_thread_coroutine != NULL), "Can't find threadCoroutine field");
- cojava_maestro_coroutine = (jobject)(*global_env)->GetObjectField(global_env, jcoroutine_support, coroutine_support_thread_coroutine);
- xbt_assert((cojava_maestro_coroutine != NULL), "Can't find the thread coroutine.");
- cojava_maestro_coroutine = (*global_env)->NewGlobalRef(global_env, cojava_maestro_coroutine);
- xbt_assert((cojava_maestro_coroutine != NULL), "Can't get a global reference to the thread coroutine.");
-}
-smx_context_t smx_ctx_cojava_self(void)
-{
- return my_current_context;
-}
-
-static smx_context_t
-smx_ctx_cojava_factory_create_context(xbt_main_func_t code,
- int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process)
-{
- smx_ctx_cojava_t context = xbt_new0(s_smx_ctx_cojava_t, 1);
- /* If the user provided a function for the process then use it
- otherwise is the context for maestro */
- if (code) {
- if (argc == 0) {
- context->jprocess = (jobject) code;
- }
- else {
- context->jprocess = NULL;
- }
- context->super.cleanup_func = cleanup_func;
-
- context->super.argc = argc;
- context->super.argv = argv;
- context->super.code = code;
-
- smx_ctx_cojava_run(context);
- }
- else {
- context->jcoroutine = NULL;
- my_current_context = (smx_context_t)context;
- maestro_context = (smx_context_t)context;
- }
- context->bound = 0;
- context->super.process = process;
- return (smx_context_t) context;
-}
-
-static void* smx_ctx_cojava_run(void *data) {
- smx_ctx_cojava_t context = (smx_ctx_cojava_t)data;
- my_current_context = (smx_context_t)context;
- //Create the "Process" object if needed.
- if (context->super.argc <= 0) {
- smx_ctx_cojava_create_coroutine(context);
- }
- my_current_context = maestro_context;
- return NULL;
-}
-static void smx_ctx_cojava_free(smx_context_t context)
-{
- if (context) {
- smx_ctx_cojava_t ctx_java = (smx_ctx_cojava_t) context;
- if (ctx_java->jcoroutine) { /* We are not in maestro context */
- JNIEnv *env = get_current_thread_env();
- (*env)->DeleteGlobalRef(env, ctx_java->jcoroutine);
- (*env)->DeleteGlobalRef(env, ctx_java->jprocess);
- }
- }
- smx_ctx_base_free(context);
-}
-
-
-void smx_ctx_cojava_stop(smx_context_t context)
-{
- /*
- * The java stack needs to be empty, otherwise weird stuff
- * will happen
- */
- if (context->iwannadie) {
- context->iwannadie = 0;
- JNIEnv *env = get_current_thread_env();
- // TODO it will be nice to have the name of the process to help the end-user to know which Process has been killed
- jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", xbt_strdup("Process killed :) (file smx_context_cojava.c)"));
- THROWF(cancel_error, 0, "process cancelled");
- }
- else {
- smx_ctx_base_stop(context);
- smx_ctx_cojava_suspend(context);
- }
-}
-
-static void smx_ctx_cojava_suspend(smx_context_t context)
-{
- smx_context_t previous_context = context;
- unsigned long int i = cojava_process_index++;
- jobject next_coroutine;
-
- if (i < xbt_dynar_length(cojava_processes)) {
- smx_context_t next_context = SIMIX_process_get_context(xbt_dynar_get_as(
- cojava_processes,i, smx_process_t));
- my_current_context = next_context;
- XBT_DEBUG("Switching to %p",my_current_context);
- smx_ctx_cojava_t java_context = (smx_ctx_cojava_t)(next_context);
- if (!java_context->jprocess) {
- java_context->super.code(java_context->super.argc, java_context->super.argv);
- smx_ctx_cojava_create_coroutine(java_context);
- }
- else if (!java_context->bound) {
- java_context->bound = 1;
- smx_process_t process = SIMIX_process_self();
- (*global_env)->SetLongField(global_env, java_context->jprocess,
- jprocess_field_Process_bind,
- (intptr_t)process);
- }
-
- next_coroutine = java_context->jcoroutine;
- }
- else {
- //Give maestro the control back.
- next_coroutine = cojava_maestro_coroutine;
- my_current_context = maestro_context;
- }
- (*global_env)->CallStaticVoidMethod(global_env, coclass, coroutine_yieldTo, next_coroutine);
- my_current_context = previous_context;
-}
-
-static void smx_ctx_cojava_resume(smx_context_t new_context) {
- my_current_context = new_context;
- smx_ctx_cojava_t java_context = (smx_ctx_cojava_t)(new_context);
-
- if (!java_context->jprocess) {
- java_context->super.code(java_context->super.argc, java_context->super.argv);
- smx_ctx_cojava_create_coroutine(java_context);
- java_context->bound = 1;
- }
- else if (!java_context->bound) {
- java_context->bound = 1;
- smx_process_t process = SIMIX_process_self();
- (*global_env)->SetLongField(global_env, java_context->jprocess,
- jprocess_field_Process_bind, (intptr_t)process);
- }
- (*global_env)->CallStaticVoidMethod(global_env, coclass, coroutine_yieldTo, java_context->jcoroutine);
-}
-
-static void smx_ctx_cojava_runall(void)
-{
- cojava_processes = SIMIX_process_get_runnable();
- smx_process_t process;
- if (!xbt_dynar_is_empty(cojava_processes)) {
- process = xbt_dynar_get_as(cojava_processes, 0, smx_process_t);
- cojava_process_index = 1;
- /* Execute the first process */
- smx_ctx_cojava_resume(SIMIX_process_get_context(process));
- }
-}
-
-static void smx_ctx_cojava_create_coroutine(smx_ctx_cojava_t context) {
- JNIEnv *env = get_current_thread_env();
- jclass coclass = (*env)->FindClass(env, "java/dyn/Coroutine");
- xbt_assert((coclass != NULL), "Can't find coroutine class ! :(");
- jobject jcoroutine = (*env)->NewObject(env, coclass, coroutine_init, context->jprocess);
- if (jcoroutine == NULL) {
- FILE *conf= fopen("/proc/sys/vm/max_map_count","r");
- if (conf) {
- int limit=-1;
- if(fscanf(conf,"%d",&limit) != 1)
- xbt_die("Error while creating a new coroutine. Parse error.");
- fclose(conf);
- if (limit!=-1 && SIMIX_process_count() > (limit - 100) /2)
- xbt_die("Error while creating a new coroutine. "
- "This seem due to the the vm.max_map_count system limit that is only equal to %d while we already have %d coroutines. "
- "Please check the install documentation to see how to increase this limit", limit, SIMIX_process_count());
- if (limit == -1)
- xbt_die("Error while creating a new coroutine. "
- "This seems to be a non-linux system, disabling the automatic verification that the system limit on the amount of memory maps is high enough.");
- xbt_die("Error while creating a new coroutine. ");
- }
-
- }
-
- jcoroutine = (*env)->NewGlobalRef(env, jcoroutine);
- context->jcoroutine = jcoroutine;
-}
+++ /dev/null
-/* 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 _XBT_CONTEXT_COJAVA_H
-#define _XBT_CONTEXT_COJAVA_H
-
-#include <xbt/misc.h>
-#include <simgrid/simix.h>
-#include <xbt/xbt_os_thread.h>
-
-#include "jmsg.h"
-#include "jmsg_process.h"
-
-SG_BEGIN_DECL()
-
-typedef struct s_smx_ctx_cojava {
- s_smx_ctx_base_t super; /* Fields of super implementation */
- jobject jprocess; /* the java process instance bound with the msg process structure */
- JNIEnv *jenv; /* jni interface pointer associated to this thread */
- jobject jcoroutine; /* java coroutine object */
- int bound:1;
-} s_smx_ctx_cojava_t, *smx_ctx_cojava_t;
-
-void SIMIX_ctx_cojava_factory_init(smx_context_factory_t *factory);
-void smx_ctx_cojava_stop(smx_context_t context);
-smx_context_t smx_ctx_cojava_self(void);
-SG_END_DECL()
-
-#endif /* !_XBT_CONTEXT_JAVA_H */
+++ /dev/null
-/* context_java - implementation of context switching for java threads */
-
-/* Copyright (c) 2009-2010, 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/function_types.h>
-#include <simgrid/simix.h>
-#include <xbt/ex.h>
-#include "smx_context_java.h"
-#include "jxbt_utilities.h"
-#include "xbt/dynar.h"
-#include "../../simix/smx_private.h"
-extern JavaVM *__java_vm;
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(jmsg, bindings, "MSG for Java(TM)");
-
-static smx_context_t
-smx_ctx_java_factory_create_context(xbt_main_func_t code,
- int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process);
-
-static void smx_ctx_java_free(smx_context_t context);
-static void smx_ctx_java_suspend(smx_context_t context);
-static void smx_ctx_java_resume(smx_context_t new_context);
-static void smx_ctx_java_runall(void);
-static void* smx_ctx_java_thread_run(void *data);
-void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory)
-{
- /* instantiate the context factory */
- smx_ctx_base_factory_init(factory);
-
- (*factory)->create_context = smx_ctx_java_factory_create_context;
- /* Leave default behavior of (*factory)->finalize */
- (*factory)->free = smx_ctx_java_free;
- (*factory)->stop = smx_ctx_java_stop;
- (*factory)->suspend = smx_ctx_java_suspend;
- (*factory)->runall = smx_ctx_java_runall;
- (*factory)->name = "ctx_java_factory";
- //(*factory)->finalize = smx_ctx_base_factory_finalize;
- (*factory)->self = smx_ctx_java_self;
- (*factory)->get_process = smx_ctx_base_get_process;
-}
-smx_context_t smx_ctx_java_self(void)
-{
- return (smx_context_t)xbt_os_thread_get_extra_data();
-}
-
-static smx_context_t
-smx_ctx_java_factory_create_context(xbt_main_func_t code,
- int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process)
-{
- static int thread_amount=0;
- smx_ctx_java_t context = xbt_new0(s_smx_ctx_java_t, 1);
- thread_amount++;
- /* If the user provided a function for the process then use it
- otherwise is the context for maestro */
- if (code) {
- if (argc == 0) {
- context->jprocess = (jobject) code;
- }
- else {
- context->jprocess = NULL;
- }
- context->super.cleanup_func = cleanup_func;
- context->begin = xbt_os_sem_init(0);
- context->end = xbt_os_sem_init(0);
-
- context->super.argc = argc;
- context->super.argv = argv;
- context->super.code = code;
-
- TRY {
- context->thread = xbt_os_thread_create(NULL,smx_ctx_java_thread_run,context,NULL);
- }
- CATCH_ANONYMOUS {
- RETHROWF("Failed to create context #%d. You may want to switch to Java coroutines to increase your limits (error: %s)."
- "See the Install section of simgrid-java documentation (in doc/install.html) for more on coroutines.",
- thread_amount);
- }
- } else {
- context->thread = NULL;
- xbt_os_thread_set_extra_data(context);
- }
- context->super.process = process;
-
- return (smx_context_t) context;
-}
-
-static void* smx_ctx_java_thread_run(void *data) {
- smx_ctx_java_t context = (smx_ctx_java_t)data;
- xbt_os_thread_set_extra_data(context);
- //Attach the thread to the JVM
- JNIEnv *env;
- XBT_ATTRIB_UNUSED jint error = (*__java_vm)->AttachCurrentThread(__java_vm, (void **) &env, NULL);
- xbt_assert((error == JNI_OK), "The thread could not be attached to the JVM");
- context->jenv = get_current_thread_env();
- //Wait for the first scheduling round to happen.
- xbt_os_sem_acquire(context->begin);
- //Create the "Process" object if needed.
- if (context->super.argc > 0) {
- context->super.code(context->super.argc, context->super.argv);
- }
- else {
- smx_process_t process = SIMIX_process_self();
- (*env)->SetLongField(env, context->jprocess, jprocess_field_Process_bind,
- (intptr_t)process);
- }
-
- // Adrien, ugly path, just to bypass creation of context at low levels
- // (i.e such as for the VM migration for instance)
- if(context->jprocess != NULL){
- xbt_assert((context->jprocess != NULL), "Process not created...");
- //wait for the process to be able to begin
- //TODO: Cache it
- jfieldID jprocess_field_Process_startTime = jxbt_get_sfield(env, "org/simgrid/msg/Process", "startTime", "D");
- jdouble startTime = (*env)->GetDoubleField(env, context->jprocess, jprocess_field_Process_startTime);
- if (startTime > MSG_get_clock()) {
- MSG_process_sleep(startTime - MSG_get_clock());
- }
- //Execution of the "run" method.
- jmethodID id = jxbt_get_smethod(env, "org/simgrid/msg/Process", "run", "()V");
- xbt_assert( (id != NULL), "Method not found...");
- (*env)->CallVoidMethod(env, context->jprocess, id);
- }
- smx_ctx_java_stop((smx_context_t)context);
-
- return NULL;
-}
-
-static void smx_ctx_java_free(smx_context_t context)
-{
- if (context) {
- smx_ctx_java_t ctx_java = (smx_ctx_java_t) context;
- if (ctx_java->thread) { /* We are not in maestro context */
- xbt_os_thread_join(ctx_java->thread, NULL);
- xbt_os_sem_destroy(ctx_java->begin);
- xbt_os_sem_destroy(ctx_java->end);
- }
- }
- smx_ctx_base_free(context);
-}
-
-
-void smx_ctx_java_stop(smx_context_t context)
-{
- smx_ctx_java_t ctx_java = (smx_ctx_java_t)context;
- /* I am the current process and I am dying */
- if (context->iwannadie) {
- context->iwannadie = 0;
- JNIEnv *env = get_current_thread_env();
- XBT_DEBUG("Gonna launch Killed Error");
- // TODO Adrien, if the process has not been created at the java layer, why should we raise the exception/error at the java level (this happens
- // for instance during the migration process that creates at the C level two processes: one on the SRC node and one on the DST node, if the DST process is killed.
- // it is not required to raise an exception at the JAVA level, the low level should be able to manage such an issue correctly but this is not the case right now unfortunately ...
- // TODO it will be nice to have the name of the process to help the end-user to know which Process has been killed
- // jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", bprintf("Process %s killed :) (file smx_context_java.c)", MSG_process_get_name( (msg_process_t)context) ));
- jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", bprintf("Process %s killed :) (file smx_context_java.c)", simcall_process_get_name((smx_process_t) SIMIX_context_get_process(context))) );
- XBT_DEBUG("Trigger a cancel error at the C level");
- THROWF(cancel_error, 0, "process cancelled");
- } else {
- smx_ctx_base_stop(context);
- /* detach the thread and kills it */
- JNIEnv *env = ctx_java->jenv;
- (*env)->DeleteGlobalRef(env,ctx_java->jprocess);
- XBT_ATTRIB_UNUSED jint error = (*__java_vm)->DetachCurrentThread(__java_vm);
- xbt_assert((error == JNI_OK), "The thread couldn't be detached.");
- xbt_os_sem_release(((smx_ctx_java_t)context)->end);
- xbt_os_thread_exit(NULL);
- }
-}
-
-static void smx_ctx_java_suspend(smx_context_t context)
-{
- smx_ctx_java_t ctx_java = (smx_ctx_java_t) context;
- xbt_os_sem_release(ctx_java->end);
- xbt_os_sem_acquire(ctx_java->begin);
-}
-
-// FIXME: inline those functions
-static void smx_ctx_java_resume(smx_context_t new_context)
-{
- smx_ctx_java_t ctx_java = (smx_ctx_java_t) new_context;
- xbt_os_sem_release(ctx_java->begin);
- xbt_os_sem_acquire(ctx_java->end);
-}
-
-static void smx_ctx_java_runall(void)
-{
- xbt_dynar_t processes = SIMIX_process_get_runnable();
- smx_process_t process;
- unsigned int cursor;
- xbt_dynar_foreach(processes, cursor, process) {
- smx_ctx_java_resume(SIMIX_process_get_context(process));
- }
-}
+++ /dev/null
-/* Copyright (c) 2009-2010, 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 _XBT_CONTEXT_JAVA_H
-#define _XBT_CONTEXT_JAVA_H
-
-#include <xbt/misc.h>
-#include <simgrid/simix.h>
-#include <xbt/xbt_os_thread.h>
-
-#include "jmsg.h"
-#include "jmsg_process.h"
-
-SG_BEGIN_DECL()
-
-typedef struct s_smx_ctx_java {
- s_smx_ctx_base_t super; /* Fields of super implementation */
- jobject jprocess; /* the java process instance bound with the msg process structure */
- JNIEnv *jenv; /* jni interface pointer associated to this thread */
- xbt_os_thread_t thread;
- xbt_os_sem_t begin; /* this semaphore is used to schedule/yield the process */
- xbt_os_sem_t end; /* this semaphore is used to schedule/unschedule the process */
-} s_smx_ctx_java_t, *smx_ctx_java_t;
-
-void SIMIX_ctx_java_factory_init(smx_context_factory_t *factory);
-void smx_ctx_java_stop(smx_context_t context);
-smx_context_t smx_ctx_java_self(void);
-SG_END_DECL()
-
-#endif /* !_XBT_CONTEXT_JAVA_H */
#endif
JNIEXPORT jobject JNICALL Java_org_simgrid_surf_SurfJNI_getAction(JNIEnv *env, jclass cls, jlong jarg1) {
- Action * action = (Action *)jarg1;
+ simgrid::surf::Action * action = (simgrid::surf::Action *)jarg1;
jobject res;
- CpuAction *cpu_action = dynamic_cast<CpuAction*>(action);
+ simgrid::surf::CpuAction *cpu_action =
+ dynamic_cast<simgrid::surf::CpuAction*>(action);
if (cpu_action) {
- SwigDirector_CpuAction *dir_cpu_action = dynamic_cast<SwigDirector_CpuAction*>(cpu_action);
+ SwigDirector_CpuAction *dir_cpu_action =
+ dynamic_cast<SwigDirector_CpuAction*>(cpu_action);
if (dir_cpu_action) {
res = dir_cpu_action->swig_get_self(env);\
} else {
#define GETDIRECTOR(NAME) \
JNIEXPORT jobject JNICALL Java_org_simgrid_surf_SurfJNI_get## NAME ## Director(JNIEnv *env, jclass cls, jlong jarg1)\
{\
- NAME * arg1 = (NAME*)jarg1;\
+ simgrid::surf::NAME * arg1 = (simgrid::surf::NAME*)jarg1;\
SwigDirector_ ##NAME *director = dynamic_cast<SwigDirector_ ##NAME *>(arg1);\
jobject res;\
if (director) {\
}
%typemap(out) ActionArrayPtr {
long l = 0;
- for(ActionList::iterator it($1->begin()), itend($1->end()); it != itend ; ++it) {
+ for(simgrid::surf::ActionList::iterator it($1->begin()), itend($1->end()); it != itend ; ++it) {
l++;
}
$result = jenv->NewLongArray(l);
jlong *elts = jenv->GetLongArrayElements($result, NULL);
l = 0;
- for(ActionList::iterator it($1->begin()), itend($1->end()); it != itend ; ++it) {
- elts[l++] = (jlong)static_cast<Action*>(&*it);
+ for(simgrid::surf::ActionList::iterator it($1->begin()), itend($1->end()); it != itend ; ++it) {
+ elts[l++] = (jlong)static_cast<simgrid::surf::Action*>(&*it);
}
jenv->ReleaseLongArrayElements($result, elts, 0);
}
+namespace simgrid {
+namespace surf {
+
class ActionList {
public:
//void push_front(Action &action);
}
};
+}
+}
+
/* Handle xbt_dynar_t of Link */
-JAVA_ARRAYSOFCLASSES(Link);
-%apply Link[] {LinkDynar};
+JAVA_ARRAYSOFCLASSES(simgrid::surf::Link);
+%apply simgrid::surf::Link[] {LinkDynar};
%typemap(jstype) LinkDynar "Link[]"
%typemap(javain) LinkDynar "Link.cArrayUnwrap($javainput)"
%typemap(javaout) LinkDynar {
%typemap(out) DoubleDynar {
long l = xbt_dynar_length($1);
$result = jenv->NewDoubleArray(l);
- double *lout = (double *)xbt_dynar_to_array($1);
+ double *lout = (double *) xbt_dynar_get_ptr($1, 0);
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);
+ double *lout = (double *) xbt_dynar_get_ptr($1, 0);
jenv->SetDoubleArrayRegion($input, 0, l, (jdouble*)lout);
- free(lout);
%}
%typemap(javain) DoubleDynar "$javainput"
%typemap(javaout) DoubleDynar {return $jnicall}
%include "src/bindings/java/surf_swig.hpp"
+namespace simgrid {
+namespace surf {
+
+class Model;
+class CpuModel;
+class HostModel;
+class VMModel;
+class NetworkModel;
+class StorageModel;
+class Resource;
+class ResourceLmm;
+class Host;
+class HostCLM03;
+class NetworkCm02Link;
+class Action;
+class ActionLmm;
+class StorageActionLmm;
+class As;
+class RoutingPlatf;
+
+}
+}
+
%rename tmgr_trace TmgrTrace;
%nodefaultctor tmgr_trace;
struct tmgr_trace {
}
};
+namespace simgrid {
+namespace surf {
+
%nodefaultctor Model;
class Model {
public:
virtual void updateActionsStateLazy(double now, double delta);
virtual void updateActionsStateFull(double now, double delta);
- virtual ActionList *getRunningActionSet();
+ virtual simgrid::surf::ActionList *getRunningActionSet();
virtual void addTraces()=0;
};
public:
CpuModel();
virtual ~CpuModel();
- virtual Cpu *createCpu(const char *name, DoubleDynar power_peak,
+ virtual simgrid::surf::Cpu *createCpu(const char *name,
+ DoubleDynar power_peak,
int pstate, double power_scale,
tmgr_trace *power_trace, int core,
e_surf_resource_state_t state_initial,
Resource();
const char *getName();
virtual bool isUsed()=0;
- Model *getModel();
+ simgrid::surf::Model *getModel();
virtual e_surf_resource_state_t getState();
lmm_constraint *getConstraint();
%feature("director") Cpu;
class Cpu : public Resource {
public:
- Cpu(Model *model, const char *name, s_xbt_dict *props,
+ Cpu(simgrid::surf::Model *model, const char *name, s_xbt_dict *props,
lmm_constraint *constraint, int core, double powerPeak, double powerScale);
- Cpu(Model *model, const char *name, s_xbt_dict *props,
+ Cpu(simgrid::surf::Model *model, const char *name, s_xbt_dict *props,
int core, double powerPeak, double powerScale);
virtual ~Cpu();
virtual double getCurrentPowerPeak();
- virtual CpuAction *execute(double size)=0;
- virtual CpuAction *sleep(double duration)=0;
+ virtual simgrid::surf::CpuAction *execute(double size)=0;
+ virtual simgrid::surf::CpuAction *sleep(double duration)=0;
virtual int getCore();
virtual double getSpeed(double load);
virtual double getAvailableSpeed();
void setState(e_surf_resource_state_t state);
};
-class Link : public Resource {
+class Link : public simgrid::surf::Resource {
public:
Link();
~Link();
public:
CpuAction(Model *model, double cost, bool failed);
%extend {
- Cpu *getCpu() {return getActionCpu($self);}
+ simgrid::surf::Cpu *getCpu() {return getActionCpu($self);}
}
};
virtual char *getName()=0;
};
+}
+}
+
%rename lmm_constraint LmmConstraint;
struct lmm_constraint {
%extend {
/* 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. */
+// Avoid ambiguity between boost and std placeholders
+// (the std placeholders are imported through boost::signals2):
+#ifndef BOOST_BIND_NO_PLACEHOLDERS
+ #define BOOST_BIND_NO_PLACEHOLDERS
+#endif
+
+#include <functional>
+
#include <boost/lambda/bind.hpp>
#include "src/surf/surf_interface.hpp"
#include "surf_swig.hpp"
#include "src/simix/smx_private.h"
+using std::placeholders::_1;
+using std::placeholders::_2;
+using std::placeholders::_3;
+using std::placeholders::_4;
+using std::placeholders::_5;
+
double getClock() {
return surf_get_clock();
}
SIMIX_clean();
}
-CpuModel *getCpuModel(){
+simgrid::surf::CpuModel *getCpuModel(){
return surf_cpu_model_pm;
}
-CpuModel *java_cpu_model;
+simgrid::surf::CpuModel *java_cpu_model;
static void java_cpu_model_init_preparse() {
surf_cpu_model_pm = java_cpu_model;
- xbt_dynar_push(model_list, &java_cpu_model);
- xbt_dynar_push(model_list_invoke, &java_cpu_model);
- sg_platf_host_add_cb(cpu_parse_init);
+ xbt_dynar_push(all_existing_models, &java_cpu_model);
}
-void setCpuModel(CpuModel *cpuModel){
+void setCpuModel(simgrid::surf::CpuModel *cpuModel){
java_cpu_model = cpuModel;
surf_cpu_model_init_preparse = java_cpu_model_init_preparse;
}
-void setCpu(char *name, Cpu *cpu) {
+void setCpu(char *name, simgrid::surf::Cpu *cpu) {
sg_host_surfcpu_set(sg_host_by_name(name), cpu);
}
LinkDynar getRoute(char *srcName, char *dstName) {
- RoutingEdge *src = sg_host_edge(sg_host_by_name(srcName));
- RoutingEdge *dst = sg_host_edge(sg_host_by_name(dstName));
+ simgrid::surf::RoutingEdge *src = sg_host_edge(sg_host_by_name(srcName));
+ simgrid::surf::RoutingEdge *dst = sg_host_edge(sg_host_by_name(dstName));
xbt_assert(src,"Cannot get the route from a NULL source");
xbt_assert(dst,"Cannot get the route to a NULL destination");
- xbt_dynar_t route = xbt_dynar_new(sizeof(RoutingEdge*), NULL);
+ xbt_dynar_t route = xbt_dynar_new(sizeof(simgrid::surf::RoutingEdge*), NULL);
routing_platf->getRouteAndLatency(src, dst, &route, NULL);
return route;
}
-void Plugin::activateCpuCreatedCallback(){
- surf_callback_connect(cpuCreatedCallbacks, boost::bind(&Plugin::cpuCreatedCallback, this, _1));
+void Plugin::activateCpuCreatedCallback()
+{
+ surf_callback_connect(simgrid::surf::cpuCreatedCallbacks,
+ std::bind(&Plugin::cpuCreatedCallback, this, _1));
}
-void Plugin::activateCpuDestructedCallback(){
- surf_callback_connect(cpuDestructedCallbacks, boost::bind(&Plugin::cpuDestructedCallback, this, _1));
+void Plugin::activateCpuDestructedCallback()
+{
+ surf_callback_connect(simgrid::surf::cpuDestructedCallbacks,
+ std::bind(&Plugin::cpuDestructedCallback, this, _1));
}
-void Plugin::activateCpuStateChangedCallback(){
- surf_callback_connect(cpuStateChangedCallbacks, boost::bind(&Plugin::cpuStateChangedCallback, this, _1, _2, _3));
+void Plugin::activateCpuStateChangedCallback()
+{
+ surf_callback_connect(simgrid::surf::cpuStateChangedCallbacks,
+ std::bind(&Plugin::cpuStateChangedCallback, this, _1, _2, _3));
}
-void Plugin::activateCpuActionStateChangedCallback(){
- surf_callback_connect(cpuActionStateChangedCallbacks, boost::bind(&Plugin::cpuActionStateChangedCallback, this, _1, _2, _3));
+void Plugin::activateCpuActionStateChangedCallback()
+{
+ surf_callback_connect(simgrid::surf::cpuActionStateChangedCallbacks,
+ std::bind(&Plugin::cpuActionStateChangedCallback, this, _1, _2, _3));
}
-void Plugin::activateLinkCreatedCallback(){
- surf_callback_connect(networkLinkCreatedCallbacks, boost::bind(&Plugin::networkLinkCreatedCallback, this, _1));
+void Plugin::activateLinkCreatedCallback()
+{
+ surf_callback_connect(simgrid::surf::networkLinkCreatedCallbacks,
+ std::bind(&Plugin::networkLinkCreatedCallback, this, _1));
}
-void Plugin::activateLinkDestructedCallback(){
- surf_callback_connect(networkLinkDestructedCallbacks, boost::bind(&Plugin::networkLinkDestructedCallback, this, _1));
+void Plugin::activateLinkDestructedCallback()
+{
+ surf_callback_connect(simgrid::surf::networkLinkDestructedCallbacks,
+ std::bind(&Plugin::networkLinkDestructedCallback, this, _1));
}
-void Plugin::activateLinkStateChangedCallback(){
- surf_callback_connect(networkLinkStateChangedCallbacks, boost::bind(&Plugin::networkLinkStateChangedCallback, this, _1, _2, _3));
+void Plugin::activateLinkStateChangedCallback()
+{
+ surf_callback_connect(simgrid::surf::networkLinkStateChangedCallbacks,
+ std::bind(&Plugin::networkLinkStateChangedCallback, this, _1, _2, _3));
}
-void Plugin::activateNetworkActionStateChangedCallback(){
- surf_callback_connect(networkActionStateChangedCallbacks, boost::bind(&Plugin::networkActionStateChangedCallback, this, _1, _2, _3));
+void Plugin::activateNetworkActionStateChangedCallback()
+{
+ surf_callback_connect(simgrid::surf::networkActionStateChangedCallbacks,
+ std::bind(&Plugin::networkActionStateChangedCallback, this, _1, _2, _3));
}
-void Plugin::activateNetworkCommunicateCallback(){
- surf_callback_connect(networkCommunicateCallbacks, boost::bind(&Plugin::networkCommunicateCallback, this, _1, _2, _3, _4, _5));
+void Plugin::activateNetworkCommunicateCallback()
+{
+ surf_callback_connect(simgrid::surf::networkCommunicateCallbacks,
+ std::bind(&Plugin::networkCommunicateCallback, this, _1, _2, _3, _4, _5));
}
#include "src/surf/maxmin_private.hpp"
typedef xbt_dynar_t LinkDynar;
-typedef ActionList *ActionArrayPtr;
+typedef simgrid::surf::ActionList *ActionArrayPtr;
double getClock();
void clean();
-CpuModel *getCpuModel();
-void setCpuModel(CpuModel *cpuModel);
+simgrid::surf::CpuModel *getCpuModel();
+void setCpuModel(simgrid::surf::CpuModel *cpuModel);
-void setCpu(char *name, Cpu *cpu);
+void setCpu(char *name, simgrid::surf::Cpu *cpu);
LinkDynar getRoute(char *srcName, char *dstName);
}
void activateCpuCreatedCallback();
- virtual void cpuCreatedCallback(Cpu *cpu) {}
+ virtual void cpuCreatedCallback(simgrid::surf::Cpu *cpu) {}
void activateCpuDestructedCallback();
- virtual void cpuDestructedCallback(Cpu *cpu) {}
+ virtual void cpuDestructedCallback(simgrid::surf::Cpu *cpu) {}
void activateCpuStateChangedCallback();
- virtual void cpuStateChangedCallback(Cpu *cpu, e_surf_resource_state_t, e_surf_resource_state_t) {}
+ virtual void cpuStateChangedCallback(simgrid::surf::Cpu *cpu, e_surf_resource_state_t, e_surf_resource_state_t) {}
void activateCpuActionStateChangedCallback();
- virtual void cpuActionStateChangedCallback(CpuAction *action, e_surf_action_state_t, e_surf_action_state_t) {}
+ virtual void cpuActionStateChangedCallback(simgrid::surf::CpuAction *action, e_surf_action_state_t, e_surf_action_state_t) {}
void activateLinkCreatedCallback();
- virtual void networkLinkCreatedCallback(Link *link) {}
+ virtual void networkLinkCreatedCallback(simgrid::surf::Link *link) {}
void activateLinkDestructedCallback();
- virtual void networkLinkDestructedCallback(Link *link) {}
+ virtual void networkLinkDestructedCallback(simgrid::surf::Link *link) {}
void activateLinkStateChangedCallback();
- virtual void networkLinkStateChangedCallback(Link *link, e_surf_resource_state_t, e_surf_resource_state_t) {}
+ virtual void networkLinkStateChangedCallback(simgrid::surf::Link *link, e_surf_resource_state_t, e_surf_resource_state_t) {}
void activateNetworkActionStateChangedCallback();
- virtual void networkActionStateChangedCallback(NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t cur) {}
+ virtual void networkActionStateChangedCallback(simgrid::surf::NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t cur) {}
void activateNetworkCommunicateCallback();
- virtual void networkCommunicateCallback(NetworkAction *action, RoutingEdge *src, RoutingEdge *dst, double size, double rate) {}
+ virtual void networkCommunicateCallback(simgrid::surf::NetworkAction *action, simgrid::surf::RoutingEdge *src, simgrid::surf::RoutingEdge *dst, double size, double rate) {}
};
--- /dev/null
+
+hostFactory = function(host_args)
+ if type(host_args.power) ~= "number" then
+ error("OOPS")
+ end
+ return function(more_args)
+ end
+end
+
}
}
-static const luaL_reg comm_functions[] = {
+static const luaL_Reg comm_functions[] = {
{"wait", l_comm_wait},
{"test", l_comm_test},
/* TODO waitany, testany */
/**
* \brief Metamethods of the comm userdata.
*/
-static const luaL_reg comm_meta[] = {
+static const luaL_Reg comm_meta[] = {
{"__gc", l_comm_gc},
{NULL, NULL}
};
*/
void sglua_register_comm_functions(lua_State* L)
{
- /* create a table simgrid.com and fill it with com functions */
- luaL_openlib(L, COMM_MODULE_NAME, comm_functions, 0);
- /* simgrid.comm */
+ /* create a table simgrid.comm and fill it with com functions */
+ lua_getglobal(L, "simgrid"); /* simgrid */
+ luaL_newlib(L, comm_functions); /* simgrid simgrid.comm */
+
+ /* create the metatable for comm, add it to the Lua registry */
+ luaL_newmetatable(L, COMM_MODULE_NAME); /* simgrid simgrid.comm mt */
- /* create the metatable for comms, add it to the Lua registry */
- luaL_newmetatable(L, COMM_MODULE_NAME);
- /* simgrid.comm mt */
/* fill the metatable */
- luaL_openlib(L, NULL, comm_meta, 0);
- /* simgrid.comm mt */
- lua_pushvalue(L, -2);
- /* simgrid.comm mt simgrid.comm */
+ luaL_setfuncs(L, comm_meta, 0); /* simgrid simgrid.comm mt */
+
+ /**
+ * Copy the table and push it onto the stack.
+ * Required for the lua_setfield call below.
+ */
+ lua_pushvalue(L, -2); /* simgrid simgrid.comm mt simgrid.comm */
+
/* metatable.__index = simgrid.comm
- * we put the comm functions inside the comm itself:
+ * we put the comm functions inside the comm userdata itself:
* this allows to write my_comm:method(args) for
* simgrid.comm.method(my_comm, args) */
- lua_setfield(L, -2, "__index");
- /* simgrid.comm mt */
- lua_pop(L, 2);
- /* -- */
+ lua_setfield(L, -2, "__index"); /* simgrid simgrid.comm mt */
+
+ lua_setmetatable(L, -2); /* simgrid simgrid.comm */
+ lua_setfield(L, -1, "comm"); /* simgrid */
+ lua_pop(L, 1); /* -- */
}
lua_getfield(L, index, "__simgrid_host");
pi = (msg_host_t *) luaL_checkudata(L, lua_gettop(L), HOST_MODULE_NAME);
if (pi == NULL)
- luaL_typerror(L, index, HOST_MODULE_NAME);
+ XBT_ERROR("luaL_checkudata() returned NULL");
ht = *pi;
if (!ht)
luaL_error(L, "null Host");
XBT_DEBUG("Getting Host from name...");
msg_host_t msg_host = MSG_host_by_name(name);
if (!msg_host) {
- luaL_error(L, "null Host : MSG_get_host_by_name failed");
+ XBT_ERROR("MSG_get_host_by_name failed, requested hostname: %s", name);
}
lua_newtable(L); /* create a table, put the userdata on top of it */
msg_host_t *lua_host = (msg_host_t *) lua_newuserdata(L, sizeof(msg_host_t));
static int l_host_number(lua_State * L)
{
xbt_dynar_t hosts = MSG_hosts_as_dynar();
- lua_pushnumber(L, xbt_dynar_length(hosts));
+ lua_pushinteger(L, xbt_dynar_length(hosts));
xbt_dynar_free(&hosts);
return 1;
}
*/
static int l_host_sleep(lua_State *L)
{
- int time = luaL_checknumber(L, 1);
+ int time = luaL_checkinteger(L, 1);
MSG_process_sleep(time);
return 0;
}
return 0;
}
-static const luaL_reg host_functions[] = {
+static const luaL_Reg host_functions[] = {
{"get_by_name", l_host_get_by_name},
{"name", l_host_get_name},
{"number", l_host_number},
return 1;
}
-static const luaL_reg host_meta[] = {
+static const luaL_Reg host_meta[] = {
{"__tostring", l_host_tostring},
{0, 0}
};
void sglua_register_host_functions(lua_State* L)
{
/* create a table simgrid.host and fill it with host functions */
- luaL_openlib(L, HOST_MODULE_NAME, host_functions, 0);
- /* simgrid.host */
+ lua_getglobal(L, "simgrid"); /* simgrid */
+ luaL_newlib(L, host_functions); /* simgrid simgrid.host */
+ lua_setfield(L, -2, "host"); /* simgrid */
+ lua_getfield(L, -1, "host"); /* simgrid simgrid.host */
/* create the metatable for host, add it to the Lua registry */
- luaL_newmetatable(L, HOST_MODULE_NAME);
- /* simgrid.host mt */
+ luaL_newmetatable(L, HOST_MODULE_NAME); /* simgrid simgrid.host mt */
+
/* fill the metatable */
- luaL_openlib(L, NULL, host_meta, 0);
- /* simgrid.host mt */
- lua_pushvalue(L, -2);
- /* simgrid.host mt simgrid.host */
+ luaL_setfuncs(L, host_meta, 0); /* simgrid simgrid.host mt */
+
+ /**
+ * Copy the table and push it onto the stack.
+ * Required for the lua_setfield call below.
+ */
+ lua_getfield(L, -3, "host"); /* simgrid simgrid.host mt simgrid.host */
+
/* metatable.__index = simgrid.host
* we put the host functions inside the host userdata itself:
* this allows to write my_host:method(args) for
* simgrid.host.method(my_host, args) */
- lua_setfield(L, -2, "__index");
- /* simgrid.host mt */
- lua_pop(L, 2);
- /* -- */
+ lua_setfield(L, -2, "__index"); /* simgrid simgrid.host mt */
+
+ lua_setmetatable(L, -2); /* simgrid simgrid.host */
+ lua_pop(L, 2); /* -- */
}
#include <ctype.h>
#include <lauxlib.h>
-#include <msg/msg_private.h>
-#include <simix/smx_host_private.h>
-#include <surf/surf_private.h>
+#include "src/msg/msg_private.h"
+#include "src/simix/smx_host_private.h"
+#include "src/surf/surf_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(lua_platf, bindings, "Lua bindings (platform module)");
/* simgrid.platf API */
/* ********************************************************************************* */
-static const luaL_reg platf_functions[] = {
+static const luaL_Reg platf_functions[] = {
{"open", console_open},
{"close", console_close},
{"AS_open", console_AS_open},
{"AS_close", console_AS_close},
+ {"backbone_new", console_add_backbone},
+ {"host_link_new", console_add_host___link},
{"host_new", console_add_host},
{"link_new", console_add_link},
{"router_new", console_add_router},
{"route_new", console_add_route},
+ {"ASroute_new", console_add_ASroute},
{NULL, NULL}
};
storage_register_callbacks();
routing_register_callbacks();
- gpu_register_callbacks();
-
return 0;
}
int console_close(lua_State *L) {
sg_platf_end();
sg_platf_exit();
+ return 0;
+}
- xbt_lib_cursor_t cursor;
- void **data;
- char *name;
-
- /* Initialize MSG and WKS hosts */
- XBT_DEBUG("Initialize MSG and WKS hosts");
- xbt_lib_foreach(host_lib, cursor, name, data) {
- if(data[SURF_HOST_LEVEL]){
- XBT_DEBUG("\tSee surf host %s",name);
- SIMIX_host_create(name);
- // THIS IS BRAINDEAD. There is no sg_host_t in that level, but a smx_host_priv. So commenting out for now.
- // Lua is broken anyway. Christian will fix it
- // __MSG_host_create((sg_host_t)data[SIMIX_HOST_LEVEL]);
- }
+int console_add_backbone(lua_State *L) {
+ s_sg_platf_link_cbarg_t link;
+ memset(&link,0,sizeof(link));
+ int type;
+
+ link.properties = NULL;
+
+ if (!lua_istable(L, -1)) {
+ XBT_ERROR
+ ("Bad Arguments to create backbone in Lua. Should be a table with named arguments.");
+ return -1;
+ }
+
+ lua_pushstring(L, "id");
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING) {
+ XBT_ERROR("Attribute 'id' must be specified for backbone and must be a string.");
+ }
+ link.id = lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ lua_pushstring(L, "bandwidth");
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'bandwidth' must be specified for backbone and must either be a string (in the right format; see docs) or a number.");
+ }
+ link.bandwidth = surf_parse_get_bandwidth(lua_tostring(L, -1));
+ lua_pop(L, 1);
+
+ lua_pushstring(L, "lat");
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'lat' must be specified for backbone and must either be a string (in the right format; see docs) or a number.");
+ }
+ link.latency = surf_parse_get_time(lua_tostring(L, -1));
+ lua_pop(L, 1);
+
+ link.state = SURF_RESOURCE_ON;
+
+ lua_pushstring(L, "sharing_policy");
+ type = lua_gettable(L, -2);
+ const char* policy = lua_tostring(L, -1);
+ if (policy && !strcmp(policy,"FULLDUPLEX")) {
+ link.policy = SURF_LINK_FULLDUPLEX;
+ } else if (policy && !strcmp(policy,"FATPIPE")) {
+ link.policy = SURF_LINK_FATPIPE;
+ } else {
+ link.policy = SURF_LINK_SHARED;
}
+ sg_platf_new_link(&link);
+ routing_cluster_add_backbone(sg_link_by_name(link.id));
+
+ return 0;
+}
+
+int console_add_host___link(lua_State *L) {
+ s_sg_platf_host_link_cbarg_t host_link;
+ memset(&host_link,0,sizeof(host_link));
+ int type;
+
+ // we get values from the table passed as argument
+ if (!lua_istable(L, -1)) {
+ XBT_ERROR
+ ("Bad Arguments to create host_link in Lua. Should be a table with named arguments.");
+ return -1;
+ }
+
+ lua_pushstring(L, "id");
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING) {
+ XBT_ERROR("Attribute 'id' must be specified for any host_link and must be a string.");
+ }
+ host_link.id = lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ lua_pushstring(L, "up");
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'up' must be specified for host_link and must either be a string or a number.");
+ }
+ host_link.link_up = lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ lua_pushstring(L, "down");
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'down' must be specified for host_link and must either be a string or a number.");
+ }
+ host_link.link_down = lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ XBT_DEBUG("Create a host_link for host %s", host_link.id);
+ sg_platf_new_host_link(&host_link);
+
return 0;
}
int console_add_host(lua_State *L) {
s_sg_platf_host_cbarg_t host;
memset(&host,0,sizeof(host));
- int state;
+ int state, type;
// we get values from the table passed as argument
if (!lua_istable(L, -1)) {
XBT_ERROR
- ("Bad Arguments to create host, Should be a table with named arguments");
+ ("Bad Arguments to create host. Should be a table with named arguments");
return -1;
}
// get Id Value
lua_pushstring(L, "id");
- lua_gettable(L, -2);
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'id' must be specified for any host and must be a string.");
+ }
host.id = lua_tostring(L, -1);
lua_pop(L, 1);
// get power value
lua_pushstring(L, "power");
- lua_gettable(L, -2);
- host.power_peak = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push_as(host.power_peak, double, lua_tonumber(L, -1));
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'power' must be specified for host and must either be a string (in the correct format; check documentation) or a number.");
+ }
+ host.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push_as(host.speed_peak, double, get_cpu_speed(lua_tostring(L, -1)));
lua_pop(L, 1);
// get core
lua_pushstring(L, "core");
lua_gettable(L, -2);
- if(!lua_isnumber(L,-1)) host.core_amount = 1;// Default value
+ if(!lua_isnumber(L,-1)) {
+ host.core_amount = 1;// Default value
+ }
else host.core_amount = lua_tonumber(L, -1);
if (host.core_amount == 0)
host.core_amount = 1;
lua_pop(L, 1);
//get power_scale
- lua_pushstring(L, "power_scale");
+ lua_pushstring(L, "availability");
lua_gettable(L, -2);
- if(!lua_isnumber(L,-1)) host.power_scale = 1;// Default value
- else host.power_scale = lua_tonumber(L, -1);
+ if(!lua_isnumber(L,-1)) host.speed_scale = 1;// Default value
+ else host.speed_scale = lua_tonumber(L, -1);
lua_pop(L, 1);
//get power_trace
- lua_pushstring(L, "power_trace");
+ lua_pushstring(L, "availability_file");
lua_gettable(L, -2);
- host.power_trace = tmgr_trace_new_from_file(lua_tostring(L, -1));
+ host.speed_trace = tmgr_trace_new_from_file(lua_tostring(L, -1));
lua_pop(L, 1);
//get state initial
- lua_pushstring(L, "state_initial");
+ lua_pushstring(L, "state");
lua_gettable(L, -2);
if(!lua_isnumber(L,-1)) state = 1;// Default value
else state = lua_tonumber(L, -1);
host.initial_state = SURF_RESOURCE_OFF;
//get trace state
- lua_pushstring(L, "state_trace");
+ lua_pushstring(L, "state_file");
lua_gettable(L, -2);
host.state_trace = tmgr_trace_new_from_file(lua_tostring(L, -1));
lua_pop(L, 1);
sg_platf_new_host(&host);
+ xbt_dynar_free(&host.speed_peak);
return 0;
}
s_sg_platf_link_cbarg_t link;
memset(&link,0,sizeof(link));
+ int type;
const char* policy;
if (! lua_istable(L, -1)) {
// get Id Value
lua_pushstring(L, "id");
- lua_gettable(L, -2);
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'id' must be specified for any link and must be a string.");
+ }
link.id = lua_tostring(L, -1);
lua_pop(L, 1);
// get bandwidth value
lua_pushstring(L, "bandwidth");
- lua_gettable(L, -2);
- link.bandwidth = lua_tonumber(L, -1);
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'bandwidth' must be specified for any link and must either be either a string (in the right format; see docs) or a number.");
+ }
+ link.bandwidth = surf_parse_get_bandwidth(lua_tostring(L, -1));
lua_pop(L, 1);
//get latency value
- lua_pushstring(L, "latency");
- lua_gettable(L, -2);
- link.latency = lua_tonumber(L, -1);
+ lua_pushstring(L, "lat");
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
+ XBT_ERROR("Attribute 'lat' must be specified for any link and must either be a string (in the right format; see docs) or a number.");
+ }
+ link.latency = surf_parse_get_time(lua_tostring(L, -1));
lua_pop(L, 1);
/*Optional Arguments */
//get bandwidth_trace value
- lua_pushstring(L, "bandwidth_trace");
+ lua_pushstring(L, "bandwidth_file");
lua_gettable(L, -2);
link.bandwidth_trace = tmgr_trace_new_from_file(lua_tostring(L, -1));
lua_pop(L, 1);
//get latency_trace value
- lua_pushstring(L, "latency_trace");
+ lua_pushstring(L, "latency_file");
lua_gettable(L, -2);
link.latency_trace = tmgr_trace_new_from_file(lua_tostring(L, -1));
lua_pop(L, 1);
//get state_trace value
- lua_pushstring(L, "state_trace");
+ lua_pushstring(L, "state_file");
lua_gettable(L, -2);
link.state_trace = tmgr_trace_new_from_file(lua_tostring(L, -1));
lua_pop(L, 1);
//get state_initial value
- lua_pushstring(L, "state_initial");
+ lua_pushstring(L, "state");
lua_gettable(L, -2);
if (!lua_isnumber(L,-1) || lua_tonumber(L, -1))
link.state = SURF_RESOURCE_ON;
lua_pop(L, 1);
//get policy value
- lua_pushstring(L, "policy");
+ lua_pushstring(L, "sharing_policy");
lua_gettable(L, -2);
policy = lua_tostring(L, -1);
lua_pop(L, 1);
int console_add_router(lua_State* L) {
s_sg_platf_router_cbarg_t router;
memset(&router,0,sizeof(router));
+ int type;
if (! lua_istable(L, -1)) {
XBT_ERROR("Bad Arguments to create router, Should be a table with named arguments");
}
lua_pushstring(L, "id");
- lua_gettable(L, -2);
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING) {
+ XBT_ERROR("Attribute 'id' must be specified for any link and must be a string.");
+ }
router.id = lua_tostring(L, -1);
lua_pop(L,1);
#include "surf/surfxml_parse.h" /* to override surf_parse and bypass the parser */
int console_add_route(lua_State *L) {
+ XBT_DEBUG("Adding route");
s_sg_platf_route_cbarg_t route;
memset(&route,0,sizeof(route));
+ int type;
/* allocating memory for the buffer, I think 2kB should be enough */
surfxml_bufferstack = xbt_new0(char, surfxml_bufferstack_size);
- int is_symmetrical;
-
if (! lua_istable(L, -1)) {
- XBT_ERROR("Bad Arguments to create a route, Should be a table with named arguments");
+ XBT_ERROR("Bad Arguments to create a route. Should be a table with named arguments");
return -1;
}
lua_pushstring(L,"src");
- lua_gettable(L,-2);
+ type = lua_gettable(L,-2);
+ if (type != LUA_TSTRING) {
+ XBT_ERROR("Attribute 'src' must be specified for any route and must be a string.");
+ }
route.src = lua_tostring(L, -1);
lua_pop(L,1);
lua_pushstring(L,"dest");
- lua_gettable(L,-2);
+ type = lua_gettable(L,-2);
+ if (type != LUA_TSTRING) {
+ XBT_ERROR("Attribute 'dest' must be specified for any route and must be a string.");
+ }
route.dst = lua_tostring(L, -1);
lua_pop(L,1);
lua_pushstring(L,"links");
- lua_gettable(L,-2);
+ type = lua_gettable(L,-2);
+ if (type != LUA_TSTRING) {
+ XBT_ERROR("Attribute 'links' must be specified for any route and must be a string (different links separated by commas or single spaces.");
+ }
route.link_list = xbt_str_split(lua_tostring(L, -1), ", \t\r\n");
if (xbt_dynar_is_empty(route.link_list))
xbt_dynar_push_as(route.link_list,char*,xbt_strdup(lua_tostring(L, -1)));
lua_pop(L,1);
+ /* We are relying on the XML bypassing mechanism since the corresponding sg_platf does not exist yet.
+ * Et ouais mon pote. That's the way it goes. F34R.
+ *
+ * (Note that above this function, there is a #include statement. Is this
+ * comment related to that statement?)
+ */
lua_pushstring(L,"symmetrical");
lua_gettable(L,-2);
- is_symmetrical = lua_tointeger(L, -1);
+ if (lua_isstring(L, -1)) {
+ const char* value = lua_tostring(L, -1);
+ if (strcmp("YES", value) == 0) {
+ route.symmetrical = TRUE;
+ }
+ else
+ route.symmetrical = FALSE;
+ }
+ else {
+ route.symmetrical = TRUE;
+ }
lua_pop(L,1);
route.gw_src = NULL;
route.gw_dst = NULL;
- /* We are relying on the XML bypassing mechanism since the corresponding sg_platf does not exist yet.
- * Et ouais mon pote. That's the way it goes. F34R.
- */
- if (is_symmetrical)
- route.symmetrical = TRUE;
- else
- route.symmetrical = FALSE;
-
sg_platf_new_route(&route);
-
+
+ return 0;
+}
+
+int console_add_ASroute(lua_State *L) {
+ s_sg_platf_route_cbarg_t ASroute;
+ memset(&ASroute,0,sizeof(ASroute));
+
+ lua_pushstring(L, "src");
+ lua_gettable(L, -2);
+ ASroute.src = lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ lua_pushstring(L, "dst");
+ lua_gettable(L, -2);
+ ASroute.dst = lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ lua_pushstring(L, "gw_src");
+ lua_gettable(L, -2);
+ ASroute.gw_src = sg_routing_edge_by_name_or_null(lua_tostring(L, -1));
+ lua_pop(L, 1);
+
+ lua_pushstring(L, "gw_dst");
+ lua_gettable(L, -2);
+ ASroute.gw_dst = sg_routing_edge_by_name_or_null(lua_tostring(L, -1));
+ lua_pop(L, 1);
+
+ /*if (A_surfxml_ASroute_gw___src && !ASroute.gw_src)*/
+ /*surf_parse_error("gw_src=\"%s\" not found for ASroute from \"%s\" to \"%s\"",*/
+ /*A_surfxml_ASroute_gw___src, ASroute.src, ASroute.dst);*/
+ /*if (A_surfxml_ASroute_gw___dst && !ASroute.gw_dst)*/
+ /*surf_parse_error("gw_dst=\"%s\" not found for ASroute from \"%s\" to \"%s\"",*/
+ /*A_surfxml_ASroute_gw___dst, ASroute.src, ASroute.dst);*/
+
+ lua_pushstring(L,"links");
+ lua_gettable(L,-2);
+ ASroute.link_list = xbt_str_split(lua_tostring(L, -1), ", \t\r\n");
+ if (xbt_dynar_is_empty(ASroute.link_list))
+ xbt_dynar_push_as(ASroute.link_list,char*,xbt_strdup(lua_tostring(L, -1)));
+ lua_pop(L,1);
+
+ lua_pushstring(L,"symmetrical");
+ lua_gettable(L,-2);
+ if (lua_isstring(L, -1)) {
+ const char* value = lua_tostring(L, -1);
+ if (strcmp("YES", value) == 0) {
+ ASroute.symmetrical = TRUE;
+ }
+ else
+ ASroute.symmetrical = FALSE;
+ }
+ else {
+ ASroute.symmetrical = TRUE;
+ }
+ lua_pop(L,1);
+
+ sg_platf_new_ASroute(&ASroute);
+
return 0;
}
int console_AS_open(lua_State *L) {
const char *id;
const char *mode;
+ int type;
+
+ XBT_DEBUG("Opening AS");
if (! lua_istable(L, 1)) {
XBT_ERROR("Bad Arguments to AS_open, Should be a table with named arguments");
}
lua_pushstring(L, "id");
- lua_gettable(L, -2);
+ type = lua_gettable(L, -2);
+ if (type != LUA_TSTRING) {
+ XBT_ERROR("Attribute 'id' must be specified for any AS and must be a string.");
+ }
id = lua_tostring(L, -1);
lua_pop(L, 1);
s_sg_platf_AS_cbarg_t AS = SG_PLATF_AS_INITIALIZER;
AS.id = id;
AS.routing = mode_int;
+
sg_platf_new_AS_begin(&AS);
return 0;
}
int console_AS_close(lua_State *L) {
+ XBT_DEBUG("Closing AS");
sg_platf_new_AS_end();
return 0;
}
*/
void sglua_register_platf_functions(lua_State* L)
{
- luaL_openlib(L, PLATF_MODULE_NAME, platf_functions, 0);
- /* simgrid.platf */
- lua_pop(L, 1);
+ lua_getglobal(L, "simgrid"); /* simgrid */
+ luaL_newlib(L, platf_functions); /* simgrid simgrid.platf */
+ lua_setfield(L, -2, "platf"); /* simgrid */
+
+ lua_pop(L, 1); /* -- */
}
}
}
-static const luaL_reg process_functions[] = {
+static const luaL_Reg process_functions[] = {
{"sleep", l_process_sleep},
/* TODO: self, create, kill, suspend, is_suspended, resume, get_name,
* get_pid, get_ppid, migrate
*/
void sglua_register_process_functions(lua_State* L)
{
- luaL_openlib(L, PROCESS_MODULE_NAME, process_functions, 0);
- /* simgrid.process */
- lua_pop(L, 1);
+ lua_getglobal(L, "simgrid"); /* simgrid */
+ luaL_newlib(L, process_functions); /* simgrid simgrid.process */
+ lua_setfield(L, -2, "process"); /* simgrid */
+ lua_pop(L, 1); /* -- */
}
case LUA_TTHREAD:
sglua_copy_thread(src, dst);
break;
+
+ case LUA_TNONE:
+ XBT_ERROR("This index is acceptable but non-valid");
+ break;
}
XBT_DEBUG("%sData copied", sglua_get_spaces(indent));
* @param dst destination state
*/
static void sglua_copy_number(lua_State* src, lua_State* dst) {
- lua_pushnumber(dst, lua_tonumber(src, -1));
+ lua_Number n = lua_tonumber(src, -1);
+ if ( ((lua_Integer) n) == n) {
+ lua_pushinteger(dst, lua_tointeger(src, -1));
+ }
+ else
+ lua_pushnumber(dst, lua_tonumber(src, -1));
}
/**
buffer.size = 0;
buffer.data = xbt_new(char, buffer.capacity);
- /* copy the binary chunk from src into a buffer */
- XBT_ATTRIB_UNUSED int error = lua_dump(src, sglua_memory_writer, &buffer);
+ /* copy the binary chunk from src into a buffer
+ * c.heinrich: Added parameter TRUE for Lua 5.3 - this strips all debug
+ * information from the function.
+ */
+ // Was before merge: XBT_GNUC_UNUSED and was replaced with XBT_ATTRIB_UNUSED
+ XBT_ATTRIB_UNUSED int error = lua_dump(src, sglua_memory_writer, &buffer, TRUE);
xbt_assert(!error, "Failed to dump the function from the source state: error %d",
error);
XBT_DEBUG("Fonction dumped: %zu bytes", buffer.size);
/* copy the data */
/* src: ... udata
dst: ... */
- size_t size = lua_objlen(src, -1);
+ size_t size = lua_rawlen(src, -1);
void* src_block = lua_touserdata(src, -1);
void* dst_block = lua_newuserdata(dst, size);
/* dst: ... udata */
/* L: table key */
XBT_DEBUG("__index of '%s' begins", key);
- /* want a global or a registry value? */
- int pseudo_index;
- if (lua_equal(L, 1, LUA_REGISTRYINDEX)) {
- /* registry */
- pseudo_index = LUA_REGISTRYINDEX;
+ /* get the father */
+ lua_State* maestro = sglua_get_maestro(); /* maestro: */
+
+ /* want a global or a registry value?
+ get the value from maestro */
+ if (lua_compare(L, 1, LUA_REGISTRYINDEX, LUA_OPEQ)) {
+ /* case: registry */
+ lua_getfield(maestro, LUA_REGISTRYINDEX, key); /* maestro: ... value */
XBT_DEBUG("Will get the value from the registry of maestro");
}
- else {
- /* global */
- pseudo_index = LUA_GLOBALSINDEX;
+ else { /* case: global */
+ lua_getglobal(maestro, key); /* maestro: ... value */
XBT_DEBUG("Will get the value from the globals of maestro");
}
- /* get the father */
- lua_State* maestro = sglua_get_maestro();
-
- /* L: table key */
+ /* L: table key */
- /* get the value from maestro */
- lua_getfield(maestro, pseudo_index, key);
- /* maestro: ... value */
/* push the value onto the stack of L */
sglua_move_value(maestro, L);
lua_setmetatable(L, -2); /* thread newenv mt reg */
lua_pop(L, 1); /* thread newenv mt */
lua_setmetatable(L, -2); /* thread newenv */
- lua_setfenv(L, -2); /* thread */
- lua_pop(L, 1); /* -- */
+ lua_pushvalue(L, LUA_REGISTRYINDEX); /* thread newenv reg */
+ lua_insert(L, -2); /* thread reg newenv */
+ lua_seti(L, -2, LUA_RIDX_GLOBALS); /* thread reg */
+ lua_pop(L, 2); /* -- */
/* create the table of known tables from maestro */
lua_pushstring(L, "simgrid.maestro_tables");
/**
* \brief Ensures that a value in the stack is a valid task and returns it.
+ * A task is "valid" if the value in the stack at the given index is
+ * (a) a table
+ * (b) has a field called "__simgrid_task" which
+ * (c) contains the ctask itself (which can be typecast to msg_task_t*)
* \param L a Lua state
* \param index an index in the Lua stack
* \return the C task corresponding to this Lua task
}
/**
- * \brief Creates a new task and leaves it onto the stack.
+ * \brief Creates a new task and places it onto the stack.
* \param L a Lua state
* \return number of values returned to Lua
*
*
* A Lua task is a regular table with a full userdata inside, and both share
* the same metatable. For the regular table, the metatable allows OO-style
- * writing such as your_task:send(someone).
+ * writing such as your_task:send(someone) instead of your_task.send(your_task, someone)
* For the userdata, the metatable is used to check its type.
* TODO: make the task name an optional last parameter
*/
{
XBT_DEBUG("Task new");
const char* name = luaL_checkstring(L, 1);
- int comp_size = luaL_checkint(L, 2);
- int msg_size = luaL_checkint(L, 3);
+ int comp_size = (int) luaL_checkinteger(L, 2);
+ int msg_size = (int) luaL_checkinteger(L, 3);
/* name comp comm */
lua_settop(L, 0);
/* -- */
*/
static int l_task_execute(lua_State* L)
{
+ XBT_DEBUG("Called task_execute");
msg_task_t task = sglua_check_task(L, 1);
msg_error_t res = MSG_task_execute(task);
* \brief This function is called when a C task has just been copied.
*
* This callback is used to move the corresponding Lua task from the sender
- * process to the receiver process.
+ * process to the receiver process (so that the receiver can access and deal
+ * with it).
* It is executed in SIMIX kernel mode when the communication finishes,
* before both processes are awaken. Thus, this function is thread-safe when
* user processes are executed in parallel, though it modifies the Lua
static void task_copy_callback(msg_task_t task, msg_process_t src_process,
msg_process_t dst_process) {
- lua_State* src = MSG_process_get_data(src_process);
- lua_State* dst = MSG_process_get_data(dst_process);
+ lua_State* src = (lua_State*) MSG_process_get_data(src_process);
+ lua_State* dst = (lua_State*) MSG_process_get_data(dst_process);
/* src: ...
dst: ... */
*/
static int l_task_send(lua_State* L)
{
- msg_task_t task = sglua_check_task(L, 1);
const char* mailbox = luaL_checkstring(L, 2);
+ msg_task_t task = sglua_check_task(L, 1);
double timeout;
if (lua_gettop(L) >= 3) {
timeout = luaL_checknumber(L, 3);
}
/**
- * \brief Sends a task on a mailbox.
+ * \brief Sends a task to a mailbox.
* \param L a Lua state
* \return number of values returned to Lua
*
*/
static int l_task_isend(lua_State* L)
{
- msg_task_t task = sglua_check_task(L, 1);
const char* mailbox = luaL_checkstring(L, 2);
+ msg_task_t task = sglua_check_task(L, 1);
/* task mailbox ... */
lua_settop(L, 1);
/* task */
*/
static int l_task_dsend(lua_State* L)
{
- msg_task_t task = sglua_check_task(L, 1);
const char* mailbox = luaL_checkstring(L, 2);
+ msg_task_t task = sglua_check_task(L, 1);
/* task mailbox ... */
lua_settop(L, 1);
/* task */
return 1;
}
-static const luaL_reg task_functions[] = {
+static const luaL_Reg task_functions[] = {
{"new", l_task_new},
{"get_name", l_task_get_name},
{"get_computation_duration", l_task_get_computation_duration},
*/
static int l_task_gc(lua_State* L)
{
- /* ctask */
+ void *p = luaL_testudata(L, 1, TASK_MODULE_NAME);
+ if (p == NULL) {
+ return 0;
+ }
+
msg_task_t task = *((msg_task_t*) luaL_checkudata(L, 1, TASK_MODULE_NAME));
/* the task is NULL if I sent it to someone else */
if (task != NULL) {
MSG_task_destroy(task);
}
+ lua_settop(L, 0);
return 0;
}
/**
* \brief Metamethods of both a task table and the userdata inside it.
*/
-static const luaL_reg task_meta[] = {
+static const luaL_Reg task_meta[] = {
{"__gc", l_task_gc}, /* will be called only for userdata */
{"__tostring", l_task_tostring},
{NULL, NULL}
void sglua_register_task_functions(lua_State* L)
{
/* create a table simgrid.task and fill it with task functions */
- luaL_openlib(L, TASK_MODULE_NAME, task_functions, 0);
- /* simgrid.task */
+ lua_getglobal(L, "simgrid"); /* simgrid */
+ luaL_newlib(L, task_functions); /* simgrid simgrid.task */
/* create the metatable for tasks, add it to the Lua registry */
- luaL_newmetatable(L, TASK_MODULE_NAME);
- /* simgrid.task mt */
+ luaL_newmetatable(L, TASK_MODULE_NAME); /* simgrid simgrid.task mt */
+
/* fill the metatable */
- luaL_openlib(L, NULL, task_meta, 0);
- /* simgrid.task mt */
- lua_pushvalue(L, -2);
- /* simgrid.task mt simgrid.task */
+ luaL_setfuncs(L, task_meta, 0); /* simgrid simgrid.task mt */
+ lua_pushvalue(L, -2); /* simgrid simgrid.task mt simgrid.task */
+
/* metatable.__index = simgrid.task
* we put the task functions inside the task itself:
* this allows to write my_task:method(args) for
* simgrid.task.method(my_task, args) */
- lua_setfield(L, -2, "__index");
- /* simgrid.task mt */
- lua_pop(L, 2);
- /* -- */
+ lua_setfield(L, -2, "__index"); /* simgrid simgrid.task mt */
+
+ lua_setmetatable(L, -2); /* simgrid simgrid.task */
+ lua_setfield(L, -2, "task"); /* simgrid */
+ lua_pop(L, 1); /* -- */
/* set up MSG to copy Lua tasks between states */
MSG_task_set_copy_callback(task_copy_callback);
sglua_stack_dump("my_checkudata: ", L);
if (p == NULL || !lua_getmetatable(L, ud) || !lua_rawequal(L, -1, -2))
- luaL_typerror(L, ud, tname);
+ XBT_ERROR("Error: Userdata is NULL, couldn't find metatable or top of stack does not equal element below it.");
lua_pop(L, 2);
return p;
}
#include "surf/surfxml_parse.h"
#include <lauxlib.h>
+
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(lua, bindings, "Lua Bindings");
static lua_State* sglua_maestro_state;
return 0;
}
+
/**
* \brief Creates the platform.
* \param L a Lua state
return 0;
}
+static int error(lua_State* L) {
+
+ const char* str = luaL_checkstring(L, 1);
+ XBT_ERROR("%s", str);
+ return 0;
+}
+
+static int critical(lua_State* L) {
+
+ const char* str = luaL_checkstring(L, 1);
+ XBT_CRITICAL("%s", str);
+ return 0;
+}
+
/**
* \brief Runs your application.
* \param L a Lua state
{"launch_application", launch_application},
{"debug", debug},
{"info", info},
+ {"critical", critical},
+ {"error", error},
{"run", run},
{"get_clock", get_clock},
/* short names */
*
* \param L the Lua state
*/
+
int luaopen_simgrid(lua_State *L)
{
XBT_DEBUG("luaopen_simgrid *****");
argv[argc--] = NULL;
/* Initialize the MSG core */
- MSG_init(&argc, argv);
- MSG_process_set_data_cleanup((void_f_pvoid_t) lua_close);
XBT_DEBUG("Still %d arguments on command line", argc); // FIXME: update the lua's arg table to reflect the changes from SimGrid
}
+ MSG_init(&argc, argv);
+ MSG_process_set_data_cleanup((void_f_pvoid_t) lua_close);
/* Keep the context mechanism informed of our lua world today */
sglua_maestro_state = L;
static void sglua_register_core_functions(lua_State *L)
{
/* register the core C functions to lua */
- luaL_register(L, "simgrid", simgrid_functions);
- /* simgrid */
+ luaL_newlib(L, simgrid_functions); /* simgrid */
+ lua_pushvalue(L, -1); /* simgrid simgrid */
+ lua_setglobal(L, "simgrid"); /* simgrid */
/* set a finalizer that cleans simgrid, by adding to the simgrid module a
* dummy userdata whose __gc metamethod calls MSG_clean() */
- lua_newuserdata(L, sizeof(void*));
- /* simgrid udata */
- lua_newtable(L);
- /* simgrid udata mt */
- lua_pushcfunction(L, simgrid_gc);
- /* simgrid udata mt simgrid_gc */
- lua_setfield(L, -2, "__gc");
- /* simgrid udata mt */
- lua_setmetatable(L, -2);
- /* simgrid udata */
- lua_setfield(L, -2, "__simgrid_loaded");
- /* simgrid */
- lua_pop(L, 1);
- /* -- */
+ lua_newuserdata(L, sizeof(void*)); /* simgrid udata */
+ lua_newtable(L); /* simgrid udata mt */
+ lua_pushcfunction(L, simgrid_gc); /* simgrid udata mt simgrid_gc */
+ lua_setfield(L, -2, "__gc"); /* simgrid udata mt */
+ lua_setmetatable(L, -2); /* simgrid udata */
+ lua_setfield(L, -2, "__simgrid_loaded"); /* simgrid */
+ lua_pop(L, 1); /* -- */
}
/**
/* retrieve result */
int res = 1;
if (lua_isnumber(L, -1)) {
- res = lua_tonumber(L, -1);
+ res = lua_tointeger(L, -1);
lua_pop(L, 1); /* pop returned value */
}
int console_open(lua_State *L);
int console_close(lua_State *L);
+int console_add_backbone(lua_State*);
+int console_add_host___link(lua_State*);
int console_add_host(lua_State*);
int console_add_link(lua_State*);
int console_add_router(lua_State* L);
int console_add_route(lua_State*);
+int console_add_ASroute(lua_State*);
int console_AS_open(lua_State*);
int console_AS_close(lua_State *L);
int console_set_function(lua_State*);
/*********** Structures for snapshot comparison **************************/
-typedef struct s_mc_heap_ignore_region{
- int block;
- int fragment;
- void *address;
- size_t size;
-}s_mc_heap_ignore_region_t, *mc_heap_ignore_region_t;
-
typedef struct s_stack_region{
void *address;
void *context;
extern XBT_PRIVATE int _sg_mc_snapshot_fds;
extern XBT_PRIVATE int _sg_mc_termination;
-extern XBT_PRIVATE xbt_dynar_t mc_heap_comparison_ignore;
-extern XBT_PRIVATE xbt_dynar_t stacks_areas;
-
/********************************* Global *************************************/
XBT_PRIVATE void _mc_cfg_cb_reduce(const char *name, int pos);
XBT_PRIVATE void _mc_cfg_cb_send_determinism(const char *name, int pos);
XBT_PRIVATE void _mc_cfg_cb_termination(const char *name, int pos);
-extern xbt_dynar_t mc_heap_comparison_ignore;
-extern xbt_dynar_t stacks_areas;
-
-/********************************* Global *************************************/
-void _mc_cfg_cb_reduce(const char *name, int pos);
-void _mc_cfg_cb_checkpoint(const char *name, int pos);
-void _mc_cfg_cb_sparse_checkpoint(const char *name, int pos);
-void _mc_cfg_cb_soft_dirty(const char *name, int pos);
-void _mc_cfg_cb_ksm(const char *name, int pos);
-void _mc_cfg_cb_property(const char *name, int pos);
-void _mc_cfg_cb_timeout(const char *name, int pos);
-void _mc_cfg_cb_hash(const char *name, int pos);
-void _mc_cfg_cb_snapshot_fds(const char *name, int pos);
-void _mc_cfg_cb_max_depth(const char *name, int pos);
-void _mc_cfg_cb_visited(const char *name, int pos);
-void _mc_cfg_cb_dot_output(const char *name, int pos);
-void _mc_cfg_cb_comms_determinism(const char *name, int pos);
-void _mc_cfg_cb_send_determinism(const char *name, int pos);
-void _mc_cfg_cb_termination(const char *name, int pos);
-
XBT_PUBLIC(void) MC_run(void);
XBT_PUBLIC(void) MC_init(void);
XBT_PUBLIC(void) MC_exit(void);
#ifndef SG_PLATF_INTERFACE_H
#define SG_PLATF_INTERFACE_H
+#include <xbt/dict.h>
+
#include "simgrid/platf.h" /* public interface */
#include "xbt/RngStream.h"
+#include <simgrid/forward.h>
+
SG_BEGIN_DECL()
/* Module management functions */
typedef void (*sg_platf_mount_cb_t)(sg_platf_mount_cbarg_t);
typedef void (*sg_platf_mstorage_cb_t)(sg_platf_mstorage_cbarg_t);
-/* ***************************************** */
-/* TUTORIAL: New TAG */
-
-typedef void (*sg_platf_gpu_cb_t)(sg_platf_gpu_cbarg_t);
-XBT_PUBLIC(void) sg_platf_gpu_add_cb(sg_platf_gpu_cb_t);
-/* ***************************************** */
-
-XBT_PUBLIC(void) sg_platf_host_add_cb(sg_platf_host_cb_t);
-XBT_PUBLIC(void) sg_platf_host_link_add_cb(sg_platf_host_link_cb_t);
-XBT_PUBLIC(void) sg_platf_router_add_cb(sg_platf_router_cb_t);
XBT_PUBLIC(void) sg_platf_link_add_cb(sg_platf_link_cb_t);
-XBT_PUBLIC(void) sg_platf_peer_add_cb(sg_platf_peer_cb_t fct);
XBT_PUBLIC(void) sg_platf_cluster_add_cb(sg_platf_cluster_cb_t fct);
-XBT_PUBLIC(void) sg_platf_cabinet_add_cb(sg_platf_cabinet_cb_t fct);
XBT_PUBLIC(void) sg_platf_postparse_add_cb(void_f_void_t fct);
-XBT_PUBLIC(void) sg_platf_AS_begin_add_cb(sg_platf_AS_cb_t fct);
-XBT_PUBLIC(void) sg_platf_AS_end_add_cb(sg_platf_AS_cb_t fct);
-XBT_PUBLIC(void) sg_platf_prop_add_cb(sg_platf_prop_cb_t fct);
-
-XBT_PUBLIC(void) sg_platf_route_add_cb(sg_platf_route_cb_t);
-XBT_PUBLIC(void) sg_platf_ASroute_add_cb(sg_platf_route_cb_t);
-XBT_PUBLIC(void) sg_platf_bypassRoute_add_cb(sg_platf_route_cb_t);
-XBT_PUBLIC(void) sg_platf_bypassASroute_add_cb(sg_platf_route_cb_t);
XBT_PUBLIC(void) sg_platf_trace_add_cb(sg_platf_trace_cb_t);
-XBT_PUBLIC(void) sg_platf_trace_connect_add_cb(sg_platf_trace_connect_cb_t);
-
-XBT_PUBLIC(void) sg_platf_storage_add_cb(sg_platf_storage_cb_t fct);
-XBT_PUBLIC(void) sg_platf_mstorage_add_cb(sg_platf_mstorage_cb_t fct);
-XBT_PUBLIC(void) sg_platf_storage_type_add_cb(sg_platf_storage_type_cb_t fct);
-XBT_PUBLIC(void) sg_platf_mount_add_cb(sg_platf_mount_cb_t fct);
/** \brief Pick the right models for CPU, net and host, and call their model_init_preparse
*
#ifndef _SURF_MAXMIN_H
#define _SURF_MAXMIN_H
-#include "portable.h"
+#include "src/portable.h"
#include "xbt/misc.h"
#include "xbt/asserts.h"
#include "surf/datatypes.h"
/** @addtogroup SURF_lmm
* @details
- * A linear maxmin solver to resolves inequations systems.
+ * A linear maxmin solver to resolve inequations systems.
*
* Most SimGrid model rely on a "fluid/steady-state" modeling that
- * samount to share resources between actions at relatively
+ * simulate the sharing of resources between actions at relatively
* coarse-grain. Such sharing is generally done by solving a set of
* linear inequations. Let's take an example and assume we have the
* variables \f$x_1\f$, \f$x_2\f$, \f$x_3\f$, and \f$x_4\f$ . Let's
* say that \f$x_1\f$ and \f$x_2\f$ correspond to activities running
- * and the same CPU \f$A\f$ whose capacity is \f$C_A\f$ . In such a
+ * and the same CPU \f$A\f$ whose capacity is \f$C_A\f$. In such a
* case, we need to enforce:
*
* \f[ x_1 + x_2 \leq C_A \f]
* - bound (set)
* - shared (set)
* - usage (computed)
+ *
* Variable:
* - weight (set)
* - bound (set)
* - value (computed)
+ *
* Element:
* - value (set)
*
* var1.weight * var1.value * elem1.value + var2.weight * var2.value * elem2.value <= cons1.bound
* var2.weight * var2.value * elem3.value + var3.weight * var3.value * elem4.value <= cons2.bound
*
- * where `var1.value`, `var2.value` and `var3.value` are the unknown values
+ * where `var1.value`, `var2.value` and `var3.value` are the unknown values.
*
- * if a constraint is not shared the sum is replace by a max
+ * If a constraint is not shared, the sum is replaced by a max.
+ * For example, a third non-shared constraint `cons3` and the associated elements `elem5` and `elem6` could write as:
+ *
+ * max( var1.weight * var1.value * elem5.value , var3.weight * var3.value * elem6.value ) <= cons3.bound
+ *
+ * This is usefull for the sharing of resources for various models.
+ * For instance, for the network model, each link is associated
+ * to a constraint and each communication to a variable.
*
- * Its usefull for the sharing of resources for various models.
- * For instance for the network model the link are associated
- * to consrtaint and the communications to variables.
*/
XBT_PUBLIC_DATA(double) sg_maxmin_precision;
* @param cnst The constraint to share
* @return 1 if shared, 0 otherwise
*/
-XBT_PUBLIC(int) lmm_constraint_is_shared(lmm_constraint_t cnst);
+XBT_PUBLIC(int) lmm_constraint_sharing_policy(lmm_constraint_t cnst);
/**
* @brief Free a constraint
#include "xbt/dict.h"
#include "xbt/graph.h"
#include "xbt/misc.h"
-#include "portable.h"
#include "xbt/config.h"
+#include "src/portable.h"
+#include "surf/surf_routing.h"
#include "surf/datatypes.h"
#include "xbt/lib.h"
#include "surf/surf_routing.h"
#include "simgrid/platf_interface.h"
#include "simgrid/datatypes.h"
#include "simgrid/plugins.h"
+#include "simgrid/forward.h"
SG_BEGIN_DECL()
/* Actions and models are highly connected structures... */
} e_surf_network_element_type_t;
#ifdef __cplusplus
+
+namespace simgrid {
+namespace surf {
+
class Model;
class CpuModel;
class HostModel;
class ActionLmm;
class StorageActionLmm;
class As;
-class RoutingEdge;
class RoutingPlatf;
+
+}
+}
+
+typedef simgrid::surf::Model surf_Model;
+typedef simgrid::surf::CpuModel surf_CpuModel;
+typedef simgrid::surf::HostModel surf_HostModel;
+typedef simgrid::surf::VMModel surf_VMModel;
+typedef simgrid::surf::NetworkModel surf_NetworkModel;
+typedef simgrid::surf::StorageModel surf_StorageModel;
+typedef simgrid::surf::Resource surf_Resource;
+typedef simgrid::surf::ResourceLmm surf_ResourceLmm;
+typedef simgrid::surf::Host surf_Host;
+typedef simgrid::surf::HostCLM03 surf_HostCLM03;
+typedef simgrid::surf::NetworkCm02Link surf_NetworkCm02Link;
+typedef simgrid::surf::Action surf_Action;
+typedef simgrid::surf::ActionLmm surf_ActionLmm;
+typedef simgrid::surf::StorageActionLmm surf_StorageActionLmm;
+typedef simgrid::surf::RoutingPlatf surf_RoutingPlatf;
+
#else
-typedef struct Model Model;
-typedef struct CpuModel CpuModel;
-typedef struct HostModel HostModel;
-typedef struct VMModel VMModel;
-typedef struct NetworkModel NetworkModel;
-typedef struct StorageModel StorageModel;
-typedef struct Resource Resource;
-typedef struct ResourceLmm ResourceLmm;
-typedef struct HostCLM03 HostCLM03;
-typedef struct Host Host;
-typedef struct NetworkCm02Link NetworkCm02Link;
-typedef struct Action Action;
-typedef struct ActionLmm ActionLmm;
-typedef struct StorageActionLmm StorageActionLmm;
-typedef struct As As;
-typedef struct RoutingEdge RoutingEdge;
-typedef struct RoutingPlatf RoutingPlatf;
+
+typedef struct surf_Model surf_Model;
+typedef struct surf_CpuModel surf_CpuModel;
+typedef struct surf_HostModel surf_HostModel;
+typedef struct surf_VMModel surf_VMModel;
+typedef struct surf_NetworkModel surf_NetworkModel;
+typedef struct surf_StorageModel surf_StorageModel;
+typedef struct surf_Resource surf_Resource;
+typedef struct surf_ResourceLmm surf_ResourceLmm;
+typedef struct surf_HostCLM03 surf_HostCLM03;
+typedef struct surf_Host surf_Host;
+typedef struct surf_NetworkCm02Link surf_NetworkCm02Link;
+typedef struct surf_Action surf_Action;
+typedef struct surf_ActionLmm surf_ActionLmm;
+typedef struct surf_StorageActionLmm surf_StorageActionLmm;
+typedef struct surf_RoutingPlatf surf_RoutingPlatf;
+
#endif
/** @ingroup SURF_c_bindings
* Generic data structure for a model. The hosts,
* the CPUs and the network links are examples of models.
*/
-typedef Model *surf_model_t;
-typedef CpuModel *surf_cpu_model_t;
-typedef HostModel *surf_host_model_t;
-typedef VMModel *surf_vm_model_t;
-
-typedef NetworkModel *surf_network_model_t;
-typedef StorageModel *surf_storage_model_t;
+typedef surf_Model *surf_model_t;
+typedef surf_CpuModel *surf_cpu_model_t;
+typedef surf_HostModel *surf_host_model_t;
+typedef surf_VMModel *surf_vm_model_t;
+typedef surf_NetworkModel *surf_network_model_t;
+typedef surf_StorageModel *surf_storage_model_t;
typedef xbt_dictelm_t surf_resource_t;
-typedef Resource *surf_cpp_resource_t;
-typedef Host *surf_host_t;
+typedef surf_Resource *surf_cpp_resource_t;
+typedef surf_Host *surf_host_t;
+typedef surf_Cpu *surf_cpu_t;
/** @ingroup SURF_c_bindings
* \brief Action structure
*
* \see e_surf_action_state_t
*/
-typedef Action *surf_action_t;
-
-typedef As *AS_t;
-typedef RoutingEdge *routing_edge_t;
-typedef RoutingPlatf *routing_platf_t;
+typedef surf_Action *surf_action_t;
+typedef surf_RoutingPlatf *routing_platf_t;
typedef struct surf_file *surf_file_t;
return xbt_lib_get_elm_or_null(storage_lib, name);
}
-XBT_PUBLIC(void *) surf_as_cluster_get_backbone(AS_t as);
-XBT_PUBLIC(void) surf_as_cluster_set_backbone(AS_t as, void* backbone);
-
/** @{ @ingroup SURF_c_bindings */
-/** @brief Get the name of a surf model (dont rely on exact value)
- *
- * This is implemented using typeid(), so it may change with the compiler
- */
-XBT_PUBLIC(const char *) surf_model_name(surf_model_t model);
-
/**
* @brief Pop an action from the done actions set
*
*/
XBT_PUBLIC(surf_action_t) surf_host_model_execute_parallel_task(surf_host_model_t model,
int host_nb,
- sg_host_t *host_list,
+ sg_host_t *host_list,
double *flops_amount,
double *bytes_amount,
double rate);
/** \ingroup SURF_models
* \brief List of initialized models
*/
-XBT_PUBLIC_DATA(xbt_dynar_t) model_list;
-XBT_PUBLIC_DATA(xbt_dynar_t) model_list_invoke;
+XBT_PUBLIC_DATA(xbt_dynar_t) all_existing_models;
/** \ingroup SURF_simulation
- * \brief List of hosts that have juste restarted and whose autorestart process should be restarted.
+ * \brief List of hosts that have just restarted and whose autorestart process should be restarted.
*/
XBT_PUBLIC_DATA(xbt_dynar_t) host_that_restart;
XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_latency;
-XBT_PUBLIC(double) get_cpu_power(const char *power);
+XBT_PUBLIC(double) get_cpu_speed(const char *power);
XBT_PUBLIC(xbt_dict_t) get_as_router_properties(const char* name);
xbt_graph_t instr_routing_platform_graph (void);
void instr_routing_platform_graph_export_graphviz (xbt_graph_t g, const char *filename);
+/********** Routing **********/
+void routing_AS_begin(sg_platf_AS_cbarg_t AS);
+void routing_AS_end(void);
+surf_RoutingEdge* routing_add_host(surf_As* as, sg_platf_host_cbarg_t host);
+void routing_cluster_add_backbone(void* bb);
+surf_As* routing_get_current();
+
SG_END_DECL()
#endif /* _SURF_SURF_H */
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "xbt/virtu.h" /* sg_cmdline */
#include "xbt/xbt_os_time.h"
#include "simgrid/sg_config.h"
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "simgrid/sg_config.h"
#include "surf/surf.h"
return trace_disable_link && TRACE_is_enabled();
}
-int TRACE_disable_power(void)
+int TRACE_disable_speed(void)
{
return trace_disable_power && TRACE_is_enabled();
}
void TRACE_global_init(int *argc, char **argv)
{
+ static int is_initialised = 0;
+ if (is_initialised) return;
+
+ is_initialised = 1;
/* name of the tracefile */
xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_FILENAME,
"Trace file created by the instrumented SimGrid.",
/* format -- Switch the ouput format of Tracing */
xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_FORMAT,
- "(smpi only for now) Switch the ouput format of Tracing",
+ "(smpi only for now) Switch the output format of Tracing",
xbt_cfgelm_string, 1, 1, NULL, NULL);
xbt_cfg_setdefault_string(_sg_cfg_set, OPT_TRACING_FORMAT, "Paje");
#include "simgrid_config.h"
-#include "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "surf/surf.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
typedef enum {
INSTR_US_DECLARE,
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "xbt/lib.h"
#include "surf/surf.h"
#include "surf/surf_routing.h"
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_header, instr, "Paje tracing event system (header)");
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "xbt/virtu.h" /* sg_cmdline */
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr_trace, "tracing event system");
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_types, instr, "Paje tracing event system (types)");
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_values, instr, "Paje tracing event system (values)");
#include "simgrid/instr.h"
#include "instr/instr_interface.h"
-#include "internal_config.h"
+#include "src/internal_config.h"
#include "simgrid_config.h"
SG_BEGIN_DECL()
XBT_PRIVATE int TRACE_msg_vm_is_enabled(void);
XBT_PRIVATE int TRACE_buffer (void);
XBT_PRIVATE int TRACE_disable_link(void);
-XBT_PRIVATE int TRACE_disable_power(void);
+XBT_PRIVATE int TRACE_disable_speed(void);
XBT_PRIVATE int TRACE_onelink_only (void);
XBT_PRIVATE int TRACE_disable_destroy (void);
XBT_PRIVATE int TRACE_basic (void);
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_resource, instr, "tracing (un)-categorized resource utilization");
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "xbt/virtu.h" /* sg_cmdline */
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_trace, instr, "tracing event system");
/* 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 "AddressSpace.hpp"
+#include "src/mc/AddressSpace.hpp"
namespace simgrid {
namespace mc {
#include <xbt/misc.h>
-#include "mc_forward.hpp"
+#include "src/mc/mc_forward.hpp"
namespace simgrid {
namespace mc {
AddressSpace(Process* process) : process_(process) {}
virtual ~AddressSpace();
- simgrid::mc::Process* process() { return process_; }
+ simgrid::mc::Process* process() const { return process_; }
virtual const void* read_bytes(void* buffer, std::size_t size,
remote_ptr<void> address, int process_index = ProcessIndexAny,
ReadMode mode = Normal) const = 0;
--- /dev/null
+/* Copyright (c) 2007-2015. 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 "src/mc/ChunkedData.hpp"
+
+#define SOFT_DIRTY_BIT_NUMBER 55
+#define SOFT_DIRTY (((uint64_t)1) << SOFT_DIRTY_BIT_NUMBER)
+
+namespace simgrid {
+namespace mc {
+
+/** Take a per-page snapshot of a region
+ *
+ * @param data The start of the region (must be at the beginning of a page)
+ * @param pag_count Number of pages of the region
+ * @return Snapshot page numbers of this new snapshot
+ */
+ChunkedData::ChunkedData(PageStore& store, AddressSpace& as,
+ remote_ptr<void> addr, std::size_t page_count,
+ const std::size_t* ref_page_numbers, const std::uint64_t* pagemap)
+{
+ store_ = &store;
+ this->pagenos_.resize(page_count);
+ std::vector<char> buffer(xbt_pagesize);
+
+ for (size_t i = 0; i != page_count; ++i) {
+
+ // We don't have to compare soft-clean pages:
+ if (ref_page_numbers && pagemap && !(pagemap[i] & SOFT_DIRTY)) {
+ pagenos_[i] = ref_page_numbers[i];
+ store_->ref_page(ref_page_numbers[i]);
+ continue;
+ }
+
+ remote_ptr<void> page = remote(addr.address() + (i << xbt_pagebits));
+ xbt_assert(mc_page_offset((void*)page.address())==0,
+ "Not at the beginning of a page");
+
+ /* Adding another copy (and a syscall) will probably slow things a lot.
+ TODO, optimize this somehow (at least by grouping the syscalls)
+ if needed. Either:
+ - reduce the number of syscalls;
+ - let the application snapshot itself;
+ - move the segments in shared memory (this will break `fork` however).
+ */
+
+ as.read_bytes(
+ buffer.data(), xbt_pagesize, page,
+ simgrid::mc::ProcessIndexDisabled);
+
+ pagenos_[i] = store_->store_page(buffer.data());
+
+ }
+}
+
+}
+}
--- /dev/null
+/* Copyright (c) 2014-2015. 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 SIMGRID_MC_CHUNKED_DATA_HPP
+#define SIMGRID_MC_CHUNKED_DATA_HPP
+
+#include <cstddef>
+#include <cstdint>
+
+#include <vector>
+
+#include "src/mc/mc_forward.hpp"
+#include "src/mc/AddressSpace.hpp"
+#include "src/mc/PageStore.hpp"
+
+namespace simgrid {
+namespace mc {
+
+class ChunkedData {
+ PageStore* store_;
+ std::vector<std::size_t> pagenos_;
+public:
+ ChunkedData() : store_(nullptr) {}
+ ChunkedData(ChunkedData const& that)
+ {
+ store_ = that.store_;
+ pagenos_ = that.pagenos_;
+ for (std::size_t pageno : pagenos_)
+ store_->ref_page(pageno);
+ }
+ void clear()
+ {
+ for (std::size_t pageno : pagenos_)
+ store_->unref_page(pageno);
+ pagenos_.clear();
+ }
+ ~ChunkedData()
+ {
+ clear();
+ }
+
+ ChunkedData(ChunkedData&& that)
+ {
+ store_ = that.store_;
+ that.store_ = nullptr;
+ pagenos_ = std::move(that.pagenos_);
+ that.pagenos_.clear();
+ }
+ ChunkedData& operator=(ChunkedData const& that)
+ {
+ this->clear();
+ store_ = that.store_;
+ pagenos_ = that.pagenos_;
+ for (std::size_t pageno : pagenos_)
+ store_->ref_page(pageno);
+ return *this;
+ }
+ ChunkedData& operator=(ChunkedData && that)
+ {
+ this->clear();
+ store_ = that.store_;
+ that.store_ = nullptr;
+ pagenos_ = std::move(that.pagenos_);
+ that.pagenos_.clear();
+ return *this;
+ }
+
+ std::size_t page_count() const { return pagenos_.size(); }
+ std::size_t pageno(std::size_t i) const { return pagenos_[i]; }
+ const std::size_t* pagenos() const { return pagenos_.data(); }
+ std::size_t* pagenos() { return pagenos_.data(); }
+
+ const void* page(std::size_t i) const
+ {
+ return store_->get_page(pagenos_[i]);
+ }
+
+ ChunkedData(PageStore& store, AddressSpace& as,
+ remote_ptr<void> addr, std::size_t page_count,
+ const std::size_t* ref_page_numbers, const std::uint64_t* pagemap);
+};
+
+}
+}
+
+#endif
--- /dev/null
+/* Copyright (c) 2014-2015. 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 <cstdint>
+#include <cstdarg>
+
+#include <dwarf.h>
+#include <elfutils/libdw.h>
+
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/LocationList.hpp"
+#include "src/mc/AddressSpace.hpp"
+#include "src/mc/Frame.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/DwarfExpression.hpp"
+#include "src/mc/mc_dwarf.hpp"
+
+using simgrid::mc::remote;
+
+namespace simgrid {
+namespace dwarf {
+
+evaluation_error::~evaluation_error() noexcept(true) {}
+
+void execute(
+ const Dwarf_Op* ops, std::size_t n,
+ const ExpressionContext& context, ExpressionStack& stack)
+{
+ for (size_t i = 0; i != n; ++i) {
+ const Dwarf_Op *op = ops + i;
+ std::uint8_t atom = op->atom;
+
+ switch (atom) {
+
+ // Registers:
+
+ case DW_OP_breg0:
+ case DW_OP_breg1:
+ case DW_OP_breg2:
+ case DW_OP_breg3:
+ case DW_OP_breg4:
+ case DW_OP_breg5:
+ case DW_OP_breg6:
+ case DW_OP_breg7:
+ case DW_OP_breg8:
+ case DW_OP_breg9:
+ case DW_OP_breg10:
+ case DW_OP_breg11:
+ case DW_OP_breg12:
+ case DW_OP_breg13:
+ case DW_OP_breg14:
+ case DW_OP_breg15:
+ case DW_OP_breg16:
+ case DW_OP_breg17:
+ case DW_OP_breg18:
+ case DW_OP_breg19:
+ case DW_OP_breg20:
+ case DW_OP_breg21:
+ case DW_OP_breg22:
+ case DW_OP_breg23:
+ case DW_OP_breg24:
+ case DW_OP_breg25:
+ case DW_OP_breg26:
+ case DW_OP_breg27:
+ case DW_OP_breg28:
+ case DW_OP_breg29:
+ case DW_OP_breg30:
+ case DW_OP_breg31:{
+ int register_id = simgrid::dwarf::dwarf_register_to_libunwind(
+ op->atom - DW_OP_breg0);
+ unw_word_t res;
+ if (!context.cursor)
+ throw evaluation_error("Missin stack context");
+ unw_get_reg(context.cursor, register_id, &res);
+ stack.push(res + op->number);
+ break;
+ }
+
+ // Push the CFA (Canonical Frame Addresse):
+ case DW_OP_call_frame_cfa:
+ {
+ /* See 6.4 of DWARF4 (http://dwarfstd.org/doc/DWARF4.pdf#page=140):
+ *
+ * > Typically, the CFA is defined to be the value of the stack
+ * > pointer at the call site in the previous frame (which may be
+ * > different from its value on entry to the current frame).
+ *
+ * We need to unwind the frame in order to get the SP of the parent
+ * frame.
+ *
+ * Warning: the CFA returned by libunwind (UNW_X86_64_RSP, etc.)
+ * is the SP of the *current* frame. */
+
+ if (!context.cursor)
+ throw evaluation_error("Missint cursor");
+
+ // Get frame:
+ unw_cursor_t cursor = *(context.cursor);
+ unw_step(&cursor);
+
+ unw_word_t res;
+ unw_get_reg(&cursor, UNW_REG_SP, &res);
+ stack.push(res);
+ break;
+ }
+
+ // Frame base:
+
+ case DW_OP_fbreg:
+ stack.push((std::uintptr_t) context.frame_base + op->number);
+ break;
+
+ // ***** Constants:
+
+ // Short constant literals:
+ // DW_OP_lit15 pushed the 15 on the stack.
+ case DW_OP_lit0:
+ case DW_OP_lit1:
+ case DW_OP_lit2:
+ case DW_OP_lit3:
+ case DW_OP_lit4:
+ case DW_OP_lit5:
+ case DW_OP_lit6:
+ case DW_OP_lit7:
+ case DW_OP_lit8:
+ case DW_OP_lit9:
+ case DW_OP_lit10:
+ case DW_OP_lit11:
+ case DW_OP_lit12:
+ case DW_OP_lit13:
+ case DW_OP_lit14:
+ case DW_OP_lit15:
+ case DW_OP_lit16:
+ case DW_OP_lit17:
+ case DW_OP_lit18:
+ case DW_OP_lit19:
+ case DW_OP_lit20:
+ case DW_OP_lit21:
+ case DW_OP_lit22:
+ case DW_OP_lit23:
+ case DW_OP_lit24:
+ case DW_OP_lit25:
+ case DW_OP_lit26:
+ case DW_OP_lit27:
+ case DW_OP_lit28:
+ case DW_OP_lit29:
+ case DW_OP_lit30:
+ case DW_OP_lit31:
+ stack.push(atom - DW_OP_lit0);
+ break;
+
+ // Address from the base address of this ELF object.
+ // Push the address on the stack (base_address + argument).
+ case DW_OP_addr: {
+ if (!context.object_info)
+ throw evaluation_error("No base address");
+ Dwarf_Off addr = (Dwarf_Off) (std::uintptr_t)
+ context.object_info->base_address() + op->number;
+ stack.push(addr);
+ break;
+ }
+
+ // General constants:
+ // Push the constant argument on the stack.
+ case DW_OP_const1u:
+ case DW_OP_const2u:
+ case DW_OP_const4u:
+ case DW_OP_const8u:
+ case DW_OP_const1s:
+ case DW_OP_const2s:
+ case DW_OP_const4s:
+ case DW_OP_const8s:
+ case DW_OP_constu:
+ case DW_OP_consts:
+ stack.push(op->number);
+ break;
+
+ // ***** Stack manipulation:
+
+ // Push another copy/duplicate the value at the top of the stack:
+ case DW_OP_dup:
+ stack.dup();
+ break;
+
+ // Pop/drop the top of the stack:
+ case DW_OP_drop:
+ stack.pop();
+ break;
+
+ // Swap the two top-most value of the stack:
+ case DW_OP_swap:
+ std::swap(stack.top(), stack.top(1));
+ break;
+
+ // Duplicate the value under the top of the stack:
+ case DW_OP_over:
+ stack.push(stack.top(1));
+ break;
+
+ // ***** Operations:
+ // Those usually take the top of the stack and the next value as argument
+ // and replace the top of the stack with the computed value
+ // (stack.top() += stack.before_top()).
+
+ case DW_OP_plus:
+ stack.push(stack.pop() + stack.pop());
+ break;
+
+ case DW_OP_mul:
+ stack.push(stack.pop() * stack.pop());
+ break;
+
+ case DW_OP_plus_uconst:
+ stack.top() += op->number;
+ break;
+
+ case DW_OP_not:
+ stack.top() = ~stack.top();
+ break;
+
+ case DW_OP_neg:
+ stack.top() = - (intptr_t) stack.top();
+ break;
+
+ case DW_OP_minus:
+ stack.push(stack.pop() - stack.pop());
+ break;
+
+ case DW_OP_and:
+ stack.push(stack.pop() & stack.pop());
+ break;
+
+ case DW_OP_or:
+ stack.push(stack.pop() | stack.pop());
+ break;
+
+ case DW_OP_xor:
+ stack.push(stack.pop() ^ stack.pop());
+ break;
+
+ case DW_OP_nop:
+ break;
+
+ // ***** Deference (memory fetch)
+
+ case DW_OP_deref_size:
+ throw evaluation_error("Unsupported operation");
+
+ case DW_OP_deref:
+ // Computed address:
+ if (!context.address_space)
+ throw evaluation_error("Missing address space");
+ context.address_space->read_bytes(
+ &stack.top(), sizeof(uintptr_t), remote(stack.top()),
+ context.process_index);
+ break;
+
+ // Not handled:
+ default:
+ throw evaluation_error("Unsupported operation");
+ }
+
+ }
+}
+
+}
+}
--- /dev/null
+/* Copyright (c) 2015. 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 SIMGRID_MC_DWARF_EXPRESSION_HPP
+#define SIMGRID_MC_DWARF_EXPRESSION_HPP
+
+#include <cstdint>
+
+#include <stdexcept>
+
+#include "src/mc/AddressSpace.hpp"
+
+namespace simgrid {
+namespace dwarf {
+
+class evaluation_error : std::runtime_error {
+public:
+ evaluation_error(const char* what): std::runtime_error(what) {}
+ ~evaluation_error() noexcept(true);
+};
+
+struct ExpressionContext {
+ ExpressionContext() :
+ cursor(nullptr), frame_base(nullptr), address_space(nullptr),
+ object_info(nullptr), process_index(simgrid::mc::ProcessIndexMissing) {}
+
+ unw_cursor_t* cursor;
+ void* frame_base;
+ simgrid::mc::AddressSpace* address_space;
+ simgrid::mc::ObjectInformation* object_info;
+ int process_index;
+};
+
+typedef std::vector<Dwarf_Op> DwarfExpression;
+
+class ExpressionStack {
+public:
+ typedef std::uintptr_t value_type;
+ static const std::size_t max_size = 64;
+private:
+ uintptr_t stack_[max_size];
+ size_t size_;
+public:
+ ExpressionStack() : size_(0) {}
+
+ // Access:
+ std::size_t size() const { return size_; }
+ bool empty() const { return size_ == 0; }
+ void clear() { size_ = 0; }
+ uintptr_t& operator[](int i) { return stack_[i]; }
+ uintptr_t const& operator[](int i) const { return stack_[i]; }
+ value_type& top()
+ {
+ if (size_ == 0)
+ throw evaluation_error("Empty stack");
+ return stack_[size_ - 1];
+ }
+ value_type& top(unsigned i)
+ {
+ if (size_ < i)
+ throw evaluation_error("Invalid element");
+ return stack_[size_ - 1 - i];
+ }
+
+ // Push/pop:
+ void push(value_type value)
+ {
+ if (size_ == max_size)
+ throw evaluation_error("Dwarf stack overflow");
+ stack_[size_++] = value;
+ }
+ value_type pop()
+ {
+ if (size_ == 0)
+ throw evaluation_error("Stack underflow");
+ return stack_[--size_];
+ }
+
+ // Other operations:
+ void dup() { push(top()); }
+};
+
+void execute(const Dwarf_Op* ops, std::size_t n,
+ ExpressionContext const& context, ExpressionStack& stack);
+
+inline
+void execute(simgrid::dwarf::DwarfExpression const& expression,
+ ExpressionContext const& context, ExpressionStack& stack)
+{
+ execute(expression.data(), expression.size(), context, stack);
+}
+
+}
+}
+
+#endif
--- /dev/null
+/* Copyright (c) 2007-2015. 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 "src/mc/Frame.hpp"
+
+namespace simgrid {
+namespace mc {
+
+void* Frame::frame_base(unw_cursor_t& unw_cursor) const
+{
+ simgrid::dwarf::Location location = simgrid::dwarf::resolve(
+ frame_base_location, object_info,
+ &unw_cursor, NULL, NULL, -1);
+ if (location.in_memory())
+ return location.address();
+ else if (location.in_register()) {
+ // This is a special case.
+ // The register if not the location of the frame base
+ // (a frame base cannot be located in a register)
+ // Instead, DWARF defines this to mean that the register
+ // contains the address of the frame base.
+ unw_word_t word;
+ unw_get_reg(&unw_cursor, location.register_id(), &word);
+ return (void*) word;
+ }
+ else xbt_die("Unexpected location type");
+}
+
+}
+}
\ No newline at end of file
#include <xbt/base.h>
-#include "mc_forward.h"
-#include "mc_location.h"
-#include "mc/Variable.hpp"
-#include "mc/Frame.hpp"
+#include "src/mc/mc_forward.h"
+#include "src/mc/LocationList.hpp"
+#include "src/mc/Variable.hpp"
+#include "src/mc/Frame.hpp"
namespace simgrid {
namespace mc {
std::string name;
void *low_pc;
void *high_pc;
- simgrid::mc::LocationList frame_base;
+ simgrid::dwarf::LocationList frame_base_location;
std::vector<Variable> variables;
unsigned long int id; /* DWARF offset of the subprogram */
std::vector<Frame> scopes;
unsigned long int abstract_origin_id;
simgrid::mc::ObjectInformation* object_info;
+
+ void* frame_base(unw_cursor_t& unw_cursor) const;
+ void remove_variable(char* name);
};
inline
--- /dev/null
+/* Copyright (c) 2004-2015. 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 "src/mc/mc_dwarf.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/LocationList.hpp"
+
+namespace simgrid {
+namespace dwarf {
+
+/** Resolve a location expression */
+Location resolve(
+ simgrid::dwarf::DwarfExpression const& expression,
+ simgrid::mc::ObjectInformation* object_info,
+ unw_cursor_t * c,
+ void *frame_pointer_address,
+ simgrid::mc::AddressSpace* address_space, int process_index)
+{
+ simgrid::dwarf::ExpressionContext context;
+ context.frame_base = frame_pointer_address;
+ context.cursor = c;
+ context.address_space = address_space;
+ context.object_info = object_info;
+ context.process_index = process_index;
+
+ if (!expression.empty()
+ && expression[0].atom >= DW_OP_reg0
+ && expression[0].atom <= DW_OP_reg31) {
+ int dwarf_register = expression[0].atom - DW_OP_reg0;
+ xbt_assert(c,
+ "Missing frame context for register operation DW_OP_reg%i",
+ dwarf_register);
+ return Location(dwarf_register_to_libunwind(dwarf_register));
+ }
+
+ simgrid::dwarf::ExpressionStack stack;
+ simgrid::dwarf::execute(expression, context, stack);
+ return Location((void*) stack.top());
+}
+
+// TODO, move this in a method of LocationList
+static simgrid::dwarf::DwarfExpression const* find_expression(
+ simgrid::dwarf::LocationList const& locations, unw_word_t ip)
+{
+ for (simgrid::dwarf::LocationListEntry const& entry : locations)
+ if (entry.valid_for_ip(ip))
+ return &entry.expression;
+ return nullptr;
+}
+
+Location resolve(
+ simgrid::dwarf::LocationList const& locations,
+ simgrid::mc::ObjectInformation* object_info,
+ unw_cursor_t * c,
+ void *frame_pointer_address,
+ simgrid::mc::AddressSpace* address_space,
+ int process_index)
+{
+ unw_word_t ip = 0;
+ if (c && unw_get_reg(c, UNW_REG_IP, &ip))
+ xbt_die("Could not resolve IP");
+ simgrid::dwarf::DwarfExpression const* expression =
+ find_expression(locations, ip);
+ if (!expression)
+ xbt_die("Could not resolve location");
+ return simgrid::dwarf::resolve(
+ *expression, object_info, c,
+ frame_pointer_address, address_space, process_index);
+}
+
+simgrid::dwarf::LocationList location_list(
+ simgrid::mc::ObjectInformation& info,
+ Dwarf_Attribute& attr)
+{
+ simgrid::dwarf::LocationList locations;
+ std::ptrdiff_t offset = 0;
+ while (1) {
+
+ Dwarf_Addr base, start, end;
+ Dwarf_Op *ops;
+ std::size_t len;
+
+ offset = dwarf_getlocations(
+ &attr, offset, &base, &start, &end, &ops, &len);
+
+ if (offset == 0)
+ return std::move(locations);
+ else if (offset == -1)
+ xbt_die("Error while loading location list");
+
+ simgrid::dwarf::LocationListEntry entry;
+ entry.expression = simgrid::dwarf::DwarfExpression(ops, ops + len);
+
+ void *base_address = info.base_address();
+
+ // If start == 0, this is not a location list:
+ if (start == 0) {
+ entry.lowpc = nullptr;
+ entry.highpc = nullptr;
+ } else {
+ entry.lowpc = (char *) base_address + start;
+ entry.highpc = (char *) base_address + end;
+ }
+
+ locations.push_back(std::move(entry));
+ }
+}
+
+
+}
+}
\ No newline at end of file
--- /dev/null
+/* Copyright (c) 2004-2015. 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 SIMGRID_MC_OBJECT_LOCATION_H
+#define SIMGRID_MC_OBJECT_LOCATION_H
+
+#include <stdint.h>
+
+#include <vector>
+
+#include <libunwind.h>
+#include <dwarf.h>
+#include <elfutils/libdw.h>
+
+#include "simgrid_config.h"
+#include "src/mc/mc_base.h"
+#include "src/mc/mc_forward.hpp"
+#include "src/mc/AddressSpace.hpp"
+#include "src/mc/DwarfExpression.hpp"
+
+namespace simgrid {
+namespace dwarf {
+
+/** \brief A DWARF expression with optional validity contraints */
+class LocationListEntry {
+public:
+ simgrid::dwarf::DwarfExpression expression;
+ void* lowpc, *highpc;
+
+ LocationListEntry() : lowpc(nullptr), highpc(nullptr) {}
+
+ bool always_valid() const
+ {
+ return this->lowpc == nullptr && this->highpc == nullptr;
+ }
+ bool valid_for_ip(unw_word_t ip) const
+ {
+ return always_valid() || (
+ ip >= (unw_word_t) this->lowpc &&
+ ip < (unw_word_t) this->highpc);
+ }
+};
+
+typedef std::vector<LocationListEntry> LocationList;
+
+/** Location of some variable in memory
+ *
+ * The variable is located either in memory of a register.
+ */
+class Location {
+private:
+ void* memory_;
+ int register_id_;
+public:
+ Location(void* x) :memory_(x) {}
+ Location(int register_id) :
+ memory_(nullptr), register_id_(register_id) {}
+ // Type of location:
+ bool in_register() const { return memory_ == nullptr; }
+ bool in_memory() const { return memory_ != nullptr; }
+
+ // Get the location:
+ void* address() const { return memory_; }
+ int register_id() const { return register_id_; }
+};
+
+XBT_PRIVATE
+Location resolve(
+ simgrid::dwarf::DwarfExpression const& expression,
+ simgrid::mc::ObjectInformation* object_info, unw_cursor_t* c,
+ void* frame_pointer_address, simgrid::mc::AddressSpace* address_space,
+ int process_index);
+
+Location resolve(
+ simgrid::dwarf::LocationList const& locations,
+ simgrid::mc::ObjectInformation* object_info,
+ unw_cursor_t * c,
+ void *frame_pointer_address,
+ simgrid::mc::AddressSpace* address_space,
+ int process_index);
+
+XBT_PRIVATE
+simgrid::dwarf::LocationList location_list(
+ simgrid::mc::ObjectInformation& info,
+ Dwarf_Attribute& attr);
+
+}
+}
+
+#endif
#include <cassert>
-#include "ModelChecker.hpp"
-#include "PageStore.hpp"
+#include <poll.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/socket.h>
+#include <sys/signalfd.h>
+#include <sys/ptrace.h>
-::simgrid::mc::ModelChecker* mc_model_checker = NULL;
+#include <memory>
+#include <system_error>
+
+#include <xbt/log.h>
+#include <xbt/automaton.h>
+#include <xbt/automaton.hpp>
+
+#include "simgrid/sg_config.h"
+
+#include "src/mc/ModelChecker.hpp"
+#include "src/mc/PageStore.hpp"
+#include "src/mc/ModelChecker.hpp"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_ignore.h"
+#include "src/mc/mc_exit.h"
+#include "src/mc/mc_liveness.h"
+
+extern "C" {
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_ModelChecker, mc, "ModelChecker");
+
+}
+
+::simgrid::mc::ModelChecker* mc_model_checker = nullptr;
+
+using simgrid::mc::remote;
+
+// Hardcoded index for now:
+#define SOCKET_FD_INDEX 0
+#define SIGNAL_FD_INDEX 1
namespace simgrid {
namespace mc {
ModelChecker::ModelChecker(pid_t pid, int socket) :
+ pid_(pid), socket_(socket),
hostnames_(xbt_dict_new()),
page_store_(500),
- process_(pid, socket),
parent_snapshot_(nullptr)
{
}
// Lookup the host name in the dictionary (or create it):
xbt_dictelm_t elt = xbt_dict_get_elm_or_null(this->hostnames_, hostname);
if (!elt) {
- xbt_dict_set(this->hostnames_, hostname, NULL, NULL);
+ xbt_dict_set(this->hostnames_, hostname, nullptr, nullptr);
elt = xbt_dict_get_elm_or_null(this->hostnames_, hostname);
assert(elt);
}
return elt->key;
}
+void ModelChecker::start()
+{
+ // Block SIGCHLD (this will be handled with accept/signalfd):
+ sigset_t set;
+ sigemptyset(&set);
+ sigaddset(&set, SIGCHLD);
+ if (sigprocmask(SIG_BLOCK, &set, nullptr) == -1)
+ throw std::system_error(errno, std::system_category());
+
+ sigset_t full_set;
+ sigfillset(&full_set);
+
+ // Prepare data for poll:
+
+ struct pollfd* socket_pollfd = &fds_[SOCKET_FD_INDEX];
+ socket_pollfd->fd = socket_;
+ socket_pollfd->events = POLLIN;
+ socket_pollfd->revents = 0;
+
+ int signal_fd = signalfd(-1, &set, 0);
+ if (signal_fd == -1)
+ throw std::system_error(errno, std::system_category());
+
+ struct pollfd* signalfd_pollfd = &fds_[SIGNAL_FD_INDEX];
+ signalfd_pollfd->fd = signal_fd;
+ signalfd_pollfd->events = POLLIN;
+ signalfd_pollfd->revents = 0;
+
+ XBT_DEBUG("Waiting for the model-checked process");
+ int status;
+
+ // The model-checked process SIGSTOP itself to signal it's ready:
+ pid_t res = waitpid(pid_, &status, __WALL);
+ if (res < 0 || !WIFSTOPPED(status) || WSTOPSIG(status) != SIGSTOP)
+ xbt_die("Could not wait model-checked process");
+
+ assert(process_ == nullptr);
+ process_ = std::unique_ptr<Process>(new Process(pid_, socket_));
+ // TODO, avoid direct dependency on sg_cfg
+ process_->privatized(sg_cfg_get_boolean("smpi/privatize_global_variables"));
+
+ /* Initialize statistics */
+ mc_stats = xbt_new0(s_mc_stats_t, 1);
+ mc_stats->state_size = 1;
+
+ if ((_sg_mc_dot_output_file != nullptr) && (_sg_mc_dot_output_file[0] != '\0'))
+ MC_init_dot_output();
+
+ /* Init parmap */
+ //parmap = xbt_parmap_mc_new(xbt_os_get_numcores(), XBT_PARMAP_DEFAULT);
+
+ setup_ignore();
+
+ ptrace(PTRACE_SETOPTIONS, pid_, nullptr, PTRACE_O_TRACEEXIT);
+ ptrace(PTRACE_CONT, pid_, 0, 0);
+}
+
+static const std::pair<const char*, const char*> ignored_local_variables[] = {
+ std::pair<const char*, const char*>{ "e", "*" },
+ std::pair<const char*, const char*>{ "__ex_cleanup", "*" },
+ std::pair<const char*, const char*>{ "__ex_mctx_en", "*" },
+ std::pair<const char*, const char*>{ "__ex_mctx_me", "*" },
+ std::pair<const char*, const char*>{ "__xbt_ex_ctx_ptr", "*" },
+ std::pair<const char*, const char*>{ "_log_ev", "*" },
+ std::pair<const char*, const char*>{ "_throw_ctx", "*" },
+ std::pair<const char*, const char*>{ "ctx", "*" },
+
+ std::pair<const char*, const char*>{ "self", "simcall_BODY_mc_snapshot" },
+ std::pair<const char*, const char*>{ "next_context", "smx_ctx_sysv_suspend_serial" },
+ std::pair<const char*, const char*>{ "i", "smx_ctx_sysv_suspend_serial" },
+
+ /* Ignore local variable about time used for tracing */
+ std::pair<const char*, const char*>{ "start_time", "*" },
+};
+
+void ModelChecker::setup_ignore()
+{
+ Process& process = this->process();
+ for (std::pair<const char*, const char*> const& var :
+ ignored_local_variables)
+ process.ignore_local_variable(var.first, var.second);
+
+ /* Static variable used for tracing */
+ process.ignore_global_variable("counter");
+
+ /* SIMIX */
+ process.ignore_global_variable("smx_total_comms");
+}
+
+void ModelChecker::shutdown()
+{
+ XBT_DEBUG("Shuting down model-checker");
+
+ simgrid::mc::Process* process = &this->process();
+ if (process->running()) {
+ XBT_DEBUG("Killing process");
+ kill(process->pid(), SIGTERM);
+ process->terminate();
+ }
+}
+
+void ModelChecker::resume(simgrid::mc::Process& process)
+{
+ int res = process.send_message(MC_MESSAGE_CONTINUE);
+ if (res)
+ throw std::system_error(res, std::system_category());
+ process.cache_flags = (mc_process_cache_flags_t) 0;
+}
+
+static
+void throw_socket_error(int fd)
+{
+ int error = 0;
+ socklen_t errlen = sizeof(error);
+ if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&error, &errlen) == -1)
+ error = errno;
+ throw std::system_error(error, std::system_category());
+}
+
+bool ModelChecker::handle_message(char* buffer, ssize_t size)
+{
+ s_mc_message_t base_message;
+ if (size < (ssize_t) sizeof(base_message))
+ xbt_die("Broken message");
+ memcpy(&base_message, buffer, sizeof(base_message));
+
+ switch(base_message.type) {
+
+ case MC_MESSAGE_IGNORE_HEAP:
+ {
+ s_mc_ignore_heap_message_t message;
+ if (size != sizeof(message))
+ xbt_die("Broken messsage");
+ memcpy(&message, buffer, sizeof(message));
+
+ IgnoredHeapRegion region;
+ region.block = message.block;
+ region.fragment = message.fragment;
+ region.address = message.address;
+ region.size = message.size;
+ process().ignore_heap(region);
+ break;
+ }
+
+ case MC_MESSAGE_UNIGNORE_HEAP:
+ {
+ s_mc_ignore_memory_message_t message;
+ if (size != sizeof(message))
+ xbt_die("Broken messsage");
+ memcpy(&message, buffer, sizeof(message));
+ process().unignore_heap(
+ (void *)(std::uintptr_t) message.addr, message.size);
+ break;
+ }
+
+ case MC_MESSAGE_IGNORE_MEMORY:
+ {
+ s_mc_ignore_memory_message_t message;
+ if (size != sizeof(message))
+ xbt_die("Broken messsage");
+ memcpy(&message, buffer, sizeof(message));
+ this->process().ignore_region(message.addr, message.size);
+ break;
+ }
+
+ case MC_MESSAGE_STACK_REGION:
+ {
+ s_mc_stack_region_message_t message;
+ if (size != sizeof(message))
+ xbt_die("Broken messsage");
+ memcpy(&message, buffer, sizeof(message));
+ this->process().stack_areas().push_back(message.stack_region);
+ }
+ break;
+
+ case MC_MESSAGE_REGISTER_SYMBOL:
+ {
+ s_mc_register_symbol_message_t message;
+ if (size != sizeof(message))
+ xbt_die("Broken message");
+ memcpy(&message, buffer, sizeof(message));
+ if (message.callback)
+ xbt_die("Support for client-side function proposition is not implemented.");
+ XBT_DEBUG("Received symbol: %s", message.name);
+
+ if (_mc_property_automaton == nullptr)
+ _mc_property_automaton = xbt_automaton_new();
+
+ simgrid::mc::Process* process = &this->process();
+ simgrid::mc::remote_ptr<int> address
+ = simgrid::mc::remote((int*) message.data);
+ simgrid::xbt::add_proposition(_mc_property_automaton,
+ message.name,
+ [process, address]() { return process->read(address); }
+ );
+
+ break;
+ }
+
+ case MC_MESSAGE_WAITING:
+ return false;
+
+ case MC_MESSAGE_ASSERTION_FAILED:
+ MC_report_assertion_error();
+ ::exit(SIMGRID_MC_EXIT_SAFETY);
+ break;
+
+ default:
+ xbt_die("Unexpected message from model-checked application");
+
+ }
+ return true;
+}
+
+bool ModelChecker::handle_events()
+{
+ char buffer[MC_MESSAGE_LENGTH];
+ struct pollfd* socket_pollfd = &fds_[SOCKET_FD_INDEX];
+ struct pollfd* signalfd_pollfd = &fds_[SIGNAL_FD_INDEX];
+
+ while(poll(fds_, 2, -1) == -1) {
+ switch(errno) {
+ case EINTR:
+ continue;
+ default:
+ throw std::system_error(errno, std::system_category());
+ }
+ }
+
+ if (socket_pollfd->revents) {
+ if (socket_pollfd->revents & POLLIN) {
+ ssize_t size = MC_receive_message(socket_pollfd->fd, buffer, sizeof(buffer), MSG_DONTWAIT);
+ if (size == -1 && errno != EAGAIN)
+ throw std::system_error(errno, std::system_category());
+ return handle_message(buffer, size);
+ }
+ if (socket_pollfd->revents & POLLERR) {
+ throw_socket_error(socket_pollfd->fd);
+ }
+ if (socket_pollfd->revents & POLLHUP)
+ xbt_die("Socket hang up?");
+ }
+
+ if (signalfd_pollfd->revents) {
+ if (signalfd_pollfd->revents & POLLIN) {
+ this->handle_signals();
+ return true;
+ }
+ if (signalfd_pollfd->revents & POLLERR) {
+ throw_socket_error(signalfd_pollfd->fd);
+ }
+ if (signalfd_pollfd->revents & POLLHUP)
+ xbt_die("Signalfd hang up?");
+ }
+
+ return true;
+}
+
+void ModelChecker::loop()
+{
+ while (this->process().running())
+ this->handle_events();
+}
+
+void ModelChecker::handle_signals()
+{
+ struct signalfd_siginfo info;
+ struct pollfd* signalfd_pollfd = &fds_[SIGNAL_FD_INDEX];
+ while (1) {
+ ssize_t size = read(signalfd_pollfd->fd, &info, sizeof(info));
+ if (size == -1) {
+ if (errno == EINTR)
+ continue;
+ else
+ throw std::system_error(errno, std::system_category());
+ } else if (size != sizeof(info))
+ return throw std::runtime_error(
+ "Bad communication with model-checked application");
+ else
+ break;
+ }
+ this->on_signal(&info);
+}
+
+void ModelChecker::handle_waitpid()
+{
+ XBT_DEBUG("Check for wait event");
+ int status;
+ pid_t pid;
+ while ((pid = waitpid(-1, &status, WNOHANG)) != 0) {
+ if (pid == -1) {
+ if (errno == ECHILD) {
+ // No more children:
+ if (this->process().running())
+ xbt_die("Inconsistent state");
+ else
+ break;
+ } else {
+ XBT_ERROR("Could not wait for pid");
+ throw std::system_error(errno, std::system_category());
+ }
+ }
+
+ if (pid == this->process().pid()) {
+
+ // From PTRACE_O_TRACEEXIT:
+ if (status>>8 == (SIGTRAP | (PTRACE_EVENT_EXIT<<8))) {
+ if (ptrace(PTRACE_GETEVENTMSG, pid_, 0, &status) == -1)
+ xbt_die("Could not get exit status");
+ if (WIFSIGNALED(status)) {
+ MC_report_crash(status);
+ ::exit(SIMGRID_MC_EXIT_PROGRAM_CRASH);
+ }
+ }
+
+ // We don't care about signals, just reinject them:
+ if (WIFSTOPPED(status)) {
+ XBT_DEBUG("Stopped with signal %i", (int) WSTOPSIG(status));
+ if (ptrace(PTRACE_CONT, pid_, 0, WSTOPSIG(status)) == -1)
+ xbt_die("Could not PTRACE_CONT");
+ }
+
+ else if (WIFEXITED(status) || WIFSIGNALED(status)) {
+ XBT_DEBUG("Child process is over");
+ this->process().terminate();
+ }
+ }
+ }
+}
+
+void ModelChecker::on_signal(const struct signalfd_siginfo* info)
+{
+ switch(info->ssi_signo) {
+ case SIGCHLD:
+ this->handle_waitpid();
+ break;
+ default:
+ break;
+ }
+}
+
+void ModelChecker::wait_client(simgrid::mc::Process& process)
+{
+ this->resume(process);
+ while (this->process().running()) {
+ if (!this->handle_events())
+ return;
+ }
+}
+
+void ModelChecker::simcall_handle(simgrid::mc::Process& process, unsigned long pid, int value)
+{
+ s_mc_simcall_handle_message m;
+ memset(&m, 0, sizeof(m));
+ m.type = MC_MESSAGE_SIMCALL_HANDLE;
+ m.pid = pid;
+ m.value = value;
+ process.send_message(m);
+ process.cache_flags = (mc_process_cache_flags_t) 0;
+ while (process.running()) {
+ if (!this->handle_events())
+ return;
+ }
+}
+
}
}
#include <sys/types.h>
+#include <poll.h>
+#include <memory>
+
#include <simgrid_config.h>
#include <xbt/dict.h>
#include <xbt/base.h>
+#include <sys/types.h>
-#include "mc_forward.hpp"
-#include "mc/Process.hpp"
-#include "mc/PageStore.hpp"
-#include "mc_protocol.h"
+#include "src/mc/mc_forward.hpp"
+#include "src/mc/Process.hpp"
+#include "src/mc/PageStore.hpp"
+#include "src/mc/mc_protocol.h"
namespace simgrid {
namespace mc {
/** State of the model-checker (global variables for the model checker)
- *
- * Each part of the state of the model chercker represented as a global
- * variable prevents some sharing between snapshots and must be ignored.
- * By moving as much state as possible in this structure allocated
- * on the model-checker heap, we avoid those issues.
*/
class ModelChecker {
+ pid_t pid_;
+ int socket_;
+ struct pollfd fds_[2];
/** String pool for host names */
// TODO, use std::unordered_set with heterogeneous comparison lookup (C++14)
xbt_dict_t /* <hostname, NULL> */ hostnames_;
// This is the parent snapshot of the current state:
PageStore page_store_;
- Process process_;
+ std::unique_ptr<Process> process_;
public:
mc_snapshot_t parent_snapshot_;
ModelChecker& operator=(ModelChecker const&) = delete;
ModelChecker(pid_t pid, int socket);
~ModelChecker();
+
Process& process()
{
- return process_;
+ return *process_;
}
PageStore& page_store()
{
bool is_important_snapshot(Snapshot const& snapshot) const
{
- return &snapshot == mc_model_checker->parent_snapshot_;
+ return &snapshot == this->parent_snapshot_;
}
+
+ void start();
+ void shutdown();
+ void resume(simgrid::mc::Process& process);
+ void loop();
+ bool handle_events();
+ void wait_client(simgrid::mc::Process& process);
+ void simcall_handle(simgrid::mc::Process& process, unsigned long pid, int value);
+ void wait_for_requests()
+ {
+ mc_model_checker->wait_client(mc_model_checker->process());
+ }
+private:
+ void setup_ignore();
+ bool handle_message(char* buffer, ssize_t size);
+ void handle_signals();
+ void handle_waitpid();
+ void on_signal(const struct signalfd_siginfo* info);
+
};
}
-#include "mc/Frame.hpp"
-#include "mc/ObjectInformation.hpp"
-#include "mc/Variable.hpp"
+/* Copyright (c) 2014-2015. 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 "src/mc/Frame.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/Variable.hpp"
namespace simgrid {
namespace mc {
return nullptr;
}
+void ObjectInformation::remove_global_variable(const char* name)
+{
+ typedef std::vector<Variable>::size_type size_type;
+
+ if (this->global_variables.empty())
+ return;
+
+ // Binary search:
+ size_type start = 0;
+ size_type end = this->global_variables.size() - 1;
+
+ while (start <= end) {
+ size_type cursor = start + (end - start) / 2;
+ simgrid::mc::Variable& current_var = this->global_variables[cursor];
+ int cmp = current_var.name.compare(name);
+
+ if (cmp == 0) {
+ // Find the whole range:
+ start = cursor;
+ while (start != 0 && this->global_variables[start - 1].name == name)
+ start--;
+ size_type size = this->global_variables.size();
+ end = cursor;
+ while (end != size - 1 && this->global_variables[end + 1].name == name)
+ end++;
+ // Remove the whole range:
+ this->global_variables.erase(
+ this->global_variables.begin() + cursor,
+ this->global_variables.begin() + end + 1);
+ return;
+ } else if (cmp < 0)
+ start = cursor + 1;
+ else if (cursor != 0)
+ end = cursor - 1;
+ else
+ break;
+ }
+}
+
+/** \brief Ignore a local variable in a scope
+ *
+ * Ignore all instances of variables with a given name in
+ * any (possibly inlined) subprogram with a given namespaced
+ * name.
+ *
+ * \param var_name Name of the local variable (or parameter to ignore)
+ * \param subprogram_name Name of the subprogram fo ignore (NULL for any)
+ * \param subprogram (possibly inlined) Subprogram of the scope
+ * \param scope Current scope
+ */
+static void remove_local_variable(simgrid::mc::Frame& scope,
+ const char *var_name,
+ const char *subprogram_name,
+ simgrid::mc::Frame const& subprogram)
+{
+ typedef std::vector<Variable>::size_type size_type;
+
+ // If the current subprogram matches the given name:
+ if ((subprogram_name == nullptr ||
+ (!subprogram.name.empty()
+ && subprogram.name == subprogram_name))
+ && !scope.variables.empty()) {
+
+ // Try to find the variable and remove it:
+ size_type start = 0;
+ size_type end = scope.variables.size() - 1;
+
+ // Binary search:
+ while (start <= end) {
+ size_type cursor = start + (end - start) / 2;
+ simgrid::mc::Variable& current_var = scope.variables[cursor];
+ int compare = current_var.name.compare(var_name);
+ if (compare == 0) {
+ // Variable found, remove it:
+ scope.variables.erase(scope.variables.begin() + cursor);
+ break;
+ } else if (compare < 0)
+ start = cursor + 1;
+ else if (cursor != 0)
+ end = cursor - 1;
+ else
+ break;
+ }
+ }
+
+ // And recursive processing in nested scopes:
+ for (simgrid::mc::Frame& nested_scope : scope.scopes) {
+ // The new scope may be an inlined subroutine, in this case we want to use its
+ // namespaced name in recursive calls:
+ simgrid::mc::Frame const& nested_subprogram =
+ nested_scope.tag ==
+ DW_TAG_inlined_subroutine ? nested_scope : subprogram;
+ remove_local_variable(nested_scope, var_name, subprogram_name,
+ nested_subprogram);
+ }
+}
+
+void ObjectInformation::remove_local_variable(
+ const char* var_name, const char* subprogram_name)
+{
+ for (auto& entry : this->subprograms)
+ simgrid::mc::remove_local_variable(entry.second,
+ var_name, subprogram_name, entry.second);
+}
+
}
}
\ No newline at end of file
#include <xbt/base.h>
-#include "mc/mc_forward.h"
-#include "mc/Type.hpp"
-#include "mc/Frame.hpp"
+#include "src/mc/mc_forward.h"
+#include "src/mc/Type.hpp"
+#include "src/mc/Frame.hpp"
-#include "smpi/private.h"
+#include "src/smpi/private.h"
namespace simgrid {
namespace mc {
return this->flags & simgrid::mc::ObjectInformation::Executable;
}
- bool privatized() const
- {
-#ifdef HAVE_SMPI
- return this->executable() && smpi_privatize_global_variables;
-#else
- return false;
-#endif
- }
-
void* base_address() const;
simgrid::mc::Frame* find_function(const void *ip) const;
simgrid::mc::Variable* find_variable(const char* name) const;
-
+ void remove_global_variable(const char* name);
+ void remove_local_variable(
+ const char* name, const char* scope);
};
+
+
}
}
#include <sys/mman.h>
-#include <boost/foreach.hpp>
-
#include <xbt.h>
-#include "PageStore.hpp"
+#include "src/mc/PageStore.hpp"
-#include "mc_mmu.h"
+#include "src/mc/mc_mmu.h"
extern "C" {
// Try to find a duplicate in set of pages with the same hash:
page_set_type& page_set = this->hash_index_[hash];
- BOOST_FOREACH (size_t pageno, page_set) {
+ for (size_t pageno : page_set) {
const void* snapshot_page = this->get_page(pageno);
if (memcmp(page, snapshot_page, xbt_pagesize) == 0) {
#include <cstdint>
#include <vector>
-#include <boost/unordered_map.hpp>
-#include <boost/unordered_set.hpp>
+#include <unordered_map>
+#include <unordered_set>
#include <xbt/base.h>
-#include "mc_mmu.h"
-#include "mc_forward.hpp"
+#include "src/mc/mc_mmu.h"
+#include "src/mc/mc_forward.hpp"
namespace simgrid {
namespace mc {
// We are using a cheap hash to index a page.
// We should expect collision and we need to associate multiple page indices
// to the same hash.
- typedef boost::unordered_set<std::size_t> page_set_type;
- typedef boost::unordered_map<hash_type, page_set_type> pages_map_type;
+ typedef std::unordered_set<std::size_t> page_set_type;
+ typedef std::unordered_map<hash_type, page_set_type> pages_map_type;
private: // Fields:
/** First page */
void ref_page(size_t pageno);
/** @brief Store a page in the page store */
- size_t store_page(void* page);
+ std::size_t store_page(void* page);
/** @brief Get a page from its page number
*
}
inline __attribute__((always_inline))
-size_t PageStore::size() {
+std::size_t PageStore::size() {
return this->top_index_ - this->free_pages_.size();
}
#include <xbt/mmalloc.h>
-#include "mc_object_info.h"
-#include "mc_unw.h"
-#include "mc_snapshot.h"
-#include "mc_ignore.h"
-#include "mc_smx.h"
-#include "mc_server.h"
-
-#include "mc/Process.hpp"
-#include "mc/AddressSpace.hpp"
-#include "mc/ObjectInformation.hpp"
-#include "mc/Variable.hpp"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_unw.h"
+#include "src/mc/mc_snapshot.h"
+#include "src/mc/mc_ignore.h"
+#include "src/mc/mc_smx.h"
+
+#include "src/mc/Process.hpp"
+#include "src/mc/AddressSpace.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/Variable.hpp"
using simgrid::mc::remote;
"libelf",
"libgcc_s",
"liblua5.1",
+ "liblua5.3",
"liblzma",
"libm",
"libpthread",
process->socket_ = sockfd;
process->pid_ = pid;
process->running_ = true;
- process->status_ = 0;
- process->memory_map_ = get_memory_map(pid);
+ process->memory_map_ = simgrid::xbt::get_memory_map(pid);
process->cache_flags = MC_PROCESS_CACHE_FLAG_NONE;
- process->heap = NULL;
- process->heap_info = NULL;
process->init_memory_map_info();
process->clear_refs_fd_ = -1;
process->pagemap_fd_ = -1;
+ process->privatized_ = false;
int fd = open_vm(process->pid_, O_RDWR);
if (fd<0)
process->cache_flags = MC_PROCESS_CACHE_FLAG_NONE;
- free(process->heap);
- process->heap = NULL;
-
- free(process->heap_info);
- process->heap_info = NULL;
-
if (process->clear_refs_fd_ >= 0)
close(process->clear_refs_fd_);
if (process->pagemap_fd_ >= 0)
{
xbt_assert(mc_mode == MC_MODE_SERVER);
// Read/dereference/refresh the std_heap pointer:
- if (!this->heap) {
- this->heap = (struct mdesc*) malloc(sizeof(struct mdesc));
- }
- this->read_bytes(this->heap, sizeof(struct mdesc), remote(this->heap_address),
- simgrid::mc::ProcessIndexDisabled);
+ if (!this->heap)
+ this->heap = std::unique_ptr<s_xbt_mheap_t>(new s_xbt_mheap_t());
+ this->read_bytes(this->heap.get(), sizeof(struct mdesc),
+ remote(this->heap_address), simgrid::mc::ProcessIndexDisabled);
this->cache_flags |= MC_PROCESS_CACHE_FLAG_HEAP;
}
if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_HEAP))
this->refresh_heap();
// Refresh process->heapinfo:
- size_t malloc_info_bytesize =
- (this->heap->heaplimit + 1) * sizeof(malloc_info);
- this->heap_info = (malloc_info*) realloc(this->heap_info, malloc_info_bytesize);
- this->read_bytes(this->heap_info, malloc_info_bytesize,
+ size_t count = this->heap->heaplimit + 1;
+ if (this->heap_info.size() < count)
+ this->heap_info.resize(count);
+ this->read_bytes(this->heap_info.data(), count * sizeof(malloc_info),
remote(this->heap->heapinfo), simgrid::mc::ProcessIndexDisabled);
this->cache_flags |= MC_PROCESS_CACHE_FLAG_MALLOC_INFO;
}
if(regcomp(&res.so_re, SO_RE, 0) || regcomp(&res.version_re, VERSION_RE, 0))
xbt_die(".so regexp did not compile");
- std::vector<simgrid::mc::VmMap> const& maps = this->memory_map_;
+ std::vector<simgrid::xbt::VmMap> const& maps = this->memory_map_;
const char* current_name = NULL;
this->object_infos.resize(0);
for (size_t i=0; i < maps.size(); i++) {
- simgrid::mc::VmMap const& reg = maps[i];
+ simgrid::xbt::VmMap const& reg = maps[i];
const char* pathname = maps[i].pathname.c_str();
// Nothing to do
}
std::shared_ptr<simgrid::mc::ObjectInformation> info =
- MC_find_object_info(this->memory_map_, pathname, is_executable);
+ MC_find_object_info(this->memory_map_, pathname);
this->object_infos.push_back(info);
if (is_executable)
this->binary_info = info;
this->find_object_info_rw((void*)address.address());
// Segment overlap is not handled.
#ifdef HAVE_SMPI
- if (info.get() && info.get()->privatized()) {
+ if (info.get() && this->privatized(*info)) {
if (process_index < 0)
xbt_die("Missing process index");
if (process_index >= (int) MC_smpi_process_count())
xbt_die("Could not read pagemap");
}
+void Process::ignore_heap(IgnoredHeapRegion const& region)
+{
+ if (ignored_heap_.empty()) {
+ ignored_heap_.push_back(std::move(region));
+ return;
+ }
+
+ typedef std::vector<IgnoredHeapRegion>::size_type size_type;
+
+ size_type start = 0;
+ size_type end = ignored_heap_.size() - 1;
+
+ // Binary search the position of insertion:
+ size_type cursor;
+ while (start <= end) {
+ cursor = start + (end - start) / 2;
+ auto& current_region = ignored_heap_[cursor];
+ if (current_region.address == region.address)
+ return;
+ else if (current_region.address < region.address)
+ start = cursor + 1;
+ else if (cursor != 0)
+ end = cursor - 1;
+ // Avoid underflow:
+ else
+ break;
+ }
+
+ // Insert it mc_heap_ignore_region_t:
+ if (ignored_heap_[cursor].address < region.address)
+ ++cursor;
+ ignored_heap_.insert( ignored_heap_.begin() + cursor, region);
+}
+
+void Process::unignore_heap(void *address, size_t size)
+{
+ typedef std::vector<IgnoredHeapRegion>::size_type size_type;
+
+ size_type start = 0;
+ size_type end = ignored_heap_.size() - 1;
+
+ // Binary search:
+ size_type cursor;
+ while (start <= end) {
+ cursor = (start + end) / 2;
+ auto& region = ignored_heap_[cursor];
+ if (region.address == address) {
+ ignored_heap_.erase(ignored_heap_.begin() + cursor);
+ return;
+ } else if (region.address < address)
+ start = cursor + 1;
+ else if ((char *) region.address <= ((char *) address + size)) {
+ ignored_heap_.erase(ignored_heap_.begin() + cursor);
+ return;
+ } else if (cursor != 0)
+ end = cursor - 1;
+ // Avoid underflow:
+ else
+ break;
+ }
+}
+
+void Process::ignore_local_variable(const char *var_name, const char *frame_name)
+{
+ if (frame_name != nullptr && strcmp(frame_name, "*") == 0)
+ frame_name = nullptr;
+ for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info :
+ this->object_infos)
+ info->remove_local_variable(var_name, frame_name);
+}
+
}
}
#include <xbt/mmalloc.h>
#ifdef HAVE_MC
-#include "xbt/mmalloc/mmprivate.h"
+#include "src/xbt/mmalloc/mmprivate.h"
#endif
#include <simgrid/simix.h>
-#include "simix/popping_private.h"
-#include "simix/smx_private.h"
+#include "src/simix/popping_private.h"
+#include "src/simix/smx_private.h"
-#include "mc_forward.hpp"
-#include "mc_base.h"
-#include "mc_mmalloc.h" // std_heap
-#include "mc_memory_map.h"
-#include "AddressSpace.hpp"
-#include "mc_protocol.h"
+#include "src/xbt/memory_map.hpp"
+
+#include "src/mc/mc_forward.hpp"
+#include "src/mc/mc_base.h"
+#include "src/mc/mc_mmalloc.h" // std_heap
+#include "src/mc/AddressSpace.hpp"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/ObjectInformation.hpp"
// Those flags are used to track down which cached information
// is still up to date and which information needs to be updated.
size_t size;
};
+struct IgnoredHeapRegion {
+ int block;
+ int fragment;
+ void *address;
+ size_t size;
+};
+
/** Representation of a process
*/
class Process final : public AddressSpace {
{
if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_HEAP))
this->refresh_heap();
- return this->heap;
+ return this->heap.get();
}
malloc_info* get_malloc_info()
{
if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_MALLOC_INFO))
this->refresh_malloc_info();
- return this->heap_info;
+ return this->heap_info.data();
}
std::vector<IgnoredRegion> const& ignored_regions() const
return running_;
}
- void terminate(int status)
+ void terminate()
{
- status_ = status;
running_ = false;
}
- int status() const
- {
- return status_;
- }
-
template<class M>
typename std::enable_if< std::is_class<M>::value && std::is_trivial<M>::value, int >::type
send_message(M const& m)
void reset_soft_dirty();
void read_pagemap(uint64_t* pagemap, size_t start_page, size_t page_count);
+ bool privatized(ObjectInformation const& info) const
+ {
+ return privatized_ && info.executable();
+ }
+ bool privatized() const
+ {
+ return privatized_;
+ }
+ void privatized(bool privatized) { privatized_ = privatized; }
+
+ void ignore_global_variable(const char* name)
+ {
+ for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info :
+ this->object_infos)
+ info->remove_global_variable(name);
+ }
+
+ std::vector<s_stack_region_t>& stack_areas()
+ {
+ return stack_areas_;
+ }
+ std::vector<s_stack_region_t> const& stack_areas() const
+ {
+ return stack_areas_;
+ }
+
+ std::vector<IgnoredHeapRegion> const& ignored_heap() const
+ {
+ return ignored_heap_;
+ }
+ void ignore_heap(IgnoredHeapRegion const& region);
+ void unignore_heap(void *address, size_t size);
+
+ void ignore_local_variable(const char *var_name, const char *frame_name);
+
private:
void init_memory_map_info();
void refresh_heap();
private:
pid_t pid_;
int socket_;
- int status_;
bool running_;
- std::vector<VmMap> memory_map_;
+ std::vector<simgrid::xbt::VmMap> memory_map_;
remote_ptr<void> maestro_stack_start_, maestro_stack_end_;
int memory_file;
std::vector<IgnoredRegion> ignored_regions_;
int clear_refs_fd_;
int pagemap_fd_;
+ bool privatized_;
+ std::vector<s_stack_region_t> stack_areas_;
+ std::vector<IgnoredHeapRegion> ignored_heap_;
+
public: // object info
// TODO, make private (first, objectify simgrid::mc::ObjectInformation*)
std::vector<std::shared_ptr<simgrid::mc::ObjectInformation>> object_infos;
* This is not used if the process is the current one:
* use `get_heap_info()` in order to use it.
*/
- xbt_mheap_t heap;
+ std::unique_ptr<s_xbt_mheap_t> heap;
/** Copy of the allocation info structure
*
* This is not used if the process is the current one:
* use `get_malloc_info()` in order to use it.
*/
- malloc_info* heap_info;
+ std::vector<malloc_info> heap_info;
public: // Libunwind-data
}
}
-SG_BEGIN_DECL()
-
-XBT_PRIVATE void MC_invalidate_cache(void);
-
-SG_END_DECL()
-
#endif
#include <sys/mman.h>
#include "mc/mc.h"
-#include "mc_snapshot.h"
-#include "RegionSnapshot.hpp"
+#include "src/mc/mc_snapshot.h"
+
+#include "src/mc/ChunkedData.hpp"
+#include "src/mc/RegionSnapshot.hpp"
extern "C" {
ref_page_numbers = ref_region->page_data().pagenos();
}
- simgrid::mc::PerPageCopy page_data(
+ simgrid::mc::ChunkedData page_data(
mc_model_checker->page_store(), *process, permanent_addr, page_count,
ref_page_numbers,
use_soft_dirty ? pagemap.data() : nullptr);
#include <xbt/base.h>
-#include "PageStore.hpp"
-#include "AddressSpace.hpp"
+#include "src/mc/PageStore.hpp"
+#include "src/mc/AddressSpace.hpp"
+#include "src/mc/ChunkedData.hpp"
namespace simgrid {
namespace mc {
-class PerPageCopy {
- PageStore* store_;
- std::vector<std::size_t> pagenos_;
-public:
- PerPageCopy() : store_(nullptr) {}
- PerPageCopy(PerPageCopy const& that)
- {
- store_ = that.store_;
- pagenos_ = that.pagenos_;
- for (std::size_t pageno : pagenos_)
- store_->ref_page(pageno);
- }
- void clear()
- {
- for (std::size_t pageno : pagenos_)
- store_->unref_page(pageno);
- pagenos_.clear();
- }
- ~PerPageCopy() {
- clear();
- }
-
- PerPageCopy(PerPageCopy&& that)
- {
- store_ = that.store_;
- that.store_ = nullptr;
- pagenos_ = std::move(that.pagenos_);
- that.pagenos_.clear();
- }
- PerPageCopy& operator=(PerPageCopy const& that)
- {
- this->clear();
- store_ = that.store_;
- pagenos_ = that.pagenos_;
- for (std::size_t pageno : pagenos_)
- store_->ref_page(pageno);
- return *this;
- }
- PerPageCopy& operator=(PerPageCopy && that)
- {
- this->clear();
- store_ = that.store_;
- that.store_ = nullptr;
- pagenos_ = std::move(that.pagenos_);
- that.pagenos_.clear();
- return *this;
- }
-
- std::size_t page_count() const
- {
- return pagenos_.size();
- }
-
- std::size_t pageno(std::size_t i) const
- {
- return pagenos_[i];
- }
-
- const std::size_t* pagenos() const { return pagenos_.data(); }
- std::size_t* pagenos() { return pagenos_.data(); }
-
- const void* page(std::size_t i) const
- {
- return store_->get_page(pagenos_[i]);
- }
-
- PerPageCopy(PageStore& store, AddressSpace& as,
- remote_ptr<void> addr, std::size_t page_count,
- const size_t* ref_page_numbers, const std::uint64_t* pagemap);
-};
-
enum class RegionType {
Unknown = 0,
Heap = 1,
void operator()(void* p) const;
};
-/** @brief Copy/snapshot of a given memory region
+typedef std::unique_ptr<char[], data_deleter> unique_data_ptr;
+
+/** A copy/snapshot of a given memory region
*
* Different types of region snapshot storage types exist:
- * <ul>
- * <li>flat/dense snapshots are a simple copy of the region;</li>
- * <li>sparse/per-page snapshots are snaapshots which shared
- * identical pages.</li>
- * <li>privatized (SMPI global variable privatisation).
- * </ul>
+ *
+ * * flat/dense snapshots are a simple copy of the region;
+ *
+ * * sparse/per-page snapshots are snaapshots which shared
+ * identical pages.
+ *
+ * * privatized (SMPI global variable privatisation).
*
* This is handled with a variant based approch:
*
- * * `storage_type` identified the type of storage;
- * * an anonymous enum is used to distinguish the relevant types for
- * each type.
+ * * `storage_type` identified the type of storage;
+ *
+ * * an anonymous enum is used to distinguish the relevant types for
+ * each type.
*/
class RegionSnapshot {
public:
static const RegionType UnknownRegion = RegionType::Unknown;
static const RegionType HeapRegion = RegionType::Heap;
static const RegionType DataRegion = RegionType::Data;
- static const StorageType NoData = StorageType::NoData;
- static const StorageType FlatData = StorageType::Flat;
- static const StorageType ChunkedData = StorageType::Chunked;
- static const StorageType PrivatizedData = StorageType::Privatized;
public:
- typedef std::unique_ptr<char[], data_deleter> flat_data_ptr;
+ typedef unique_data_ptr flat_data_ptr;
private:
RegionType region_type_;
StorageType storage_type_;
void *start_addr_;
/** @brief Size of the data region in bytes */
- size_t size_;
+ std::size_t size_;
/** @brief Permanent virtual address of the region
*
void *permanent_addr_;
flat_data_ptr flat_data_;
- PerPageCopy page_numbers_;
+ ChunkedData page_numbers_;
std::vector<RegionSnapshot> privatized_regions_;
public:
RegionSnapshot() :
region_type_(UnknownRegion),
- storage_type_(NoData),
+ storage_type_(StorageType::NoData),
object_info_(nullptr),
start_addr_(nullptr),
size_(0),
{}
RegionSnapshot(RegionType type, void *start_addr, void* permanent_addr, size_t size) :
region_type_(type),
- storage_type_(NoData),
+ storage_type_(StorageType::NoData),
object_info_(nullptr),
start_addr_(start_addr),
size_(size),
void clear()
{
region_type_ = UnknownRegion;
- storage_type_ = NoData;
+ storage_type_ = StorageType::NoData;
privatized_regions_.clear();
page_numbers_.clear();
flat_data_.reset();
void clear_data()
{
- storage_type_ = NoData;
+ storage_type_ = StorageType::NoData;
flat_data_.reset();
page_numbers_.clear();
privatized_regions_.clear();
void flat_data(flat_data_ptr data)
{
- storage_type_ = FlatData;
+ storage_type_ = StorageType::Flat;
flat_data_ = std::move(data);
page_numbers_.clear();
privatized_regions_.clear();
}
const char* flat_data() const { return flat_data_.get(); }
- void page_data(PerPageCopy page_data)
+ void page_data(ChunkedData page_data)
{
- storage_type_ = ChunkedData;
+ storage_type_ = StorageType::Chunked;
flat_data_.reset();
page_numbers_ = std::move(page_data);
privatized_regions_.clear();
}
- PerPageCopy const& page_data() const { return page_numbers_; }
+ ChunkedData const& page_data() const { return page_numbers_; }
void privatized_data(std::vector<RegionSnapshot> data)
{
- storage_type_ = PrivatizedData;
+ storage_type_ = StorageType::Privatized;
flat_data_.reset();
page_numbers_.clear();
privatized_regions_ = std::move(data);
};
RegionSnapshot privatized_region(
- RegionType type, void *start_addr, void* data_addr, size_t size);
+ RegionType type, void *start_addr, void* data_addr, std::size_t size);
RegionSnapshot dense_region(
- RegionType type, void *start_addr, void* data_addr, size_t size);
+ RegionType type, void *start_addr, void* data_addr, std::size_t size);
simgrid::mc::RegionSnapshot sparse_region(
- RegionType type, void *start_addr, void* data_addr, size_t size,
+ RegionType type, void *start_addr, void* data_addr, std::size_t size,
RegionSnapshot const* ref_region);
simgrid::mc::RegionSnapshot region(
- RegionType type, void *start_addr, void* data_addr, size_t size,
+ RegionType type, void *start_addr, void* data_addr, std::size_t size,
RegionSnapshot const* ref_region);
}
#include <xbt/base.h>
-#include "mc_forward.h"
-#include "mc_location.h"
+#include "src/mc/mc_forward.h"
+#include "src/mc/LocationList.hpp"
namespace simgrid {
namespace mc {
-/** Represent a member of a structure (or inheritance) */
+/** A member of a structure, union
+ *
+ * Inheritance is seen as a special member as well.
+ */
class Member {
public:
Member() : inheritance(false), byte_size(0), type_id(0) {}
bool inheritance;
std::string name;
- simgrid::mc::DwarfExpression location_expression;
+ simgrid::dwarf::DwarfExpression location_expression;
std::size_t byte_size; // Do we really need this?
unsigned type_id;
simgrid::mc::Type* type;
}
};
-/** Represents a type in the program
- *
- * It is currently used to represent members of structs and unions as well.
- */
+/** A type in the model-checked program */
class Type {
public:
Type();
#include <xbt/base.h>
-#include "mc_forward.h"
-#include "mc_location.h"
+#include "src/mc/mc_forward.h"
+#include "src/mc/LocationList.hpp"
namespace simgrid {
namespace mc {
+/** A variable (global or local) in the model-checked program */
class Variable {
public:
Variable();
simgrid::mc::Type* type;
// Use either of:
- simgrid::mc::LocationList location_list;
+ simgrid::dwarf::LocationList location_list;
void* address;
size_t start_scope;
#include <simgrid/simix.h>
-#include "mc_base.h"
-#include "../simix/smx_private.h"
-#include "mc/mc_record.h"
-#include "mc/mc_replay.h"
+#include "src/mc/mc_base.h"
+#include "src/simix/smx_private.h"
+#include "src/mc/mc_record.h"
+#include "src/mc/mc_replay.h"
#include "mc/mc.h"
-#include "mc_protocol.h"
+#include "src/mc/mc_protocol.h"
#ifdef HAVE_MC
-#include "mc/Process.hpp"
-#include "mc/ModelChecker.hpp"
-#include "mc_smx.h"
-#include "mc_server.h"
+#include "src/mc/Process.hpp"
+#include "src/mc/ModelChecker.hpp"
+#include "src/mc/mc_smx.h"
#endif
#ifdef HAVE_MC
void MC_wait_for_requests(void)
{
-#ifdef HAVE_MC
- if (mc_mode == MC_MODE_SERVER) {
- MC_server_wait_client(&mc_model_checker->process());
- return;
- }
-#endif
+ assert(mc_mode != MC_MODE_SERVER);
smx_process_t process;
smx_simcall_t req;
xbt_dynar_foreach_ptr(mc_model_checker->process().smx_process_infos, i, pi) {
if (req == &pi->copy.simcall) {
- MC_server_simcall_handle(&mc_model_checker->process(), pi->copy.pid, value);
+ mc_model_checker->simcall_handle(
+ mc_model_checker->process(), pi->copy.pid, value);
return;
}
}
#include <xbt/misc.h>
#include <simgrid/simix.h>
#include "simgrid_config.h"
-#include "internal_config.h"
-#include "../simix/smx_private.h"
+#include "src/internal_config.h"
+#include "src/simix/smx_private.h"
SG_BEGIN_DECL()
#include <link.h>
#include <dirent.h>
-#include "internal_config.h"
-#include "mc_memory_map.h"
-#include "mc_private.h"
+#include "src/internal_config.h"
+#include "src/mc/mc_private.h"
#include "xbt/module.h"
#include <xbt/mmalloc.h>
-#include "../smpi/private.h"
+#include "src/smpi/private.h"
#include <alloca.h>
-#include "xbt/mmalloc/mmprivate.h"
+#include "src/xbt/mmalloc/mmprivate.h"
-#include "../simix/smx_private.h"
+#include "src/simix/smx_private.h"
#include <libunwind.h>
#include <libelf.h>
-#include "mc_private.h"
+#include "src/mc/mc_private.h"
#include <mc/mc.h>
-#include "mc_snapshot.h"
-#include "mc_object_info.h"
-#include "mc_mmu.h"
-#include "mc_unw.h"
-#include "mc_protocol.h"
-#include "mc_smx.h"
+#include "src/mc/mc_snapshot.h"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_mmu.h"
+#include "src/mc/mc_unw.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_smx.h"
#include "mc_hash.hpp"
-#include "mc/ObjectInformation.hpp"
-#include "mc/Frame.hpp"
-#include "mc/Variable.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/Frame.hpp"
+#include "src/mc/Variable.hpp"
using simgrid::mc::remote;
#ifdef HAVE_SMPI
simgrid::mc::RegionSnapshot privatized_region(
- RegionType region_type, void *start_addr, void* permanent_addr, size_t size,
- const simgrid::mc::RegionSnapshot* ref_region
+ RegionType region_type, void *start_addr, void* permanent_addr,
+ std::size_t size, const simgrid::mc::RegionSnapshot* ref_region
)
{
size_t process_count = MC_smpi_process_count();
static void MC_snapshot_add_region(int index, mc_snapshot_t snapshot,
simgrid::mc::RegionType type,
simgrid::mc::ObjectInformation* object_info,
- void *start_addr, void* permanent_addr, size_t size)
+ void *start_addr, void* permanent_addr,
+ std::size_t size)
{
if (type == simgrid::mc::RegionType::Data)
xbt_assert(object_info, "Missing object info for object.");
simgrid::mc::RegionSnapshot region;
#ifdef HAVE_SMPI
- const bool privatization_aware = object_info && object_info->privatized();
+ const bool privatization_aware = object_info
+ && mc_model_checker->process().privatized(*object_info);
if (privatization_aware && MC_smpi_process_count())
region = simgrid::mc::privatized_region(
type, start_addr, permanent_addr, size, ref_region);
process->get_malloc_info());
#ifdef HAVE_SMPI
- if (smpi_privatize_global_variables && MC_smpi_process_count()) {
+ if (mc_model_checker->process().privatized() && MC_smpi_process_count()) {
// snapshot->privatization_index = smpi_loaded_page
mc_model_checker->process().read_variable(
"smpi_loaded_page", &snapshot->privatization_index,
* `dl_iterate_phdr` would be more robust but would not work in cross-process.
* */
void MC_find_object_address(
- std::vector<simgrid::mc::VmMap> const& maps, simgrid::mc::ObjectInformation* result)
+ std::vector<simgrid::xbt::VmMap> const& maps,
+ simgrid::mc::ObjectInformation* result)
{
char* file_name = xbt_strdup(result->file_name.c_str());
const char *name = basename(file_name);
for (size_t i = 0; i < maps.size(); ++i) {
- simgrid::mc::VmMap const& reg = maps[i];
+ simgrid::xbt::VmMap const& reg = maps[i];
if (maps[i].pathname.empty()
|| strcmp(basename(maps[i].pathname.c_str()), name)) {
// Nothing to do
result->start_rw = (char*) reg.start_addr;
result->end_rw = (char*) reg.end_addr;
// .bss is usually after the .data:
- simgrid::mc::VmMap const& next = maps[i + 1];
+ simgrid::xbt::VmMap const& next = maps[i + 1];
if (next.pathname.empty() && (next.prot & PROT_WRITE)
&& next.start_addr == reg.end_addr) {
result->end_rw = (char*) maps[i + 1].end_addr;
* \param ip Instruction pointer
* \return true if the variable is valid
* */
-static bool mc_valid_variable(simgrid::mc::Variable* var, simgrid::mc::Frame* scope,
+static bool mc_valid_variable(simgrid::mc::Variable* var,
+ simgrid::mc::Frame* scope,
const void *ip)
{
// The variable is not yet valid:
}
static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame,
- simgrid::mc::Frame* scope, int process_index,
+ simgrid::mc::Frame* scope,
+ int process_index,
std::vector<s_local_variable>& result)
{
simgrid::mc::Process* process = &mc_model_checker->process();
if (current_variable.address != NULL) {
new_var.address = current_variable.address;
} else if (!current_variable.location_list.empty()) {
- s_mc_location_t location;
- mc_dwarf_resolve_locations(
- &location, ¤t_variable.location_list,
- current_variable.object_info,
- &(stack_frame->unw_cursor),
- (void *) stack_frame->frame_base,
- &mc_model_checker->process(), process_index);
-
- switch(mc_get_location_type(&location)) {
- case MC_LOCATION_TYPE_ADDRESS:
- new_var.address = location.memory_location;
- break;
- case MC_LOCATION_TYPE_REGISTER:
- default:
+ simgrid::dwarf::Location location =
+ simgrid::dwarf::resolve(
+ current_variable.location_list,
+ current_variable.object_info,
+ &(stack_frame->unw_cursor),
+ (void *) stack_frame->frame_base,
+ &mc_model_checker->process(), process_index);
+
+ if (!location.in_memory())
xbt_die("Cannot handle non-address variable");
- }
+ new_var.address = location.address();
} else {
xbt_die("No address");
if (frame) {
stack_frame.frame_name = frame->name;
stack_frame.frame_base =
- (unw_word_t) mc_find_frame_base(frame, frame->object_info, &c);
+ (unw_word_t) frame->frame_base(c);
} else {
stack_frame.frame_base = 0;
stack_frame.frame_name = std::string();
{
std::vector<s_mc_snapshot_stack_t> res;
- unsigned int cursor = 0;
- stack_region_t current_stack;
-
- // FIXME, cross-process support (stack_areas)
- xbt_dynar_foreach(stacks_areas, cursor, current_stack) {
+ for (auto const& stack : mc_model_checker->process().stack_areas()) {
s_mc_snapshot_stack_t st;
// Read the context from remote process:
unw_context_t context;
mc_model_checker->process().read_bytes(
- &context, sizeof(context), remote(current_stack->context));
+ &context, sizeof(context), remote(stack.context));
if (mc_unw_init_context(&st.context, &mc_model_checker->process(),
&context) < 0) {
xbt_die("Could not initialise the libunwind context.");
}
st.stack_frames = MC_unwind_stack_frames(&st.context);
- st.local_variables = MC_get_local_variables_values(st.stack_frames, current_stack->process_index);
- st.process_index = current_stack->process_index;
+ st.local_variables = MC_get_local_variables_values(st.stack_frames, stack.process_index);
+ st.process_index = stack.process_index;
unw_word_t sp = st.stack_frames[0].sp;
res.push_back(std::move(st));
size_t stack_size =
- (char*) current_stack->address + current_stack->size - (char*) sp;
+ (char*) stack.address + stack.size - (char*) sp;
(*snapshot)->stack_sizes.push_back(stack_size);
}
}
-static std::vector<s_mc_heap_ignore_region_t> MC_take_snapshot_ignore()
-{
- std::vector<s_mc_heap_ignore_region_t> res;
-
- if (mc_heap_comparison_ignore == NULL)
- return std::move(res);
-
- unsigned int cursor = 0;
- mc_heap_ignore_region_t current_region;
-
- xbt_dynar_foreach(mc_heap_comparison_ignore, cursor, current_region) {
- s_mc_heap_ignore_region_t new_region;
- new_region.address = current_region->address;
- new_region.size = current_region->size;
- new_region.block = current_region->block;
- new_region.fragment = current_region->fragment;
- res.push_back(std::move(new_region));
- }
-
- return std::move(res);
-}
-
static void MC_snapshot_handle_ignore(mc_snapshot_t snapshot)
{
xbt_assert(snapshot->process());
if (use_soft_dirty)
mc_process->reset_soft_dirty();
- snapshot->to_ignore = MC_take_snapshot_ignore();
+ snapshot->to_ignore = mc_model_checker->process().ignored_heap();
if (_sg_mc_visited > 0 || strcmp(_sg_mc_property_file, "")) {
snapshot->stacks =
#ifdef HAVE_SMPI
// TODO, send a message to implement this in the MCed process
if(snapshot->privatization_index >= 0) {
- // We just rewrote the global variables.
- // The privatisation segment SMPI thinks
- // is mapped might be inconsistent with the segment which
- // is really mapped in memory (kernel state).
- // We ask politely SMPI to map the segment anyway,
- // even if it thinks it is the current one:
- smpi_really_switch_data_segment(snapshot->privatization_index);
+ // Fix the privatization mmap:
+ s_mc_restore_message message;
+ message.type = MC_MESSAGE_RESTORE;
+ message.index = snapshot->privatization_index;
+ mc_model_checker->process().send_message(message);
}
#endif
}
#include <cerrno>
#include <sys/types.h>
+#include <sys/ptrace.h>
#include <sys/socket.h>
#include <xbt/log.h>
#include <xbt/sysdep.h>
#include <xbt/mmalloc.h>
-#include "mc_protocol.h"
-#include "mc_client.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_client.h"
// We won't need those once the separation MCer/MCed is complete:
-#include "mc_mmalloc.h"
-#include "mc_ignore.h"
-#include "mc_private.h" // MC_deadlock_check()
-#include "mc_smx.h"
+#include "src/mc/mc_mmalloc.h"
+#include "src/mc/mc_ignore.h"
+#include "src/mc/mc_private.h" // MC_deadlock_check()
+#include "src/mc/mc_smx.h"
extern "C" {
void MC_client_init(void)
{
+ if (mc_mode != MC_MODE_NONE)
+ return;
+ if (!getenv(MC_ENV_SOCKET_FD))
+ return;
+ mc_mode = MC_MODE_CLIENT;
+
if (mc_client) {
XBT_WARN("MC_client_init called more than once.");
return;
mc_client = xbt_new0(s_mc_client_t, 1);
mc_client->fd = fd;
mc_client->active = 1;
-}
-void MC_client_hello(void)
-{
- if (MC_protocol_hello(mc_client->fd) != 0)
- xbt_die("Could not say hello the MC server");
+ // Waiting for the model-checker:
+ if (ptrace(PTRACE_TRACEME, 0, NULL, NULL) == -1 || raise(SIGSTOP) != 0)
+ xbt_die("Could not wait for the model-checker");
+ MC_client_handle_messages();
}
void MC_client_send_message(void* message, size_t size)
}
break;
+ case MC_MESSAGE_RESTORE:
+ {
+ s_mc_restore_message_t message;
+ if (s != sizeof(message))
+ xbt_die("Unexpected size for SIMCALL_HANDLE");
+ memcpy(&message, message_buffer, sizeof(message));
+ smpi_really_switch_data_segment(message.index);
+ }
+ break;
+
default:
xbt_die("%s received unexpected message %s (%i)",
MC_mode_name(mc_mode),
#define SIMGRID_MC_CLIENT_H
#include <xbt/misc.h>
-#include "mc_protocol.h"
+#include "src/mc/mc_protocol.h"
SG_BEGIN_DECL()
extern XBT_PRIVATE mc_client_t mc_client;
XBT_PRIVATE void MC_client_init(void);
-XBT_PRIVATE void MC_client_hello(void);
XBT_PRIVATE void MC_client_handle_messages(void);
XBT_PRIVATE void MC_client_send_message(void* message, size_t size);
XBT_PRIVATE void MC_client_send_simple_message(e_mc_message_type type);
#include <xbt/sysdep.h>
#include <simgrid/modelchecker.h>
-#include "mc_record.h"
-#include "mc_private.h"
-#include "mc_mmalloc.h"
-#include "mc_ignore.h"
-#include "mc_protocol.h"
-#include "mc_client.h"
-#include "ModelChecker.hpp"
+#include "src/mc/mc_record.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_mmalloc.h"
+#include "src/mc/mc_ignore.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_client.h"
+#include "src/mc/ModelChecker.hpp"
/** \file mc_client_api.cpp
*
/* 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 "mc_state.h"
-#include "mc_comm_pattern.h"
-#include "mc_request.h"
-#include "mc_safety.h"
-#include "mc_private.h"
-#include "mc_record.h"
-#include "mc_smx.h"
-#include "mc_client.h"
-#include "mc_exit.h"
+#include "src/mc/mc_state.h"
+#include "src/mc/mc_comm_pattern.h"
+#include "src/mc/mc_request.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_record.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_client.h"
+#include "src/mc/mc_exit.h"
using simgrid::mc::remote;
xbt_free(initial_global_state->send_diff);
initial_global_state->send_diff = NULL;
MC_print_statistics(mc_stats);
- exit(SIMGRID_EXIT_NON_DETERMINISM);
+ exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
}else if(_sg_mc_comms_determinism && (!initial_global_state->send_deterministic && !initial_global_state->recv_deterministic)) {
XBT_INFO("****************************************************");
XBT_INFO("***** Non-deterministic communications pattern *****");
xbt_free(initial_global_state->recv_diff);
initial_global_state->recv_diff = NULL;
MC_print_statistics(mc_stats);
- exit(SIMGRID_EXIT_NON_DETERMINISM);
+ exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
}
}
}
/************************ Main algorithm ************************/
-static void MC_modelcheck_comm_determinism_main(void);
+static int MC_modelcheck_comm_determinism_main(void);
static void MC_pre_modelcheck_comm_determinism(void)
{
XBT_DEBUG("********* Start communication determinism verification *********");
/* Wait for requests (schedules processes) */
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
/* Get an enabled process and insert it in the interleave set of the initial state */
MC_EACH_SIMIX_PROCESS(process,
xbt_fifo_unshift(mc_stack, initial_state);
}
-static void MC_modelcheck_comm_determinism_main(void)
+static int MC_modelcheck_comm_determinism_main(void)
{
char *req_str = NULL;
MC_handle_comm_pattern(call, req, value, NULL, 0);
/* Wait for requests (schedules processes) */
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
/* Create the new expanded state */
next_state = MC_state_new();
/* Check for deadlocks */
if (MC_deadlock_check()) {
MC_show_deadlock(NULL);
- return;
+ return SIMGRID_MC_EXIT_DEADLOCK;
}
while ((state = (mc_state_t) xbt_fifo_shift(mc_stack)) != NULL) {
}
MC_print_statistics(mc_stats);
- exit(0);
+ return SIMGRID_MC_EXIT_SUCCESS;
}
-void MC_modelcheck_comm_determinism(void)
+int MC_modelcheck_comm_determinism(void)
{
XBT_INFO("Check communication determinism");
mc_reduce_kind = e_mc_reduce_none;
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
if (mc_mode == MC_MODE_CLIENT) {
// This will move somehwere else:
initial_global_state->recv_diff = NULL;
initial_global_state->send_diff = NULL;
- MC_modelcheck_comm_determinism_main();
+ return MC_modelcheck_comm_determinism_main();
}
}
#include <xbt/sysdep.h>
#include <xbt/dynar.h>
-#include "mc_comm_pattern.h"
-#include "mc_smx.h"
-#include "mc_xbt.hpp"
+#include "src/mc/mc_comm_pattern.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_xbt.hpp"
using simgrid::mc::remote;
#include <simgrid_config.h>
#include <xbt/dynar.h>
-#include "../simix/smx_private.h"
-#include "../smpi/private.h"
+#include "src/simix/smx_private.h"
+#include "src/smpi/private.h"
#include <smpi/smpi.h>
-#include "mc_state.h"
+#include "src/mc/mc_state.h"
SG_BEGIN_DECL()
XBT_PRIVATE void MC_comm_pattern_free_voidp(void *p);
XBT_PRIVATE void MC_list_comm_pattern_free_voidp(void *p);
XBT_PRIVATE void MC_complete_comm_pattern(xbt_dynar_t list, smx_synchro_t comm_addr, unsigned int issuer, int backtracking);
-void MC_modelcheck_comm_determinism(void);
+int MC_modelcheck_comm_determinism(void);
XBT_PRIVATE void MC_restore_communications_pattern(mc_state_t state);
#define __STDC_FORMAT_MACROS
#include <cinttypes>
-#include <boost/unordered_set.hpp>
+
+#include <utility>
+#include <unordered_set>
#include <xbt/sysdep.h>
-#include "internal_config.h"
-#include "mc_object_info.h"
-#include "mc_safety.h"
-#include "mc_liveness.h"
-#include "mc_private.h"
-#include "mc_smx.h"
-#include "mc_dwarf.hpp"
+#include "src/internal_config.h"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_liveness.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_dwarf.hpp"
-#include "mc/Frame.hpp"
-#include "mc/ObjectInformation.hpp"
-#include "mc/Variable.hpp"
+#include "src/mc/Frame.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/Variable.hpp"
#ifdef HAVE_SMPI
-#include "smpi/private.h"
+#include "src/smpi/private.h"
#endif
#include "xbt/mmalloc.h"
-#include "xbt/mmalloc/mmprivate.h"
+#include "src/xbt/mmalloc/mmprivate.h"
-#include <xbt/probes.h>
+#include "src/xbt/probes.h"
using simgrid::mc::remote;
-typedef struct s_pointers_pair {
- void *p1;
- void *p2;
- bool operator==(s_pointers_pair const& x) const {
- return this->p1 == x.p1 && this->p2 == x.p2;
- }
- bool operator<(s_pointers_pair const& x) const {
- return this->p1 < x.p1 || (this->p1 == x.p1 && this->p2 < x.p2);
- }
-} s_pointers_pair_t, *pointers_pair_t;
-
-namespace boost {
- template<>
- struct hash<s_pointers_pair> {
- typedef uintptr_t result_type;
- result_type operator()(s_pointers_pair const& x) const {
- return (result_type) x.p1 ^
- ((result_type) x.p2 << 8 | (result_type) x.p2 >> (8*sizeof(uintptr_t) - 8));
- }
- };
-}
-
-struct mc_compare_state {
- boost::unordered_set<s_pointers_pair> compared_pointers;
-};
-
extern "C" {
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, xbt,
"Logging specific to mc_compare in mc");
-/************************** Free functions ****************************/
-/********************************************************************/
+}
+
+namespace simgrid {
+namespace mc {
-static void stack_region_free(stack_region_t s)
-{
- if (s) {
- xbt_free(s);
+/** A hash which works with more stuff
+ *
+ * It can hash pairs: the standard hash currently doesn't include this.
+ */
+template<class X> struct hash : public std::hash<X> {};
+
+template<class X, class Y>
+struct hash<std::pair<X,Y>> {
+ std::size_t operator()(std::pair<X,Y>const& x) const
+ {
+ struct hash<X> h1;
+ struct hash<X> h2;
+ return h1(x.first) ^ h2(x.second);
}
-}
+};
-static void stack_region_free_voidp(void *s)
-{
- stack_region_free((stack_region_t) * (void **) s);
-}
+struct ComparisonState {
+ std::unordered_set<std::pair<void*, void*>, hash<std::pair<void*, void*>>> compared_pointers;
+};
-static void pointers_pair_free(pointers_pair_t p)
-{
- xbt_free(p);
}
-
-static void pointers_pair_free_voidp(void *p)
-{
- pointers_pair_free((pointers_pair_t) * (void **) p);
}
+using simgrid::mc::ComparisonState;
+
+extern "C" {
+
/************************** Snapshot comparison *******************************/
/******************************************************************************/
-/** \brief Try to add a pair a compared pointers to the set of compared pointers
- *
- * \result !=0 if the pointers were added (they were not in the set),
- * 0 otherwise (they were already in the set)
- */
-static int add_compared_pointers(mc_compare_state& state, void *p1, void *p2)
-{
- s_pointers_pair_t new_pair;
- new_pair.p1 = p1;
- new_pair.p2 = p2;
- return state.compared_pointers.insert(new_pair).second ? 1 : 0;
-}
-
-static int compare_areas_with_type(struct mc_compare_state& state,
+static int compare_areas_with_type(ComparisonState& state,
int process_index,
void* real_area1, mc_snapshot_t snapshot1, mc_mem_region_t region1,
void* real_area2, mc_snapshot_t snapshot2, mc_mem_region_t region2,
return 0;
if (addr_pointed1 == NULL || addr_pointed2 == NULL)
return 1;
- if (!add_compared_pointers(state, addr_pointed1, addr_pointed2))
+ if (!state.compared_pointers.insert(
+ std::make_pair(addr_pointed1, addr_pointed2)).second)
return 0;
pointer_level++;
case DW_TAG_structure_type:
case DW_TAG_class_type:
for(simgrid::mc::Member& member : type->members) {
- void *member1 =
- mc_member_resolve(real_area1, type, &member, snapshot1, process_index);
- void *member2 =
- mc_member_resolve(real_area2, type, &member, snapshot2, process_index);
+ void *member1 = simgrid::dwarf::resolve_member(
+ real_area1, type, &member, snapshot1, process_index);
+ void *member2 = simgrid::dwarf::resolve_member(
+ real_area2, type, &member, snapshot2, process_index);
mc_mem_region_t subregion1 = mc_get_region_hinted(member1, snapshot1, process_index, region1);
mc_mem_region_t subregion2 = mc_get_region_hinted(member2, snapshot2, process_index, region2);
res =
#endif
xbt_assert(r2->storage_type() != simgrid::mc::StorageType::Privatized);
- struct mc_compare_state state;
+ ComparisonState state;
std::vector<simgrid::mc::Variable>& variables = object_info->global_variables;
mc_snapshot_stack_t stack1,
mc_snapshot_stack_t stack2)
{
- struct mc_compare_state state;
+ ComparisonState state;
if (stack1->local_variables.size() != stack2->local_variables.size()) {
XBT_VERB("Different number of local variables");
int errors = 0;
int res_init;
- xbt_os_timer_t global_timer = xbt_os_timer_new();
- xbt_os_timer_t timer = xbt_os_timer_new();
-
- xbt_os_walltimer_start(global_timer);
-
-#ifdef MC_DEBUG
- xbt_os_walltimer_start(timer);
-#endif
-
int hash_result = 0;
if (_sg_mc_hash) {
hash_result = (s1->hash != s2->hash);
size_used2 = s2->stack_sizes[i];
if (size_used1 != size_used2) {
#ifdef MC_DEBUG
- if (is_diff == 0) {
- xbt_os_walltimer_stop(timer);
- mc_comp_times->stacks_sizes_comparison_time =
- xbt_os_timer_elapsed(timer);
- }
XBT_DEBUG("(%d - %d) Different size used in stacks : %zu - %zu", num1,
num2, size_used1, size_used2);
errors++;
num2, size_used1, size_used2);
#endif
XBT_TRACE3(mc, state_diff, num1, num2, "Different stack size");
-
- xbt_os_walltimer_stop(timer);
- xbt_os_timer_free(timer);
- xbt_os_walltimer_stop(global_timer);
- mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
- xbt_os_timer_free(global_timer);
-
return 1;
#endif
}
i++;
}
-#ifdef MC_DEBUG
- if (is_diff == 0)
- xbt_os_walltimer_stop(timer);
- xbt_os_walltimer_start(timer);
-#endif
-
/* Init heap information used in heap comparison algorithm */
xbt_mheap_t heap1 = (xbt_mheap_t)s1->read_bytes(
alloca(sizeof(struct mdesc)), sizeof(struct mdesc),
XBT_VERB("(%d - %d) Different heap information", num1, num2);
#endif
- xbt_os_walltimer_stop(global_timer);
- mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
- xbt_os_timer_free(global_timer);
-
return 1;
#endif
}
-#ifdef MC_DEBUG
- xbt_os_walltimer_start(timer);
-#endif
/* Stacks comparison */
unsigned cursor = 0;
if (diff_local > 0) {
XBT_TRACE3(mc, state_diff, num1, num2, "Different local variables");
#ifdef MC_DEBUG
- if (is_diff == 0) {
- xbt_os_walltimer_stop(timer);
- mc_comp_times->stacks_comparison_time = xbt_os_timer_elapsed(timer);
- }
XBT_DEBUG("(%d - %d) Different local variables between stacks %d", num1,
num2, cursor + 1);
errors++;
#endif
reset_heap_information();
- xbt_os_walltimer_stop(timer);
- xbt_os_timer_free(timer);
- xbt_os_walltimer_stop(global_timer);
- mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
- xbt_os_timer_free(global_timer);
return 1;
#endif
// TODO, raise a difference instead?
xbt_assert(regions_count == s2->snapshot_regions.size());
- mc_comp_times->global_variables_comparison_time = 0;
-
for (size_t k = 0; k != regions_count; ++k) {
mc_mem_region_t region1 = s1->snapshot_regions[k].get();
mc_mem_region_t region2 = s2->snapshot_regions[k].get();
std::string const& name = region1->object_info()->file_name;
-#ifdef MC_DEBUG
- if (is_diff == 0)
- xbt_os_walltimer_stop(timer);
- xbt_os_walltimer_start(timer);
-#endif
-
/* Compare global variables */
is_diff =
compare_global_variables(region1->object_info( ), simgrid::mc::AddressSpace::Normal,
if (is_diff != 0) {
XBT_TRACE3(mc, state_diff, num1, num2, "Different global variables");
#ifdef MC_DEBUG
- xbt_os_walltimer_stop(timer);
- mc_comp_times->global_variables_comparison_time
- += xbt_os_timer_elapsed(timer);
XBT_DEBUG("(%d - %d) Different global variables in %s",
num1, num2, name.c_str());
errors++;
num1, num2, name.c_str());
#endif
- reset_heap_information();
- xbt_os_walltimer_stop(timer);
- xbt_os_timer_free(timer);
- xbt_os_walltimer_stop(global_timer);
- mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
- xbt_os_timer_free(global_timer);
-
return 1;
#endif
}
}
-#ifdef MC_DEBUG
- xbt_os_walltimer_start(timer);
-#endif
-
/* Compare heap */
if (mmalloc_compare_heap(s1, s2) > 0) {
XBT_TRACE3(mc, state_diff, num1, num2, "Different heap");
#ifdef MC_DEBUG
- xbt_os_walltimer_stop(timer);
- mc_comp_times->heap_comparison_time = xbt_os_timer_elapsed(timer);
XBT_DEBUG("(%d - %d) Different heap (mmalloc_compare)", num1, num2);
errors++;
#else
XBT_VERB("(%d - %d) Different heap (mmalloc_compare)", num1, num2);
#endif
- reset_heap_information();
- xbt_os_walltimer_stop(timer);
- xbt_os_timer_free(timer);
- xbt_os_walltimer_stop(global_timer);
- mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
- xbt_os_timer_free(global_timer);
-
return 1;
-#endif
- } else {
-#ifdef MC_DEBUG
- xbt_os_walltimer_stop(timer);
#endif
}
reset_heap_information();
- xbt_os_walltimer_stop(timer);
- xbt_os_timer_free(timer);
-
-#ifdef MC_VERBOSE
- xbt_os_walltimer_stop(global_timer);
- mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
-#endif
-
- xbt_os_timer_free(global_timer);
-
-#ifdef MC_DEBUG
- print_comparison_times();
-#endif
-
#ifdef MC_VERBOSE
if (errors || hash_result)
XBT_VERB("(%d - %d) Difference found", num1, num2);
}
-/***************************** Statistics *****************************/
-/*******************************************************************/
-
-void print_comparison_times()
-{
- XBT_DEBUG("*** Comparison times ***");
- XBT_DEBUG("- Nb processes : %f", mc_comp_times->nb_processes_comparison_time);
- XBT_DEBUG("- Nb bytes used : %f", mc_comp_times->bytes_used_comparison_time);
- XBT_DEBUG("- Stacks sizes : %f", mc_comp_times->stacks_sizes_comparison_time);
- XBT_DEBUG("- GLobal variables : %f", mc_comp_times->global_variables_comparison_time);
- XBT_DEBUG("- Heap : %f", mc_comp_times->heap_comparison_time);
- XBT_DEBUG("- Stacks : %f", mc_comp_times->stacks_comparison_time);
-}
-
}
#include <xbt/config.h>
#include <mc/mc.h>
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
#include <simgrid/sg_config.h>
#ifdef HAVE_MC
-#include "mc_safety.h"
-#include "mc_private.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_private.h"
#endif
-#include "mc_record.h"
+#include "src/mc/mc_record.h"
extern "C" {
-/* mc_diff - Memory snapshooting and comparison */
-
/* Copyright (c) 2008-2015. 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/ex_interface.h" /* internals of backtrace setup */
+/* mc_diff - Memory snapshooting and comparison */
+
+#include "src/xbt/ex_interface.h" /* internals of backtrace setup */
#include "xbt/str.h"
#include "mc/mc.h"
#include "xbt/mmalloc.h"
-#include "mc_object_info.h"
+#include "src/mc/mc_object_info.h"
#include "mc/datatypes.h"
-#include "mc/mc_private.h"
-#include "mc/mc_snapshot.h"
-#include "mc/mc_dwarf.hpp"
-#include "mc/Type.hpp"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_snapshot.h"
+#include "src/mc/mc_dwarf.hpp"
+#include "src/mc/Type.hpp"
using simgrid::mc::remote;
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_diff, xbt,
"Logging specific to mc_diff in mc");
-xbt_dynar_t mc_heap_comparison_ignore;
-xbt_dynar_t stacks_areas;
-
/*********************************** Heap comparison ***********************************/
/***************************************************************************************/
struct XBT_PRIVATE s_mc_diff {
s_xbt_mheap_t std_heap_copy;
- size_t heaplimit;
+ std::size_t heaplimit;
// Number of blocks in the heaps:
- size_t heapsize1, heapsize2;
- std::vector<s_mc_heap_ignore_region_t>* to_ignore1;
- std::vector<s_mc_heap_ignore_region_t>* to_ignore2;
+ std::size_t heapsize1, heapsize2;
+ std::vector<simgrid::mc::IgnoredHeapRegion>* to_ignore1;
+ std::vector<simgrid::mc::IgnoredHeapRegion>* to_ignore2;
s_heap_area_t *equals_to1, *equals_to2;
simgrid::mc::Type **types1;
simgrid::mc::Type **types2;
- size_t available;
+ std::size_t available;
};
#define equals_to1_(i,j) equals_to1[ MAX_FRAGMENT_PER_BLOCK*(i) + (j)]
#define types1_(i,j) types1[ MAX_FRAGMENT_PER_BLOCK*(i) + (j)]
#define types2_(i,j) types2[ MAX_FRAGMENT_PER_BLOCK*(i) + (j)]
-__thread struct s_mc_diff *mc_diff_info = NULL;
+static __thread struct s_mc_diff *mc_diff_info = nullptr;
/*********************************** Free functions ************************************/
return 0;
}
-static ssize_t heap_comparison_ignore_size(std::vector<s_mc_heap_ignore_region_t>* ignore_list,
- const void *address)
+static ssize_t heap_comparison_ignore_size(
+ std::vector<simgrid::mc::IgnoredHeapRegion>* ignore_list,
+ const void *address)
{
int start = 0;
int end = ignore_list->size() - 1;
while (start <= end) {
unsigned int cursor = (start + end) / 2;
- s_mc_heap_ignore_region_t region = (*ignore_list)[cursor];
+ simgrid::mc::IgnoredHeapRegion const& region = (*ignore_list)[cursor];
if (region.address == address)
return region.size;
if (region.address < address)
return -1;
}
-static int is_stack(const void *address)
+static bool is_stack(const void *address)
{
- unsigned int cursor = 0;
- stack_region_t stack;
-
- xbt_dynar_foreach(stacks_areas, cursor, stack) {
- if (address == stack->address)
- return 1;
- }
-
- return 0;
+ for (auto const& stack : mc_model_checker->process().stack_areas())
+ if (address == stack.address)
+ return true;
+ return false;
}
// TODO, this should depend on the snapshot?
-static int is_block_stack(int block)
+static bool is_block_stack(int block)
{
- unsigned int cursor = 0;
- stack_region_t stack;
-
- xbt_dynar_foreach(stacks_areas, cursor, stack) {
- if (block == stack->block)
- return 1;
- }
-
- return 0;
+ for (auto const& stack : mc_model_checker->process().stack_areas())
+ if (block == stack.block)
+ return true;
+ return false;
}
static void match_equals(struct s_mc_diff *state, xbt_dynar_t list)
}
int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2,
- std::vector<s_mc_heap_ignore_region_t>* i1,
- std::vector<s_mc_heap_ignore_region_t>* i2)
+ std::vector<simgrid::mc::IgnoredHeapRegion>* i1,
+ std::vector<simgrid::mc::IgnoredHeapRegion>* i2)
{
if (mc_diff_info == NULL) {
mc_diff_info = xbt_new0(struct s_mc_diff, 1);
} else {
for(simgrid::mc::Member& member : type->members) {
// TODO, optimize this? (for the offset case)
- void *real_member1 =
- mc_member_resolve(real_area1, type, &member, (simgrid::mc::AddressSpace*) snapshot1, process_index);
- void *real_member2 =
- mc_member_resolve(real_area2, type, &member, (simgrid::mc::AddressSpace*) snapshot2, process_index);
+ void *real_member1 = simgrid::dwarf::resolve_member(
+ real_area1, type, &member, (simgrid::mc::AddressSpace*) snapshot1, process_index);
+ void *real_member2 = simgrid::dwarf::resolve_member(
+ real_area2, type, &member, (simgrid::mc::AddressSpace*) snapshot2, process_index);
res =
compare_heap_area_with_type(state, process_index, real_member1, real_member2,
snapshot1, snapshot2,
if (member.offset() == offset)
return member.type;
} else {
- void *real_member =
- mc_member_resolve(real_base_address, type, &member,
- snapshot, process_index);
+ void *real_member = simgrid::dwarf::resolve_member(
+ real_base_address, type, &member, snapshot, process_index);
if ((char*) real_member - (char *) real_base_address == offset)
return member.type;
}
#include <elfutils/libdw.h>
#include <simgrid_config.h>
-#include <simgrid/util.hpp>
+#include "src/simgrid/util.hpp"
#include <xbt/log.h>
#include <xbt/sysdep.h>
-#include <simgrid/util.hpp>
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_dwarf.hpp"
-#include "mc_object_info.h"
-#include "mc_private.h"
-
-#include "mc/Process.hpp"
-#include "mc/ObjectInformation.hpp"
-#include "mc/Variable.hpp"
+#include "src/mc/Process.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/Variable.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_dwarf, mc, "DWARF processing");
*/
static std::uint64_t MC_dwarf_at_type(Dwarf_Die * die);
-/** \brief A class of DWARF tags (DW_TAG_*)
- */
-typedef enum mc_tag_class {
- mc_tag_unknown,
- mc_tag_type,
- mc_tag_subprogram,
- mc_tag_variable,
- mc_tag_scope,
- mc_tag_namespace
-} mc_tag_class;
-
-static mc_tag_class MC_dwarf_tag_classify(int tag)
+namespace simgrid {
+namespace dwarf {
+
+enum class TagClass {
+ Unknown,
+ Type,
+ Subprogram,
+ Variable,
+ Scope,
+ Namespace
+};
+
+/*** Class of forms defined in the DWARF standard */
+enum class FormClass {
+ Unknown,
+ Address, // Location in the program's address space
+ Block, // Arbitrary block of bytes
+ Constant,
+ String,
+ Flag, // Boolean value
+ Reference, // Reference to another DIE
+ ExprLoc, // DWARF expression/location description
+ LinePtr,
+ LocListPtr,
+ MacPtr,
+ RangeListPtr
+};
+
+XBT_PRIVATE
+TagClass classify_tag(int tag)
{
switch (tag) {
case DW_TAG_interface_type:
case DW_TAG_unspecified_type:
case DW_TAG_shared_type:
- return mc_tag_type;
+ return TagClass::Type;
case DW_TAG_subprogram:
- return mc_tag_subprogram;
+ return TagClass::Subprogram;
case DW_TAG_variable:
case DW_TAG_formal_parameter:
- return mc_tag_variable;
+ return TagClass::Variable;
case DW_TAG_lexical_block:
case DW_TAG_try_block:
case DW_TAG_catch_block:
case DW_TAG_inlined_subroutine:
case DW_TAG_with_stmt:
- return mc_tag_scope;
+ return TagClass::Scope;
case DW_TAG_namespace:
- return mc_tag_namespace;
+ return TagClass::Namespace;
default:
- return mc_tag_unknown;
-
+ return TagClass::Unknown;
}
}
-#define MC_DW_CLASS_UNKNOWN 0
-#define MC_DW_CLASS_ADDRESS 1 // Location in the address space of the program
-#define MC_DW_CLASS_BLOCK 2 // Arbitrary block of bytes
-#define MC_DW_CLASS_CONSTANT 3
-#define MC_DW_CLASS_STRING 3 // String
-#define MC_DW_CLASS_FLAG 4 // Boolean
-#define MC_DW_CLASS_REFERENCE 5 // Reference to another DIE
-#define MC_DW_CLASS_EXPRLOC 6 // DWARF expression/location description
-#define MC_DW_CLASS_LINEPTR 7
-#define MC_DW_CLASS_LOCLISTPTR 8
-#define MC_DW_CLASS_MACPTR 9
-#define MC_DW_CLASS_RANGELISTPTR 10
-
/** \brief Find the DWARF data class for a given DWARF data form
*
* This mapping is defined in the DWARF spec.
* \param form The form (values taken from the DWARF spec)
* \return An internal representation for the corresponding class
* */
-static int MC_dwarf_form_get_class(int form)
+XBT_PRIVATE
+FormClass classify_form(int form)
{
switch (form) {
case DW_FORM_addr:
- return MC_DW_CLASS_ADDRESS;
+ return FormClass::Address;
case DW_FORM_block2:
case DW_FORM_block4:
case DW_FORM_block:
case DW_FORM_block1:
- return MC_DW_CLASS_BLOCK;
+ return FormClass::Block;
case DW_FORM_data1:
case DW_FORM_data2:
case DW_FORM_data4:
case DW_FORM_data8:
case DW_FORM_udata:
case DW_FORM_sdata:
- return MC_DW_CLASS_CONSTANT;
+ return FormClass::Constant;
case DW_FORM_string:
case DW_FORM_strp:
- return MC_DW_CLASS_STRING;
+ return FormClass::String;
case DW_FORM_ref_addr:
case DW_FORM_ref1:
case DW_FORM_ref2:
case DW_FORM_ref4:
case DW_FORM_ref8:
case DW_FORM_ref_udata:
- return MC_DW_CLASS_REFERENCE;
+ return FormClass::Reference;
case DW_FORM_flag:
case DW_FORM_flag_present:
- return MC_DW_CLASS_FLAG;
+ return FormClass::Flag;
case DW_FORM_exprloc:
- return MC_DW_CLASS_EXPRLOC;
+ return FormClass::ExprLoc;
// TODO sec offset
// TODO indirect
default:
- return MC_DW_CLASS_UNKNOWN;
+ return FormClass::Unknown;
}
}
* \param die DIE
* \return name of the tag of this DIE
*/
-static inline const char *MC_dwarf_die_tagname(Dwarf_Die * die)
+inline XBT_PRIVATE
+const char *tagname(Dwarf_Die * die)
{
- return MC_dwarf_tagname(dwarf_tag(die));
+ return simgrid::dwarf::tagname(dwarf_tag(die));
+}
+
+}
}
// ***** Attributes
bool result;
if (dwarf_formflag(&attr, &result))
- xbt_die("Unexpected form for attribute %s", MC_dwarf_attrname(attribute));
+ xbt_die("Unexpected form for attribute %s",
+ simgrid::dwarf::attrname(attribute));
return result;
}
xbt_assert(dwarf_tag(die) == DW_TAG_enumeration_type
|| dwarf_tag(die) == DW_TAG_subrange_type,
"MC_dwarf_subrange_element_count called with DIE of type %s",
- MC_dwarf_die_tagname(die));
+ simgrid::dwarf::tagname(die));
// Use DW_TAG_count if present:
if (dwarf_hasattr_integrate(die, DW_AT_count))
{
xbt_assert(dwarf_tag(die) == DW_TAG_array_type,
"MC_dwarf_array_element_count called with DIE of type %s",
- MC_dwarf_die_tagname(die));
+ simgrid::dwarf::tagname(die));
int result = 1;
Dwarf_Die child;
Dwarf_Attribute attr;
dwarf_attr_integrate(child, DW_AT_data_member_location, &attr);
int form = dwarf_whatform(&attr);
- int klass = MC_dwarf_form_get_class(form);
- switch (klass) {
- case MC_DW_CLASS_EXPRLOC:
- case MC_DW_CLASS_BLOCK:
+ simgrid::dwarf::FormClass form_class = simgrid::dwarf::classify_form(form);
+ switch (form_class) {
+ case simgrid::dwarf::FormClass::ExprLoc:
+ case simgrid::dwarf::FormClass::Block:
// Location expression:
{
Dwarf_Op *expr;
("Could not read location expression DW_AT_data_member_location in DW_TAG_member %s of type <%"
PRIx64 ">%s", MC_dwarf_attr_integrate_string(child, DW_AT_name),
(uint64_t) type->id, type->name.c_str());
- member->location_expression = simgrid::mc::DwarfExpression(expr, expr+len);
+ member->location_expression = simgrid::dwarf::DwarfExpression(expr, expr+len);
break;
}
- case MC_DW_CLASS_CONSTANT:
+ case simgrid::dwarf::FormClass::Constant:
// Offset from the base address of the object:
{
Dwarf_Word offset;
(uint64_t) type->id, type->name.c_str());
break;
}
- case MC_DW_CLASS_LOCLISTPTR:
+ case simgrid::dwarf::FormClass::LocListPtr:
// Reference to a location list:
// TODO
- case MC_DW_CLASS_REFERENCE:
+ case simgrid::dwarf::FormClass::Reference:
// It's supposed to be possible in DWARF2 but I couldn't find its semantic
// in the spec.
default:
xbt_die("Can't handle form class (%i) / form 0x%x as DW_AT_member_location",
- klass, form);
+ (int) form_class, form);
}
}
variable->type_id = MC_dwarf_at_type(die);
int form = dwarf_whatform(&attr_location);
- int klass =
- form ==
- DW_FORM_sec_offset ? MC_DW_CLASS_CONSTANT : MC_dwarf_form_get_class(form);
- switch (klass) {
- case MC_DW_CLASS_EXPRLOC:
- case MC_DW_CLASS_BLOCK:
+ simgrid::dwarf::FormClass form_class;
+ if (form == DW_FORM_sec_offset)
+ form_class = simgrid::dwarf::FormClass::Constant;
+ else
+ form_class = simgrid::dwarf::classify_form(form);
+ switch (form_class) {
+ case simgrid::dwarf::FormClass::ExprLoc:
+ case simgrid::dwarf::FormClass::Block:
// Location expression:
{
Dwarf_Op *expr;
uintptr_t base = (uintptr_t) info->base_address();
variable->address = (void *) (base + offset);
} else {
- simgrid::mc::LocationListEntry entry;
+ simgrid::dwarf::LocationListEntry entry;
entry.expression = {expr, expr + len};
variable->location_list = { std::move(entry) };
}
break;
}
- case MC_DW_CLASS_LOCLISTPTR:
- case MC_DW_CLASS_CONSTANT:
+
+ case simgrid::dwarf::FormClass::LocListPtr:
+ case simgrid::dwarf::FormClass::Constant:
// Reference to location list:
- mc_dwarf_location_list_init(
- &variable->location_list, info, die,
- &attr_location);
+ variable->location_list = simgrid::dwarf::location_list(
+ *info, attr_location);
break;
+
default:
xbt_die("Unexpected form 0x%x (%i), class 0x%x (%i) list for location "
"in <%" PRIx64 ">%s",
- form, form, klass, klass,
+ form, form, (int) form_class, (int) form_class,
(uint64_t) variable->dwarf_offset,
variable->name.c_str());
}
Dwarf_Attribute attr;
dwarf_attr(die, DW_AT_start_scope, &attr);
int form = dwarf_whatform(&attr);
- int klass = MC_dwarf_form_get_class(form);
- switch (klass) {
- case MC_DW_CLASS_CONSTANT:
+ simgrid::dwarf::FormClass form_class = simgrid::dwarf::classify_form(form);
+ switch (form_class) {
+ case simgrid::dwarf::FormClass::Constant:
{
Dwarf_Word value;
variable->start_scope =
dwarf_formudata(&attr, &value) == 0 ? (size_t) value : 0;
break;
}
- case MC_DW_CLASS_RANGELISTPTR: // TODO
+
+ case simgrid::dwarf::FormClass::RangeListPtr: // TODO
default:
xbt_die
("Unhandled form 0x%x, class 0x%X for DW_AT_start_scope of variable %s",
- form, klass, name == NULL ? "?" : name);
+ form, (int) form_class, name == NULL ? "?" : name);
}
}
{
// TODO, handle DW_TAG_type/DW_TAG_location for DW_TAG_with_stmt
int tag = dwarf_tag(die);
- mc_tag_class klass = MC_dwarf_tag_classify(tag);
+ simgrid::dwarf::TagClass klass = simgrid::dwarf::classify_tag(tag);
// (Template) Subprogram declaration:
- if (klass == mc_tag_subprogram
+ if (klass == simgrid::dwarf::TagClass::Subprogram
&& MC_dwarf_attr_flag(die, DW_AT_declaration, false))
return;
- if (klass == mc_tag_scope)
+ if (klass == simgrid::dwarf::TagClass::Scope)
xbt_assert(parent_frame, "No parent scope for this scope");
simgrid::mc::Frame frame;
frame.id = dwarf_dieoffset(die);
frame.object_info = info;
- if (klass == mc_tag_subprogram) {
+ if (klass == simgrid::dwarf::TagClass::Subprogram) {
const char *name = MC_dwarf_attr_integrate_string(die, DW_AT_name);
if(ns)
frame.name = std::string(ns) + "::" + name;
Dwarf_Sword offset;
Dwarf_Addr high_pc;
- switch (MC_dwarf_form_get_class(dwarf_whatform(&attr))) {
+ switch (simgrid::dwarf::classify_form(dwarf_whatform(&attr))) {
// DW_AT_high_pc if an offset from the low_pc:
- case MC_DW_CLASS_CONSTANT:
+ case simgrid::dwarf::FormClass::Constant:
if (dwarf_formsdata(&attr, &offset) != 0)
xbt_die("Could not read constant");
break;
// DW_AT_high_pc is a relocatable address:
- case MC_DW_CLASS_ADDRESS:
+ case simgrid::dwarf::FormClass::Address:
if (dwarf_formaddr(&attr, &high_pc) != 0)
xbt_die("Could not read address");
frame.high_pc = ((char *) base) + high_pc;
}
}
- if (klass == mc_tag_subprogram) {
+ if (klass == simgrid::dwarf::TagClass::Subprogram) {
Dwarf_Attribute attr_frame_base;
if (dwarf_attr_integrate(die, DW_AT_frame_base, &attr_frame_base))
- mc_dwarf_location_list_init(&frame.frame_base, info, die,
- &attr_frame_base);
+ frame.frame_base_location = simgrid::dwarf::location_list(*info,
+ attr_frame_base);
}
// Handle children:
MC_compare_variable);
// Register it:
- if (klass == mc_tag_subprogram)
+ if (klass == simgrid::dwarf::TagClass::Subprogram)
info->subprograms[frame.id] = frame;
- else if (klass == mc_tag_scope)
+ else if (klass == simgrid::dwarf::TagClass::Scope)
parent_frame->scopes.push_back(std::move(frame));
}
const char *ns)
{
int tag = dwarf_tag(die);
- mc_tag_class klass = MC_dwarf_tag_classify(tag);
+ simgrid::dwarf::TagClass klass = simgrid::dwarf::classify_tag(tag);
switch (klass) {
// Type:
- case mc_tag_type:
+ case simgrid::dwarf::TagClass::Type:
MC_dwarf_handle_type_die(info, die, unit, frame, ns);
break;
// Subprogram or scope:
- case mc_tag_subprogram:
- case mc_tag_scope:
+ case simgrid::dwarf::TagClass::Subprogram:
+ case simgrid::dwarf::TagClass::Scope:
MC_dwarf_handle_scope_die(info, die, unit, frame, ns);
return;
// Variable:
- case mc_tag_variable:
+ case simgrid::dwarf::TagClass::Variable:
MC_dwarf_handle_variable_die(info, die, unit, frame, ns);
break;
- case mc_tag_namespace:
+ case simgrid::dwarf::TagClass::Namespace:
mc_dwarf_handle_namespace_die(info, die, unit, frame, ns);
break;
}
}
+static
+Elf64_Half MC_dwarf_elf_type(Dwarf* dwarf)
+{
+ Elf* elf = dwarf_getelf(dwarf);
+ Elf64_Ehdr* ehdr64 = elf64_getehdr(elf);
+ if (ehdr64)
+ return ehdr64->e_type;
+ Elf32_Ehdr* ehdr32 = elf32_getehdr(elf);
+ if (ehdr32)
+ return ehdr32->e_type;
+ xbt_die("Could not get ELF heeader");
+}
+
/** \brief Populate the debugging informations of the given ELF object
*
* Read the DWARf information of the EFFL object and populate the
* lists of types, variables, functions.
*/
+static
void MC_dwarf_get_variables(simgrid::mc::ObjectInformation* info)
{
int fd = open(info->file_name.c_str(), O_RDONLY);
"Your program and its dependencies must have debugging information.\n"
"You might want to recompile with -g or install the suitable debugging package.\n",
info->file_name.c_str());
+
+ Elf64_Half elf_type = MC_dwarf_elf_type(dwarf);
+ if (elf_type == ET_EXEC)
+ info->flags |= simgrid::mc::ObjectInformation::Executable;
+
// For each compilation unit:
Dwarf_Off offset = 0;
Dwarf_Off next_offset = 0;
/** \brief Finds informations about a given shared object/executable */
std::shared_ptr<simgrid::mc::ObjectInformation> MC_find_object_info(
- std::vector<simgrid::mc::VmMap> const& maps, const char *name, int executable)
+ std::vector<simgrid::xbt::VmMap> const& maps, const char *name)
{
std::shared_ptr<simgrid::mc::ObjectInformation> result =
std::make_shared<simgrid::mc::ObjectInformation>();
- if (executable)
- result->flags |= simgrid::mc::ObjectInformation::Executable;
result->file_name = name;
MC_find_object_address(maps, result.get());
MC_dwarf_get_variables(result.get());
}
}
+
+namespace simgrid {
+namespace dwarf {
+
+/** Convert a DWARF register into a libunwind register
+ *
+ * DWARF and libunwind does not use the same convention for numbering the
+ * registers on some architectures. The function makes the necessary
+ * convertion.
+ */
+int dwarf_register_to_libunwind(int dwarf_register)
+{
+#if defined(__x86_64__)
+ // It seems for this arch, DWARF and libunwind agree in the numbering:
+ return dwarf_register;
+#elif defined(__i386__)
+ // Could't find the authoritative source of information for this.
+ // This is inspired from http://source.winehq.org/source/dlls/dbghelp/cpu_i386.c#L517.
+ switch (dwarf_register) {
+ case 0:
+ return UNW_X86_EAX;
+ case 1:
+ return UNW_X86_ECX;
+ case 2:
+ return UNW_X86_EDX;
+ case 3:
+ return UNW_X86_EBX;
+ case 4:
+ return UNW_X86_ESP;
+ case 5:
+ return UNW_X86_EBP;
+ case 6:
+ return UNW_X86_ESI;
+ case 7:
+ return UNW_X86_EDI;
+ case 8:
+ return UNW_X86_EIP;
+ case 9:
+ return UNW_X86_EFLAGS;
+ case 10:
+ return UNW_X86_CS;
+ case 11:
+ return UNW_X86_SS;
+ case 12:
+ return UNW_X86_DS;
+ case 13:
+ return UNW_X86_ES;
+ case 14:
+ return UNW_X86_FS;
+ case 15:
+ return UNW_X86_GS;
+ case 16:
+ return UNW_X86_ST0;
+ case 17:
+ return UNW_X86_ST1;
+ case 18:
+ return UNW_X86_ST2;
+ case 19:
+ return UNW_X86_ST3;
+ case 20:
+ return UNW_X86_ST4;
+ case 21:
+ return UNW_X86_ST5;
+ case 22:
+ return UNW_X86_ST6;
+ case 23:
+ return UNW_X86_ST7;
+ default:
+ xbt_die("Bad/unknown register number.");
+ }
+#else
+#error This architecture is not supported yet for DWARF expression evaluation.
+#endif
+}
+
+}
+}
\ No newline at end of file
#define DW_LANG_Objc DW_LANG_ObjC /* fix spelling error in older dwarf.h */
#include <dwarf.h>
-#include "mc/Variable.hpp"
-#include "mc/mc_memory_map.h"
+#include "src/mc/Variable.hpp"
-/** \brief A class of DWARF tags (DW_TAG_*)
- */
-typedef enum mc_tag_class {
- mc_tag_unknown,
- mc_tag_type,
- mc_tag_subprogram,
- mc_tag_variable,
- mc_tag_scope,
- mc_tag_namespace
-} mc_tag_class;
+namespace simgrid {
+namespace dwarf {
-static mc_tag_class MC_dwarf_tag_classify(int tag)
-{
- switch (tag) {
+XBT_PRIVATE const char* attrname(int attr);
+XBT_PRIVATE const char* tagname(int tag);
- case DW_TAG_array_type:
- case DW_TAG_class_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_typedef:
- case DW_TAG_pointer_type:
- case DW_TAG_reference_type:
- case DW_TAG_rvalue_reference_type:
- case DW_TAG_string_type:
- case DW_TAG_structure_type:
- case DW_TAG_subroutine_type:
- case DW_TAG_union_type:
- case DW_TAG_ptr_to_member_type:
- case DW_TAG_set_type:
- case DW_TAG_subrange_type:
- case DW_TAG_base_type:
- case DW_TAG_const_type:
- case DW_TAG_file_type:
- case DW_TAG_packed_type:
- case DW_TAG_volatile_type:
- case DW_TAG_restrict_type:
- case DW_TAG_interface_type:
- case DW_TAG_unspecified_type:
- case DW_TAG_shared_type:
- return mc_tag_type;
-
- case DW_TAG_subprogram:
- return mc_tag_subprogram;
-
- case DW_TAG_variable:
- case DW_TAG_formal_parameter:
- return mc_tag_variable;
-
- case DW_TAG_lexical_block:
- case DW_TAG_try_block:
- case DW_TAG_catch_block:
- case DW_TAG_inlined_subroutine:
- case DW_TAG_with_stmt:
- return mc_tag_scope;
-
- case DW_TAG_namespace:
- return mc_tag_namespace;
-
- default:
- return mc_tag_unknown;
-
- }
-}
-
-#define MC_DW_CLASS_UNKNOWN 0
-#define MC_DW_CLASS_ADDRESS 1 // Location in the address space of the program
-#define MC_DW_CLASS_BLOCK 2 // Arbitrary block of bytes
-#define MC_DW_CLASS_CONSTANT 3
-#define MC_DW_CLASS_STRING 3 // String
-#define MC_DW_CLASS_FLAG 4 // Boolean
-#define MC_DW_CLASS_REFERENCE 5 // Reference to another DIE
-#define MC_DW_CLASS_EXPRLOC 6 // DWARF expression/location description
-#define MC_DW_CLASS_LINEPTR 7
-#define MC_DW_CLASS_LOCLISTPTR 8
-#define MC_DW_CLASS_MACPTR 9
-#define MC_DW_CLASS_RANGELISTPTR 10
+XBT_PRIVATE void* resolve_member(
+ const void* base, simgrid::mc::Type* type, simgrid::mc::Member* member,
+ simgrid::mc::AddressSpace* snapshot, int process_index);
-/** \brief Find the DWARF data class for a given DWARF data form
- *
- * This mapping is defined in the DWARF spec.
- *
- * \param form The form (values taken from the DWARF spec)
- * \return An internal representation for the corresponding class
- * */
-static int MC_dwarf_form_get_class(int form)
-{
- switch (form) {
- case DW_FORM_addr:
- return MC_DW_CLASS_ADDRESS;
- case DW_FORM_block2:
- case DW_FORM_block4:
- case DW_FORM_block:
- case DW_FORM_block1:
- return MC_DW_CLASS_BLOCK;
- case DW_FORM_data1:
- case DW_FORM_data2:
- case DW_FORM_data4:
- case DW_FORM_data8:
- case DW_FORM_udata:
- case DW_FORM_sdata:
- return MC_DW_CLASS_CONSTANT;
- case DW_FORM_string:
- case DW_FORM_strp:
- return MC_DW_CLASS_STRING;
- case DW_FORM_ref_addr:
- case DW_FORM_ref1:
- case DW_FORM_ref2:
- case DW_FORM_ref4:
- case DW_FORM_ref8:
- case DW_FORM_ref_udata:
- return MC_DW_CLASS_REFERENCE;
- case DW_FORM_flag:
- case DW_FORM_flag_present:
- return MC_DW_CLASS_FLAG;
- case DW_FORM_exprloc:
- return MC_DW_CLASS_EXPRLOC;
- // TODO sec offset
- // TODO indirect
- default:
- return MC_DW_CLASS_UNKNOWN;
- }
-}
+XBT_PRIVATE
+int dwarf_register_to_libunwind(int dwarf_register);
-/** \brief Find the default lower bound for a given language
- *
- * The default lower bound of an array (when DW_TAG_lower_bound
- * is missing) depends on the language of the compilation unit.
- *
- * \param lang Language of the compilation unit (values defined in the DWARF spec)
- * \return Default lower bound of an array in this compilation unit
- * */
-static inline
-uint64_t MC_dwarf_default_lower_bound(int lang)
-{
- switch (lang) {
- case DW_LANG_C:
- case DW_LANG_C89:
- case DW_LANG_C99:
- case DW_LANG_C_plus_plus:
- case DW_LANG_D:
- case DW_LANG_Java:
- case DW_LANG_ObjC:
- case DW_LANG_ObjC_plus_plus:
- case DW_LANG_Python:
- case DW_LANG_UPC:
- return 0;
- case DW_LANG_Ada83:
- case DW_LANG_Ada95:
- case DW_LANG_Fortran77:
- case DW_LANG_Fortran90:
- case DW_LANG_Fortran95:
- case DW_LANG_Modula2:
- case DW_LANG_Pascal83:
- case DW_LANG_PL1:
- case DW_LANG_Cobol74:
- case DW_LANG_Cobol85:
- return 1;
- default:
- xbt_die("No default DW_TAG_lower_bound for language %i and none given",
- lang);
- return 0;
- }
}
-
-/** Sort the variable by name and address.
- *
- * We could use boost::container::flat_set instead.
- */
-static inline
-bool MC_compare_variable(
- simgrid::mc::Variable const& a, simgrid::mc::Variable const& b)
-{
- int cmp = a.name.compare(b.name);
- if (cmp < 0)
- return true;
- else if (cmp > 0)
- return false;
- else
- return a.address < b.address;
}
-XBT_PRIVATE std::shared_ptr<simgrid::mc::ObjectInformation> MC_find_object_info(
- std::vector<simgrid::mc::VmMap> const& maps, const char* name, int executable);
-XBT_PRIVATE void MC_post_process_object_info(simgrid::mc::Process* process, simgrid::mc::ObjectInformation* info);
-
-XBT_PRIVATE void MC_dwarf_get_variables(simgrid::mc::ObjectInformation* info);
-XBT_PRIVATE void MC_dwarf_get_variables_libdw(simgrid::mc::ObjectInformation* info);
-
-XBT_PRIVATE const char* MC_dwarf_attrname(int attr);
-XBT_PRIVATE const char* MC_dwarf_tagname(int tag);
-
-XBT_PRIVATE void* mc_member_resolve(
- const void* base, simgrid::mc::Type* type, simgrid::mc::Member* member,
- simgrid::mc::AddressSpace* snapshot, int process_index);
-
#endif
/* Warning: autogenerated, do not edit! */
-#include <xbt/base.h>
#include <dwarf.h>
-#include "mc_object_info.h"
+#include <xbt/base.h>
+
+namespace simgrid {
+namespace dwarf {
/** \brief Get the name of an attribute (DW_AT_*) from its code
*
* \param attr attribute code (see the DWARF specification)
* \return name of the attribute
*/
-const char *MC_dwarf_attrname(int attr)
+XBT_PRIVATE
+const char *attrname(int attr)
{
switch (attr) {
case 0x01: return "DW_AT_sibling";
return "DW_AT_unknown";
}
}
+
+}
+}
+++ /dev/null
-/* Copyright (c) 2014-2015. 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 <cstdint>
-#include <cstdarg>
-
-#include <dwarf.h>
-#include <elfutils/libdw.h>
-
-#include "mc_object_info.h"
-#include "mc_private.h"
-#include "mc_location.h"
-#include "mc/AddressSpace.hpp"
-#include "mc/Frame.hpp"
-#include "mc/ObjectInformation.hpp"
-
-using simgrid::mc::remote;
-
-extern "C" {
-
-static int mc_dwarf_push_value(mc_expression_state_t state, Dwarf_Off value)
-{
- if (state->stack_size >= MC_EXPRESSION_STACK_SIZE)
- return MC_EXPRESSION_E_STACK_OVERFLOW;
-
- state->stack[state->stack_size++] = value;
- return 0;
-}
-
-/** Convert a DWARF register into a libunwind register
- *
- * DWARF and libunwind does not use the same convention for numbering the
- * registers on some architectures. The function makes the necessary
- * convertion.
- */
-static int mc_dwarf_register_to_libunwind(int dwarf_register)
-{
-#if defined(__x86_64__)
- // It seems for this arch, DWARF and libunwind agree in the numbering:
- return dwarf_register;
-#elif defined(__i386__)
- // Could't find the authoritative source of information for this.
- // This is inspired from http://source.winehq.org/source/dlls/dbghelp/cpu_i386.c#L517.
- switch (dwarf_register) {
- case 0:
- return UNW_X86_EAX;
- case 1:
- return UNW_X86_ECX;
- case 2:
- return UNW_X86_EDX;
- case 3:
- return UNW_X86_EBX;
- case 4:
- return UNW_X86_ESP;
- case 5:
- return UNW_X86_EBP;
- case 6:
- return UNW_X86_ESI;
- case 7:
- return UNW_X86_EDI;
- case 8:
- return UNW_X86_EIP;
- case 9:
- return UNW_X86_EFLAGS;
- case 10:
- return UNW_X86_CS;
- case 11:
- return UNW_X86_SS;
- case 12:
- return UNW_X86_DS;
- case 13:
- return UNW_X86_ES;
- case 14:
- return UNW_X86_FS;
- case 15:
- return UNW_X86_GS;
- case 16:
- return UNW_X86_ST0;
- case 17:
- return UNW_X86_ST1;
- case 18:
- return UNW_X86_ST2;
- case 19:
- return UNW_X86_ST3;
- case 20:
- return UNW_X86_ST4;
- case 21:
- return UNW_X86_ST5;
- case 22:
- return UNW_X86_ST6;
- case 23:
- return UNW_X86_ST7;
- default:
- xbt_die("Bad/unknown register number.");
- }
-#else
-#error This architecture is not supported yet for DWARF expression evaluation.
-#endif
-}
-
-int mc_dwarf_execute_expression(size_t n, const Dwarf_Op * ops,
- mc_expression_state_t state)
-{
- for (size_t i = 0; i != n; ++i) {
- int error = 0;
- const Dwarf_Op *op = ops + i;
- std::uint8_t atom = op->atom;
-
- switch (atom) {
-
- // Registers:
-
- case DW_OP_breg0:
- case DW_OP_breg1:
- case DW_OP_breg2:
- case DW_OP_breg3:
- case DW_OP_breg4:
- case DW_OP_breg5:
- case DW_OP_breg6:
- case DW_OP_breg7:
- case DW_OP_breg8:
- case DW_OP_breg9:
- case DW_OP_breg10:
- case DW_OP_breg11:
- case DW_OP_breg12:
- case DW_OP_breg13:
- case DW_OP_breg14:
- case DW_OP_breg15:
- case DW_OP_breg16:
- case DW_OP_breg17:
- case DW_OP_breg18:
- case DW_OP_breg19:
- case DW_OP_breg20:
- case DW_OP_breg21:
- case DW_OP_breg22:
- case DW_OP_breg23:
- case DW_OP_breg24:
- case DW_OP_breg25:
- case DW_OP_breg26:
- case DW_OP_breg27:
- case DW_OP_breg28:
- case DW_OP_breg29:
- case DW_OP_breg30:
- case DW_OP_breg31:{
- int register_id =
- mc_dwarf_register_to_libunwind(op->atom - DW_OP_breg0);
- unw_word_t res;
- if (!state->cursor)
- return MC_EXPRESSION_E_MISSING_STACK_CONTEXT;
- unw_get_reg(state->cursor, register_id, &res);
- error = mc_dwarf_push_value(state, res + op->number);
- break;
- }
-
- // Push the CFA (Canonical Frame Addresse):
- case DW_OP_call_frame_cfa:
- {
- // UNW_X86_64_CFA does not return the CFA DWARF expects
- // (it is a synonym for UNW_X86_64_RSP) so copy the cursor,
- // unwind it once in order to find the parent SP:
-
- if (!state->cursor)
- return MC_EXPRESSION_E_MISSING_STACK_CONTEXT;
-
- // Get frame:
- unw_cursor_t cursor = *(state->cursor);
- unw_step(&cursor);
-
- unw_word_t res;
- unw_get_reg(&cursor, UNW_REG_SP, &res);
- error = mc_dwarf_push_value(state, res);
- break;
- }
-
- // Frame base:
-
- case DW_OP_fbreg:
- {
- if (!state->frame_base)
- return MC_EXPRESSION_E_MISSING_FRAME_BASE;
- std::uintptr_t fb = ((std::uintptr_t) state->frame_base) + op->number;
- error = mc_dwarf_push_value(state, fb);
- break;
- }
-
-
- // ***** Constants:
-
- // Short constant literals:
- // DW_OP_lit15 pushed the 15 on the stack.
- case DW_OP_lit0:
- case DW_OP_lit1:
- case DW_OP_lit2:
- case DW_OP_lit3:
- case DW_OP_lit4:
- case DW_OP_lit5:
- case DW_OP_lit6:
- case DW_OP_lit7:
- case DW_OP_lit8:
- case DW_OP_lit9:
- case DW_OP_lit10:
- case DW_OP_lit11:
- case DW_OP_lit12:
- case DW_OP_lit13:
- case DW_OP_lit14:
- case DW_OP_lit15:
- case DW_OP_lit16:
- case DW_OP_lit17:
- case DW_OP_lit18:
- case DW_OP_lit19:
- case DW_OP_lit20:
- case DW_OP_lit21:
- case DW_OP_lit22:
- case DW_OP_lit23:
- case DW_OP_lit24:
- case DW_OP_lit25:
- case DW_OP_lit26:
- case DW_OP_lit27:
- case DW_OP_lit28:
- case DW_OP_lit29:
- case DW_OP_lit30:
- case DW_OP_lit31:
- error = mc_dwarf_push_value(state, atom - DW_OP_lit0);
- break;
-
- // Address from the base address of this ELF object.
- // Push the address on the stack (base_address + argument).
- case DW_OP_addr: {
- if (!state->object_info)
- return MC_EXPRESSION_E_NO_BASE_ADDRESS;
- if (state->stack_size == MC_EXPRESSION_STACK_SIZE)
- return MC_EXPRESSION_E_STACK_OVERFLOW;
- Dwarf_Off addr = (Dwarf_Off) (std::uintptr_t)
- state->object_info->base_address() + op->number;
- error = mc_dwarf_push_value(state, addr);
- break;
- }
-
- // General constants:
- // Push the constant argument on the stack.
- case DW_OP_const1u:
- case DW_OP_const2u:
- case DW_OP_const4u:
- case DW_OP_const8u:
- case DW_OP_const1s:
- case DW_OP_const2s:
- case DW_OP_const4s:
- case DW_OP_const8s:
- case DW_OP_constu:
- case DW_OP_consts:
- if (state->stack_size == MC_EXPRESSION_STACK_SIZE)
- return MC_EXPRESSION_E_STACK_OVERFLOW;
- error = mc_dwarf_push_value(state, op->number);
- break;
-
- // ***** Stack manipulation:
-
- // Push another copy/duplicate the value at the top of the stack:
- case DW_OP_dup:
- if (state->stack_size == 0)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- else
- error = mc_dwarf_push_value(state, state->stack[state->stack_size - 1]);
- break;
-
- // Pop/drop the top of the stack:
- case DW_OP_drop:
- if (state->stack_size == 0)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- else
- state->stack_size--;
- break;
-
- // Swap the two top-most value of the stack:
- case DW_OP_swap:
- if (state->stack_size < 2)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- std::uintptr_t temp = state->stack[state->stack_size - 2];
- state->stack[state->stack_size - 2] =
- state->stack[state->stack_size - 1];
- state->stack[state->stack_size - 1] = temp;
- }
- break;
-
- // Duplicate the value under the top of the stack:
- case DW_OP_over:
- if (state->stack_size < 2)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- error = mc_dwarf_push_value(state, state->stack[state->stack_size - 2]);
- break;
-
- // ***** Operations:
- // Those usually take the top of the stack and the next value as argument
- // and replace the top of the stack with the computed value
- // (stack.top() += stack.before_top()).
-
- case DW_OP_plus:
- if (state->stack_size < 2)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- std::uintptr_t result =
- state->stack[state->stack_size - 2] +
- state->stack[state->stack_size - 1];
- state->stack[state->stack_size - 2] = result;
- state->stack_size--;
- }
- break;
-
- case DW_OP_mul:
- if (state->stack_size < 2)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- std::uintptr_t result =
- state->stack[state->stack_size - 2] -
- state->stack[state->stack_size - 1];
- state->stack[state->stack_size - 2] = result;
- state->stack_size--;
- }
- break;
-
- case DW_OP_plus_uconst:
- if (state->stack_size == 0)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- state->stack[state->stack_size - 1] += op->number;
- break;
-
- case DW_OP_not:
- if (state->stack_size == 0)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- state->stack[state->stack_size - 1] =
- ~state->stack[state->stack_size - 1];
- break;
-
- case DW_OP_neg:
- if (state->stack_size == 0)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- intptr_t value = state->stack[state->stack_size - 1];
- if (value < 0)
- value = -value;
- state->stack[state->stack_size - 1] = value;
- }
- break;
-
- case DW_OP_minus:
- if (state->stack_size < 2)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- std::uintptr_t result =
- state->stack[state->stack_size - 2] -
- state->stack[state->stack_size - 1];
- state->stack[state->stack_size - 2] = result;
- state->stack_size--;
- }
- break;
-
- case DW_OP_and:
- if (state->stack_size < 2)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- std::uintptr_t result =
- state->stack[state->stack_size -
- 2] & state->stack[state->stack_size - 1];
- state->stack[state->stack_size - 2] = result;
- state->stack_size--;
- }
- break;
-
- case DW_OP_or:
- if (state->stack_size < 2)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- std::uintptr_t result =
- state->stack[state->stack_size -
- 2] | state->stack[state->stack_size - 1];
- state->stack[state->stack_size - 2] = result;
- state->stack_size--;
- }
- break;
-
- case DW_OP_xor:
- if (state->stack_size < 2)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- std::uintptr_t result =
- state->stack[state->stack_size -
- 2] ^ state->stack[state->stack_size - 1];
- state->stack[state->stack_size - 2] = result;
- state->stack_size--;
- }
- break;
-
- case DW_OP_nop:
- break;
-
- // ***** Deference (memory fetch)
-
- case DW_OP_deref_size:
- return MC_EXPRESSION_E_UNSUPPORTED_OPERATION;
-
- case DW_OP_deref:
- if (state->stack_size == 0)
- return MC_EXPRESSION_E_STACK_UNDERFLOW;
- {
- // Computed address:
- std::uintptr_t address = (std::uintptr_t) state->stack[state->stack_size - 1];
- if (!state->address_space)
- xbt_die("Missing address space");
- state->address_space->read_bytes(
- &state->stack[state->stack_size - 1], sizeof(uintptr_t),
- remote(address), state->process_index);
- }
- break;
-
- // Not handled:
- default:
- return MC_EXPRESSION_E_UNSUPPORTED_OPERATION;
- }
-
- if (error)
- return error;
- }
- return 0;
-}
-
-// ***** Location
-
-/** \brief Resolve a location expression
- * \deprecated Use mc_dwarf_resolve_expression
- */
-void mc_dwarf_resolve_location(mc_location_t location,
- simgrid::mc::DwarfExpression* expression,
- simgrid::mc::ObjectInformation* object_info,
- unw_cursor_t * c,
- void *frame_pointer_address,
- simgrid::mc::AddressSpace* address_space, int process_index)
-{
- s_mc_expression_state_t state;
- memset(&state, 0, sizeof(s_mc_expression_state_t));
- state.frame_base = frame_pointer_address;
- state.cursor = c;
- state.address_space = address_space;
- state.object_info = object_info;
- state.process_index = process_index;
-
- if (expression->size() >= 1
- && (*expression)[0].atom >=DW_OP_reg0
- && (*expression)[0].atom <= DW_OP_reg31) {
- int dwarf_register = (*expression)[0].atom - DW_OP_reg0;
- xbt_assert(c,
- "Missing frame context for register operation DW_OP_reg%i",
- dwarf_register);
- location->memory_location = NULL;
- location->cursor = c;
- location->register_id = mc_dwarf_register_to_libunwind(dwarf_register);
- return;
- }
-
- if (mc_dwarf_execute_expression(
- expression->size(), expression->data(), &state))
- xbt_die("Error evaluating DWARF expression");
- if (state.stack_size == 0)
- xbt_die("No value on the stack");
- else {
- location->memory_location = (void*) state.stack[state.stack_size - 1];
- location->cursor = NULL;
- location->register_id = 0;
- }
-}
-
-// TODO, move this in a method of LocationList
-static simgrid::mc::DwarfExpression* mc_find_expression(
- simgrid::mc::LocationList* locations, unw_word_t ip)
-{
- for (simgrid::mc::LocationListEntry& entry : *locations)
- if (entry.valid_for_ip(ip))
- return &entry.expression;
- return nullptr;
-}
-
-void mc_dwarf_resolve_locations(mc_location_t location,
- simgrid::mc::LocationList* locations,
- simgrid::mc::ObjectInformation* object_info,
- unw_cursor_t * c,
- void *frame_pointer_address,
- simgrid::mc::AddressSpace* address_space,
- int process_index)
-{
-
- unw_word_t ip = 0;
- if (c) {
- if (unw_get_reg(c, UNW_REG_IP, &ip))
- xbt_die("Could not resolve IP");
- }
-
- simgrid::mc::DwarfExpression* expression = mc_find_expression(locations, ip);
- if (expression) {
- mc_dwarf_resolve_location(location,
- expression, object_info, c,
- frame_pointer_address, address_space, process_index);
- } else {
- xbt_die("Could not resolve location");
- }
-}
-
-/** \brief Find the frame base of a given frame
- *
- * \param frame
- * \param unw_cursor
- */
-void *mc_find_frame_base(simgrid::mc::Frame* frame, simgrid::mc::ObjectInformation* object_info,
- unw_cursor_t * unw_cursor)
-{
- s_mc_location_t location;
- mc_dwarf_resolve_locations(&location,
- &frame->frame_base, object_info,
- unw_cursor, NULL, NULL, -1);
- switch(mc_get_location_type(&location)) {
- case MC_LOCATION_TYPE_ADDRESS:
- return location.memory_location;
-
- case MC_LOCATION_TYPE_REGISTER: {
- // This is a special case.
- // The register if not the location of the frame base
- // (a frame base cannot be located in a register)
- // Instead, DWARF defines this to mean that the register
- // contains the address of the frame base.
- unw_word_t word;
- unw_get_reg(location.cursor, location.register_id, &word);
- return (void*) word;
- }
-
- default:
- xbt_die("Cannot handle non-address frame base");
- return NULL; // Unreachable
- }
-}
-
-void mc_dwarf_location_list_init(
- simgrid::mc::LocationList* list, simgrid::mc::ObjectInformation* info,
- Dwarf_Die * die, Dwarf_Attribute * attr)
-{
- list->clear();
-
- std::ptrdiff_t offset = 0;
- Dwarf_Addr base, start, end;
- Dwarf_Op *ops;
- std::size_t len;
-
- while (1) {
-
- offset = dwarf_getlocations(attr, offset, &base, &start, &end, &ops, &len);
- if (offset == 0)
- return;
- else if (offset == -1)
- xbt_die("Error while loading location list");
-
- simgrid::mc::LocationListEntry entry;
- entry.expression = simgrid::mc::DwarfExpression(ops, ops + len);
-
- void *base = info->base_address();
- // If start == 0, this is not a location list:
- entry.lowpc = start == 0 ? NULL : (char *) base + start;
- entry.highpc = start == 0 ? NULL : (char *) base + end;
-
- list->push_back(std::move(entry));
- }
-
-}
-
-}
#include <elfutils/libdw.h>
#include <xbt/base.h>
-#include "mc_object_info.h"
+
+namespace simgrid {
+namespace dwarf {
/** \brief Get the name of a dwarf tag (DW_TAG_*) from its code
*
* \return name of the tag
*/
XBT_PRIVATE
-const char *MC_dwarf_tagname(int tag)
+const char *tagname(int tag)
{
switch (tag) {
case 0x01: return "DW_TAG_array_type";
return "DW_TAG_unknown";
}
}
+
+}
+}
+/* Copyright (c) 2015. 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 SIMGRID_MC_EXIT_HPP
#define SIMGRID_MC_EXIT_HPP
-#define SIMGRID_EXIT_SUCCESS 0
-#define SIMGRID_EXIT_SAFETY 1
-#define SIMGRID_EXIT_LIVENESS 2
-#define SIMGRID_EXIT_DEADLOCK 3
-#define SIMGRID_EXIT_NON_TERMINATION 4
-#define SIMGRID_EXIT_NON_DETERMINISM 5
+#define SIMGRID_MC_EXIT_SUCCESS 0
+#define SIMGRID_MC_EXIT_SAFETY 1
+#define SIMGRID_MC_EXIT_LIVENESS 2
+#define SIMGRID_MC_EXIT_DEADLOCK 3
+#define SIMGRID_MC_EXIT_NON_TERMINATION 4
+#define SIMGRID_MC_EXIT_NON_DETERMINISM 5
+#define SIMGRID_MC_EXIT_PROGRAM_CRASH 6
-#define SIMGRID_ERROR 63
+#define SIMGRID_MC_EXIT_ERROR 63
#endif
namespace mc {
class PageStore;
+class ChunkedData;
class ModelChecker;
class AddressSpace;
class Process;
#endif
#include "simgrid/sg_config.h"
-#include "../surf/surf_private.h"
-#include "../simix/smx_private.h"
+#include "src/surf/surf_private.h"
+#include "src/simix/smx_private.h"
#include "xbt/fifo.h"
#include "xbt/automaton.h"
#include "xbt/dict.h"
#include "mc_record.h"
#ifdef HAVE_MC
-#include "mc_server.h"
#include <libunwind.h>
#include <xbt/mmalloc.h>
-#include "../xbt/mmalloc/mmprivate.h"
-#include "mc_object_info.h"
-#include "mc_comm_pattern.h"
-#include "mc_request.h"
-#include "mc_safety.h"
-#include "mc_memory_map.h"
-#include "mc_snapshot.h"
-#include "mc_liveness.h"
-#include "mc_private.h"
-#include "mc_unw.h"
-#include "mc_smx.h"
-#include "mcer_ignore.h"
+#include "src/xbt/mmalloc/mmprivate.h"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_comm_pattern.h"
+#include "src/mc/mc_request.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_snapshot.h"
+#include "src/mc/mc_liveness.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_unw.h"
+#include "src/mc/mc_smx.h"
#endif
-#include "mc_record.h"
-#include "mc_protocol.h"
-#include "mc_client.h"
+#include "src/mc/mc_record.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_client.h"
extern "C" {
mc_state_t mc_current_state = NULL;
char mc_replay_mode = FALSE;
-__thread mc_comparison_times_t mc_comp_times = NULL;
-__thread double mc_snapshot_comparison_time;
mc_stats_t mc_stats = NULL;
mc_global_t initial_global_state = NULL;
xbt_fifo_t mc_stack = NULL;
/******************************* Initialisation of MC *******************************/
/*********************************************************************************/
-static void MC_init_dot_output()
+void MC_init_dot_output()
{ /* FIXME : more colors */
colors[0] = "blue";
}
}
-void MC_init_model_checker(pid_t pid, int socket)
-{
- mc_model_checker = new simgrid::mc::ModelChecker(pid, socket);
-
- mc_comp_times = xbt_new0(s_mc_comparison_times_t, 1);
-
- /* Initialize statistics */
- mc_stats = xbt_new0(s_mc_stats_t, 1);
- mc_stats->state_size = 1;
-
- if ((_sg_mc_dot_output_file != NULL) && (_sg_mc_dot_output_file[0] != '\0'))
- MC_init_dot_output();
-
- /* Init parmap */
- //parmap = xbt_parmap_mc_new(xbt_os_get_numcores(), XBT_PARMAP_DEFAULT);
-
- /* Ignore some variables from xbt/ex.h used by exception e for stacks comparison */
- MC_ignore_local_variable("e", "*");
- MC_ignore_local_variable("__ex_cleanup", "*");
- MC_ignore_local_variable("__ex_mctx_en", "*");
- MC_ignore_local_variable("__ex_mctx_me", "*");
- MC_ignore_local_variable("__xbt_ex_ctx_ptr", "*");
- MC_ignore_local_variable("_log_ev", "*");
- MC_ignore_local_variable("_throw_ctx", "*");
- MC_ignore_local_variable("ctx", "*");
-
- MC_ignore_local_variable("self", "simcall_BODY_mc_snapshot");
- MC_ignore_local_variable("next_cont"
- "ext", "smx_ctx_sysv_suspend_serial");
- MC_ignore_local_variable("i", "smx_ctx_sysv_suspend_serial");
-
- /* Ignore local variable about time used for tracing */
- MC_ignore_local_variable("start_time", "*");
-
- /* Static variable used for tracing */
- MCer_ignore_global_variable("counter");
-
- /* SIMIX */
- MCer_ignore_global_variable("smx_total_comms");
-}
#endif
/******************************* Core of MC *******************************/
if (_sg_mc_comms_determinism || _sg_mc_send_determinism)
MC_handle_comm_pattern(call, req, value, NULL, 1);
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
count++;
}
}
MC_simcall_handle(req, value);
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
}
/* Update statistics */
if (_sg_mc_comms_determinism)
XBT_INFO("Recv-deterministic : %s", !initial_global_state->recv_deterministic ? "No" : "Yes");
}
- if (getenv("SIMGRID_MC_SYSTEM_STATISTICS"))
- system("free");
+ if (getenv("SIMGRID_MC_SYSTEM_STATISTICS")){
+ int ret=system("free");
+ if(ret!=0)XBT_WARN("system call did not return 0, but %d",ret);
+ }
}
void MC_automaton_load(const char *file)
void MC_dump_stacks(FILE* file)
{
int nstack = 0;
- stack_region_t current_stack;
- unsigned cursor;
- xbt_dynar_foreach(stacks_areas, cursor, current_stack) {
- unw_context_t * context = (unw_context_t *)current_stack->context;
+ for (auto const& stack : mc_model_checker->process().stack_areas()) {
+
+ xbt_die("Fix cross-process access to the context");
+ unw_context_t * context = (unw_context_t *)stack.context;
fprintf(file, "Stack %i:\n", nstack);
int nframe = 0;
MC_print_statistics(mc_stats);
}
-void MC_invalidate_cache(void)
+void MC_report_crash(int status)
{
- if (mc_model_checker)
- mc_model_checker->process().cache_flags = 0;
+ XBT_INFO("**************************");
+ XBT_INFO("** CRASH IN THE PROGRAM **");
+ XBT_INFO("**************************");
+ if (WIFSIGNALED(status))
+ XBT_INFO("From signal: %s", strsignal(WTERMSIG(status)));
+ else if (WIFEXITED(status))
+ XBT_INFO("From exit: %i", WEXITSTATUS(status));
+ if (WCOREDUMP(status))
+ XBT_INFO("A core dump was generated by the system.");
+ else
+ XBT_INFO("No core dump was generated by the system.");
+ XBT_INFO("Counter-example execution trace:");
+ MC_record_dump_path(mc_stack);
+ MC_dump_stack_safety(mc_stack);
+ MC_print_statistics(mc_stats);
}
+
#endif
}
#include <cstdint>
-#include "mc_private.h"
+#include "src/mc/mc_private.h"
#include "mc/datatypes.h"
-#include "mc_hash.hpp"
+#include "src/mc/mc_hash.hpp"
#include <mc/mc.h>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_hash, mc, "Logging specific to mc_hash");
#include <vector>
#include "xbt/misc.h"
-#include "mc_snapshot.h"
+#include "src/mc/mc_snapshot.h"
namespace simgrid {
namespace mc {
/* 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 "internal_config.h"
-#include "mc_object_info.h"
-#include "mc_private.h"
-#include "smpi/private.h"
-#include "mc/mc_snapshot.h"
-#include "mc_ignore.h"
-#include "mc_protocol.h"
-#include "mc_client.h"
+#include "src/internal_config.h"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_private.h"
+#include "src/smpi/private.h"
+#include "src/mc/mc_snapshot.h"
+#include "src/mc/mc_ignore.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_client.h"
extern "C" {
xbt_mheap_t heap = mmalloc_get_current_heap();
- s_mc_heap_ignore_region_t region;
- memset(®ion, 0, sizeof(region));
- region.address = address;
- region.size = size;
- region.block =
+ s_mc_ignore_heap_message_t message;
+ message.type = MC_MESSAGE_IGNORE_HEAP;
+ message.address = address;
+ message.size = size;
+ message.block =
((char *) address -
(char *) heap->heapbase) / BLOCKSIZE + 1;
- if (heap->heapinfo[region.block].type == 0) {
- region.fragment = -1;
- heap->heapinfo[region.block].busy_block.ignore++;
+ if (heap->heapinfo[message.block].type == 0) {
+ message.fragment = -1;
+ heap->heapinfo[message.block].busy_block.ignore++;
} else {
- region.fragment =
+ message.fragment =
((uintptr_t) (ADDR2UINT(address) % (BLOCKSIZE))) >>
- heap->heapinfo[region.block].type;
- heap->heapinfo[region.block].busy_frag.ignore[region.fragment]++;
+ heap->heapinfo[message.block].type;
+ heap->heapinfo[message.block].busy_frag.ignore[message.fragment]++;
}
- s_mc_ignore_heap_message_t message;
- message.type = MC_MESSAGE_IGNORE_HEAP;
- message.region = region;
if (MC_protocol_send(mc_client->fd, &message, sizeof(message)))
xbt_die("Could not send ignored region to MCer");
}
#include <xbt/dynar.h>
#include "mc/datatypes.h"
-#include "mc/Process.hpp"
+#include "src/mc/Process.hpp"
#include "xbt/misc.h" /* SG_BEGIN_DECL */
SG_BEGIN_DECL();
-XBT_PRIVATE void MC_stack_area_add(stack_region_t stack_area);
-
XBT_PRIVATE xbt_dynar_t MC_checkpoint_ignore_new(void);
SG_END_DECL();
#include <xbt/dynar.h>
#include <xbt/automaton.h>
-#include "mc_request.h"
-#include "mc_liveness.h"
-#include "mc_private.h"
-#include "mc_record.h"
-#include "mc_smx.h"
-#include "mc_client.h"
-#include "mc_replay.h"
-#include "mc_safety.h"
-#include "mc_exit.h"
+#include "src/mc/mc_request.h"
+#include "src/mc/mc_liveness.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_record.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_client.h"
+#include "src/mc/mc_replay.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_exit.h"
extern "C" {
}
}
-static void MC_modelcheck_liveness_main(void);
+static int MC_modelcheck_liveness_main(void);
static void MC_pre_modelcheck_liveness(void)
{
mc_pair_t initial_pair = NULL;
smx_process_t process;
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
acceptance_pairs = xbt_dynar_new(sizeof(mc_visited_pair_t), NULL);
if(_sg_mc_visited > 0)
xbt_fifo_unshift(mc_stack, initial_pair);
}
}
-
- MC_modelcheck_liveness_main();
}
-static void MC_modelcheck_liveness_main(void)
+static int MC_modelcheck_liveness_main(void)
{
smx_process_t process = NULL;
mc_pair_t current_pair = NULL;
MC_dump_stack_liveness(mc_stack);
MC_print_statistics(mc_stats);
XBT_INFO("Counter-example depth : %d", counter_example_depth);
- exit(SIMGRID_EXIT_LIVENESS);
+ return SIMGRID_MC_EXIT_LIVENESS;
}
}
MC_simcall_handle(req, value);
/* Wait for requests (schedules processes) */
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
current_pair->requests--;
current_pair->exploration_started = 1;
} /* End of if (current_pair->requests > 0) else ... */
} /* End of while(xbt_fifo_size(mc_stack) > 0) */
-
+
+ XBT_INFO("No property violation found.");
+ MC_print_statistics(mc_stats);
+ return SIMGRID_MC_EXIT_SUCCESS;
}
-void MC_modelcheck_liveness(void)
+int MC_modelcheck_liveness(void)
{
if (mc_reduce_kind == e_mc_reduce_unset)
mc_reduce_kind = e_mc_reduce_none;
XBT_INFO("Check the liveness property %s", _sg_mc_property_file);
MC_automaton_load(_sg_mc_property_file);
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
XBT_DEBUG("Starting the liveness algorithm");
_sg_mc_liveness = 1;
initial_global_state = xbt_new0(s_mc_global_t, 1);
MC_pre_modelcheck_liveness();
+ int res = MC_modelcheck_liveness_main();
/* We're done */
- XBT_INFO("No property violation found.");
- MC_print_statistics(mc_stats);
xbt_free(mc_time);
+
+ return res;
}
}
#include <xbt/fifo.h>
#include <xbt/dynar.h>
#include <xbt/automaton.h>
-#include "mc_state.h"
+#include "src/mc/mc_state.h"
SG_BEGIN_DECL()
XBT_PRIVATE mc_visited_pair_t MC_visited_pair_new(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions, mc_state_t graph_state);
XBT_PRIVATE void MC_visited_pair_delete(mc_visited_pair_t p);
-void MC_modelcheck_liveness(void);
+int MC_modelcheck_liveness(void);
XBT_PRIVATE void MC_show_stack_liveness(xbt_fifo_t stack);
XBT_PRIVATE void MC_dump_stack_liveness(xbt_fifo_t stack);
+++ /dev/null
-/* Copyright (c) 2004-2015. 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 SIMGRID_MC_OBJECT_LOCATION_H
-#define SIMGRID_MC_OBJECT_LOCATION_H
-
-#include <stdint.h>
-
-#include <vector>
-
-#include <libunwind.h>
-#include <dwarf.h>
-#include <elfutils/libdw.h>
-
-#include <simgrid_config.h>
-#include "mc_base.h"
-#include "mc_forward.hpp"
-#include "AddressSpace.hpp"
-
-namespace simgrid {
-namespace mc {
-
-typedef std::vector<Dwarf_Op> DwarfExpression;
-
-
-/** \brief A DWARF expression with optional validity contraints */
-class LocationListEntry {
-public:
- DwarfExpression expression;
- void* lowpc, *highpc;
-
- LocationListEntry() : lowpc(nullptr), highpc(nullptr) {}
-
- bool valid_for_ip(unw_word_t ip)
- {
- return (this->lowpc == nullptr && this->highpc == nullptr)
- || (ip >= (unw_word_t) this->lowpc
- && ip < (unw_word_t) this->highpc);
- }
-};
-
-typedef std::vector<LocationListEntry> LocationList;
-
-}
-}
-
-SG_BEGIN_DECL()
-
-/** A location is either a location in memory of a register location
- *
- * Usage:
- *
- * * mc_dwarf_resolve_locations or mc_dwarf_resolve_location is used
- * to find the location of a given location expression or location list;
- *
- * * mc_get_location_type MUST be used to find the location type;
- *
- * * for MC_LOCATION_TYPE_ADDRESS, memory_address is the resulting address
- *
- * * for MC_LOCATION_TYPE_REGISTER, unw_get_reg(l.cursor, l.register_id, value)
- * and unw_get_reg(l.cursor, l.register_id, value) can be used to read/write
- * the value.
- * </ul>
- */
-typedef struct s_mc_location {
- void* memory_location;
- unw_cursor_t* cursor;
- int register_id;
-} s_mc_location_t, *mc_location_t;
-
-/** Type of a given location
- *
- * Use `mc_get_location_type(location)` to find the type.
- * */
-typedef enum mc_location_type {
- MC_LOCATION_TYPE_ADDRESS,
- MC_LOCATION_TYPE_REGISTER
-} mc_location_type;
-
-/** Find the type of a location */
-static inline __attribute__ ((always_inline))
-enum mc_location_type mc_get_location_type(mc_location_t location) {
- if (location->cursor) {
- return MC_LOCATION_TYPE_REGISTER;
- } else {
- return MC_LOCATION_TYPE_ADDRESS;
- }
-}
-
-XBT_PRIVATE void mc_dwarf_resolve_location(
- mc_location_t location, simgrid::mc::DwarfExpression* expression,
- simgrid::mc::ObjectInformation* object_info, unw_cursor_t* c,
- void* frame_pointer_address, simgrid::mc::AddressSpace* address_space,
- int process_index);
-void mc_dwarf_resolve_locations(
- mc_location_t location, simgrid::mc::LocationList* locations,
- simgrid::mc::ObjectInformation* object_info, unw_cursor_t* c,
- void* frame_pointer_address, simgrid::mc::AddressSpace* address_space,
- int process_index);
-
-XBT_PRIVATE void mc_dwarf_location_list_init(
- simgrid::mc::LocationList*, simgrid::mc::ObjectInformation* info, Dwarf_Die* die,
- Dwarf_Attribute* attr);
-
-#define MC_EXPRESSION_STACK_SIZE 64
-
-#define MC_EXPRESSION_OK 0
-#define MC_EXPRESSION_E_UNSUPPORTED_OPERATION 1
-#define MC_EXPRESSION_E_STACK_OVERFLOW 2
-#define MC_EXPRESSION_E_STACK_UNDERFLOW 3
-#define MC_EXPRESSION_E_MISSING_STACK_CONTEXT 4
-#define MC_EXPRESSION_E_MISSING_FRAME_BASE 5
-#define MC_EXPRESSION_E_NO_BASE_ADDRESS 6
-
-typedef struct s_mc_expression_state {
- uintptr_t stack[MC_EXPRESSION_STACK_SIZE];
- size_t stack_size;
-
- unw_cursor_t* cursor;
- void* frame_base;
- simgrid::mc::AddressSpace* address_space;
- simgrid::mc::ObjectInformation* object_info;
- int process_index;
-} s_mc_expression_state_t, *mc_expression_state_t;
-
-XBT_PUBLIC(int) mc_dwarf_execute_expression(
- size_t n, const Dwarf_Op* ops, mc_expression_state_t state);
-void* mc_find_frame_base(
- simgrid::mc::Frame* frame, simgrid::mc::ObjectInformation* object_info, unw_cursor_t* unw_cursor);
-
-SG_END_DECL()
-
-namespace simgrid {
-namespace mc {
-
-static inline
-int execute(DwarfExpression const& expression, mc_expression_state_t state)
-{
- return mc_dwarf_execute_expression(
- expression.size(), expression.data(), state);
-}
-
-}
-}
-
-#endif
#include <xbt/misc.h>
-#include "mc_object_info.h"
-#include "mc_private.h"
-#include "mc/Type.hpp"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/Type.hpp"
+
+namespace simgrid {
+namespace dwarf {
/** Resolve snapshot in the process address space
*
* @param snapshot Snapshot (or NULL)
* @return Process address of the given member of the 'object' struct/class
*/
-void *mc_member_resolve(
+void *resolve_member(
const void *base, simgrid::mc::Type* type, simgrid::mc::Member* member,
simgrid::mc::AddressSpace* address_space, int process_index)
{
if (!member->has_offset_location())
return ((char *) base) + member->offset();
- s_mc_expression_state_t state;
- memset(&state, 0, sizeof(s_mc_expression_state_t));
+ ExpressionContext state;
state.frame_base = NULL;
state.cursor = NULL;
state.address_space = address_space;
- state.stack_size = 1;
- state.stack[0] = (uintptr_t) base;
state.process_index = process_index;
- if (simgrid::mc::execute(
- member->location_expression, &state))
- xbt_die("Error evaluating DWARF expression");
- if (state.stack_size == 0)
- xbt_die("No value on the stack");
- else
- return (void *) state.stack[state.stack_size - 1];
+ ExpressionStack stack;
+ stack.push((ExpressionStack::value_type) base);
+ simgrid::dwarf::execute(member->location_expression, state, stack);
+ return (void*) stack.top();
+}
+
+}
}
#include "xbt/virtu.h"
#include "mc/mc.h"
-#include "mc_object_info.h"
-#include "mc_private.h"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_private.h"
extern "C" {
}
/* Finalize the memory subsystem */
-#include "xbt_modinter.h"
+#include "src/xbt_modinter.h"
void MC_memory_exit(void)
{
}
#include <xbt/base.h>
-#include "mc_forward.hpp"
-#include "mc_memory_map.h"
+#include "src/mc/mc_forward.hpp"
+#include "src/xbt/memory_map.hpp"
XBT_PRIVATE std::shared_ptr<simgrid::mc::ObjectInformation> MC_find_object_info(
- std::vector<simgrid::mc::VmMap> const& maps, const char* name, int executable);
+ std::vector<simgrid::xbt::VmMap> const& maps, const char* name);
XBT_PRIVATE void MC_post_process_object_info(simgrid::mc::Process* process, simgrid::mc::ObjectInformation* info);
-XBT_PRIVATE void MC_dwarf_get_variables(simgrid::mc::ObjectInformation* info);
-XBT_PRIVATE void MC_dwarf_get_variables_libdw(simgrid::mc::ObjectInformation* info);
-
-XBT_PRIVATE const char* MC_dwarf_attrname(int attr);
-XBT_PRIVATE const char* MC_dwarf_tagname(int tag);
-
#endif
-/* MC interface: definitions that non-MC modules must see, but not the user */
-
/* Copyright (c) 2014-2015. 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. */
+/* MC interface: definitions that non-MC modules must see, but not the user */
+
+
#include <unistd.h> // pread, pwrite
-#include "PageStore.hpp"
-#include "mc_mmu.h"
-#include "mc_private.h"
-#include "mc_snapshot.h"
+#include "src/mc/PageStore.hpp"
+#include "src/mc/mc_mmu.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_snapshot.h"
#include <xbt/mmalloc.h>
-
-#define SOFT_DIRTY_BIT_NUMBER 55
-#define SOFT_DIRTY (((uint64_t)1) << SOFT_DIRTY_BIT_NUMBER)
+#include "src/mc/ChunkedData.hpp"
using simgrid::mc::remote;
-namespace simgrid {
-namespace mc {
-
-/** @brief Take a per-page snapshot of a region
- *
- * @param data The start of the region (must be at the beginning of a page)
- * @param pag_count Number of pages of the region
- * @return Snapshot page numbers of this new snapshot
- */
-PerPageCopy::PerPageCopy(PageStore& store, AddressSpace& as,
- remote_ptr<void> addr, std::size_t page_count,
- const size_t* ref_page_numbers, const std::uint64_t* pagemap)
-{
- store_ = &store;
- this->pagenos_.resize(page_count);
- std::vector<char> buffer(xbt_pagesize);
-
- for (size_t i = 0; i != page_count; ++i) {
-
- // We don't have to compare soft-clean pages:
- if (ref_page_numbers && pagemap && !(pagemap[i] & SOFT_DIRTY)) {
- pagenos_[i] = ref_page_numbers[i];
- store_->ref_page(ref_page_numbers[i]);
- continue;
- }
-
- remote_ptr<void> page = remote(addr.address() + (i << xbt_pagebits));
- xbt_assert(mc_page_offset((void*)page.address())==0,
- "Not at the beginning of a page");
-
- /* Adding another copy (and a syscall) will probably slow things a lot.
- TODO, optimize this somehow (at least by grouping the syscalls)
- if needed. Either:
- - reduce the number of syscalls;
- - let the application snapshot itself;
- - move the segments in shared memory (this will break `fork` however).
- */
-
- as.read_bytes(
- buffer.data(), xbt_pagesize, page,
- simgrid::mc::ProcessIndexDisabled);
-
- pagenos_[i] = store_->store_page(buffer.data());
-
- }
-}
-
-}
-}
-
extern "C" {
/** @brief Restore a snapshot of a region
* @param pagenos
*/
void mc_restore_page_snapshot_region(simgrid::mc::Process* process,
- void* start_addr, simgrid::mc::PerPageCopy const& pages_copy)
+ void* start_addr, simgrid::mc::ChunkedData const& pages_copy)
{
for (size_t i = 0; i != pages_copy.page_count(); ++i) {
// Otherwise, copy the page:
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <xbt.h>
-#include "mc_liveness.h"
-#include "mc_private.h"
+#include "src/mc/mc_liveness.h"
+#include "src/mc/mc_private.h"
extern "C" {
p = NULL;
}
-void mc_pair_free_voidp(void *p)
-{
- MC_pair_delete((mc_pair_t) * (void **) p);
-}
-
}
#include <elfutils/libdw.h>
#include "mc/mc.h"
-#include "mc_base.h"
+#include "src/mc/mc_base.h"
#include "mc/datatypes.h"
#include "xbt/fifo.h"
#include "xbt/config.h"
+#ifdef __cplusplus
+#include "src/xbt/memory_map.hpp"
+#endif
+
#include "xbt/function_types.h"
#include "xbt/mmalloc.h"
-#include "../simix/smx_private.h"
-#include "../xbt/mmalloc/mmprivate.h"
+#include "src/simix/smx_private.h"
+#include "src/xbt/mmalloc/mmprivate.h"
#include "xbt/automaton.h"
#include "xbt/hash.h"
#include <simgrid/msg.h>
#include "xbt/parmap.h"
#include <xbt/base.h>
-#include "mc_forward.h"
-#include "mc_protocol.h"
+#include "src/mc/mc_forward.h"
+#include "src/mc/mc_protocol.h"
SG_BEGIN_DECL()
/********************************* MC Global **********************************/
-/** Initialisation of the model-checker
- *
- * @param pid PID of the target process
- * @param socket FD for the communication socket **in server mode** (or -1 otherwise)
- */
-void MC_init_model_checker(pid_t pid, int socket);
+XBT_PRIVATE void MC_init_dot_output();
XBT_PRIVATE extern FILE *dot_output;
XBT_PRIVATE extern const char* colors[13];
/********************************** Snapshot comparison **********************************/
-typedef struct s_mc_comparison_times{
- double nb_processes_comparison_time;
- double bytes_used_comparison_time;
- double stacks_sizes_comparison_time;
- double global_variables_comparison_time;
- double heap_comparison_time;
- double stacks_comparison_time;
-}s_mc_comparison_times_t, *mc_comparison_times_t;
-
-extern XBT_PRIVATE __thread mc_comparison_times_t mc_comp_times;
-extern XBT_PRIVATE __thread double mc_snapshot_comparison_time;
-
XBT_PRIVATE int snapshot_compare(void *state1, void *state2);
-XBT_PRIVATE void print_comparison_times(void);
//#define MC_DEBUG 1
#define MC_VERBOSE 1
/********************************** Miscellaneous **********************************/
-XBT_PRIVATE void MC_dump_stacks(FILE* file);
-
XBT_PRIVATE void MC_report_assertion_error(void);
+XBT_PRIVATE void MC_report_crash(int status);
+
+#ifdef __cplusplus
-XBT_PRIVATE void MC_invalidate_cache(void);
+XBT_PRIVATE void MC_find_object_address(
+ std::vector<simgrid::xbt::VmMap> const& maps, simgrid::mc::ObjectInformation* result);
+
+#endif
SG_END_DECL()
#include <errno.h>
#include <string.h>
+#include <stdio.h> // perror
#include <sys/types.h>
#include <sys/socket.h>
#include <xbt/log.h>
-#include "mc_protocol.h"
-#include "mc_client.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_client.h"
extern "C" {
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_protocol, mc, "Generic MC protocol logic");
-int MC_protocol_send(int socket, const void* message, size_t size)
+int MC_protocol_send(int socket, const void* message, std::size_t size)
{
XBT_DEBUG("Protocol [%s] send %s",
MC_mode_name(mc_mode),
return MC_protocol_send(socket, &message, sizeof(message));
}
-int MC_protocol_hello(int socket)
-{
- int e;
- if ((e = MC_protocol_send_simple_message(socket, MC_MESSAGE_HELLO)) != 0) {
- XBT_ERROR("Could not send HELLO message");
- return 1;
- }
-
- s_mc_message_t message;
- message.type = MC_MESSAGE_NONE;
-
- ssize_t s;
- while ((s = MC_receive_message(socket, &message, sizeof(message), 0)) == -1) {
- if (errno == EINTR)
- continue;
- else {
- XBT_ERROR("Could not receive HELLO message");
- return 2;
- }
- }
- if ((size_t) s < sizeof(message) || message.type != MC_MESSAGE_HELLO) {
- XBT_ERROR("Did not receive suitable HELLO message. Who are you?");
- return 3;
- }
-
- return 0;
-}
-
ssize_t MC_receive_message(int socket, void* message, size_t size, int options)
{
int res = recv(socket, message, size, options);
switch(type) {
case MC_MESSAGE_NONE:
return "NONE";
- case MC_MESSAGE_HELLO:
- return "HELLO";
case MC_MESSAGE_CONTINUE:
return "CONTINUE";
case MC_MESSAGE_IGNORE_HEAP:
typedef enum {
MC_MESSAGE_NONE,
- MC_MESSAGE_HELLO,
MC_MESSAGE_CONTINUE,
MC_MESSAGE_IGNORE_HEAP,
MC_MESSAGE_UNIGNORE_HEAP,
MC_MESSAGE_WAITING,
MC_MESSAGE_SIMCALL_HANDLE,
MC_MESSAGE_ASSERTION_FAILED,
+ // MCer request to finish the restoration:
+ MC_MESSAGE_RESTORE,
} e_mc_message_type;
#define MC_MESSAGE_LENGTH 512
typedef struct s_mc_ignore_heap_message {
e_mc_message_type type;
- s_mc_heap_ignore_region_t region;
+ int block;
+ int fragment;
+ void *address;
+ size_t size;
} s_mc_ignore_heap_message_t, *mc_ignore_heap_message_t;
typedef struct s_mc_ignore_memory_message {
void* data;
} s_mc_register_symbol_message_t, * mc_register_symbol_message_t;
+typedef struct s_mc_restore_message {
+ e_mc_message_type type;
+ int index;
+} s_mc_restore_message_t, *mc_restore_message_t;
+
XBT_PRIVATE int MC_protocol_send(int socket, const void* message, size_t size);
XBT_PRIVATE int MC_protocol_send_simple_message(int socket, e_mc_message_type type);
-XBT_PRIVATE int MC_protocol_hello(int socket);
XBT_PRIVATE ssize_t MC_receive_message(int socket, void* message, size_t size, int options);
XBT_PRIVATE const char* MC_message_type_name(e_mc_message_type type);
#include <xbt.h>
#include <simgrid/simix.h>
-#include "mc_replay.h"
-#include "mc_record.h"
-#include "mc_base.h"
+#include "src/mc/mc_replay.h"
+#include "src/mc/mc_record.h"
+#include "src/mc/mc_base.h"
#ifdef HAVE_MC
-#include "mc_private.h"
-#include "mc_state.h"
-#include "mc_smx.h"
-#include "mc_liveness.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_state.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_liveness.h"
#endif
extern "C" {
-/* simgrid/modelchecker.h - Formal Verification made possible in SimGrid */
-
/* Copyright (c) 2008-2015. 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. */
+/* simgrid/modelchecker.h - Formal Verification made possible in SimGrid */
+
#ifndef SIMGRID_MC_REPLAY_H
#define SIMGRID_MC_REPLAY_H
#include <assert.h>
-#include "mc_request.h"
-#include "mc_safety.h"
-#include "mc_private.h"
-#include "mc_smx.h"
-#include "mc_xbt.hpp"
+#include "src/mc/mc_request.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_xbt.hpp"
using simgrid::mc::remote;
static char *pointer_to_string(void *pointer);
static char *buff_size_to_string(size_t size);
-// Those are MC_state_get_internal_request(state)
-int MC_request_depend(smx_simcall_t r1, smx_simcall_t r2)
+static inline
+smx_synchro_t MC_get_comm(smx_simcall_t r)
{
- if (mc_reduce_kind == e_mc_reduce_none)
- return TRUE;
-
- if (r1->issuer == r2->issuer)
- return FALSE;
+ switch (r->call ) {
+ case SIMCALL_COMM_WAIT:
+ return simcall_comm_wait__get__comm(r);
+ case SIMCALL_COMM_TEST:
+ return simcall_comm_test__get__comm(r);
+ default:
+ return nullptr;
+ }
+}
- /* Wait with timeout transitions are not considered by the independance theorem, thus we consider them as dependant with all other transitions */
- if ((r1->call == SIMCALL_COMM_WAIT && simcall_comm_wait__get__timeout(r1) > 0)
- || (r2->call == SIMCALL_COMM_WAIT
- && simcall_comm_wait__get__timeout(r2) > 0))
- return TRUE;
+static inline
+smx_rdv_t MC_get_rdv(smx_simcall_t r)
+{
+ switch(r->call) {
+ case SIMCALL_COMM_ISEND:
+ return simcall_comm_isend__get__rdv(r);
+ case SIMCALL_COMM_IRECV:
+ return simcall_comm_irecv__get__rdv(r);
+ default:
+ return nullptr;
+ }
+}
+// Does half the job
+static inline
+int MC_request_depend_asymmetric(smx_simcall_t r1, smx_simcall_t r2)
+{
if (r1->call == SIMCALL_COMM_ISEND && r2->call == SIMCALL_COMM_IRECV)
return FALSE;
// Those are internal requests, we do not need indirection
// because those objects are copies:
- smx_synchro_t synchro1 = NULL, synchro2 = NULL;
- if (r1->call == SIMCALL_COMM_WAIT) {
- synchro1 = simcall_comm_wait__get__comm(r1);
- }
- if (r2->call == SIMCALL_COMM_WAIT) {
- synchro2 = simcall_comm_wait__get__comm(r2);
- }
- if (r1->call == SIMCALL_COMM_TEST) {
- synchro1 = simcall_comm_test__get__comm(r1);
- }
- if (r2->call == SIMCALL_COMM_TEST) {
- synchro2 = simcall_comm_test__get__comm(r2);
- }
+ smx_synchro_t synchro1 = MC_get_comm(r1);
+ smx_synchro_t synchro2 = MC_get_comm(r2);
if ((r1->call == SIMCALL_COMM_ISEND || r1->call == SIMCALL_COMM_IRECV)
&& r2->call == SIMCALL_COMM_WAIT) {
- smx_rdv_t rdv =
- r1->call ==
- SIMCALL_COMM_ISEND ? simcall_comm_isend__get__rdv(r1) :
- simcall_comm_irecv__get__rdv(r1);
+ smx_rdv_t rdv = MC_get_rdv(r1);
if (rdv != synchro2->comm.rdv_cpy
&& simcall_comm_wait__get__timeout(r2) <= 0)
return FALSE;
}
- if ((r2->call == SIMCALL_COMM_ISEND || r2->call == SIMCALL_COMM_IRECV)
- && r1->call == SIMCALL_COMM_WAIT) {
-
- smx_rdv_t rdv =
- r2->call ==
- SIMCALL_COMM_ISEND ? simcall_comm_isend__get__rdv(r2) :
- simcall_comm_irecv__get__rdv(r2);
-
- if (rdv != synchro1->comm.rdv_cpy
- && simcall_comm_wait__get__timeout(r1) <= 0)
- return FALSE;
-
- if ((r2->issuer != synchro1->comm.src_proc)
- && (r2->issuer != synchro1->comm.dst_proc)
- && simcall_comm_wait__get__timeout(r1) <= 0)
- return FALSE;
-
- if ((r2->call == SIMCALL_COMM_ISEND)
- && (synchro1->comm.type == SIMIX_COMM_SEND)
- && (synchro1->comm.src_buff !=
- simcall_comm_isend__get__src_buff(r2))
- && simcall_comm_wait__get__timeout(r1) <= 0)
- return FALSE;
-
- if ((r2->call == SIMCALL_COMM_IRECV)
- && (synchro1->comm.type == SIMIX_COMM_RECEIVE)
- && (synchro1->comm.dst_buff !=
- simcall_comm_irecv__get__dst_buff(r2))
- && simcall_comm_wait__get__timeout(r1) <= 0)
- return FALSE;
- }
-
/* FIXME: the following rule assumes that the result of the
* isend/irecv call is not stored in a buffer used in the
* test call. */
&& r2->call == SIMCALL_COMM_TEST)
return FALSE; */
- /* FIXME: the following rule assumes that the result of the
- * isend/irecv call is not stored in a buffer used in the
- * test call.*/
- /*if( (r2->call == SIMCALL_COMM_ISEND || r2->call == SIMCALL_COMM_IRECV)
- && r1->call == SIMCALL_COMM_TEST)
- return FALSE; */
-
- if (r1->call == SIMCALL_COMM_ISEND && r2->call == SIMCALL_COMM_ISEND
- && simcall_comm_isend__get__rdv(r1) != simcall_comm_isend__get__rdv(r2))
- return FALSE;
-
- if (r1->call == SIMCALL_COMM_IRECV && r2->call == SIMCALL_COMM_IRECV
- && simcall_comm_irecv__get__rdv(r1) != simcall_comm_irecv__get__rdv(r2))
- return FALSE;
-
if (r1->call == SIMCALL_COMM_WAIT
&& (r2->call == SIMCALL_COMM_WAIT || r2->call == SIMCALL_COMM_TEST)
&& (synchro1->comm.src_proc == NULL || synchro1->comm.dst_proc == NULL))
return FALSE;
- if (r2->call == SIMCALL_COMM_WAIT
- && (r1->call == SIMCALL_COMM_WAIT || r1->call == SIMCALL_COMM_TEST)
- && (synchro2->comm.src_proc == NULL || synchro2->comm.dst_proc == NULL))
- return FALSE;
-
- if (r1->call == SIMCALL_COMM_WAIT && r2->call == SIMCALL_COMM_WAIT
- && synchro1->comm.src_buff == synchro2->comm.src_buff
- && synchro2->comm.dst_buff == synchro2->comm.dst_buff)
- return FALSE;
-
- if (r1->call == SIMCALL_COMM_WAIT && r2->call == SIMCALL_COMM_WAIT
- && synchro1->comm.src_buff != NULL
- && synchro1->comm.dst_buff != NULL
- && synchro2->comm.src_buff != NULL
- && synchro2->comm.dst_buff != NULL
- && synchro1->comm.dst_buff != synchro2->comm.src_buff
- && synchro1->comm.dst_buff != synchro2->comm.dst_buff
- && synchro2->comm.dst_buff != synchro1->comm.src_buff)
- return FALSE;
-
if (r1->call == SIMCALL_COMM_TEST &&
(simcall_comm_test__get__comm(r1) == NULL
|| synchro1->comm.src_buff == NULL
|| synchro1->comm.dst_buff == NULL))
return FALSE;
- if (r2->call == SIMCALL_COMM_TEST &&
- (simcall_comm_test__get__comm(r2) == NULL
- || synchro2->comm.src_buff == NULL
- || synchro2->comm.dst_buff == NULL))
- return FALSE;
-
if (r1->call == SIMCALL_COMM_TEST && r2->call == SIMCALL_COMM_WAIT
&& synchro1->comm.src_buff == synchro2->comm.src_buff
&& synchro1->comm.dst_buff == synchro2->comm.dst_buff)
return FALSE;
- if (r1->call == SIMCALL_COMM_WAIT && r2->call == SIMCALL_COMM_TEST
- && synchro1->comm.src_buff == synchro2->comm.src_buff
- && synchro1->comm.dst_buff == synchro2->comm.dst_buff)
- return FALSE;
-
if (r1->call == SIMCALL_COMM_WAIT && r2->call == SIMCALL_COMM_TEST
&& synchro1->comm.src_buff != NULL
&& synchro1->comm.dst_buff != NULL
&& synchro2->comm.dst_buff != synchro1->comm.src_buff)
return FALSE;
- if (r1->call == SIMCALL_COMM_TEST && r2->call == SIMCALL_COMM_WAIT
- && synchro1->comm.src_buff != NULL
- && synchro1->comm.dst_buff != NULL
- && synchro2->comm.src_buff != NULL
- && synchro2->comm.dst_buff != NULL
- && synchro1->comm.dst_buff != synchro2->comm.src_buff
- && synchro1->comm.dst_buff != synchro2->comm.dst_buff
- && synchro2->comm.dst_buff != synchro1->comm.src_buff)
+ return TRUE;
+}
+
+// Those are MC_state_get_internal_request(state)
+int MC_request_depend(smx_simcall_t r1, smx_simcall_t r2)
+{
+ if (mc_reduce_kind == e_mc_reduce_none)
+ return TRUE;
+
+ if (r1->issuer == r2->issuer)
return FALSE;
- return TRUE;
+ /* Wait with timeout transitions are not considered by the independance theorem, thus we consider them as dependant with all other transitions */
+ if ((r1->call == SIMCALL_COMM_WAIT && simcall_comm_wait__get__timeout(r1) > 0)
+ || (r2->call == SIMCALL_COMM_WAIT
+ && simcall_comm_wait__get__timeout(r2) > 0))
+ return TRUE;
+
+ if (r1->call != r2->call)
+ return MC_request_depend_asymmetric(r1, r2)
+ && MC_request_depend_asymmetric(r2, r1);
+
+ // Those are internal requests, we do not need indirection
+ // because those objects are copies:
+ smx_synchro_t synchro1 = MC_get_comm(r1);
+ smx_synchro_t synchro2 = MC_get_comm(r2);
+
+ switch(r1->call) {
+ case SIMCALL_COMM_ISEND:
+ return simcall_comm_isend__get__rdv(r1) == simcall_comm_isend__get__rdv(r2);
+ case SIMCALL_COMM_IRECV:
+ return simcall_comm_irecv__get__rdv(r1) == simcall_comm_irecv__get__rdv(r2);
+ case SIMCALL_COMM_WAIT:
+ if (synchro1->comm.src_buff == synchro2->comm.src_buff
+ && synchro1->comm.dst_buff == synchro2->comm.dst_buff)
+ return FALSE;
+ else if (synchro1->comm.src_buff != NULL
+ && synchro1->comm.dst_buff != NULL
+ && synchro2->comm.src_buff != NULL
+ && synchro2->comm.dst_buff != NULL
+ && synchro1->comm.dst_buff != synchro2->comm.src_buff
+ && synchro1->comm.dst_buff != synchro2->comm.dst_buff
+ && synchro2->comm.dst_buff != synchro1->comm.src_buff)
+ return FALSE;
+ else
+ return TRUE;
+ default:
+ return TRUE;
+ }
}
static char *pointer_to_string(void *pointer)
#include <simgrid_config.h>
-#include "../simix/smx_private.h"
+#include "src/simix/smx_private.h"
SG_BEGIN_DECL()
#include <assert.h>
-#include "mc_state.h"
-#include "mc_request.h"
-#include "mc_safety.h"
-#include "mc_private.h"
-#include "mc_record.h"
-#include "mc_smx.h"
-#include "mc_client.h"
-#include "mc_exit.h"
+#include "src/mc/mc_state.h"
+#include "src/mc/mc_request.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_record.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_client.h"
+#include "src/mc/mc_exit.h"
-#include "xbt/mmalloc/mmprivate.h"
+#include "src/xbt/mmalloc/mmprivate.h"
extern "C" {
XBT_DEBUG("Initial state");
/* Wait for requests (schedules processes) */
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
/* Get an enabled process and insert it in the interleave set of the initial state */
smx_process_t process;
/** \brief Model-check the application using a DFS exploration
* with DPOR (Dynamic Partial Order Reductions)
*/
-void MC_modelcheck_safety(void)
+int MC_modelcheck_safety(void)
{
MC_modelcheck_safety_init();
/* Answer the request */
MC_simcall_handle(req, value);
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
/* Create the new expanded state */
next_state = MC_state_new();
if(_sg_mc_termination && is_exploration_stack_state(next_state)){
MC_show_non_termination();
- exit(SIMGRID_EXIT_NON_TERMINATION);
+ return SIMGRID_MC_EXIT_NON_TERMINATION;
}
if ((visited_state = is_visited_state(next_state)) == NULL) {
/* Check for deadlocks */
if (MC_deadlock_check()) {
MC_show_deadlock(NULL);
- exit(SIMGRID_EXIT_DEADLOCK);
+ return SIMGRID_MC_EXIT_DEADLOCK;
}
/* Traverse the stack backwards until a state with a non empty interleave
XBT_INFO("No property violation found.");
MC_print_statistics(mc_stats);
- exit(SIMGRID_EXIT_SUCCESS);
+ return SIMGRID_MC_EXIT_SUCCESS;
}
static void MC_modelcheck_safety_init(void)
XBT_INFO("Check non progressive cycles");
else
XBT_INFO("Check a safety property");
- MC_wait_for_requests();
+ mc_model_checker->wait_for_requests();
XBT_DEBUG("Starting the safety algorithm");
#include <simgrid_config.h>
#include <xbt/base.h>
#include <xbt/dict.h>
-#include "mc_forward.hpp"
-#include "mc_state.h"
+#include "src/mc/mc_forward.hpp"
+#include "src/mc/mc_state.h"
SG_BEGIN_DECL()
extern XBT_PRIVATE e_mc_reduce_t mc_reduce_kind;
-void MC_modelcheck_safety(void);
+int MC_modelcheck_safety(void);
typedef struct XBT_PRIVATE s_mc_visited_state{
mc_snapshot_t system_state;
+++ /dev/null
-/* Copyright (c) 2015. 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 <memory>
-#include <system_error>
-
-#include <poll.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/socket.h>
-#include <sys/signalfd.h>
-
-#include <xbt/log.h>
-#include <xbt/automaton.h>
-#include <xbt/automaton.hpp>
-
-#include "ModelChecker.hpp"
-#include "mc_protocol.h"
-#include "mc_server.h"
-#include "mc_private.h"
-#include "mc_ignore.h"
-#include "mcer_ignore.h"
-#include "mc_exit.h"
-#include "mc/mc_liveness.h"
-
-using simgrid::mc::remote;
-
-extern "C" {
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_server, mc, "MC server logic");
-
-// HArdcoded index for now:
-#define SOCKET_FD_INDEX 0
-#define SIGNAL_FD_INDEX 1
-
-mc_server_t mc_server;
-
-s_mc_server::s_mc_server(pid_t pid, int socket)
-{
- this->pid = pid;
- this->socket = socket;
-}
-
-void s_mc_server::start()
-{
- /* Wait for the target process to initialize and exchange a HELLO messages
- * before trying to look at its memory map.
- */
- int res = MC_protocol_hello(socket);
- if (res != 0)
- throw std::system_error(res, std::system_category());
-
- // Block SIGCHLD (this will be handled with accept/signalfd):
- sigset_t set;
- sigemptyset(&set);
- sigaddset(&set, SIGCHLD);
- if (sigprocmask(SIG_BLOCK, &set, NULL) == -1)
- throw std::system_error(errno, std::system_category());
-
- sigset_t full_set;
- sigfillset(&full_set);
-
- // Prepare data for poll:
-
- struct pollfd* socket_pollfd = &fds[SOCKET_FD_INDEX];
- socket_pollfd->fd = socket;
- socket_pollfd->events = POLLIN;
- socket_pollfd->revents = 0;
-
- int signal_fd = signalfd(-1, &set, 0);
- if (signal_fd == -1)
- throw std::system_error(errno, std::system_category());
-
- struct pollfd* signalfd_pollfd = &fds[SIGNAL_FD_INDEX];
- signalfd_pollfd->fd = signal_fd;
- signalfd_pollfd->events = POLLIN;
- signalfd_pollfd->revents = 0;
-}
-
-void s_mc_server::shutdown()
-{
- XBT_DEBUG("Shuting down model-checker");
-
- simgrid::mc::Process* process = &mc_model_checker->process();
- int status = process->status();
- if (process->running()) {
- XBT_DEBUG("Killing process");
- kill(process->pid(), SIGTERM);
- if (waitpid(process->pid(), &status, 0) == -1)
- throw std::system_error(errno, std::system_category());
- // TODO, handle the case when the process does not want to die with a timeout
- process->terminate(status);
- }
-}
-
-void s_mc_server::exit()
-{
- // Finished:
- int status = mc_model_checker->process().status();
- if (WIFEXITED(status))
- ::exit(WEXITSTATUS(status));
- else if (WIFSIGNALED(status)) {
- // Try to uplicate the signal of the model-checked process.
- // This is a temporary hack so we don't try too hard.
- kill(mc_model_checker->process().pid(), WTERMSIG(status));
- abort();
- } else {
- xbt_die("Unexpected status from model-checked process");
- }
-}
-
-void s_mc_server::resume(simgrid::mc::Process* process)
-{
- int res = process->send_message(MC_MESSAGE_CONTINUE);
- if (res)
- throw std::system_error(res, std::system_category());
- process->cache_flags = (mc_process_cache_flags_t) 0;
-}
-
-static
-void throw_socket_error(int fd)
-{
- int error = 0;
- socklen_t errlen = sizeof(error);
- if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&error, &errlen) == -1)
- error = errno;
- throw std::system_error(error, std::system_category());
-}
-
-bool s_mc_server::handle_events()
-{
- char buffer[MC_MESSAGE_LENGTH];
- struct pollfd* socket_pollfd = &fds[SOCKET_FD_INDEX];
- struct pollfd* signalfd_pollfd = &fds[SIGNAL_FD_INDEX];
-
- while(poll(fds, 2, -1) == -1) {
- switch(errno) {
- case EINTR:
- continue;
- default:
- throw std::system_error(errno, std::system_category());
- }
- }
-
- if (socket_pollfd->revents) {
- if (socket_pollfd->revents & POLLIN) {
-
- ssize_t size = MC_receive_message(socket_pollfd->fd, buffer, sizeof(buffer), MSG_DONTWAIT);
- if (size == -1 && errno != EAGAIN)
- throw std::system_error(errno, std::system_category());
-
- s_mc_message_t base_message;
- if (size < (ssize_t) sizeof(base_message))
- xbt_die("Broken message");
- memcpy(&base_message, buffer, sizeof(base_message));
-
- switch(base_message.type) {
-
- case MC_MESSAGE_IGNORE_HEAP:
- {
- s_mc_ignore_heap_message_t message;
- if (size != sizeof(message))
- xbt_die("Broken messsage");
- memcpy(&message, buffer, sizeof(message));
- mc_heap_ignore_region_t region = xbt_new(s_mc_heap_ignore_region_t, 1);
- *region = message.region;
- MC_heap_region_ignore_insert(region);
- break;
- }
-
- case MC_MESSAGE_UNIGNORE_HEAP:
- {
- s_mc_ignore_memory_message_t message;
- if (size != sizeof(message))
- xbt_die("Broken messsage");
- memcpy(&message, buffer, sizeof(message));
- MC_heap_region_ignore_remove(
- (void *)(std::uintptr_t) message.addr, message.size);
- break;
- }
-
- case MC_MESSAGE_IGNORE_MEMORY:
- {
- s_mc_ignore_memory_message_t message;
- if (size != sizeof(message))
- xbt_die("Broken messsage");
- memcpy(&message, buffer, sizeof(message));
- mc_model_checker->process().ignore_region(
- message.addr, message.size);
- break;
- }
-
- case MC_MESSAGE_STACK_REGION:
- {
- s_mc_stack_region_message_t message;
- if (size != sizeof(message))
- xbt_die("Broken messsage");
- memcpy(&message, buffer, sizeof(message));
- stack_region_t stack_region = xbt_new(s_stack_region_t, 1);
- *stack_region = message.stack_region;
- MC_stack_area_add(stack_region);
- }
- break;
-
- case MC_MESSAGE_REGISTER_SYMBOL:
- {
- s_mc_register_symbol_message_t message;
- if (size != sizeof(message))
- xbt_die("Broken message");
- memcpy(&message, buffer, sizeof(message));
- if (message.callback)
- xbt_die("Support for client-side function proposition is not implemented.");
- XBT_DEBUG("Received symbol: %s", message.name);
-
- if (_mc_property_automaton == NULL)
- _mc_property_automaton = xbt_automaton_new();
-
- simgrid::mc::Process* process = &mc_model_checker->process();
- simgrid::mc::remote_ptr<int> address
- = simgrid::mc::remote((int*) message.data);
- simgrid::xbt::add_proposition(_mc_property_automaton,
- message.name,
- [process, address]() { return process->read(address); }
- );
-
- break;
- }
-
- case MC_MESSAGE_WAITING:
- return false;
-
- case MC_MESSAGE_ASSERTION_FAILED:
- MC_report_assertion_error();
- ::exit(SIMGRID_EXIT_SAFETY);
- break;
-
- default:
- xbt_die("Unexpected message from model-checked application");
-
- }
- return true;
- }
- if (socket_pollfd->revents & POLLERR) {
- throw_socket_error(socket_pollfd->fd);
- }
- if (socket_pollfd->revents & POLLHUP)
- xbt_die("Socket hang up?");
- }
-
- if (signalfd_pollfd->revents) {
- if (signalfd_pollfd->revents & POLLIN) {
- this->handle_signals();
- return true;
- }
- if (signalfd_pollfd->revents & POLLERR) {
- throw_socket_error(signalfd_pollfd->fd);
- }
- if (signalfd_pollfd->revents & POLLHUP)
- xbt_die("Signalfd hang up?");
- }
-
- return true;
-}
-
-void s_mc_server::loop()
-{
- while (mc_model_checker->process().running())
- this->handle_events();
-}
-
-void s_mc_server::handle_signals()
-{
- struct signalfd_siginfo info;
- struct pollfd* signalfd_pollfd = &fds[SIGNAL_FD_INDEX];
- while (1) {
- ssize_t size = read(signalfd_pollfd->fd, &info, sizeof(info));
- if (size == -1) {
- if (errno == EINTR)
- continue;
- else
- throw std::system_error(errno, std::system_category());
- } else if (size != sizeof(info))
- return throw std::runtime_error(
- "Bad communication with model-checked application");
- else
- break;
- }
- this->on_signal(&info);
-}
-
-void s_mc_server::handle_waitpid()
-{
- XBT_DEBUG("Check for wait event");
- int status;
- pid_t pid;
- while ((pid = waitpid(-1, &status, WNOHANG)) != 0) {
- if (pid == -1) {
- if (errno == ECHILD) {
- // No more children:
- if (mc_model_checker->process().running())
- xbt_die("Inconsistent state");
- else
- break;
- } else {
- XBT_ERROR("Could not wait for pid");
- throw std::system_error(errno, std::system_category());
- }
- }
-
- if (pid == mc_model_checker->process().pid()) {
- if (WIFEXITED(status) || WIFSIGNALED(status)) {
- XBT_DEBUG("Child process is over");
- mc_model_checker->process().terminate(status);
- }
- }
- }
-}
-
-void s_mc_server::on_signal(const struct signalfd_siginfo* info)
-{
- switch(info->ssi_signo) {
- case SIGCHLD:
- this->handle_waitpid();
- break;
- default:
- break;
- }
-}
-
-void MC_server_wait_client(simgrid::mc::Process* process)
-{
- mc_server->resume(process);
- while (mc_model_checker->process().running()) {
- if (!mc_server->handle_events())
- return;
- }
-}
-
-void MC_server_simcall_handle(simgrid::mc::Process* process, unsigned long pid, int value)
-{
- s_mc_simcall_handle_message m;
- memset(&m, 0, sizeof(m));
- m.type = MC_MESSAGE_SIMCALL_HANDLE;
- m.pid = pid;
- m.value = value;
- mc_model_checker->process().send_message(m);
- process->cache_flags = (mc_process_cache_flags_t) 0;
- while (mc_model_checker->process().running()) {
- if (!mc_server->handle_events())
- return;
- }
-}
-
-void MC_server_loop(mc_server_t server)
-{
- server->loop();
-}
-
-}
+++ /dev/null
-/* Copyright (c) 2015. 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 SIMGRID_MC_SERVER_H
-#define SIMGRID_MC_SERVER_H
-
-#include <poll.h>
-
-#include <stdbool.h>
-
-#include <sys/signalfd.h>
-#include <sys/types.h>
-
-#include <xbt/misc.h>
-#include <xbt/base.h>
-
-#include "mc/Process.hpp"
-#include "mc_exit.h"
-
-SG_BEGIN_DECL()
-
-#define MC_SERVER_ERROR SIMGRID_ERROR
-
-typedef struct s_mc_server s_mc_server_t, *mc_server_t;
-
-extern mc_server_t mc_server;
-
-XBT_PRIVATE void MC_server_wait_client(simgrid::mc::Process* process);
-XBT_PRIVATE void MC_server_simcall_handle(simgrid::mc::Process* process, unsigned long pid, int value);
-
-XBT_PRIVATE void MC_server_loop(mc_server_t server);
-
-SG_END_DECL()
-
-#ifdef __cplusplus
-
-struct s_mc_server {
-private:
- pid_t pid;
- int socket;
- struct pollfd fds[2];
-public:
- s_mc_server(pid_t pid, int socket);
- void start();
- void shutdown();
- void exit();
- void resume(simgrid::mc::Process* process);
- void loop();
- bool handle_events();
-protected:
- void handle_signals();
- void handle_waitpid();
- void on_signal(const struct signalfd_siginfo* info);
-};
-
-#endif
-
-#endif
#include <xbt/log.h>
-#include "simix/smx_private.h"
+#include "src/simix/smx_private.h"
-#include "mc_smx.h"
+#include "src/mc/mc_smx.h"
#include "ModelChecker.hpp"
using simgrid::mc::remote;
#include <xbt/log.h>
#include <simgrid/simix.h>
-#include "smpi/private.h"
+#include "src/smpi/private.h"
-#include "mc/Process.hpp"
-#include "mc_protocol.h"
+#include "src/mc/Process.hpp"
+#include "src/mc/mc_protocol.h"
/** @file
* @brief (Cross-process, MCer/MCed) Access to SMX structures
#include <stdbool.h>
-#include "internal_config.h"
-#include "smpi/private.h"
+#include "src/internal_config.h"
+#include "src/smpi/private.h"
-#include "mc_snapshot.h"
-#include "mc_private.h"
-#include "mc_mmu.h"
-#include "PageStore.hpp"
+#include "src/mc/mc_snapshot.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_mmu.h"
+#include "src/mc/PageStore.hpp"
extern "C" {
}
}
else
- return this->read_bytes(buffer, size, address, process_index, mode);
+ return this->process()->read_bytes(
+ buffer, size, address, process_index, mode);
}
}
#include <memory>
#include <simgrid_config.h>
-#include "../xbt/mmalloc/mmprivate.h"
+#include "src/xbt/mmalloc/mmprivate.h"
#include <xbt/asserts.h>
#include <xbt/dynar.h>
#include <xbt/base.h>
-#include "mc_forward.hpp"
-#include "ModelChecker.hpp"
-#include "PageStore.hpp"
-#include "mc_mmalloc.h"
-#include "mc/AddressSpace.hpp"
-#include "mc_unw.h"
-#include "RegionSnapshot.hpp"
+#include "src/mc/mc_forward.hpp"
+#include "src/mc/ModelChecker.hpp"
+#include "src/mc/PageStore.hpp"
+#include "src/mc/mc_mmalloc.h"
+#include "src/mc/AddressSpace.hpp"
+#include "src/mc/mc_unw.h"
+#include "src/mc/RegionSnapshot.hpp"
SG_BEGIN_DECL()
ReadMode mode = Normal) const override;
public: // To be private
int num_state;
- size_t heap_bytes_used;
+ std::size_t heap_bytes_used;
std::vector<std::unique_ptr<s_mc_mem_region_t>> snapshot_regions;
std::set<pid_t> enabled_processes;
int privatization_index;
- std::vector<size_t> stack_sizes;
+ std::vector<std::size_t> stack_sizes;
std::vector<s_mc_snapshot_stack_t> stacks;
- std::vector<s_mc_heap_ignore_region_t> to_ignore;
- uint64_t hash;
+ std::vector<simgrid::mc::IgnoredHeapRegion> to_ignore;
+ std::uint64_t hash;
std::vector<s_mc_snapshot_ignored_data> ignored_data;
std::vector<s_fd_infos_t> current_fds;
};
XBT_PRIVATE void mc_restore_page_snapshot_region(
simgrid::mc::Process* process,
- void* start_addr, simgrid::mc::PerPageCopy const& pagenos);
+ void* start_addr, simgrid::mc::ChunkedData const& pagenos);
const void* MC_region_read_fragmented(
- mc_mem_region_t region, void* target, const void* addr, size_t size);
+ mc_mem_region_t region, void* target, const void* addr, std::size_t size);
int MC_snapshot_region_memcmp(
const void* addr1, mc_mem_region_t region1,
- const void* addr2, mc_mem_region_t region2, size_t size);
+ const void* addr2, mc_mem_region_t region2, std::size_t size);
XBT_PRIVATE int MC_snapshot_memcmp(
const void* addr1, mc_snapshot_t snapshot1,
- const void* addr2, mc_snapshot_t snapshot2, int process_index, size_t size);
+ const void* addr2, mc_snapshot_t snapshot2, int process_index, std::size_t size);
static inline __attribute__ ((always_inline))
const void* mc_snapshot_get_heap_end(mc_snapshot_t snapshot)
* @return Pointer where the data is located (target buffer of original location)
*/
static inline __attribute__((always_inline))
-const void* MC_region_read(mc_mem_region_t region, void* target, const void* addr, size_t size)
+const void* MC_region_read(
+ mc_mem_region_t region, void* target, const void* addr, std::size_t size)
{
xbt_assert(region);
- uintptr_t offset = (uintptr_t) addr - (uintptr_t) region->start().address();
+ std::uintptr_t offset =
+ (std::uintptr_t) addr - (std::uintptr_t) region->start().address();
xbt_assert(region->contain(simgrid::mc::remote(addr)),
"Trying to read out of the region boundary.");
SG_END_DECL()
XBT_PRIVATE int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2,
- std::vector<s_mc_heap_ignore_region_t>* i1,
- std::vector<s_mc_heap_ignore_region_t>* i2);
+ std::vector<simgrid::mc::IgnoredHeapRegion>* i1,
+ std::vector<simgrid::mc::IgnoredHeapRegion>* i2);
#endif
#include <assert.h>
-#include "../simix/smx_private.h"
+#include "src/simix/smx_private.h"
#include "xbt/fifo.h"
-#include "mc_state.h"
-#include "mc_request.h"
-#include "mc_private.h"
-#include "mc_comm_pattern.h"
-#include "mc_smx.h"
-#include "mc_xbt.hpp"
+#include "src/mc/mc_state.h"
+#include "src/mc/mc_request.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_comm_pattern.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_xbt.hpp"
using simgrid::mc::remote;
#include <xbt/base.h>
#include <simgrid_config.h>
-#include "../simix/smx_private.h"
-#include "mc_snapshot.h"
+#include "src/simix/smx_private.h"
+#include "src/mc/mc_snapshot.h"
SG_BEGIN_DECL()
#include <libunwind.h>
-#include "mc_object_info.h"
-#include "mc/Process.hpp"
-#include "mc_unw.h"
-#include "mc/Frame.hpp"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/Process.hpp"
+#include "src/mc/mc_unw.h"
+#include "src/mc/Frame.hpp"
using simgrid::mc::remote;
#include <xbt/base.h>
-#include "mc/Process.hpp"
+#include "src/mc/Process.hpp"
SG_BEGIN_DECL()
#include <libunwind.h>
#include <libunwind-ptrace.h>
-#include "mc_unw.h"
+#include "src/mc/mc_unw.h"
extern "C" {
#include <unistd.h>
#include <sys/wait.h>
-#include "mc_comm_pattern.h"
-#include "mc_safety.h"
-#include "mc_liveness.h"
-#include "mc_private.h"
-#include "mc/Process.hpp"
-#include "mc_smx.h"
+#include "src/mc/mc_comm_pattern.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_liveness.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/Process.hpp"
+#include "src/mc/mc_smx.h"
extern "C" {
#include <xbt/sysdep.h>
-#include "mc/AddressSpace.hpp"
-#include "mc_xbt.hpp"
+#include "src/mc/AddressSpace.hpp"
+#include "src/mc/mc_xbt.hpp"
namespace simgrid {
namespace mc {
#include <xbt/base.h>
-#include "mc/AddressSpace.hpp"
+#include "src/mc/AddressSpace.hpp"
namespace simgrid {
namespace mc {
+++ /dev/null
-/* Copyright (c) 2008-2015. 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/base.h>
-
-#include "internal_config.h"
-#include "mc_object_info.h"
-#include "mc/mc_private.h"
-#include "smpi/private.h"
-#include "mc/mc_snapshot.h"
-#include "mc/mc_ignore.h"
-#include "mc/mc_protocol.h"
-#include "mc/mc_client.h"
-
-#include "mc/Frame.hpp"
-#include "mc/Variable.hpp"
-#include "mc/ObjectInformation.hpp"
-
-extern "C" {
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mcer_ignore, mc,
- "Logging specific to MC ignore mechanism");
-
-// ***** Ignore heap chunks
-
-extern XBT_PRIVATE xbt_dynar_t mc_heap_comparison_ignore;
-
-static void heap_ignore_region_free(mc_heap_ignore_region_t r)
-{
- xbt_free(r);
-}
-
-static void heap_ignore_region_free_voidp(void *r)
-{
- heap_ignore_region_free((mc_heap_ignore_region_t) * (void **) r);
-}
-
-
-XBT_PRIVATE void MC_heap_region_ignore_insert(mc_heap_ignore_region_t region)
-{
- if (mc_heap_comparison_ignore == NULL) {
- mc_heap_comparison_ignore =
- xbt_dynar_new(sizeof(mc_heap_ignore_region_t),
- heap_ignore_region_free_voidp);
- xbt_dynar_push(mc_heap_comparison_ignore, ®ion);
- return;
- }
-
- unsigned int cursor = 0;
- mc_heap_ignore_region_t current_region = NULL;
- int start = 0;
- int end = xbt_dynar_length(mc_heap_comparison_ignore) - 1;
-
- // Find the position where we want to insert the mc_heap_ignore_region_t:
- while (start <= end) {
- cursor = (start + end) / 2;
- current_region =
- (mc_heap_ignore_region_t) xbt_dynar_get_as(mc_heap_comparison_ignore,
- cursor,
- mc_heap_ignore_region_t);
- if (current_region->address == region->address) {
- heap_ignore_region_free(region);
- return;
- } else if (current_region->address < region->address) {
- start = cursor + 1;
- } else {
- end = cursor - 1;
- }
- }
-
- // Insert it mc_heap_ignore_region_t:
- if (current_region->address < region->address)
- xbt_dynar_insert_at(mc_heap_comparison_ignore, cursor + 1, ®ion);
- else
- xbt_dynar_insert_at(mc_heap_comparison_ignore, cursor, ®ion);
-}
-
-XBT_PRIVATE void MC_heap_region_ignore_remove(void *address, size_t size)
-{
- unsigned int cursor = 0;
- int start = 0;
- int end = xbt_dynar_length(mc_heap_comparison_ignore) - 1;
- mc_heap_ignore_region_t region;
- int ignore_found = 0;
-
- while (start <= end) {
- cursor = (start + end) / 2;
- region =
- (mc_heap_ignore_region_t) xbt_dynar_get_as(mc_heap_comparison_ignore,
- cursor,
- mc_heap_ignore_region_t);
- if (region->address == address) {
- ignore_found = 1;
- break;
- } else if (region->address < address) {
- start = cursor + 1;
- } else {
- if ((char *) region->address <= ((char *) address + size)) {
- ignore_found = 1;
- break;
- } else {
- end = cursor - 1;
- }
- }
- }
-
- if (ignore_found == 1) {
- xbt_dynar_remove_at(mc_heap_comparison_ignore, cursor, NULL);
- MC_remove_ignore_heap(address, size);
- }
-}
-
-// ***** Ignore global variables
-
-XBT_PRIVATE void MCer_ignore_global_variable(const char *name)
-{
- simgrid::mc::Process* process = &mc_model_checker->process();
- xbt_assert(!process->object_infos.empty(), "MC subsystem not initialized");
-
- for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info : process->object_infos) {
-
- // Binary search:
- int start = 0;
- int end = info->global_variables.size() - 1;
- while (start <= end) {
- unsigned int cursor = (start + end) / 2;
- simgrid::mc::Variable* current_var = &info->global_variables[cursor];
- int cmp = current_var->name.compare(name);
- if (cmp == 0) {
- info->global_variables.erase(
- info->global_variables.begin() + cursor);
- start = 0;
- end = info->global_variables.size() - 1;
- } else if (cmp < 0) {
- start = cursor + 1;
- } else {
- end = cursor - 1;
- }
- }
- }
-}
-
-// ***** Ignore local variables
-
-static void mc_ignore_local_variable_in_scope(const char *var_name,
- const char *subprogram_name,
- simgrid::mc::Frame* subprogram,
- simgrid::mc::Frame* scope);
-static void MC_ignore_local_variable_in_object(const char *var_name,
- const char *subprogram_name,
- simgrid::mc::ObjectInformation* info);
-
-void MC_ignore_local_variable(const char *var_name, const char *frame_name)
-{
- simgrid::mc::Process* process = &mc_model_checker->process();
- if (strcmp(frame_name, "*") == 0)
- frame_name = NULL;
-
- for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info : process->object_infos)
- MC_ignore_local_variable_in_object(var_name, frame_name, info.get());
-}
-
-static void MC_ignore_local_variable_in_object(const char *var_name,
- const char *subprogram_name,
- simgrid::mc::ObjectInformation* info)
-{
- for (auto& entry : info->subprograms)
- mc_ignore_local_variable_in_scope(
- var_name, subprogram_name, &entry.second, &entry.second);
-}
-
-/** \brief Ignore a local variable in a scope
- *
- * Ignore all instances of variables with a given name in
- * any (possibly inlined) subprogram with a given namespaced
- * name.
- *
- * \param var_name Name of the local variable (or parameter to ignore)
- * \param subprogram_name Name of the subprogram fo ignore (NULL for any)
- * \param subprogram (possibly inlined) Subprogram of the scope
- * \param scope Current scope
- */
-static void mc_ignore_local_variable_in_scope(const char *var_name,
- const char *subprogram_name,
- simgrid::mc::Frame* subprogram,
- simgrid::mc::Frame* scope)
-{
- // Processing of direct variables:
-
- // If the current subprogram matches the given name:
- if (subprogram_name == nullptr ||
- (!subprogram->name.empty()
- && subprogram->name == subprogram_name)) {
-
- // Try to find the variable and remove it:
- int start = 0;
- int end = scope->variables.size() - 1;
-
- // Dichotomic search:
- while (start <= end) {
- int cursor = (start + end) / 2;
- simgrid::mc::Variable* current_var = &scope->variables[cursor];
-
- int compare = current_var->name.compare(var_name);
- if (compare == 0) {
- // Variable found, remove it:
- scope->variables.erase(scope->variables.begin() + cursor);
-
- // and start again:
- start = 0;
- end = scope->variables.size() - 1;
- } else if (compare < 0) {
- start = cursor + 1;
- } else {
- end = cursor - 1;
- }
- }
-
- }
- // And recursive processing in nested scopes:
- for (simgrid::mc::Frame& nested_scope : scope->scopes) {
- // The new scope may be an inlined subroutine, in this case we want to use its
- // namespaced name in recursive calls:
- simgrid::mc::Frame* nested_subprogram =
- nested_scope.tag ==
- DW_TAG_inlined_subroutine ? &nested_scope : subprogram;
-
- mc_ignore_local_variable_in_scope(var_name, subprogram_name,
- nested_subprogram, &nested_scope);
- }
-}
-
-extern XBT_PRIVATE xbt_dynar_t stacks_areas;
-
-XBT_PRIVATE void MC_stack_area_add(stack_region_t stack_area)
-{
- if (stacks_areas == NULL)
- stacks_areas = xbt_dynar_new(sizeof(stack_region_t), NULL);
- xbt_dynar_push(stacks_areas, &stack_area);
-}
-
-}
+++ /dev/null
-/* Copyright (c) 2015. 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 SIMGRID_MCER_IGNORE_H
-#define SIMGRID_MCER_IGNORE_H
-
-#include <xbt/dynar.h>
-
-#include "mc/datatypes.h"
-#include "mc/Process.hpp"
-
-#include "xbt/misc.h" /* SG_BEGIN_DECL */
-
-SG_BEGIN_DECL();
-
-XBT_PRIVATE void MCer_ignore_global_variable(const char *var_name);
-XBT_PRIVATE void MC_heap_region_ignore_insert(mc_heap_ignore_region_t region);
-XBT_PRIVATE void MC_heap_region_ignore_remove(void *address, size_t size);
-
-SG_END_DECL();
-
-#endif
\ No newline at end of file
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
+#include <sys/ptrace.h>
#ifdef __linux__
#include <sys/prctl.h>
#include <xbt/log.h>
#include "simgrid/sg_config.h"
-#include "xbt_modinter.h"
+#include "src/xbt_modinter.h"
-#include "mc_base.h"
-#include "mc_private.h"
-#include "mc_protocol.h"
-#include "mc_server.h"
-#include "mc_safety.h"
-#include "mc_comm_pattern.h"
-#include "mc_liveness.h"
+#include "src/mc/mc_base.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_comm_pattern.h"
+#include "src/mc/mc_liveness.h"
+#include "src/mc/mc_exit.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_main, mc, "Entry point for simgrid-mc");
// Make sure we do not outlive our parent:
if (prctl(PR_SET_PDEATHSIG, SIGHUP) != 0) {
std::perror("simgrid-mc");
- return MC_SERVER_ERROR;
+ return SIMGRID_MC_EXIT_ERROR;
}
#endif
int fdflags = fcntl(socket, F_GETFD, 0);
if (fdflags == -1) {
std::perror("simgrid-mc");
- return MC_SERVER_ERROR;
+ return SIMGRID_MC_EXIT_ERROR;
}
if (fcntl(socket, F_SETFD, fdflags & ~FD_CLOEXEC) == -1) {
std::perror("simgrid-mc");
- return MC_SERVER_ERROR;
+ return SIMGRID_MC_EXIT_ERROR;
}
XBT_DEBUG("CLOEXEC removed on socket %i", socket);
char buffer[64];
res = std::snprintf(buffer, sizeof(buffer), "%i", socket);
if ((size_t) res >= sizeof(buffer) || res == -1)
- return MC_SERVER_ERROR;
+ return SIMGRID_MC_EXIT_ERROR;
setenv(MC_ENV_SOCKET_FD, buffer, 1);
execvp(argv[1], argv+1);
- std::perror("simgrid-mc");
- return MC_SERVER_ERROR;
+ XBT_ERROR("Could not execute the child process");
+ return SIMGRID_MC_EXIT_ERROR;
}
static int do_parent(int socket, pid_t child)
{
XBT_DEBUG("Inside the parent process");
- if (mc_server)
+ if (mc_model_checker)
xbt_die("MC server already present");
try {
mc_mode = MC_MODE_SERVER;
- mc_server = new s_mc_server(child, socket);
- mc_server->start();
- MC_init_model_checker(child, socket);
+ mc_model_checker = new simgrid::mc::ModelChecker(child, socket);
+ mc_model_checker->start();
+ int res = 0;
if (_sg_mc_comms_determinism || _sg_mc_send_determinism)
- MC_modelcheck_comm_determinism();
+ res = MC_modelcheck_comm_determinism();
else if (!_sg_mc_property_file || _sg_mc_property_file[0] == '\0')
- MC_modelcheck_safety();
+ res = MC_modelcheck_safety();
else
- MC_modelcheck_liveness();
- mc_server->shutdown();
- mc_server->exit();
+ res = MC_modelcheck_liveness();
+ mc_model_checker->shutdown();
+ return res;
}
catch(std::exception& e) {
XBT_ERROR("Exception: %s", e.what());
+ return SIMGRID_MC_EXIT_ERROR;
}
- exit(MC_SERVER_ERROR);
}
static char** argvdup(int argc, char** argv)
res = socketpair(AF_LOCAL, SOCK_DGRAM | SOCK_CLOEXEC, 0, sockets);
if (res == -1) {
perror("simgrid-mc");
- return MC_SERVER_ERROR;
+ return SIMGRID_MC_EXIT_ERROR;
}
XBT_DEBUG("Created socketpair");
pid_t pid = fork();
if (pid < 0) {
perror("simgrid-mc");
- return MC_SERVER_ERROR;
+ return SIMGRID_MC_EXIT_ERROR;
} else if (pid == 0) {
close(sockets[1]);
- return do_child(sockets[0], argv);
+ int res = do_child(sockets[0], argv);
+ XBT_DEBUG("Error in the child process creation");
+ return res;
} else {
close(sockets[0]);
return do_parent(sockets[1], pid);
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "msg_private.h"
-#include "simix/smx_process_private.h"
+#include "src/simix/smx_process_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_msg_process, instr, "MSG process");
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "msg_private.h"
#include "mc/mc.h"
void **data;
char *name;
- /* Initialize MSG hosts */
- xbt_lib_foreach(host_lib, cursor, name, data) {
- __MSG_host_create(xbt_dict_cursor_get_elm(cursor));
- }
-
/* Initialize MSG storages */
xbt_lib_foreach(storage_lib, cursor, name, data) {
if(data[SIMIX_STORAGE_LEVEL])
const char *MSG_environment_as_get_property_value(msg_as_t as, const char *name)
{
- xbt_dict_t dict = xbt_lib_get_or_null(as_router_lib, MSG_environment_as_get_name(as), ROUTING_PROP_ASR_LEVEL);
+ xbt_dict_t dict = (xbt_dict_t) xbt_lib_get_or_null(as_router_lib, MSG_environment_as_get_name(as), ROUTING_PROP_ASR_LEVEL);
if (dict==NULL)
return NULL;
- return xbt_dict_get_or_null(dict, name);
+ return (char*) xbt_dict_get_or_null(dict, name);
}
const char *MSG_environment_as_get_model(msg_as_t as) {
/* 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 "simgrid/msg.h"
#include "instr/instr_interface.h"
#include "msg_private.h"
#include "msg_mailbox.h"
#include "xbt/ex.h" /* ex_backtrace_display */
#include "xbt/replay.h"
#include "simgrid/sg_config.h" /* Configuration mechanism of SimGrid */
-
+#include "src/surf/callbacks.h"
XBT_LOG_NEW_CATEGORY(msg, "All MSG categories");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_kernel, msg,
msg_global->debug_multiple_use = xbt_cfg_get_boolean(_sg_cfg_set, name);
}
+static void MSG_host_create_(sg_host_t host)
+{
+ __MSG_host_create(host);
+}
+
/**
* \ingroup msg_simulation
* \brief Initialize MSG with less verifications
SIMIX_function_register_process_cleanup(MSG_process_cleanup_from_SIMIX);
sg_platf_postparse_add_cb(MSG_post_create_environment);
+ surf_on_host_created(MSG_host_create_);
}
if(MC_is_active()){
/** \ingroup msg_simulation
* \brief A clock (in second).
*/
-XBT_INLINE double MSG_get_clock(void)
+double MSG_get_clock(void)
{
return SIMIX_get_clock();
}
xbt_ex_t e;
simdata_task_t simdata = task->simdata;
msg_process_t self = SIMIX_process_self();
- simdata_process_t p_simdata = SIMIX_process_self_get_data(self);
+ simdata_process_t p_simdata = (simdata_process_t) SIMIX_process_self_get_data(self);
e_smx_state_t comp_state;
msg_error_t status = MSG_OK;
if (t_simdata->isused != 0) {
if (msg_global->debug_multiple_use){
XBT_ERROR("This task is already used in there:");
- xbt_backtrace_display(t_simdata->isused);
+ xbt_backtrace_display((xbt_ex_t*) t_simdata->isused);
XBT_ERROR("And you try to reuse it from here:");
xbt_backtrace_display_current();
} else {
// notify the user callback if any
if (msg_global->task_copy_callback) {
- msg_task_t task = buff;
+ msg_task_t task = (msg_task_t) buff;
msg_global->task_copy_callback(task,
simcall_comm_get_src_proc(comm), simcall_comm_get_dst_proc(comm));
}
*/
const char *MSG_as_router_get_property_value(const char* asr, const char *name)
{
- return xbt_dict_get_or_null(MSG_as_router_get_properties(asr), name);
+ return (char*) xbt_dict_get_or_null(
+ MSG_as_router_get_properties(asr), name);
}
/**
/* 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 "msg/msg_private.h"
-#include "msg/msg_mailbox.h"
+#include "src/msg/msg_private.h"
+#include "src/msg/msg_mailbox.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "simgrid/simix.h"
return (msg_host_t) xbt_lib_get_elm_or_null(host_lib,name);
}
-static const char *msg_data = "data";
/** \ingroup m_host_management
*
* \brief Set the user data of a #msg_host_t.
* This functions checks whether some data has already been associated to \a host
or not and attach \a data to \a host if it is possible.
*/
-msg_error_t MSG_host_set_data(msg_host_t host, void *data)
-{
- MSG_host_set_property_value(host, msg_data, data, NULL);
+msg_error_t MSG_host_set_data(msg_host_t host, void *data) {
+ sg_host_user_set(host, data);
return MSG_OK;
}
* This functions checks whether \a host is a valid pointer or not and return
the user data associated to \a host if it is possible.
*/
-void *MSG_host_get_data(msg_host_t host)
-{
- return (void *)MSG_host_get_property_value(host, msg_data);
+void *MSG_host_get_data(msg_host_t host) {
+ return sg_host_user(host);
}
/** \ingroup m_host_management
{
xbt_assert((h != NULL), "Invalid parameters");
- return (simcall_host_get_speed(h));
+ return sg_host_get_speed(h);
}
{
xbt_assert((host != NULL), "Invalid parameters");
- return (simcall_host_get_core(host));
+ return sg_host_get_core(host);
}
/** \ingroup m_host_management
*/
const char *MSG_host_get_property_value(msg_host_t host, const char *name)
{
- return xbt_dict_get_or_null(MSG_host_get_properties(host), name);
+ return (const char*) xbt_dict_get_or_null(MSG_host_get_properties(host), name);
}
/** \ingroup m_host_management
int MSG_host_is_on(msg_host_t host)
{
xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
- return (simcall_host_get_state(host));
+ return sg_host_get_state(host);
}
/** @ingroup m_host_management
*
int MSG_host_is_off(msg_host_t host)
{
xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
- return !(simcall_host_get_state(host));
+ return !(sg_host_get_state(host));
}
/** \ingroup m_host_management
* \param host host to test
*/
int MSG_host_get_nb_pstates(msg_host_t host) {
-
- xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
- return (simcall_host_get_nb_pstates(host));
+ return sg_host_get_nb_pstates(host);
}
/** \ingroup m_host_management
* \param host host to test
*/
int MSG_host_get_pstate(msg_host_t host) {
- return simcall_host_get_pstate(host);
+ return sg_host_get_pstate(host);
}
/** \ingroup m_host_management
*/
double MSG_host_get_consumed_energy(msg_host_t host) {
xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
- return simcall_host_get_consumed_energy(host);
+ return sg_host_get_consumed_energy(host);
}
/** \ingroup m_host_management
* \brief Returns the amount of watt dissipated at the given pstate when the host is idling
/* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */
XBT_DEBUG("File is on %s remote host, initiate data transfer of %llu bytes.", storage_priv_src->hostname, read_size);
msg_host_t *m_host_list = NULL;
- m_host_list = calloc(2, sizeof(msg_host_t));
+ m_host_list = (msg_host_t*) calloc(2, sizeof(msg_host_t));
m_host_list[0] = MSG_host_self();
m_host_list[1] = attached_host;
/* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */
XBT_DEBUG("File is on %s remote host, initiate data transfer of %llu bytes.", storage_priv_src->hostname, size);
msg_host_t *m_host_list = NULL;
- m_host_list = calloc(2, sizeof(msg_host_t));
+ m_host_list = (msg_host_t*) calloc(2, sizeof(msg_host_t));
m_host_list[0] = MSG_host_self();
m_host_list[1] = attached_host;
msg_storage_priv_t storage_priv_src = MSG_storage_priv(storage_src);
msg_host_t attached_host = MSG_host_by_name(storage_priv_src->hostname);
int res = simcall_file_unlink(file_priv->simdata->smx_file, attached_host);
- return res;
+ return (msg_error_t) res;
}
/** \ingroup msg_file_management
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);
+ return (msg_error_t) simcall_file_seek(priv->simdata->smx_file, offset, origin);
}
/**
msg_error_t MSG_file_move (msg_file_t fd, const char* fullpath)
{
msg_file_priv_t priv = MSG_file_priv(fd);
- return simcall_file_move(priv->simdata->smx_file, fullpath);
+ return (msg_error_t) simcall_file_move(priv->simdata->smx_file, fullpath);
}
/**
XBT_DEBUG("Initiate data transfer of %llu bytes between %s and %s.", read_size, storage_priv_src->hostname, host_name_dest);
msg_host_t *m_host_list = NULL;
- m_host_list = calloc(2, sizeof(msg_host_t));
+ m_host_list = (msg_host_t*) calloc(2, sizeof(msg_host_t));
m_host_list[0] = attached_host;
m_host_list[1] = host_dest;
if (transfer == MSG_TASK_CANCELED)
XBT_WARN("Transfer error, task has been canceled!");
- return -1;
+ return (msg_error_t) -1;
}
/* Create file on remote host, write it and close it */
*/
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);
+ return (char*) xbt_dict_get_or_null(MSG_storage_get_properties(storage), name);
}
msg_error_t ret = MSG_OK;
simdata_task_t t_simdata = NULL;
msg_process_t process = MSG_process_self();
- simdata_process_t p_simdata = SIMIX_process_self_get_data(process);
+ simdata_process_t p_simdata = (simdata_process_t) SIMIX_process_self_get_data(process);
int call_end = TRACE_msg_task_put_start(task); //must be after CHECK_HOST()
if (t_simdata->isused != 0) {
if (msg_global->debug_multiple_use){
XBT_ERROR("This task is already used in there:");
- xbt_backtrace_display(t_simdata->isused);
+ xbt_backtrace_display((xbt_ex_t*) t_simdata->isused);
XBT_ERROR("And you try to reuse it from here:");
xbt_backtrace_display_current();
} else {
#include "simgrid/msg.h"
#include "simgrid/simix.h"
-#include "surf/surf.h"
+#include "src/include/surf/surf.h"
#include "xbt/base.h"
#include "xbt/fifo.h"
#include "xbt/dynar.h"
#include "xbt/swag.h"
#include "xbt/dict.h"
#include "xbt/config.h"
-#include "instr/instr_private.h"
+#include "src/instr/instr_private.h"
SG_BEGIN_DECL()
/**************** datatypes **********************************/
#include "msg_private.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
-#include "simix/smx_process_private.h"
+#include "src/simix/smx_process_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_process, msg,
"Logging specific to MSG (process)");
// get the MSG process from the SIMIX process
if (smx_proc == SIMIX_process_self()) {
/* avoid a SIMIX request if this function is called by the process itself */
- msg_proc = SIMIX_process_self_get_data(smx_proc);
+ msg_proc = (simdata_process_t) SIMIX_process_self_get_data(smx_proc);
SIMIX_process_self_set_data(smx_proc, NULL);
}
else {
- msg_proc = simcall_process_get_data(smx_proc);
+ msg_proc = (simdata_process_t) simcall_process_get_data(smx_proc);
simcall_process_set_data(smx_proc, NULL);
}
xbt_main_func_t code, void *data,
msg_host_t host)
{
- return MSG_process_create_with_environment(name, code, data, host, -1,
+ return MSG_process_create_with_environment(name, code, data, host, 0,
NULL, NULL);
}
/* Let's create the process: SIMIX may decide to start it right now,
* even before returning the flow control to us */
- process = simcall_process_create(name, code, simdata, sg_host_name(host), -1,
+ process = simcall_process_create(name, code, simdata, sg_host_get_name(host), -1,
argc, argv, properties,0);
TRACE_msg_process_create(name, SIMIX_process_get_PID(process), host);
*/
msg_error_t MSG_process_migrate(msg_process_t process, msg_host_t host)
{
- simdata_process_t simdata = simcall_process_get_data(process);
+ simdata_process_t simdata = (simdata_process_t) simcall_process_get_data(process);
simdata->m_host = host;
msg_host_t now = simdata->m_host;
TRACE_msg_process_change_host(process, now, host);
xbt_assert(process != NULL, "Invalid parameter: first parameter must not be NULL!");
/* get from SIMIX the MSG process data, and then the user data */
- simdata_process_t simdata = simcall_process_get_data(process);
+ simdata_process_t simdata = (simdata_process_t) simcall_process_get_data(process);
if (simdata)
return simdata->data;
else
{
xbt_assert(process != NULL, "Invalid parameter: first parameter must not be NULL!");
- simdata_process_t simdata = simcall_process_get_data(process);
+ simdata_process_t simdata =
+ (simdata_process_t) simcall_process_get_data(process);
simdata->data = data;
return MSG_OK;
{
simdata_process_t simdata;
if (process == NULL) {
- simdata = SIMIX_process_self_get_data(SIMIX_process_self());
+ simdata = (simdata_process_t) SIMIX_process_self_get_data(SIMIX_process_self());
}
else {
- simdata = simcall_process_get_data(process);
+ simdata = (simdata_process_t) simcall_process_get_data(process);
}
return simdata ? simdata->m_host : NULL;
}
const char *MSG_process_get_property_value(msg_process_t process,
const char *name)
{
- return xbt_dict_get_or_null(MSG_process_get_properties(process), name);
+ return (char*) xbt_dict_get_or_null(MSG_process_get_properties(process), name);
}
/** \ingroup m_process_management
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "msg_private.h"
-#include "simix/smx_private.h"
+#include "src/simix/smx_private.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
/** @brief Create a new VM with specified parameters.
* @ingroup msg_VMs*
- * All parameters are in MBytes
+ * @param pm Physical machine that will host the VM
+ * @param net_cap Maximal bandwidth that the VM can consume (in MByte/s)
+ * @param disk_path (unused) Path to the image that boots
+ * @param disksize (unused) will represent the size of the VM (will be used during migrations)
+ * @param mig_netspeed Amount of Mbyte/s allocated to the migration (cannot be larger than net_cap). Use 0 if unsure.
+ * @param dp_intensity Dirty page percentage according to migNetSpeed, [0-100]. Use 0 if unsure.
*
*/
-msg_vm_t MSG_vm_create(msg_host_t ind_pm, const char *name,
+msg_vm_t MSG_vm_create(msg_host_t pm, const char *name,
int ncpus, int ramsize,
int net_cap, char *disk_path, int disksize,
int mig_netspeed, int dp_intensity)
{
/* For the moment, intensity_rate is the percentage against the migration
* bandwidth */
- double host_speed = MSG_get_host_speed(ind_pm);
+ double host_speed = MSG_get_host_speed(pm);
double update_speed = ((double)dp_intensity/100) * mig_netspeed;
- msg_vm_t vm = MSG_vm_create_core(ind_pm, name);
+ msg_vm_t vm = MSG_vm_create_core(pm, name);
s_vm_params_t params;
memset(¶ms, 0, sizeof(params));
params.ramsize = (sg_size_t)ramsize * 1024 * 1024;
}
/* Note: ind_vm and vm_workstation point to the same elm object. */
- msg_vm_t ind_vm = NULL;
- void *ind_vm_workstation = NULL;
-
+
/* Ask the SIMIX layer to create the surf vm resource */
- ind_vm_workstation = simcall_vm_create(name, ind_pm);
- ind_vm = (msg_vm_t) __MSG_host_create(ind_vm_workstation);
+ sg_host_t ind_vm_workstation = (sg_host_t) simcall_vm_create(name, ind_pm);
+
+ msg_vm_t ind_vm = (msg_vm_t) __MSG_host_create(ind_vm_workstation);
XBT_DEBUG("A new VM (%s) has been created", name);
void MSG_vm_destroy(msg_vm_t vm)
{
if (MSG_vm_is_migrating(vm))
- THROWF(vm_error, 0, "VM(%s) is migrating", sg_host_name(vm));
+ THROWF(vm_error, 0, "VM(%s) is migrating", sg_host_get_name(vm));
/* First, terminate all processes on the VM if necessary */
if (MSG_vm_is_running(vm))
* migration. The names of these mailboxes must not conflict with others. */
static inline char *get_mig_mbox_src_dst(msg_vm_t vm, msg_host_t src_pm, msg_host_t dst_pm)
{
- char *vm_name = sg_host_name(vm);
- char *src_pm_name = sg_host_name(src_pm);
- char *dst_pm_name = sg_host_name(dst_pm);
+ char *vm_name = sg_host_get_name(vm);
+ char *src_pm_name = sg_host_get_name(src_pm);
+ char *dst_pm_name = sg_host_get_name(dst_pm);
return bprintf("__mbox_mig_src_dst:%s(%s-%s)", vm_name, src_pm_name, dst_pm_name);
}
static inline char *get_mig_mbox_ctl(msg_vm_t vm, msg_host_t src_pm, msg_host_t dst_pm)
{
- char *vm_name = sg_host_name(vm);
- char *src_pm_name = sg_host_name(src_pm);
- char *dst_pm_name = sg_host_name(dst_pm);
+ char *vm_name = sg_host_get_name(vm);
+ char *src_pm_name = sg_host_get_name(src_pm);
+ char *dst_pm_name = sg_host_get_name(dst_pm);
return bprintf("__mbox_mig_ctl:%s(%s-%s)", vm_name, src_pm_name, dst_pm_name);
}
static inline char *get_mig_process_tx_name(msg_vm_t vm, msg_host_t src_pm, msg_host_t dst_pm)
{
- char *vm_name = sg_host_name(vm);
- char *src_pm_name = sg_host_name(src_pm);
- char *dst_pm_name = sg_host_name(dst_pm);
+ char *vm_name = sg_host_get_name(vm);
+ char *src_pm_name = sg_host_get_name(src_pm);
+ char *dst_pm_name = sg_host_get_name(dst_pm);
return bprintf("__pr_mig_tx:%s(%s-%s)", vm_name, src_pm_name, dst_pm_name);
}
static inline char *get_mig_process_rx_name(msg_vm_t vm, msg_host_t src_pm, msg_host_t dst_pm)
{
- char *vm_name = sg_host_name(vm);
- char *src_pm_name = sg_host_name(src_pm);
- char *dst_pm_name = sg_host_name(dst_pm);
+ char *vm_name = sg_host_get_name(vm);
+ char *src_pm_name = sg_host_get_name(src_pm);
+ char *dst_pm_name = sg_host_get_name(dst_pm);
return bprintf("__pr_mig_rx:%s(%s-%s)", vm_name, src_pm_name, dst_pm_name);
}
static inline char *get_mig_task_name(msg_vm_t vm, msg_host_t src_pm, msg_host_t dst_pm, int stage)
{
- char *vm_name = sg_host_name(vm);
- char *src_pm_name = sg_host_name(src_pm);
- char *dst_pm_name = sg_host_name(dst_pm);
+ char *vm_name = sg_host_get_name(vm);
+ char *src_pm_name = sg_host_get_name(src_pm);
+ char *dst_pm_name = sg_host_get_name(dst_pm);
return bprintf("__task_mig_stage%d:%s(%s-%s)", stage, vm_name, src_pm_name, dst_pm_name);
}
XBT_DEBUG("mig: rx_start");
// The structure has been created in the do_migration function and should only be freed in the same place ;)
- struct migration_session *ms = MSG_process_get_data(MSG_process_self());
+ struct migration_session *ms = (migration_session *) MSG_process_get_data(MSG_process_self());
s_vm_params_t params;
simcall_host_get_params(ms->vm, ¶ms);
double duration = clock - dp->prev_clock;
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);
+ key, sg_host_get_name(vm), computed, dp->prev_remaining, remaining, duration, dp->prev_clock, clock);
return computed;
}
xbt_assert(xbt_dict_get_or_null(priv->dp_objs, key) == NULL);
xbt_dict_set(priv->dp_objs, key, dp, NULL);
- XBT_DEBUG("add %s on %s (remaining %f, dp_enabled %d)", key, sg_host_name(host), remaining, priv->dp_enabled);
+ XBT_DEBUG("add %s on %s (remaining %f, dp_enabled %d)", key, sg_host_get_name(host), remaining, priv->dp_enabled);
xbt_free(key);
}
char *key = bprintf("%s-%p", task->name, task);
- dirty_page_t dp = xbt_dict_get_or_null(priv->dp_objs, key);
+ dirty_page_t dp = (dirty_page_t) xbt_dict_get_or_null(priv->dp_objs, key);
xbt_assert(dp->task == task);
/* If we are in the middle of dirty page tracking, we record how much
xbt_dict_remove(priv->dp_objs, key);
xbt_free(dp);
- XBT_DEBUG("del %s on %s", key, sg_host_name(host));
+ XBT_DEBUG("del %s on %s", key, sg_host_get_name(host));
xbt_free(key);
}
if(ret == MSG_HOST_FAILURE){
//XBT_INFO("SRC host failed during migration of %s (stage %d)", sg_host_name(vm), stage);
MSG_task_destroy(task);
- THROWF(host_error, 0, "SRC host failed during migration of %s (stage %d)", sg_host_name(vm), stage);
+ THROWF(host_error, 0, "SRC host failed during migration of %s (stage %d)", sg_host_get_name(vm), stage);
}else if(ret == MSG_TRANSFER_FAILURE){
//XBT_INFO("DST host failed during migration of %s (stage %d)", sg_host_name(vm), stage);
MSG_task_destroy(task);
- THROWF(host_error, 0, "DST host failed during migration of %s (stage %d)", sg_host_name(vm), stage);
+ THROWF(host_error, 0, "DST host failed during migration of %s (stage %d)", sg_host_get_name(vm), stage);
}
double clock_end = MSG_get_clock();
XBT_DEBUG("mig: tx_start");
// Note that the ms structure has been allocated in do_migration and hence should be freed in the same function ;)
- struct migration_session *ms = MSG_process_get_data(MSG_process_self());
+ migration_session *ms =
+ (migration_session *) MSG_process_get_data(MSG_process_self());
s_vm_params_t params;
simcall_host_get_params(ms->vm, ¶ms);
/* Stage2: send update pages iteratively until the size of remaining states
* becomes smaller than the threshold value. */
- if (skip_stage2)
- goto stage3;
-
+ if (! skip_stage2) {
int stage2_round = 0;
for (;;) {
} else
XBT_CRITICAL("bug");
}
+ }
-
-stage3:
/* Stage3: stop the VM and copy the rest of states. */
XBT_DEBUG("mig-stage3: remaining_size %f", remaining_size);
simcall_vm_suspend(ms->vm);
*
*/
- msg_host_t old_pm = simcall_vm_get_pm(vm);
+ msg_host_t old_pm = (msg_host_t) simcall_vm_get_pm(vm);
if(MSG_host_is_off(old_pm))
- THROWF(vm_error, 0, "SRC host(%s) seems off, cannot start a migration", sg_host_name(old_pm));
+ THROWF(vm_error, 0, "SRC host(%s) seems off, cannot start a migration", sg_host_get_name(old_pm));
if(MSG_host_is_off(new_pm))
- THROWF(vm_error, 0, "DST host(%s) seems off, cannot start a migration", sg_host_name(new_pm));
+ THROWF(vm_error, 0, "DST host(%s) seems off, cannot start a migration", sg_host_get_name(new_pm));
if (!MSG_vm_is_running(vm))
- THROWF(vm_error, 0, "VM(%s) is not running", sg_host_name(vm));
+ THROWF(vm_error, 0, "VM(%s) is not running", sg_host_get_name(vm));
if (MSG_vm_is_migrating(vm))
- THROWF(vm_error, 0, "VM(%s) is already migrating", sg_host_name(vm));
+ THROWF(vm_error, 0, "VM(%s) is already migrating", sg_host_get_name(vm));
msg_host_priv_t priv = sg_host_msg(vm);
priv->is_migrating = 1;
void MSG_vm_suspend(msg_vm_t vm)
{
if (MSG_vm_is_migrating(vm))
- THROWF(vm_error, 0, "VM(%s) is migrating", sg_host_name(vm));
+ THROWF(vm_error, 0, "VM(%s) is migrating", sg_host_get_name(vm));
simcall_vm_suspend(vm);
void MSG_vm_save(msg_vm_t vm)
{
if (MSG_vm_is_migrating(vm))
- THROWF(vm_error, 0, "VM(%s) is migrating", sg_host_name(vm));
+ THROWF(vm_error, 0, "VM(%s) is migrating", sg_host_get_name(vm));
simcall_vm_save(vm);
TRACE_msg_vm_save(vm);
*/
msg_host_t MSG_vm_get_pm(msg_vm_t vm)
{
- return simcall_vm_get_pm(vm);
+ return (msg_host_t) simcall_vm_get_pm(vm);
}
#ifndef SIMGRID_PORTABLE_H
#define SIMGRID_PORTABLE_H
-#include "internal_config.h"
+#include "src/internal_config.h"
#include "xbt/base.h"
#include "xbt/misc.h"
#ifdef _XBT_WIN32
--- /dev/null
+/* 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. */
+
+#include "xbt/log.h"
+#include "src/msg/msg_private.h"
+#include "src/msg/msg_mailbox.h"
+
+#include "simgrid/s4u/actor.hpp"
+#include "simgrid/s4u/comm.hpp"
+#include "simgrid/s4u/host.hpp"
+#include "simgrid/s4u/mailbox.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_actor,"S4U actors");
+
+/* C main function of a actor, running this->main */
+static int s4u_actor_runner(int argc, char **argv) {
+
+ smx_process_t smx_proc = SIMIX_process_self();
+ simgrid::s4u::Actor *actor = (simgrid::s4u::Actor*) SIMIX_process_self_get_data(smx_proc);
+ int res = actor->main(argc,argv);
+ return res;
+}
+
+
+
+using namespace simgrid;
+
+s4u::Actor::Actor(smx_process_t smx_proc) {
+ p_smx_process = smx_proc;
+}
+s4u::Actor::Actor(const char *name, s4u::Host *host, int argc, char **argv)
+ : s4u::Actor::Actor(name,host, argc,argv, -1) {
+}
+s4u::Actor::Actor(const char *name, s4u::Host *host, int argc, char **argv, double killTime) {
+ p_smx_process = simcall_process_create(name, s4u_actor_runner, this, host->name(), killTime, argc, argv, NULL/*properties*/,0);
+
+ xbt_assert(p_smx_process,"Cannot create the actor");
+// TRACE_msg_process_create(procname, simcall_process_get_PID(p_smx_process), host->getInferior());
+// simcall_process_on_exit(p_smx_process,(int_f_pvoid_pvoid_t)TRACE_msg_process_kill,p_smx_process);
+}
+
+int s4u::Actor::main(int argc, char **argv) {
+ fprintf(stderr,"Error: You should override the method main(int, char**) in Actor class %s\n",getName());
+ return 0;
+}
+s4u::Actor *s4u::Actor::current() {
+ smx_process_t smx_proc = SIMIX_process_self();
+ simgrid::s4u::Actor* res = (simgrid::s4u::Actor*) SIMIX_process_self_get_data(smx_proc);
+ if (res == NULL) // The smx_process was not created by S4U (but by deployment?). Embed it in a S4U object
+ res = new Actor(smx_proc);
+ return res;
+}
+s4u::Actor *s4u::Actor::byPid(int pid) {
+ return (simgrid::s4u::Actor*) SIMIX_process_self_get_data(SIMIX_process_from_PID(pid));
+}
+
+void s4u::Actor::setAutoRestart(bool autorestart) {
+ simcall_process_auto_restart_set(p_smx_process,autorestart);
+}
+
+s4u::Host *s4u::Actor::getHost() {
+ return s4u::Host::byName(sg_host_get_name(simcall_process_get_host(p_smx_process)));
+}
+const char* s4u::Actor::getName() {
+ return simcall_process_get_name(p_smx_process);
+}
+int s4u::Actor::getPid(){
+ return simcall_process_get_PID(p_smx_process);
+}
+
+void s4u::Actor::setKillTime(double time) {
+ simcall_process_set_kill_time(p_smx_process,time);
+}
+double s4u::Actor::getKillTime() {
+ return simcall_process_get_kill_time(p_smx_process);
+}
+void s4u::Actor::killAll() {
+ simcall_process_killall(1);
+}
+void s4u::Actor::kill() {
+ simcall_process_kill(p_smx_process);
+}
+
+void s4u::Actor::sleep(double duration) {
+ simcall_process_sleep(duration);
+}
+
+e_smx_state_t s4u::Actor::execute(double flops) {
+ smx_synchro_t s = simcall_process_execute(NULL,flops,1.0/*priority*/,0./*bound*/, 0L/*affinity*/);
+ return simcall_process_execution_wait(s);
+}
+
+void *s4u::Actor::recv(Mailbox &chan) {
+ void *res=NULL;
+
+ Comm c = Comm::recv_init(this, chan);
+ c.setDstData(&res,sizeof(res));
+ c.wait();
+
+ return res;
+}
+void s4u::Actor::send(Mailbox &chan, void *payload, size_t simulatedSize) {
+ Comm c = Comm::send_init(this,chan);
+ c.setRemains(simulatedSize);
+ c.setSrcData(payload);
+ // c.start() is optional.
+ c.wait();
+}
--- /dev/null
+/* Copyright (c) 2006-2015. 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/log.h"
+#include "src/msg/msg_private.h"
+#include "src/msg/msg_mailbox.h"
+
+#include "simgrid/s4u/async.hpp"
+
+XBT_LOG_EXTERNAL_CATEGORY(s4u);
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_async,s4u,"S4U asynchronous actions");
+using namespace simgrid;
+
+s4u::Async::Async() {
+
+}
+s4u::Async::~Async() {
+
+}
+
+void s4u::Async::setRemains(double remains) {
+ xbt_assert(p_state == inited, "Cannot change the remaining amount of work once the Async is started");
+ p_remains = remains;
+}
+
--- /dev/null
+/* Copyright (c) 2006-2015. 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/log.h"
+#include "src/msg/msg_private.h"
+#include "src/msg/msg_mailbox.h"
+
+#include "simgrid/s4u/comm.hpp"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_comm,s4u_async,"S4U asynchronous communications");
+using namespace simgrid;
+
+s4u::Comm::~Comm() {
+
+}
+
+s4u::Comm &s4u::Comm::send_init(s4u::Actor *sender, s4u::Mailbox &chan) {
+ s4u::Comm *res = new s4u::Comm();
+ res->p_sender = sender;
+ res->p_mailbox = &chan;
+
+ return *res;
+}
+s4u::Comm &s4u::Comm::recv_init(s4u::Actor *receiver, s4u::Mailbox &chan) {
+ s4u::Comm *res = new s4u::Comm();
+ res->p_receiver = receiver;
+ res->p_mailbox = &chan;
+
+ return *res;
+}
+
+void s4u::Comm::setRate(double rate) {
+ xbt_assert(p_state==inited);
+ p_rate = rate;
+}
+
+void s4u::Comm::setSrcData(void * buff) {
+ xbt_assert(p_state==inited);
+ xbt_assert(p_dstBuff == NULL, "Cannot set the src and dst buffers at the same time");
+ p_srcBuff = buff;
+}
+void s4u::Comm::setSrcDataSize(size_t size){
+ xbt_assert(p_state==inited);
+ p_srcBuffSize = size;
+}
+void s4u::Comm::setSrcData(void * buff, size_t size) {
+ xbt_assert(p_state==inited);
+
+ xbt_assert(p_dstBuff == NULL, "Cannot set the src and dst buffers at the same time");
+ p_srcBuff = buff;
+ p_srcBuffSize = size;
+}
+void s4u::Comm::setDstData(void ** buff) {
+ xbt_assert(p_state==inited);
+ xbt_assert(p_srcBuff == NULL, "Cannot set the src and dst buffers at the same time");
+ p_dstBuff = buff;
+}
+size_t s4u::Comm::getDstDataSize(){
+ xbt_assert(p_state==finished);
+ return p_dstBuffSize;
+}
+void s4u::Comm::setDstData(void ** buff, size_t size) {
+ xbt_assert(p_state==inited);
+
+ xbt_assert(p_srcBuff == NULL, "Cannot set the src and dst buffers at the same time");
+ p_dstBuff = buff;
+ p_dstBuffSize = size;
+}
+
+void s4u::Comm::start() {
+ xbt_assert(p_state == inited);
+
+ if (p_srcBuff != NULL) { // Sender side
+ p_inferior = simcall_comm_isend(p_sender->getInferior(), p_mailbox->getInferior(), p_remains, p_rate,
+ p_srcBuff, p_srcBuffSize,
+ p_matchFunction, p_cleanFunction, p_copyDataFunction,
+ p_userData, p_detached);
+ } else if (p_dstBuff != NULL) { // Receiver side
+ p_inferior = simcall_comm_irecv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
+ p_matchFunction, p_copyDataFunction,
+ p_userData, p_rate);
+
+ } else {
+ xbt_die("Cannot start a communication before specifying whether we are the sender or the receiver");
+ }
+ p_state = started;
+}
+void s4u::Comm::wait() {
+ xbt_assert(p_state == started || p_state == inited);
+
+ if (p_state == started)
+ simcall_comm_wait(p_inferior, -1/*timeout*/);
+ else {// p_state == inited. Save a simcall and do directly a blocking send/recv
+ if (p_srcBuff != NULL) {
+ simcall_comm_send(p_sender->getInferior(), p_mailbox->getInferior(), p_remains, p_rate,
+ p_srcBuff, p_srcBuffSize,
+ p_matchFunction, p_copyDataFunction,
+ p_userData, -1 /*timeout*/);
+ } else {
+ simcall_comm_recv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
+ p_matchFunction, p_copyDataFunction,
+ p_userData, -1/*timeout*/, p_rate);
+ }
+ }
+ p_state = finished;
+}
+void s4u::Comm::wait(double timeout) {
+ xbt_assert(p_state == started || p_state == inited);
+
+ if (p_state == started) {
+ simcall_comm_wait(p_inferior, timeout);
+ p_state = finished;
+ return;
+ }
+
+ // It's not started yet. Do it in one simcall
+ if (p_srcBuff != NULL) {
+ simcall_comm_send(p_sender->getInferior(), p_mailbox->getInferior(), p_remains, p_rate,
+ p_srcBuff, p_srcBuffSize,
+ p_matchFunction, p_copyDataFunction,
+ p_userData, timeout);
+ } else { // Receiver
+ simcall_comm_recv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
+ p_matchFunction, p_copyDataFunction,
+ p_userData, timeout, p_rate);
+ }
+ p_state = finished;
+}
+
+s4u::Comm &s4u::Comm::send_async(s4u::Actor *sender, Mailbox &dest, void *data, int simulatedSize) {
+ s4u::Comm &res = s4u::Comm::send_init(sender, dest);
+
+ res.setRemains(simulatedSize);
+ res.p_srcBuff = data;
+ res.p_srcBuffSize = sizeof(void*);
+
+ res.start();
+ return res;
+}
+
+s4u::Comm &s4u::Comm::recv_async(s4u::Actor *receiver, Mailbox &dest, void **data) {
+ s4u::Comm &res = s4u::Comm::recv_init(receiver, dest);
+
+ res.setDstData(data);
+
+ res.start();
+ return res;
+}
+
--- /dev/null
+/* s4u::Engine Simulation Engine and global functions. */
+
+/* Copyright (c) 2006-2015. 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 "simgrid/simix.h"
+#include "mc/mc.h"
+#include "simgrid/s4u/engine.hpp"
+
+XBT_LOG_NEW_CATEGORY(s4u,"Log channels of the S4U (Simgrid for you) interface");
+using namespace simgrid;
+
+double s4u::Engine::getClock() {
+ return SIMIX_get_clock();
+}
+
+s4u::Engine::Engine(int *argc, char **argv) {
+ SIMIX_global_init(argc, argv);
+}
+
+void s4u::Engine::loadPlatform(const char *platf) {
+ SIMIX_create_environment(platf);
+}
+
+void s4u::Engine::register_function(const char*name, int (*code)(int,char**)) {
+ SIMIX_function_register(name,code);
+}
+void s4u::Engine::register_default(int (*code)(int,char**)) {
+ SIMIX_function_register_default(code);
+}
+void s4u::Engine::loadDeployment(const char *deploy) {
+ SIMIX_launch_application(deploy);
+}
+
+void s4u::Engine::run() {
+ if (MC_is_active()) {
+ MC_run();
+ } else {
+ SIMIX_run();
+ }
+}
--- /dev/null
+/* Copyright (c) 2015. 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/log.h"
+#include "src/msg/msg_private.h"
+#include "src/msg/msg_mailbox.h"
+
+#include "simgrid/s4u/actor.hpp"
+#include "simgrid/s4u/comm.hpp"
+#include "simgrid/s4u/host.hpp"
+#include "simgrid/s4u/mailbox.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_file,"S4U files");
+
+#include "simgrid/s4u/file.hpp"
+#include "simgrid/s4u/host.hpp"
+#include "simgrid/simix.h"
+
+namespace simgrid {
+namespace s4u {
+
+File::File(const char*fullpath, void *userdata) {
+ // this cannot fail because we get a xbt_die if the mountpoint does not exist
+ p_inferior = simcall_file_open(fullpath, Host::current()->inferior());
+ p_path = fullpath;
+}
+
+File::~File() {
+ simcall_file_close(p_inferior, Host::current()->inferior());
+}
+
+sg_size_t File::read(sg_size_t size) {
+ return simcall_file_read(p_inferior, size, Host::current()->inferior());
+}
+sg_size_t File::write(sg_size_t size) {
+ return simcall_file_write(p_inferior,size, Host::current()->inferior());
+}
+sg_size_t File::size() {
+ return simcall_file_get_size(p_inferior);
+}
+
+void File::seek(sg_size_t pos) {
+ simcall_file_seek(p_inferior,pos,SEEK_SET);
+}
+sg_size_t File::tell() {
+ return simcall_file_tell(p_inferior);
+}
+void File::move(const char*fullpath) {
+ simcall_file_move(p_inferior,fullpath);
+}
+void File::unlink() {
+ sg_host_t attached = Host::current()->inferior(); // FIXME: we should check where this file is attached
+ simcall_file_unlink(p_inferior,attached);
+}
+
+}} // namespace simgrid::s4u
--- /dev/null
+/* 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. */
+
+#include "xbt/log.h"
+#include "src/msg/msg_private.h"
+#include "src/simix/smx_process_private.h"
+
+#include "simgrid/s4u/host.hpp"
+#include "simgrid/s4u/storage.hpp"
+
+namespace simgrid {
+namespace s4u {
+
+boost::unordered_map<std::string, Host*> *Host::hosts
+ = new boost::unordered_map<std::string, Host*>();
+
+Host::Host(const char*name) {
+ p_inferior = sg_host_by_name(name);
+ if (p_inferior==NULL)
+ xbt_die("No such host: %s",name); //FIXME: raise an exception
+}
+Host::~Host() {
+ if (mounts != NULL)
+ delete mounts;
+}
+
+Host *Host::byName(std::string name) {
+ Host * res = NULL;
+ try {
+ res = hosts->at(name);
+ } catch (std::out_of_range& e) {}
+
+ if (res==NULL) {
+ res = new Host(name.c_str());
+ hosts->insert({name,res});
+ }
+ return res;
+}
+Host *Host::current(){
+ smx_process_t smx_proc = SIMIX_process_self();
+ if (smx_proc == NULL)
+ xbt_die("Cannot call Host::current() from the maestro context");
+
+ return Host::byName(sg_host_get_name(SIMIX_process_get_host(smx_proc)));
+}
+
+const char* Host::name() {
+ return sg_host_get_name(p_inferior);
+}
+
+void Host::turnOn() {
+ simcall_host_on(p_inferior);
+}
+void Host::turnOff() {
+ simcall_host_off(p_inferior);
+}
+bool Host::isOn() {
+ return sg_host_get_state(p_inferior);
+}
+
+boost::unordered_map<std::string, Storage&> &Host::mountedStorages() {
+ if (mounts == NULL) {
+ mounts = new boost::unordered_map<std::string, Storage&> ();
+
+ xbt_dict_t dict = simcall_host_get_mounted_storage_list(p_inferior);
+
+ xbt_dict_cursor_t cursor;
+ char *mountname;
+ char *storagename;
+ xbt_dict_foreach(dict, cursor, mountname, storagename) {
+ mounts->insert({mountname, Storage::byName(storagename)});
+ }
+ xbt_dict_free(&dict);
+ }
+
+ return *mounts;
+}
+
+
+} // namespace simgrid
+} // namespace s4u
--- /dev/null
+/* Copyright (c) 2006-2015. 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/log.h"
+#include "src/msg/msg_private.h"
+#include "src/msg/msg_mailbox.h"
+
+#include "simgrid/s4u/mailbox.hpp"
+
+XBT_LOG_EXTERNAL_CATEGORY(s4u);
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_channel,s4u,"S4U Communication Mailboxes");
+
+
+using namespace simgrid;
+
+boost::unordered_map <std::string, s4u::Mailbox *> *s4u::Mailbox::mailboxes = new boost::unordered_map<std::string, s4u::Mailbox*> ();
+
+
+s4u::Mailbox::Mailbox(const char*name, smx_rdv_t inferior) {
+ p_inferior = inferior;
+ p_name = name;
+ mailboxes->insert({name, this});
+}
+const char *s4u::Mailbox::getName() {
+ return p_name.c_str();
+}
+s4u::Mailbox *s4u::Mailbox::byName(const char*name) {
+ s4u::Mailbox *res;
+ try {
+ res = mailboxes->at(name);
+ } catch (std::out_of_range& e) {
+ // FIXME: there is a potential race condition here where two actors run Mailbox::byName on a non-existent mailbox
+ // during the same scheduling round. Both will be interrupted in the simcall creating the underlying simix rdv.
+ // Only one simix object will be created, but two S4U objects will be created.
+ // Only one S4U object will be stored in the hashmap and used, and the other one will be leaked.
+ new Mailbox(name,simcall_rdv_create(name));
+ res = mailboxes->at(name); // Use the stored one, even if it's not the one I created myself.
+ }
+ return res;
+}
--- /dev/null
+/* Copyright (c) 2006-2015. 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 "simgrid/s4u/storage.hpp"
+
+#include "xbt/lib.h"
+extern xbt_lib_t storage_lib;
+
+namespace simgrid {
+namespace s4u {
+
+boost::unordered_map <std::string, Storage *> *Storage::storages = new boost::unordered_map<std::string, Storage*> ();
+Storage::Storage(std::string name, smx_storage_t inferior) {
+ p_name = name;
+ p_inferior = inferior;
+
+ storages->insert({name, this});
+}
+
+Storage::~Storage() {
+ // TODO Auto-generated destructor stub
+}
+
+smx_storage_t Storage::inferior() {
+ return p_inferior;
+}
+Storage &Storage::byName(const char*name) {
+ s4u::Storage *res = NULL;
+ try {
+ res = storages->at(name);
+ } catch (std::out_of_range& e) {
+ smx_storage_t inferior = xbt_lib_get_elm_or_null(storage_lib,name);
+ if (inferior == NULL)
+ xbt_die("Storage %s does not exist. Please only use the storages that are defined in your platform.", name);
+
+ res = new Storage(name,inferior);
+ }
+ return *res;
+}
+
+const char*Storage::name() {
+ return p_name.c_str();
+}
+
+sg_size_t Storage::size_free() {
+ return simcall_storage_get_free_size(p_inferior);
+}
+sg_size_t Storage::size_used() {
+ return simcall_storage_get_used_size(p_inferior);
+}
+sg_size_t Storage::size() {
+ return SIMIX_storage_get_size(p_inferior);
+}
+
+} /* namespace s4u */
+} /* namespace simgrid */
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "private.h"
#include "simgrid/simdag.h"
/* Workstation */
typedef s_xbt_dictelm_t s_SD_workstation_t;
typedef struct SD_workstation {
- void *data; /* user data */
e_SD_workstation_access_mode_t access_mode;
xbt_fifo_t task_fifo; /* only used in sequential mode */
if (elapsed_time > 0.0)
total_time += elapsed_time;
- /* FIXME: shoud look at model_list or model_list_invoke? */
/* let's see which tasks are done */
- xbt_dynar_foreach(model_list, iter, model) {
+ xbt_dynar_foreach(all_existing_models, iter, model) {
while ((action = surf_model_extract_done_action_set(model))) {
task = surf_action_get_data(action);
task->start_time = surf_action_get_start_time(task->surf_action);
#include "simgrid/simdag.h"
#include "xbt/sysdep.h"
#include "xbt/dynar.h"
-#include "instr/instr_private.h"
+#include "src/instr/instr_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_task, sd,
"Logging specific to SimDag (task)");
const char *name;
workstation = xbt_new(s_SD_workstation_priv_t, 1);
- workstation->data = data; /* user data */
workstation->access_mode = SD_WORKSTATION_SHARED_ACCESS; /* default mode is shared */
workstation->task_fifo = NULL;
workstation->current_task = NULL;
name = surf_resource_name(surf_workstation);
sg_host_t sg_host = sg_host_by_name(name);
sg_host_sd_set(sg_host,workstation);
+ sg_host_user_set(sg_host,data);
return sg_host;
}
*/
void *SD_workstation_get_data(SD_workstation_t workstation)
{
- return sg_host_sd(workstation)->data;
+ return sg_host_user(workstation);
}
/**
*/
void SD_workstation_set_data(SD_workstation_t workstation, void *data)
{
- sg_host_sd(workstation)->data = data;
+ sg_host_user_set(workstation, data);
}
/**
*/
const char *SD_workstation_get_name(SD_workstation_t workstation)
{
- return sg_host_name(workstation);
+ return sg_host_get_name(workstation);
}
/**
#include "xbt/dict.h"
#include "simgrid/host.h"
-#include "surf/surf_routing.h" // SIMIX_HOST_LEVEL and friends FIXME: make private here
#include "surf/surf.h" // routing_get_network_element_type FIXME:killme
sg_host_t sg_host_by_name(const char *name){
int SIMIX_HOST_LEVEL;
int ROUTING_HOST_LEVEL;
int SURF_CPU_LEVEL;
+int USER_HOST_LEVEL;
-
-#include "msg/msg_private.h" // MSG_host_priv_free. FIXME: killme
-#include "simdag/private.h" // __SD_workstation_destroy. FIXME: killme
-#include "simix/smx_host_private.h" // SIMIX_host_destroy. FIXME: killme
-#include "surf/cpu_interface.hpp"
-#include "surf/surf_routing.hpp"
+#include "src/msg/msg_private.h" // MSG_host_priv_free. FIXME: killme
+#include "src/simdag/private.h" // __SD_workstation_destroy. FIXME: killme
+#include "src/simix/smx_host_private.h" // SIMIX_host_destroy. FIXME: killme
+#include "src/surf/cpu_interface.hpp"
+#include "src/surf/surf_routing.hpp"
static XBT_INLINE void surf_cpu_free(void *r) {
- delete static_cast<Cpu*>(r);
+ delete static_cast<simgrid::surf::Cpu*>(r);
}
static XBT_INLINE void routing_asr_host_free(void *p) {
- delete static_cast<RoutingEdge*>(p);
+ delete static_cast<simgrid::surf::RoutingEdge*>(p);
}
-
-void sg_host_init() { // FIXME: only add the needed levels
+void sg_host_init() {
MSG_HOST_LEVEL = xbt_lib_add_level(host_lib, (void_f_pvoid_t) __MSG_host_priv_free);
SD_HOST_LEVEL = xbt_lib_add_level(host_lib,__SD_workstation_destroy);
SIMIX_HOST_LEVEL = xbt_lib_add_level(host_lib,SIMIX_host_destroy);
SURF_CPU_LEVEL = xbt_lib_add_level(host_lib,surf_cpu_free);
ROUTING_HOST_LEVEL = xbt_lib_add_level(host_lib,routing_asr_host_free);
+ USER_HOST_LEVEL = xbt_lib_add_level(host_lib,NULL);
+}
+// ========== User data Layer ==========
+void *sg_host_user(sg_host_t host) {
+ return xbt_lib_get_level(host, USER_HOST_LEVEL);
+}
+void sg_host_user_set(sg_host_t host, void* userdata) {
+ xbt_lib_set(host_lib,host->key,USER_HOST_LEVEL,userdata);
+}
+void sg_host_user_destroy(sg_host_t host) {
+ xbt_lib_unset(host_lib,host->key,USER_HOST_LEVEL,1);
}
// ========== MSG Layer ==============
return (smx_host_priv_t) xbt_lib_get_level(host, SIMIX_HOST_LEVEL);
}
void sg_host_simix_set(sg_host_t host, smx_host_priv_t smx_host) {
- xbt_lib_set(host_lib,host->key,SIMIX_HOST_LEVEL,smx_host);
+ xbt_assert(xbt_lib_get_or_null(host_lib,host->key,SIMIX_HOST_LEVEL) == NULL);
+ xbt_lib_set(host_lib,host->key,SIMIX_HOST_LEVEL,smx_host);
}
void sg_host_simix_destroy(sg_host_t host) {
xbt_lib_unset(host_lib,host->key,SIMIX_HOST_LEVEL,1);
void sg_host_surfcpu_set(sg_host_t host, surf_cpu_t cpu) {
xbt_lib_set(host_lib, host->key, SURF_CPU_LEVEL, cpu);
}
+void sg_host_surfcpu_register(sg_host_t host, surf_cpu_t cpu)
+{
+ surf_callback_emit(simgrid::surf::cpuCreatedCallbacks, cpu);
+ surf_callback_emit(simgrid::surf::cpuStateChangedCallbacks, cpu, SURF_RESOURCE_ON, cpu->getState());
+ sg_host_surfcpu_set(host, cpu);
+}
void sg_host_surfcpu_destroy(sg_host_t host) {
xbt_lib_unset(host_lib,host->key,SURF_CPU_LEVEL,1);
}
// ========== RoutingEdge ============
-RoutingEdge *sg_host_edge(sg_host_t host) {
- return (RoutingEdge*) xbt_lib_get_level(host, ROUTING_HOST_LEVEL);
+surf_RoutingEdge *sg_host_edge(sg_host_t host) {
+ return (surf_RoutingEdge*) xbt_lib_get_level(host, ROUTING_HOST_LEVEL);
}
-void sg_host_edge_set(sg_host_t host, RoutingEdge *edge) {
+void sg_host_edge_set(sg_host_t host, surf_RoutingEdge *edge) {
xbt_lib_set(host_lib, host->key, ROUTING_HOST_LEVEL, edge);
}
void sg_host_edge_destroy(sg_host_t host, int do_callback) {
}
+// =========== user-level functions ===============
+// ================================================
+double sg_host_get_speed(sg_host_t host){
+ return surf_host_get_speed(host, 1.0);
+}
-/*
-host::host() {
- // TODO Auto-generated constructor stub
+double sg_host_get_available_speed(sg_host_t host){
+ return surf_host_get_available_speed(host);
+}
+/** @brief Returns the number of core of the processor. */
+int sg_host_get_core(sg_host_t host) {
+ return surf_host_get_core(host);
+}
+/** @brief Returns the state of a host.
+ * @return 1 if the host is active or 0 if it has crashed.
+ */
+int sg_host_get_state(sg_host_t host) {
+ return surf_host_get_state(surf_host_resource_priv(host));
+}
+/** @brief Returns the total energy consumed by the host (in Joules).
+ *
+ * See also @ref SURF_plugin_energy.
+ */
+double sg_host_get_consumed_energy(sg_host_t host) {
+ return surf_host_get_consumed_energy(host);
}
-host::~host() {
- // TODO Auto-generated destructor stub
-}*/
+/** @brief Returns the number of power states for a host.
+ *
+ * See also @ref SURF_plugin_energy.
+ */
+int sg_host_get_nb_pstates(sg_host_t host) {
+ return surf_host_get_nb_pstates(host);
+}
+/** @brief Gets the pstate at which that host currently runs.
+ *
+ * See also @ref SURF_plugin_energy.
+ */
+int sg_host_get_pstate(sg_host_t host) {
+ return surf_host_get_pstate(host);
+}
#include "smpi/smpi_interface.h"
#endif
#include "mc/mc.h"
-#include "mc/mc_record.h"
+#include "src/mc/mc_record.h"
#include "simgrid/instr.h"
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf,
"About the configuration of simgrid");
}
/* callback to decide if we want to use the model-checking */
-#include "xbt_modinter.h"
+#include "src/xbt_modinter.h"
#ifdef HAVE_MC
extern int _sg_do_model_check; /* this variable lives in xbt_main until I find a right location for it */
xbt_cfgelm_double, 1, 1, NULL, NULL);
xbt_cfg_setdefault_double(_sg_cfg_set, "smpi/cpu_threshold", 1e-6);
- xbt_cfg_register(&_sg_cfg_set, "smpi/async_small_thres",
+ xbt_cfg_register(&_sg_cfg_set, "smpi/async_small_thresh",
"Maximal size of messages that are to be sent asynchronously, without waiting for the receiver",
xbt_cfgelm_int, 1, 1, NULL, NULL);
- xbt_cfg_setdefault_int(_sg_cfg_set, "smpi/async_small_thres", 0);
+ xbt_cfg_setdefault_int(_sg_cfg_set, "smpi/async_small_thresh", 0);
xbt_cfg_register(&_sg_cfg_set, "smpi/send_is_detached_thres",
"Threshold of message size where MPI_Send stops behaving like MPI_Isend and becomes MPI_Ssend",
--- /dev/null
+/* Copyright (c) 2015. 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. */
+
+/** @file BoostContext.cpp Userspace context switching implementation based on Boost.Context */
+
+#include <cstdint>
+
+#include <functional>
+#include <utility>
+#include <vector>
+
+#include <boost/context/all.hpp>
+
+#include <xbt/log.h>
+#include <xbt/xbt_os_thread.h>
+
+#include "smx_private.h"
+#include "smx_private.hpp"
+#include "src/internal_config.h"
+#include "src/simix/BoostContext.hpp"
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
+
+namespace simgrid {
+namespace simix {
+
+class BoostSerialContext : public BoostContext {
+public:
+ BoostSerialContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t process)
+ : BoostContext(std::move(code), cleanup_func, process) {}
+ void stop() override;
+ void suspend() override;
+ void resume();
+};
+
+#ifdef CONTEXT_THREADS
+class BoostParallelContext : public BoostContext {
+public:
+ BoostParallelContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t process)
+ : BoostContext(std::move(code), cleanup_func, process) {}
+ void stop() override;
+ void suspend() override;
+ void resume();
+};
+#endif
+
+// BoostContextFactory
+
+bool BoostContext::parallel_ = false;
+xbt_parmap_t BoostContext::parmap_ = nullptr;
+unsigned long BoostContext::threads_working_ = 0;
+xbt_os_thread_key_t BoostContext::worker_id_key_;
+unsigned long BoostContext::process_index_ = 0;
+BoostContext* BoostContext::maestro_context_ = nullptr;
+std::vector<BoostContext*> BoostContext::workers_context_;
+
+BoostContextFactory::BoostContextFactory()
+ : ContextFactory("BoostContextFactory")
+{
+ BoostContext::parallel_ = SIMIX_context_is_parallel();
+ if (BoostContext::parallel_) {
+#ifndef CONTEXT_THREADS
+ xbt_die("No thread support for parallel context execution");
+#else
+ int nthreads = SIMIX_context_get_nthreads();
+ BoostContext::parmap_ = xbt_parmap_new(nthreads, SIMIX_context_get_parallel_mode());
+ BoostContext::workers_context_.clear();
+ BoostContext::workers_context_.resize(nthreads, nullptr);
+ BoostContext::maestro_context_ = nullptr;
+ xbt_os_thread_key_create(&BoostContext::worker_id_key_);
+#endif
+ }
+}
+
+BoostContextFactory::~BoostContextFactory()
+{
+#ifdef CONTEXT_THREADS
+ if (BoostContext::parmap_) {
+ xbt_parmap_destroy(BoostContext::parmap_);
+ BoostContext::parmap_ = nullptr;
+ }
+ BoostContext::workers_context_.clear();
+#endif
+}
+
+smx_context_t BoostContextFactory::create_context(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func, smx_process_t process)
+{
+ BoostContext* context = nullptr;
+ if (BoostContext::parallel_)
+#ifdef CONTEXT_THREADS
+ context = this->new_context<BoostParallelContext>(
+ std::move(code), cleanup_func, process);
+#else
+ xbt_die("No support for parallel execution");
+#endif
+ else
+ context = this->new_context<BoostSerialContext>(
+ std::move(code), cleanup_func, process);
+ return context;
+}
+
+void BoostContextFactory::run_all()
+{
+#ifdef CONTEXT_THREADS
+ if (BoostContext::parallel_) {
+ BoostContext::threads_working_ = 0;
+ xbt_parmap_apply(BoostContext::parmap_,
+ [](void* arg) {
+ smx_process_t process = static_cast<smx_process_t>(arg);
+ BoostContext* context = static_cast<BoostContext*>(process->context);
+ return context->resume();
+ },
+ simix_global->process_to_run);
+ } else
+#endif
+ {
+ smx_process_t first_process =
+ xbt_dynar_get_as(simix_global->process_to_run, 0, smx_process_t);
+ BoostContext::process_index_ = 1;
+ /* execute the first process */
+ static_cast<BoostContext*>(first_process->context)->resume();
+ }
+}
+
+
+// BoostContext
+
+static void smx_ctx_boost_wrapper(std::intptr_t arg)
+{
+ BoostContext* context = (BoostContext*) arg;
+ (*context)();
+ context->stop();
+}
+
+BoostContext::BoostContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func, smx_process_t process)
+ : Context(std::move(code), cleanup_func, process)
+{
+
+ /* if the user provided a function for the process then use it,
+ otherwise it is the context for maestro */
+ if (has_code()) {
+ this->stack_ = SIMIX_context_stack_new();
+ // We need to pass the bottom of the stack to make_fcontext,
+ // depending on the stack direction it may be the lower or higher address:
+ #if PTH_STACKGROWTH == -1
+ void* stack = (char*) this->stack_ + smx_context_usable_stack_size - 1;
+ #else
+ void* stack = this->stack_;
+ #endif
+ this->fc_ = boost::context::make_fcontext(
+ stack,
+ smx_context_usable_stack_size,
+ smx_ctx_boost_wrapper);
+ } else {
+ #if HAVE_BOOST_CONTEXT == 1
+ this->fc_ = new boost::context::fcontext_t();
+ #endif
+ if (BoostContext::maestro_context_ == nullptr)
+ BoostContext::maestro_context_ = this;
+ }
+}
+
+BoostContext::~BoostContext()
+{
+#if HAVE_BOOST_CONTEXT == 1
+ if (!this->stack_)
+ delete this->fc_;
+#endif
+ if (this == maestro_context_)
+ maestro_context_ = nullptr;
+ SIMIX_context_stack_delete(this->stack_);
+}
+
+// BoostSerialContext
+
+void BoostContext::resume()
+{
+ SIMIX_context_set_current(this);
+#if HAVE_BOOST_CONTEXT == 1
+ boost::context::jump_fcontext(
+ maestro_context_->fc_, this->fc_,
+ (intptr_t) this);
+#else
+ boost::context::jump_fcontext(
+ &boost_maestro_context_->fc_, this->fc_,
+ (intptr_t) this);
+#endif
+}
+
+void BoostSerialContext::suspend()
+{
+ /* determine the next context */
+ BoostSerialContext* next_context = nullptr;
+ unsigned long int i = process_index_++;
+
+ if (i < xbt_dynar_length(simix_global->process_to_run)) {
+ /* execute the next process */
+ XBT_DEBUG("Run next process");
+ next_context = static_cast<BoostSerialContext*>(xbt_dynar_get_as(
+ simix_global->process_to_run, i, smx_process_t)->context);
+ }
+ else {
+ /* all processes were run, return to maestro */
+ XBT_DEBUG("No more process to run");
+ next_context = static_cast<BoostSerialContext*>(
+ maestro_context_);
+ }
+ SIMIX_context_set_current((smx_context_t) next_context);
+ #if HAVE_BOOST_CONTEXT == 1
+ boost::context::jump_fcontext(
+ this->fc_, next_context->fc_, (intptr_t) next_context);
+ #else
+ boost::context::jump_fcontext(
+ &this->fc_, next_context->fc_, (intptr_t) next_context);
+ #endif
+}
+
+void BoostSerialContext::stop()
+{
+ BoostContext::stop();
+ this->suspend();
+}
+
+// BoostParallelContext
+
+#ifdef CONTEXT_THREADS
+
+void BoostParallelContext::suspend()
+{
+ smx_process_t next_work = (smx_process_t) xbt_parmap_next(parmap_);
+ BoostParallelContext* next_context = nullptr;
+
+ if (next_work != nullptr) {
+ XBT_DEBUG("Run next process");
+ next_context = static_cast<BoostParallelContext*>(next_work->context);
+ }
+ else {
+ XBT_DEBUG("No more processes to run");
+ unsigned long worker_id =
+ (unsigned long) xbt_os_thread_get_specific(worker_id_key_);
+ next_context = static_cast<BoostParallelContext*>(
+ workers_context_[worker_id]);
+ }
+
+ SIMIX_context_set_current((smx_context_t) next_context);
+#if HAVE_BOOST_CONTEXT == 1
+ boost::context::jump_fcontext(
+ this->fc_, next_context->fc_, (intptr_t)next_context);
+#else
+ boost::context::jump_fcontext(
+ &this->fc_, next_context->fc_, (intptr_t)next_context);
+#endif
+}
+
+void BoostParallelContext::stop()
+{
+ BoostContext::stop();
+ this->suspend();
+}
+
+void BoostParallelContext::resume()
+{
+ unsigned long worker_id = __sync_fetch_and_add(&threads_working_, 1);
+ xbt_os_thread_set_specific(worker_id_key_, (void*) worker_id);
+
+ BoostParallelContext* worker_context =
+ static_cast<BoostParallelContext*>(SIMIX_context_self());
+ workers_context_[worker_id] = worker_context;
+
+ SIMIX_context_set_current(this);
+#if HAVE_BOOST_CONTEXT == 1
+ boost::context::jump_fcontext(
+ worker_context->fc_, this->fc_, (intptr_t) this);
+#else
+ boost::context::jump_fcontext(
+ &worker_context->fc_, this->fc_, (intptr_t) this);
+#endif
+}
+
+#endif
+
+XBT_PRIVATE ContextFactory* boost_factory()
+{
+ return new BoostContextFactory();
+}
+
+}
+}
--- /dev/null
+/* Copyright (c) 2015. 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. */
+
+/** @file BoostContext.hpp
+ Userspace context switching implementation based on Boost.Context */
+
+#ifndef SIMGRID_SIMIX_BOOST_CONTEXT_HPP
+#define SIMGRID_SIMIX_BOOST_CONTEXT_HPP
+
+#include <functional>
+#include <vector>
+
+#include <xbt/parmap.h>
+
+#include <simgrid/simix.hpp>
+
+
+namespace simgrid {
+namespace simix {
+
+class BoostContext;
+class BoostSerialContext;
+class BoostParallelContext;
+class BoostContextFactory;
+
+class BoostContext : public Context {
+protected: // static
+ static bool parallel_;
+ static xbt_parmap_t parmap_;
+ static std::vector<BoostContext*> workers_context_;
+ static unsigned long threads_working_;
+ static xbt_os_thread_key_t worker_id_key_;
+ static unsigned long process_index_;
+ static BoostContext* maestro_context_;
+protected:
+#if HAVE_BOOST_CONTEXT == 1
+ boost::context::fcontext_t* fc_ = nullptr;
+#else
+ boost::context::fcontext_t fc_;
+#endif
+ void* stack_ = nullptr;
+public:
+ friend BoostContextFactory;
+ BoostContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t process);
+ ~BoostContext();
+ void resume();
+private:
+ static void wrapper(int first, ...);
+};
+
+class BoostContextFactory : public ContextFactory {
+public:
+ friend BoostContext;
+ friend BoostSerialContext;
+ friend BoostParallelContext;
+
+ BoostContextFactory();
+ virtual ~BoostContextFactory();
+ virtual Context* create_context(std::function<void()> code,
+ void_pfn_smxprocess_t, smx_process_t process) override;
+ void run_all() override;
+};
+
+}
+}
+
+#endif
--- /dev/null
+/* Copyright (c) 2007-2010, 2012-2015. 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 <cstdint>
+
+#include <memory>
+#include <functional>
+#include <utility>
+
+#include <simgrid/simix.hpp>
+
+#include "mc/mc.h"
+
+#include <src/simix/smx_private.h>
+
+void SIMIX_process_set_cleanup_function(
+ smx_process_t process, void_pfn_smxprocess_t cleanup)
+{
+ process->context->set_cleanup(cleanup);
+}
+
+namespace simgrid {
+namespace simix {
+
+class XBT_PRIVATE args {
+private:
+ int argc_;
+ char** argv_;
+public:
+
+ // Main constructors
+ args() : argc_(0), argv_(nullptr) {}
+ args(int argc, char** argv) : argc_(argc), argv_(argv) {}
+
+ // Free
+ void clear()
+ {
+ for (int i = 0; i < this->argc_; i++)
+ free(this->argv_[i]);
+ free(this->argv_);
+ this->argc_ = 0;
+ this->argv_ = nullptr;
+ }
+ ~args() { clear(); }
+
+ // Copy
+ args(args const& that) = delete;
+ args& operator=(args const& that) = delete;
+
+ // Move:
+ args(args&& that) : argc_(that.argc_), argv_(that.argv_)
+ {
+ that.argc_ = 0;
+ that.argv_ = nullptr;
+ }
+ args& operator=(args&& that)
+ {
+ this->argc_ = that.argc_;
+ this->argv_ = that.argv_;
+ that.argc_ = 0;
+ that.argv_ = nullptr;
+ return *this;
+ }
+
+ int argc() const { return argc_; }
+ char** argv() { return argv_; }
+ const char*const* argv() const { return argv_; }
+ char* operator[](std::size_t i) { return argv_[i]; }
+};
+
+}
+}
+
+static
+std::function<void()> wrap_main(xbt_main_func_t code, int argc, char **argv)
+{
+ if (code) {
+ auto arg = std::make_shared<simgrid::simix::args>(argc, argv);
+ return [=]() {
+ code(arg->argc(), arg->argv());
+ };
+ } else return std::function<void()>();
+}
+
+/**
+ * \brief creates a new context for a user level process
+ * \param code a main function
+ * \param argc the number of arguments of the main function
+ * \param argv the vector of arguments of the main function
+ * \param cleanup_func the function to call when the context stops
+ * \param cleanup_arg the argument of the cleanup_func function
+ */
+smx_context_t SIMIX_context_new(
+ xbt_main_func_t code, int argc, char **argv,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t simix_process)
+{
+ if (!simix_global)
+ xbt_die("simix is not initialized, please call MSG_init first");
+ return simix_global->context_factory->create_context(
+ wrap_main(code, argc, argv), cleanup_func, simix_process);
+}
+
+namespace simgrid {
+namespace simix {
+
+ContextFactoryInitializer factory_initializer = nullptr;
+
+ContextFactory::~ContextFactory() {}
+
+Context* ContextFactory::self()
+{
+ return SIMIX_context_get_current();
+}
+
+void ContextFactory::declare_context(void* context, std::size_t size)
+{
+#ifdef HAVE_MC
+ /* Store the address of the stack in heap to compare it apart of heap comparison */
+ if(MC_is_active())
+ MC_ignore_heap(context, size);
+#endif
+}
+
+Context::Context(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func, smx_process_t process)
+ : code_(std::move(code)), process_(process), iwannadie(false)
+{
+ /* If the user provided a function for the process then use it.
+ Otherwise, it is the context for maestro and we should set it as the
+ current context */
+ if (has_code())
+ this->cleanup_func_ = cleanup_func;
+ else
+ SIMIX_context_set_current(this);
+}
+
+Context::~Context()
+{
+}
+
+void Context::stop()
+{
+ if (this->cleanup_func_)
+ this->cleanup_func_(this->process_);
+ this->process_->suspended = 0;
+
+ this->iwannadie = false;
+ simcall_process_cleanup(this->process_);
+ this->iwannadie = true;
+}
+
+}
+}
\ No newline at end of file
--- /dev/null
+/* Copyright (c) 2009-2015. 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. */
+
+/** \file Rawcontext.cpp
+ * Fast context switching inspired from SystemV ucontexts.
+ *
+ * In contrast to System V context, it does not touch the signal mask
+ * which avoids making a system call (at least on Linux).
+ */
+
+#include <math.h>
+
+#include <utility>
+#include <functional>
+
+#include <xbt/log.h>
+#include <xbt/parmap.h>
+#include <xbt/dynar.h>
+
+#include "smx_private.h"
+#include "smx_private.hpp"
+#include "mc/mc.h"
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
+
+// ***** Class definitions
+
+namespace simgrid {
+namespace simix {
+
+class RawContext;
+class RawContextFactory;
+
+class RawContext : public Context {
+protected:
+ void* stack_ = nullptr;
+ /** pointer to top the stack stack */
+ void* stack_top_ = nullptr;
+public:
+ friend class RawContextFactory;
+ RawContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t process);
+ ~RawContext();
+public:
+ static void wrapper(void* arg);
+ void stop() override;
+ void suspend() override;
+ void resume();
+private:
+ void suspend_serial();
+ void suspend_parallel();
+ void resume_serial();
+ void resume_parallel();
+};
+
+class RawContextFactory : public ContextFactory {
+public:
+ RawContextFactory();
+ ~RawContextFactory();
+ RawContext* create_context(std::function<void()> code,
+ void_pfn_smxprocess_t, smx_process_t process) override;
+ void run_all() override;
+private:
+ void run_all_adaptative();
+ void run_all_serial();
+ void run_all_parallel();
+};
+
+ContextFactory* raw_factory()
+{
+ XBT_VERB("Using raw contexts. "
+ "Because the glibc is just not good enough for us.");
+ return new RawContextFactory();
+}
+
+}
+}
+
+// ***** Loads of static stuff
+
+#ifdef CONTEXT_THREADS
+static xbt_parmap_t raw_parmap;
+static simgrid::simix::RawContext** raw_workers_context; /* space to save the worker context in each thread */
+static unsigned long raw_threads_working; /* number of threads that have started their work */
+static xbt_os_thread_key_t raw_worker_id_key; /* thread-specific storage for the thread id */
+#endif
+#ifdef ADAPTIVE_THRESHOLD
+#define SCHED_ROUND_LIMIT 5
+static xbt_os_timer_t round_time;
+static double par_time,seq_time;
+static double par_ratio,seq_ratio;
+static int reached_seq_limit, reached_par_limit;
+static unsigned int par_proc_that_ran = 0,seq_proc_that_ran = 0; /* Counters of processes that have run in SCHED_ROUND_LIMIT scheduling rounds */
+static unsigned int seq_sched_round=0, par_sched_round=0; /* Amount of SR that ran serial/parallel*/
+/*Varables used to calculate running variance and mean*/
+static double prev_avg_par_proc=0,prev_avg_seq_proc=0;
+static double delta=0;
+static double s_par_proc=0,s_seq_proc=0; /*Standard deviation of number of processes computed in par/seq during the current simulation*/
+static double avg_par_proc=0,sd_par_proc=0;
+static double avg_seq_proc=0,sd_seq_proc=0;
+static long long par_window=(long long)HUGE_VAL,seq_window=0;
+#endif
+static unsigned long raw_process_index = 0; /* index of the next process to run in the
+ * list of runnable processes */
+static simgrid::simix::RawContext* raw_maestro_context;
+
+static bool raw_context_parallel = false;
+#ifdef ADAPTIVE_THRESHOLD
+static bool raw_context_adaptative = false;
+#endif
+
+// ***** Raw context routines
+
+typedef void (*rawctx_entry_point_t)(void *);
+
+typedef void* raw_stack_t;
+extern "C" raw_stack_t raw_makecontext(void* malloced_stack, int stack_size,
+ rawctx_entry_point_t entry_point, void* arg);
+extern "C" void raw_swapcontext(raw_stack_t* old, raw_stack_t new_context);
+
+#if PROCESSOR_x86_64
+__asm__ (
+#if defined(APPLE)
+ ".text\n"
+ ".globl _raw_makecontext\n"
+ "_raw_makecontext:\n"
+#elif defined(_WIN32)
+ ".text\n"
+ ".globl raw_makecontext\n"
+ "raw_makecontext:\n"
+#else
+ ".text\n"
+ ".globl raw_makecontext\n"
+ ".type raw_makecontext,@function\n"
+ "raw_makecontext:\n"/* Calling convention sets the arguments in rdi, rsi, rdx and rcx, respectively */
+#endif
+ " mov %rdi,%rax\n" /* stack */
+ " add %rsi,%rax\n" /* size */
+ " andq $-16, %rax\n" /* align stack */
+ " movq $0, -8(%rax)\n" /* @return for func */
+ " mov %rdx,-16(%rax)\n" /* func */
+ " mov %rcx,-24(%rax)\n" /* arg/rdi */
+ " movq $0, -32(%rax)\n" /* rsi */
+ " movq $0, -40(%rax)\n" /* rdx */
+ " movq $0, -48(%rax)\n" /* rcx */
+ " movq $0, -56(%rax)\n" /* r8 */
+ " movq $0, -64(%rax)\n" /* r9 */
+ " movq $0, -72(%rax)\n" /* rbp */
+ " movq $0, -80(%rax)\n" /* rbx */
+ " movq $0, -88(%rax)\n" /* r12 */
+ " movq $0, -96(%rax)\n" /* r13 */
+ " movq $0, -104(%rax)\n" /* r14 */
+ " movq $0, -112(%rax)\n" /* r15 */
+ " sub $112,%rax\n"
+ " ret\n"
+);
+
+__asm__ (
+#if defined(APPLE)
+ ".text\n"
+ ".globl _raw_swapcontext\n"
+ "_raw_swapcontext:\n"
+#elif defined(_WIN32)
+ ".text\n"
+ ".globl raw_swapcontext\n"
+ "raw_swapcontext:\n"
+#else
+ ".text\n"
+ ".globl raw_swapcontext\n"
+ ".type raw_swapcontext,@function\n"
+ "raw_swapcontext:\n" /* Calling convention sets the arguments in rdi and rsi, respectively */
+#endif
+ " push %rdi\n"
+ " push %rsi\n"
+ " push %rdx\n"
+ " push %rcx\n"
+ " push %r8\n"
+ " push %r9\n"
+ " push %rbp\n"
+ " push %rbx\n"
+ " push %r12\n"
+ " push %r13\n"
+ " push %r14\n"
+ " push %r15\n"
+ " mov %rsp,(%rdi)\n" /* old */
+ " mov %rsi,%rsp\n" /* new */
+ " pop %r15\n"
+ " pop %r14\n"
+ " pop %r13\n"
+ " pop %r12\n"
+ " pop %rbx\n"
+ " pop %rbp\n"
+ " pop %r9\n"
+ " pop %r8\n"
+ " pop %rcx\n"
+ " pop %rdx\n"
+ " pop %rsi\n"
+ " pop %rdi\n"
+ " ret\n"
+);
+#elif PROCESSOR_i686
+__asm__ (
+#if defined(APPLE) || defined(_WIN32)
+ ".text\n"
+ ".globl _raw_makecontext\n"
+ "_raw_makecontext:\n"
+#else
+ ".text\n"
+ ".globl raw_makecontext\n"
+ ".type raw_makecontext,@function\n"
+ "raw_makecontext:\n"
+#endif
+ " movl 4(%esp),%eax\n" /* stack */
+ " addl 8(%esp),%eax\n" /* size */
+ " andl $-16, %eax\n" /* align stack */
+ " movl 12(%esp),%ecx\n" /* func */
+ " movl 16(%esp),%edx\n" /* arg */
+ " movl %edx, -4(%eax)\n"
+ " movl $0, -8(%eax)\n" /* @return for func */
+ " movl %ecx,-12(%eax)\n"
+ " movl $0, -16(%eax)\n" /* ebp */
+ " movl $0, -20(%eax)\n" /* ebx */
+ " movl $0, -24(%eax)\n" /* esi */
+ " movl $0, -28(%eax)\n" /* edi */
+ " subl $28,%eax\n"
+ " retl\n"
+);
+
+__asm__ (
+#if defined(APPLE) || defined(_WIN32)
+ ".text\n"
+ ".globl _raw_swapcontext\n"
+ "_raw_swapcontext:\n"
+#else
+ ".text\n"
+ ".globl raw_swapcontext\n"
+ ".type raw_swapcontext,@function\n"
+ "raw_swapcontext:\n"
+#endif
+ " movl 4(%esp),%eax\n" /* old */
+ " movl 8(%esp),%edx\n" /* new */
+ " pushl %ebp\n"
+ " pushl %ebx\n"
+ " pushl %esi\n"
+ " pushl %edi\n"
+ " movl %esp,(%eax)\n"
+ " movl %edx,%esp\n"
+ " popl %edi\n"
+ " popl %esi\n"
+ " popl %ebx\n"
+ " popl %ebp\n"
+ " retl\n"
+);
+#else
+
+
+/* If you implement raw contexts for other processors, don't forget to
+ update the definition of HAVE_RAWCTX in tools/cmake/CompleteInFiles.cmake */
+
+raw_stack_t raw_makecontext(void* malloced_stack, int stack_size,
+ rawctx_entry_point_t entry_point, void* arg) {
+ THROW_UNIMPLEMENTED;
+}
+
+void raw_swapcontext(raw_stack_t* old, raw_stack_t new_context) {
+ THROW_UNIMPLEMENTED;
+}
+
+#endif
+
+// ***** Method definitions
+
+namespace simgrid {
+namespace simix {
+
+RawContextFactory::RawContextFactory()
+ : ContextFactory("RawContextFactory")
+{
+#ifdef ADAPTIVE_THRESHOLD
+ raw_context_adaptative = (SIMIX_context_get_parallel_threshold() > 1);
+#endif
+ raw_context_parallel = SIMIX_context_is_parallel();
+ if (raw_context_parallel) {
+#ifdef CONTEXT_THREADS
+ int nthreads = SIMIX_context_get_nthreads();
+ xbt_os_thread_key_create(&raw_worker_id_key);
+ // TODO, lazily init
+ raw_parmap = nullptr;
+ raw_workers_context = xbt_new(RawContext*, nthreads);
+ raw_maestro_context = nullptr;
+#endif
+ // TODO, if(SIMIX_context_get_parallel_threshold() > 1) => choose dynamically
+ }
+#ifdef ADAPTIVE_THRESHOLD
+ round_time = xbt_os_timer_new();
+ reached_seq_limit = 0;
+ reached_par_limit = 0;
+#endif
+}
+
+RawContextFactory::~RawContextFactory()
+{
+#ifdef CONTEXT_THREADS
+ if (raw_parmap)
+ xbt_parmap_destroy(raw_parmap);
+ xbt_free(raw_workers_context);
+#endif
+}
+
+RawContext* RawContextFactory::create_context(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup, smx_process_t process)
+{
+ return this->new_context<RawContext>(std::move(code),
+ cleanup, process);
+}
+
+void RawContext::wrapper(void* arg)
+{
+ RawContext* context = (RawContext*) arg;
+ (*context)();
+ context->stop();
+}
+
+RawContext::RawContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup, smx_process_t process)
+ : Context(std::move(code), cleanup, process)
+{
+ if (has_code()) {
+ this->stack_ = SIMIX_context_stack_new();
+ this->stack_top_ = raw_makecontext(this->stack_,
+ smx_context_usable_stack_size,
+ RawContext::wrapper,
+ this);
+ } else {
+ if(process != nullptr && raw_maestro_context == nullptr)
+ raw_maestro_context = this;
+ if (MC_is_active())
+ MC_ignore_heap(
+ &raw_maestro_context->stack_top_,
+ sizeof(raw_maestro_context->stack_top_));
+ }
+}
+
+RawContext::~RawContext()
+{
+ SIMIX_context_stack_delete(this->stack_);
+}
+
+void RawContext::stop()
+{
+ Context::stop();
+ this->suspend();
+}
+
+void RawContextFactory::run_all()
+{
+#ifdef ADAPTIVE_THRESHOLD
+ if (raw_context_adaptative)
+ run_all_adaptative();
+ else
+#endif
+ if (raw_context_parallel)
+ run_all_parallel();
+ else
+ run_all_serial();
+}
+
+void RawContextFactory::run_all_serial()
+{
+ smx_process_t first_process =
+ xbt_dynar_get_as(simix_global->process_to_run, 0, smx_process_t);
+ raw_process_index = 1;
+ static_cast<RawContext*>(first_process->context)->resume_serial();
+}
+
+void RawContextFactory::run_all_parallel()
+{
+#ifdef CONTEXT_THREADS
+ raw_threads_working = 0;
+ if (raw_parmap == nullptr)
+ raw_parmap = xbt_parmap_new(
+ SIMIX_context_get_nthreads(), SIMIX_context_get_parallel_mode());
+ xbt_parmap_apply(raw_parmap,
+ [](void* arg) {
+ smx_process_t process = static_cast<smx_process_t>(arg);
+ RawContext* context = static_cast<RawContext*>(process->context);
+ context->resume_parallel();
+ },
+ simix_global->process_to_run);
+#else
+ xbt_die("You asked for a parallel execution, but you don't have any threads.");
+#endif
+}
+
+void RawContext::suspend()
+{
+ if (raw_context_parallel)
+ RawContext::suspend_parallel();
+ else
+ RawContext::suspend_serial();
+}
+
+void RawContext::suspend_serial()
+{
+ /* determine the next context */
+ RawContext* next_context = nullptr;
+ unsigned long int i;
+ i = raw_process_index++;
+ if (i < xbt_dynar_length(simix_global->process_to_run)) {
+ /* execute the next process */
+ XBT_DEBUG("Run next process");
+ next_context = (RawContext*) xbt_dynar_get_as(
+ simix_global->process_to_run, i, smx_process_t)->context;
+ }
+ else {
+ /* all processes were run, return to maestro */
+ XBT_DEBUG("No more process to run");
+ next_context = (RawContext*) raw_maestro_context;
+ }
+ SIMIX_context_set_current(next_context);
+ raw_swapcontext(&this->stack_top_, next_context->stack_top_);
+}
+
+void RawContext::suspend_parallel()
+{
+#ifdef CONTEXT_THREADS
+ /* determine the next context */
+ smx_process_t next_work = (smx_process_t) xbt_parmap_next(raw_parmap);
+ RawContext* next_context = nullptr;
+
+ if (next_work != NULL) {
+ /* there is a next process to resume */
+ XBT_DEBUG("Run next process");
+ next_context = (RawContext*) next_work->context;
+ }
+ else {
+ /* all processes were run, go to the barrier */
+ XBT_DEBUG("No more processes to run");
+ unsigned long worker_id = (unsigned long)(uintptr_t)
+ xbt_os_thread_get_specific(raw_worker_id_key);
+ next_context = (RawContext*) raw_workers_context[worker_id];
+ XBT_DEBUG("Restoring worker stack %lu (working threads = %lu)",
+ worker_id, raw_threads_working);
+ }
+
+ SIMIX_context_set_current(next_context);
+ raw_swapcontext(&this->stack_top_, next_context->stack_top_);
+#endif
+}
+
+void RawContext::resume()
+{
+ if (raw_context_parallel)
+ resume_parallel();
+ else
+ resume_serial();
+}
+
+void RawContext::resume_serial()
+{
+ SIMIX_context_set_current(this);
+ raw_swapcontext(&raw_maestro_context->stack_top_, this->stack_top_);
+}
+
+void RawContext::resume_parallel()
+{
+#ifdef CONTEXT_THREADS
+ unsigned long worker_id = __sync_fetch_and_add(&raw_threads_working, 1);
+ xbt_os_thread_set_specific(raw_worker_id_key, (void*)(uintptr_t) worker_id);
+ RawContext* worker_context = (RawContext*) SIMIX_context_self();
+ raw_workers_context[worker_id] = worker_context;
+ XBT_DEBUG("Saving worker stack %lu", worker_id);
+ SIMIX_context_set_current(this);
+ raw_swapcontext(&worker_context->stack_top_, this->stack_top_);
+#else
+ xbt_die("Parallel execution disabled");
+#endif
+}
+
+/**
+ * \brief Resumes all processes ready to run.
+ */
+#ifdef ADAPTIVE_THRESHOLD
+void RawContectFactory::run_all_adaptative()
+{
+ unsigned long nb_processes = xbt_dynar_length(simix_global->process_to_run);
+ unsigned long threshold = SIMIX_context_get_parallel_threshold();
+ reached_seq_limit = (seq_sched_round % SCHED_ROUND_LIMIT == 0);
+ reached_par_limit = (par_sched_round % SCHED_ROUND_LIMIT == 0);
+
+ if(reached_seq_limit && reached_par_limit){
+ par_ratio = (par_proc_that_ran != 0) ? (par_time / (double)par_proc_that_ran) : 0;
+ seq_ratio = (seq_proc_that_ran != 0) ? (seq_time / (double)seq_proc_that_ran) : 0;
+ if(seq_ratio > par_ratio){
+ if(nb_processes < avg_par_proc) {
+ threshold = (threshold>2) ? threshold - 1 : threshold ;
+ SIMIX_context_set_parallel_threshold(threshold);
+ }
+ } else {
+ if(nb_processes > avg_seq_proc){
+ SIMIX_context_set_parallel_threshold(threshold+1);
+ }
+ }
+ }
+
+ if (nb_processes >= SIMIX_context_get_parallel_threshold()) {
+ simix_global->context_factory->suspend = smx_ctx_raw_suspend_parallel;
+ if (nb_processes < par_window){
+ par_sched_round++;
+ xbt_os_walltimer_start(round_time);
+ smx_ctx_raw_runall_parallel();
+ xbt_os_walltimer_stop(round_time);
+ par_time += xbt_os_timer_elapsed(round_time);
+
+ prev_avg_par_proc = avg_par_proc;
+ delta = nb_processes - avg_par_proc;
+ avg_par_proc = (par_sched_round==1) ? nb_processes : avg_par_proc + delta / (double) par_sched_round;
+
+ if(par_sched_round>=2){
+ s_par_proc = s_par_proc + (nb_processes - prev_avg_par_proc) * delta;
+ sd_par_proc = sqrt(s_par_proc / (par_sched_round-1));
+ par_window = (int) (avg_par_proc + sd_par_proc);
+ }else{
+ sd_par_proc = 0;
+ }
+
+ par_proc_that_ran += nb_processes;
+ } else{
+ smx_ctx_raw_runall_parallel();
+ }
+ } else {
+ simix_global->context_factory->suspend = smx_ctx_raw_suspend_serial;
+ if(nb_processes > seq_window){
+ seq_sched_round++;
+ xbt_os_walltimer_start(round_time);
+ smx_ctx_raw_runall_serial();
+ xbt_os_walltimer_stop(round_time);
+ seq_time += xbt_os_timer_elapsed(round_time);
+
+ prev_avg_seq_proc = avg_seq_proc;
+ delta = (nb_processes-avg_seq_proc);
+ avg_seq_proc = (seq_sched_round==1) ? nb_processes : avg_seq_proc + delta / (double) seq_sched_round;
+
+ if(seq_sched_round>=2){
+ s_seq_proc = s_seq_proc + (nb_processes - prev_avg_seq_proc)*delta;
+ sd_seq_proc = sqrt(s_seq_proc / (seq_sched_round-1));
+ seq_window = (int) (avg_seq_proc - sd_seq_proc);
+ } else {
+ sd_seq_proc = 0;
+ }
+
+ seq_proc_that_ran += nb_processes;
+ } else {
+ smx_ctx_raw_runall_serial();
+ }
+ }
+}
+
+#else
+
+// TODO
+void RawContextFactory::run_all_adaptative()
+{
+ unsigned long nb_processes = xbt_dynar_length(simix_global->process_to_run);
+ if (SIMIX_context_is_parallel()
+ && (unsigned long) SIMIX_context_get_parallel_threshold() < nb_processes) {
+ raw_context_parallel = true;
+ XBT_DEBUG("Runall // %lu", nb_processes);
+ this->run_all_parallel();
+ } else {
+ XBT_DEBUG("Runall serial %lu", nb_processes);
+ raw_context_parallel = false;
+ this->run_all_serial();
+ }
+}
+#endif
+
+}
+}
--- /dev/null
+/* Copyright (c) 2009-2015. 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 <utility>
+#include <functional>
+
+#include "xbt/function_types.h"
+#include "smx_private.h"
+#include "src/portable.h" /* loads context system definitions */
+#include "xbt/swag.h"
+#include "xbt/xbt_os_thread.h"
+#include "src/xbt_modinter.h" /* prototype of os thread module's init/exit in XBT */
+
+#include "src/simix/ThreadContext.hpp"
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
+
+static xbt_os_sem_t smx_ctx_thread_sem = nullptr;
+
+namespace simgrid {
+namespace simix {
+
+XBT_PRIVATE ContextFactory* thread_factory()
+{
+ XBT_VERB("Activating thread context factory");
+ return new ThreadContextFactory();
+}
+
+ThreadContextFactory::ThreadContextFactory()
+ : ContextFactory("ThreadContextFactory")
+{
+ if (SIMIX_context_is_parallel()) {
+ smx_ctx_thread_sem = xbt_os_sem_init(SIMIX_context_get_nthreads());
+ } else {
+ smx_ctx_thread_sem = nullptr;
+ }
+}
+
+ThreadContextFactory::~ThreadContextFactory()
+{
+ if (smx_ctx_thread_sem) {
+ xbt_os_sem_destroy(smx_ctx_thread_sem);
+ smx_ctx_thread_sem = nullptr;
+ }
+}
+
+ThreadContext* ThreadContextFactory::create_context(
+ std::function<void()> code,
+ void_pfn_smxprocess_t cleanup, smx_process_t process)
+{
+ return this->new_context<ThreadContext>(std::move(code), cleanup, process);
+}
+
+ThreadContext::ThreadContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup, smx_process_t process)
+ : Context(std::move(code), cleanup, process)
+{
+ /* If the user provided a function for the process then use it
+ otherwise is the context for maestro */
+ if (has_code()) {
+ this->begin_ = xbt_os_sem_init(0);
+ this->end_ = xbt_os_sem_init(0);
+ if (smx_context_stack_size_was_set)
+ xbt_os_thread_setstacksize(smx_context_stack_size);
+ if (smx_context_guard_size_was_set)
+ xbt_os_thread_setguardsize(smx_context_guard_size);
+
+ /* create and start the process */
+ /* NOTE: The first argument to xbt_os_thread_create used to be the process *
+ * name, but now the name is stored at SIMIX level, so we pass a null */
+ this->thread_ =
+ xbt_os_thread_create(NULL, ThreadContext::wrapper, this, this);
+
+ /* wait the starting of the newly created process */
+ xbt_os_sem_acquire(this->end_);
+
+ } else {
+ xbt_os_thread_set_extra_data(this);
+ }
+}
+
+void ThreadContextFactory::run_all()
+{
+ if (smx_ctx_thread_sem == nullptr) {
+ // Serial execution
+ smx_process_t process;
+ unsigned int cursor;
+ xbt_dynar_foreach(simix_global->process_to_run, cursor, process) {
+ XBT_DEBUG("Handling %p",process);
+ ThreadContext* context = static_cast<ThreadContext*>(process->context);
+ xbt_os_sem_release(context->begin_);
+ xbt_os_sem_acquire(context->end_);
+ }
+ } else {
+ // Parallel execution
+ unsigned int index;
+ smx_process_t process;
+ xbt_dynar_foreach(simix_global->process_to_run, index, process)
+ xbt_os_sem_release(static_cast<ThreadContext*>(process->context)->begin_);
+ xbt_dynar_foreach(simix_global->process_to_run, index, process)
+ xbt_os_sem_acquire(static_cast<ThreadContext*>(process->context)->end_);
+ }
+}
+
+ThreadContext* ThreadContextFactory::self()
+{
+ return static_cast<ThreadContext*>(xbt_os_thread_get_extra_data());
+}
+
+ThreadContext::~ThreadContext()
+{
+ /* check if this is the context of maestro (it doesn't have a real thread) */
+ if (this->thread_) {
+ /* wait about the thread terminason */
+ xbt_os_thread_join(this->thread_, nullptr);
+
+ /* destroy the synchronisation objects */
+ xbt_os_sem_destroy(this->begin_);
+ xbt_os_sem_destroy(this->end_);
+ }
+}
+
+void *ThreadContext::wrapper(void *param)
+{
+ ThreadContext* context = static_cast<ThreadContext*>(param);
+
+#ifndef WIN32
+ /* Install alternate signal stack, for SIGSEGV handler. */
+ stack_t stack;
+ stack.ss_sp = sigsegv_stack;
+ stack.ss_size = sizeof sigsegv_stack;
+ stack.ss_flags = 0;
+ sigaltstack(&stack, nullptr);
+#endif
+ /* Tell the maestro we are starting, and wait for its green light */
+ xbt_os_sem_release(context->end_);
+ xbt_os_sem_acquire(context->begin_);
+ if (smx_ctx_thread_sem) /* parallel run */
+ xbt_os_sem_acquire(smx_ctx_thread_sem);
+
+ (*context)();
+ context->stop();
+ return nullptr;
+}
+
+void ThreadContext::stop()
+{
+ Context::stop();
+ if (smx_ctx_thread_sem)
+ xbt_os_sem_release(smx_ctx_thread_sem);
+
+ // Signal to the maestro that it has finished:
+ xbt_os_sem_release(this->end_);
+
+ xbt_os_thread_exit(NULL);
+}
+
+void ThreadContext::suspend()
+{
+ if (smx_ctx_thread_sem)
+ xbt_os_sem_release(smx_ctx_thread_sem);
+ xbt_os_sem_release(this->end_);
+ xbt_os_sem_acquire(this->begin_);
+ if (smx_ctx_thread_sem)
+ xbt_os_sem_acquire(smx_ctx_thread_sem);
+}
+
+}
+}
--- /dev/null
+/* Copyright (c) 2009-2015. 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. */
+
+/* \file ThreadContext.hpp Context switching with native threads */
+
+#ifndef SIMGRID_SIMIX_THREAD_CONTEXT_HPP
+#define SIMGRID_SIMIX_THREAD_CONTEXT_HPP
+
+#include <simgrid/simix.hpp>
+
+
+namespace simgrid {
+namespace simix {
+
+class ThreadContext;
+class ThreadContextFactory;
+
+class ThreadContext : public Context {
+public:
+ friend ThreadContextFactory;
+ ThreadContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t process);
+ ~ThreadContext();
+ void stop() override;
+ void suspend() override;
+private:
+ /** A portable thread */
+ xbt_os_thread_t thread_;
+ /** Semaphore used to schedule/yield the process */
+ xbt_os_sem_t begin_;
+ /** Semaphore used to schedule/unschedule */
+ xbt_os_sem_t end_;
+private:
+ static void* wrapper(void *param);
+};
+
+class ThreadContextFactory : public ContextFactory {
+public:
+ ThreadContextFactory();
+ ~ThreadContextFactory();
+ virtual ThreadContext* create_context(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func, smx_process_t process) override;
+ void run_all() override;
+ ThreadContext* self() override;
+};
+
+}
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+/* Copyright (c) 2009-2015. 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. */
+
+/* \file UContext.cpp Context switching with ucontexts from System V */
+
+#include <stdarg.h>
+
+#include <functional>
+
+#include "xbt/parmap.h"
+#include "smx_private.h"
+#include "smx_private.hpp"
+#include "src/internal_config.h"
+#include "src/context_sysv_config.h" /* loads context system definitions */
+#include "mc/mc.h"
+
+#ifdef _XBT_WIN32
+# include <xbt/win32_ucontext.h> /* context relative declarations */
+#else
+# include <ucontext.h> /* context relative declarations */
+#endif
+
+/** Many integers are needed to store a pointer
+ *
+ * This is a bit paranoid about sizeof(smx_ctx_sysv_t) not being a multiple
+ * of sizeof(int), but it doesn't harm. */
+#define CTX_ADDR_LEN \
+ (sizeof(void*) / sizeof(int) + \
+ !!(sizeof(void*) % sizeof(int)))
+
+/** A better makecontext
+ *
+ * Makecontext expects integer arguments, we the context
+ * variable is decomposed into a serie of integers and
+ * each integer is passed as argument to makecontext. */
+XBT_PRIVATE
+void simgrid_makecontext(ucontext* ucp, void (*func)(int first, ...), void* arg)
+{
+ int ctx_addr[CTX_ADDR_LEN];
+ memcpy(ctx_addr, &arg, sizeof(void*));
+ switch (CTX_ADDR_LEN) {
+ case 1:
+ makecontext(ucp, (void (*)())func, 1, ctx_addr[0]);
+ break;
+ case 2:
+ makecontext(ucp, (void (*)()) func, 2, ctx_addr[0], ctx_addr[1]);
+ break;
+ default:
+ xbt_die("Ucontexts are not supported on this arch yet (addr len = %zu/%zu = %zu)",
+ sizeof(void*), sizeof(int), CTX_ADDR_LEN);
+ }
+}
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
+
+namespace simgrid {
+namespace simix {
+ class UContext;
+ class SerialUContext;
+ class ParallelUContext;
+ class UContextFactory;
+}
+}
+
+#ifdef CONTEXT_THREADS
+static xbt_parmap_t sysv_parmap;
+static simgrid::simix::ParallelUContext** sysv_workers_context; /* space to save the worker's context in each thread */
+static unsigned long sysv_threads_working; /* number of threads that have started their work */
+static xbt_os_thread_key_t sysv_worker_id_key; /* thread-specific storage for the thread id */
+#endif
+static unsigned long sysv_process_index = 0; /* index of the next process to run in the
+ * list of runnable processes */
+static simgrid::simix::UContext* sysv_maestro_context;
+static bool sysv_parallel;
+
+namespace simgrid {
+namespace simix {
+
+class UContext : public Context {
+protected:
+ ucontext_t uc_; /* the ucontext that executes the code */
+ char *stack_ = nullptr; /* the thread stack */
+public:
+ friend UContextFactory;
+ UContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func, smx_process_t process);
+ ~UContext();
+protected:
+ static void wrapper(int first, ...);
+};
+
+class SerialUContext : public UContext {
+public:
+ SerialUContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func, smx_process_t process)
+ : UContext(std::move(code), cleanup_func, process)
+ {}
+ void stop() override;
+ void suspend() override;
+ void resume();
+};
+
+class ParallelUContext : public UContext {
+public:
+ ParallelUContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func, smx_process_t process)
+ : UContext(std::move(code), cleanup_func, process)
+ {}
+ void stop() override;
+ void suspend() override;
+ void resume();
+};
+
+class UContextFactory : public ContextFactory {
+public:
+ friend UContext;
+ friend SerialUContext;
+ friend ParallelUContext;
+
+ UContextFactory();
+ virtual ~UContextFactory();
+ virtual Context* create_context(std::function<void()> code,
+ void_pfn_smxprocess_t, smx_process_t process) override;
+ void run_all() override;
+};
+
+XBT_PRIVATE ContextFactory* sysv_factory()
+{
+ XBT_VERB("Activating SYSV context factory");
+ return new UContextFactory();
+}
+
+UContextFactory::UContextFactory() : ContextFactory("UContextFactory")
+{
+ if (SIMIX_context_is_parallel()) {
+ sysv_parallel = true;
+#ifdef CONTEXT_THREADS /* To use parallel ucontexts a thread pool is needed */
+ int nthreads = SIMIX_context_get_nthreads();
+ sysv_parmap = nullptr;
+ sysv_workers_context = xbt_new(ParallelUContext*, nthreads);
+ sysv_maestro_context = nullptr;
+ xbt_os_thread_key_create(&sysv_worker_id_key);
+#else
+ THROWF(arg_error, 0, "No thread support for parallel context execution");
+#endif
+ } else {
+ sysv_parallel = false;
+ }
+}
+
+UContextFactory::~UContextFactory()
+{
+#ifdef CONTEXT_THREADS
+ if (sysv_parmap)
+ xbt_parmap_destroy(sysv_parmap);
+ xbt_free(sysv_workers_context);
+#endif
+}
+
+/* This function is called by maestro at the beginning of a scheduling round to get all working threads executing some stuff
+ * It is much easier to understand what happens if you see the working threads as bodies that swap their soul for the
+ * ones of the simulated processes that must run.
+ */
+void UContextFactory::run_all()
+{
+ if (sysv_parallel) {
+ #ifdef CONTEXT_THREADS
+ sysv_threads_working = 0;
+ // Parmap_apply ensures that every working thread get an index in the
+ // process_to_run array (through an atomic fetch_and_add),
+ // and runs the smx_ctx_sysv_resume_parallel function on that index
+
+ // We lazily create the parmap because the parmap creates context
+ // with simix_global->context_factory (which might not be initialized
+ // when bootstrapping):
+ if (sysv_parmap == nullptr)
+ sysv_parmap = xbt_parmap_new(
+ SIMIX_context_get_nthreads(), SIMIX_context_get_parallel_mode());
+
+ xbt_parmap_apply(sysv_parmap,
+ [](void* arg) {
+ smx_process_t process = (smx_process_t) arg;
+ ParallelUContext* context = static_cast<ParallelUContext*>(process->context);
+ context->resume();
+ },
+ simix_global->process_to_run);
+ #else
+ xbt_die("You asked for a parallel execution, but you don't have any threads.");
+ #endif
+ } else {
+ // Serial:
+ smx_process_t first_process =
+ xbt_dynar_get_as(simix_global->process_to_run, 0, smx_process_t);
+ sysv_process_index = 1;
+ SerialUContext* context =
+ static_cast<SerialUContext*>(first_process->context);
+ context->resume();
+ }
+}
+
+Context* UContextFactory::create_context(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup, smx_process_t process)
+{
+ if (sysv_parallel)
+ return new_context<ParallelUContext>(std::move(code), cleanup, process);
+ else
+ return new_context<SerialUContext>(std::move(code), cleanup, process);
+}
+
+UContext::UContext(std::function<void()> code,
+ void_pfn_smxprocess_t cleanup_func, smx_process_t process)
+ : Context(std::move(code), cleanup_func, process)
+{
+ /* if the user provided a function for the process then use it,
+ otherwise it is the context for maestro */
+ if (has_code()) {
+ this->stack_ = (char*) SIMIX_context_stack_new();
+ getcontext(&this->uc_);
+ this->uc_.uc_link = nullptr;
+ this->uc_.uc_stack.ss_sp = pth_skaddr_makecontext(
+ this->stack_, smx_context_usable_stack_size);
+ this->uc_.uc_stack.ss_size = pth_sksize_makecontext(
+ this->stack_, smx_context_usable_stack_size);
+ simgrid_makecontext(&this->uc_, UContext::wrapper, this);
+ } else {
+ if (process != NULL && sysv_maestro_context == NULL)
+ sysv_maestro_context = this;
+ }
+
+#ifdef HAVE_MC
+ if (MC_is_active() && code) {
+ MC_register_stack_area(this->stack_, context->process,
+ &(this->uc_), smx_context_usable_stack_size);
+ }
+#endif
+}
+
+UContext::~UContext()
+{
+ SIMIX_context_stack_delete(this->stack_);
+}
+
+void UContext::wrapper(int first, ...)
+{
+ // Rebuild the Context* pointer from the integers:
+ int ctx_addr[CTX_ADDR_LEN];
+ UContext* context;
+ ctx_addr[0] = first;
+ if (CTX_ADDR_LEN > 1) {
+ va_list ap;
+ va_start(ap, first);
+ for (unsigned i = 1; i < CTX_ADDR_LEN; i++)
+ ctx_addr[i] = va_arg(ap, int);
+ va_end(ap);
+ }
+ memcpy(&context, ctx_addr, sizeof(UContext*));
+
+ (*context)();
+ context->stop();
+}
+
+void SerialUContext::stop()
+{
+ Context::stop();
+ this->suspend();
+}
+
+void SerialUContext::suspend()
+{
+ /* determine the next context */
+ SerialUContext* next_context = nullptr;
+ unsigned long int i = sysv_process_index++;
+
+ if (i < xbt_dynar_length(simix_global->process_to_run)) {
+ /* execute the next process */
+ XBT_DEBUG("Run next process");
+ next_context = (SerialUContext*) xbt_dynar_get_as(
+ simix_global->process_to_run,i, smx_process_t)->context;
+ }
+ else {
+ /* all processes were run, return to maestro */
+ XBT_DEBUG("No more process to run");
+ next_context = (SerialUContext*) sysv_maestro_context;
+ }
+ SIMIX_context_set_current(next_context);
+ swapcontext(&this->uc_, &next_context->uc_);
+}
+
+// UContextSerial
+
+void SerialUContext::resume()
+{
+ SIMIX_context_set_current(this);
+ swapcontext(&((SerialUContext*)sysv_maestro_context)->uc_, &this->uc_);
+}
+
+void ParallelUContext::stop()
+{
+ UContext::stop();
+ this->suspend();
+}
+
+/** Run one particular simulated process on the current thread. */
+void ParallelUContext::resume()
+{
+#ifdef CONTEXT_THREADS
+ // What is my containing body?
+ unsigned long worker_id = __sync_fetch_and_add(&sysv_threads_working, 1);
+ // Store the number of my containing body in os-thread-specific area :
+ xbt_os_thread_set_specific(sysv_worker_id_key, (void*) worker_id);
+ // Get my current soul:
+ ParallelUContext* worker_context = (ParallelUContext*) SIMIX_context_self();
+ // Write down that this soul is hosted in that body (for now)
+ sysv_workers_context[worker_id] = worker_context;
+ // Retrieve the system-level info that fuels this soul:
+ ucontext_t* worker_stack = &((ParallelUContext*) worker_context)->uc_;
+ // Write in simix that I switched my soul
+ SIMIX_context_set_current(this);
+ // Actually do that using the relevant library call:
+ swapcontext(worker_stack, &this->uc_);
+ // No body runs that soul anymore at this point.
+ // Instead the current body took the soul of simulated process
+ // The simulated process wakes back after the call to
+ // "SIMIX_context_suspend(self->context);" within
+ // smx_process.c::SIMIX_process_yield()
+
+ // From now on, the simulated processes will change their
+ // soul with the next soul to execute (in suspend_parallel, below).
+ // When nobody is to be executed in this scheduling round,
+ // the last simulated process will take back the initial
+ // soul of the current working thread
+#endif
+}
+
+/** Yield
+ *
+ * This function is called when a simulated process wants to yield back
+ * to the maestro in a blocking simcall. This naturally occurs within
+ * SIMIX_context_suspend(self->context), called from SIMIX_process_yield()
+ * Actually, it does not really yield back to maestro, but into the next
+ * process that must be executed. If no one is to be executed, then it
+ * yields to the initial soul that was in this working thread (that was
+ * saved in resume_parallel).
+ */
+void ParallelUContext::suspend()
+{
+#ifdef CONTEXT_THREADS
+ /* determine the next context */
+ // Get the next soul to embody now:
+ smx_process_t next_work = (smx_process_t) xbt_parmap_next(sysv_parmap);
+ ParallelUContext* next_context = nullptr;
+ // Will contain the next soul to run, either simulated or initial minion's one
+ ucontext_t* next_stack;
+
+ if (next_work != NULL) {
+ // There is a next soul to embody (ie, a next process to resume)
+ XBT_DEBUG("Run next process");
+ next_context = (ParallelUContext*) next_work->context;
+ }
+ else {
+ // All processes were run, go to the barrier
+ XBT_DEBUG("No more processes to run");
+ // Get back the identity of my body that was stored when starting
+ // the scheduling round
+ unsigned long worker_id =
+ (unsigned long) xbt_os_thread_get_specific(sysv_worker_id_key);
+ // Deduce the initial soul of that body
+ next_context = (ParallelUContext*) sysv_workers_context[worker_id];
+ // When given that soul, the body will wait for the next scheduling round
+ }
+
+ next_stack = &next_context->uc_;
+
+ SIMIX_context_set_current(next_context);
+ // Get that next soul:
+ swapcontext(&this->uc_, next_stack);
+#endif
+}
+
+}
+}
+
/* 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 "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
#include "smx_private.h"
-#include "mc/mc_forward.h"
+#include "src/mc/mc_forward.h"
#include "xbt/ex.h"
#include <math.h> /* isfinite() */
#include "mc/mc.h"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix);
-#include "popping_bodies.c"
-
-/**
- * \ingroup simix_host_management
- * \brief Returns the name of a host.
- *
- * \param host A SIMIX host
- * \return The name of this host
- */
-const char* simcall_host_get_name(sg_host_t host)
-{
- return simcall_BODY_host_get_name(host);
-}
+#include "popping_bodies.cpp"
/**
* \ingroup simix_host_management
return simcall_BODY_asr_get_properties(name);
}
-
-/**
- * \ingroup simix_host_management
- * \brief Returns the speed of the processor.
- *
- * The speed returned does not take into account the current load on the machine.
- * \param host A SIMIX host
- * \return The speed of this host (in Mflop/s)
- */
-double simcall_host_get_speed(sg_host_t host)
-{
- return simcall_BODY_host_get_speed(host);
-}
-
-/**
- * \ingroup simix_host_management
- * \brief Returns the number of core of the processor.
- *
- * \param host A SIMIX host
- * \return The number of core
- */
-int simcall_host_get_core(sg_host_t host)
-{
- return simcall_BODY_host_get_core(host);
-}
-
/**
* \ingroup simix_host_management
* \brief Returns the list of processes attached to the host.
return simcall_BODY_host_get_process_list(host);
}
-
-/**
- * \ingroup simix_host_management
- * \brief Returns the available speed of the processor.
- *
- * \return Speed currently available (in Mflop/s)
- */
-double simcall_host_get_available_speed(sg_host_t host)
-{
- return simcall_BODY_host_get_available_speed(host);
-}
-
-/**
- * \ingroup simix_host_management
- * \brief Returns the state of a host.
- *
- * Two states are possible: 1 if the host is active or 0 if it has crashed.
- * \param host A SIMIX host
- * \return 1 if the host is available, 0 otherwise
- */
-int simcall_host_get_state(sg_host_t host)
-{
- return simcall_BODY_host_get_state(host);
-}
-
/**
* \ingroup simix_host_management
* \brief Returns the power peak of a host.
return simcall_BODY_host_get_power_peak_at(host, pstate_index);
}
-/**
- * \ingroup simix_host_management
- * \brief Returns the number of power states for a host.
- *
- * \param host A SIMIX host
- * \return the number of power states
- */
-int simcall_host_get_nb_pstates(sg_host_t host)
-{
- return simcall_BODY_host_get_nb_pstates(host);
-}
-
/**
* \ingroup simix_host_management
* \brief Sets the pstate at which the host should run
{
simcall_BODY_host_set_pstate(host, pstate_index);
}
-/**
- * \ingroup simix_host_management
- * \brief Gets the pstate at which that host currently runs.
- *
- * \param host A SIMIX host
- */
-int simcall_host_get_pstate(sg_host_t host)
-{
- return simcall_BODY_host_get_pstate(host);
-}
-/**
- * \ingroup simix_host_management
- * \brief Returns the total energy consumed by the host (in Joules)
- *
- * \param host A SIMIX host
- * \return the energy consumed by the host (double)
- */
-double simcall_host_get_consumed_energy(sg_host_t host)
-{
- return simcall_BODY_host_get_consumed_energy(host);
-}
/** \ingroup simix_host_management
* \brief Returns the amount of watt dissipated at the given pstate when the host is idling
*/
*/
e_smx_state_t simcall_process_execution_wait(smx_synchro_t execution)
{
- return simcall_BODY_process_execution_wait(execution);
+ return (e_smx_state_t) simcall_BODY_process_execution_wait(execution);
}
}
}
+static void kill_process(void* arg)
+{
+ simix_global->kill_process_function((smx_process_t) arg);
+}
+
/**
* \ingroup simix_process_management
* \brief Set the kill time of a process.
if (kill_time > SIMIX_get_clock()) {
if (simix_global->kill_process_function) {
XBT_DEBUG("Set kill time %f for process %s(%s)",kill_time, process->name,
- sg_host_name(process->host));
- process->kill_timer = SIMIX_timer_set(kill_time, simix_global->kill_process_function, process);
+ sg_host_get_name(process->host));
+ process->kill_timer = SIMIX_timer_set(kill_time, kill_process, process);
}
}
}
*/
XBT_PUBLIC(smx_process_t) simcall_process_restart(smx_process_t process)
{
- return simcall_BODY_process_restart(process);
+ return (smx_process_t) simcall_BODY_process_restart(process);
}
/**
* \ingroup simix_process_management
{
/* checking for infinite values */
xbt_assert(isfinite(duration), "duration is not finite!");
- return simcall_BODY_process_sleep(duration);
+ return (e_smx_state_t) simcall_BODY_process_sleep(duration);
}
/**
-/* Copyright (c) 2010-2014. The SimGrid Team.
+/* Copyright (c) 2010-2015. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#include "xbt/fifo.h"
#include "xbt/xbt_os_thread.h"
#ifdef HAVE_MC
-#include "mc/mc_private.h"
+#include "src/mc/mc_private.h"
#endif
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_popping, simix,
*/
-static inline sg_host_t simcall_host_get_name__get__host(smx_simcall_t simcall) {
- return (sg_host_t) simcall->args[0].dp;
-}
-static inline void simcall_host_get_name__set__host(smx_simcall_t simcall, void* arg) {
- simcall->args[0].dp = arg;
-}
-static inline const char* simcall_host_get_name__get__result(smx_simcall_t simcall){
- return simcall->result.cc;
-}
-static inline void simcall_host_get_name__set__result(smx_simcall_t simcall, const char* result){
- simcall->result.cc = result;
-}
-
static inline sg_host_t simcall_host_on__get__host(smx_simcall_t simcall) {
return (sg_host_t) simcall->args[0].dp;
}
simcall->result.dp = result;
}
-static inline sg_host_t simcall_host_get_core__get__host(smx_simcall_t simcall) {
- return (sg_host_t) simcall->args[0].dp;
-}
-static inline void simcall_host_get_core__set__host(smx_simcall_t simcall, void* arg) {
- simcall->args[0].dp = arg;
-}
-static inline int simcall_host_get_core__get__result(smx_simcall_t simcall){
- return simcall->result.i;
-}
-static inline void simcall_host_get_core__set__result(smx_simcall_t simcall, int result){
- simcall->result.i = result;
-}
-
static inline sg_host_t simcall_host_get_process_list__get__host(smx_simcall_t simcall) {
return (sg_host_t) simcall->args[0].dp;
}
simcall->result.dp = result;
}
-static inline sg_host_t simcall_host_get_speed__get__host(smx_simcall_t simcall) {
- return (sg_host_t) simcall->args[0].dp;
-}
-static inline void simcall_host_get_speed__set__host(smx_simcall_t simcall, void* arg) {
- simcall->args[0].dp = arg;
-}
-static inline double simcall_host_get_speed__get__result(smx_simcall_t simcall){
- return simcall->result.d;
-}
-static inline void simcall_host_get_speed__set__result(smx_simcall_t simcall, double result){
- simcall->result.d = result;
-}
-
-static inline sg_host_t simcall_host_get_available_speed__get__host(smx_simcall_t simcall) {
- return (sg_host_t) simcall->args[0].dp;
-}
-static inline void simcall_host_get_available_speed__set__host(smx_simcall_t simcall, void* arg) {
- simcall->args[0].dp = arg;
-}
-static inline double simcall_host_get_available_speed__get__result(smx_simcall_t simcall){
- return simcall->result.d;
-}
-static inline void simcall_host_get_available_speed__set__result(smx_simcall_t simcall, double result){
- simcall->result.d = result;
-}
-
-static inline sg_host_t simcall_host_get_state__get__host(smx_simcall_t simcall) {
- return (sg_host_t) simcall->args[0].dp;
-}
-static inline void simcall_host_get_state__set__host(smx_simcall_t simcall, void* arg) {
- simcall->args[0].dp = arg;
-}
-static inline int simcall_host_get_state__get__result(smx_simcall_t simcall){
- return simcall->result.i;
-}
-static inline void simcall_host_get_state__set__result(smx_simcall_t simcall, int result){
- simcall->result.i = result;
-}
-
static inline sg_host_t simcall_host_get_current_power_peak__get__host(smx_simcall_t simcall) {
return (sg_host_t) simcall->args[0].dp;
}
simcall->result.d = result;
}
-static inline sg_host_t simcall_host_get_nb_pstates__get__host(smx_simcall_t simcall) {
- return (sg_host_t) simcall->args[0].dp;
-}
-static inline void simcall_host_get_nb_pstates__set__host(smx_simcall_t simcall, void* arg) {
- simcall->args[0].dp = arg;
-}
-static inline int simcall_host_get_nb_pstates__get__result(smx_simcall_t simcall){
- return simcall->result.i;
-}
-static inline void simcall_host_get_nb_pstates__set__result(smx_simcall_t simcall, int result){
- simcall->result.i = result;
-}
-
static inline sg_host_t simcall_host_get_wattmin_at__get__host(smx_simcall_t simcall) {
return (sg_host_t) simcall->args[0].dp;
}
simcall->args[1].i = arg;
}
-static inline sg_host_t simcall_host_get_pstate__get__host(smx_simcall_t simcall) {
- return (sg_host_t) simcall->args[0].dp;
-}
-static inline void simcall_host_get_pstate__set__host(smx_simcall_t simcall, void* arg) {
- simcall->args[0].dp = arg;
-}
-static inline int simcall_host_get_pstate__get__result(smx_simcall_t simcall){
- return simcall->result.i;
-}
-static inline void simcall_host_get_pstate__set__result(smx_simcall_t simcall, int result){
- simcall->result.i = result;
-}
-
-static inline sg_host_t simcall_host_get_consumed_energy__get__host(smx_simcall_t simcall) {
- return (sg_host_t) simcall->args[0].dp;
-}
-static inline void simcall_host_get_consumed_energy__set__host(smx_simcall_t simcall, void* arg) {
- simcall->args[0].dp = arg;
-}
-static inline double simcall_host_get_consumed_energy__get__result(smx_simcall_t simcall){
- return simcall->result.d;
-}
-static inline void simcall_host_get_consumed_energy__set__result(smx_simcall_t simcall, double result){
- simcall->result.d = result;
-}
-
static inline sg_host_t simcall_host_get_mounted_storage_list__get__host(smx_simcall_t simcall) {
return (sg_host_t) simcall->args[0].dp;
}
*/
#include "smx_private.h"
-#include "mc/mc_forward.h"
+#include "src/mc/mc_forward.h"
#include "xbt/ex.h"
-inline static const char* simcall_BODY_host_get_name(sg_host_t host) {
- smx_process_t self = SIMIX_process_self();
-
- /* Go to that function to follow the code flow through the simcall barrier */
- if (0) SIMIX_host_get_name(host);
- /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
- self->simcall.call = SIMCALL_HOST_GET_NAME;
- memset(&self->simcall.result, 0, sizeof(self->simcall.result));
- memset(self->simcall.args, 0, sizeof(self->simcall.args));
- self->simcall.args[0].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);
- SIMIX_process_yield(self);
- } else {
- SIMIX_simcall_handle(&self->simcall, 0);
- }
- return self->simcall.result.cc;
- }
-
inline static void simcall_BODY_host_on(sg_host_t host) {
smx_process_t self = SIMIX_process_self();
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
- }
-
-inline static int simcall_BODY_host_get_core(sg_host_t host) {
- smx_process_t self = SIMIX_process_self();
-
- /* Go to that function to follow the code flow through the simcall barrier */
- if (0) SIMIX_host_get_core(host);
- /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
- self->simcall.call = SIMCALL_HOST_GET_CORE;
- memset(&self->simcall.result, 0, sizeof(self->simcall.result));
- memset(self->simcall.args, 0, sizeof(self->simcall.args));
- self->simcall.args[0].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);
- SIMIX_process_yield(self);
- } else {
- SIMIX_simcall_handle(&self->simcall, 0);
- }
- return self->simcall.result.i;
+ return (xbt_dict_t) self->simcall.result.dp;
}
inline static xbt_swag_t simcall_BODY_host_get_process_list(sg_host_t host) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
- }
-
-inline static double simcall_BODY_host_get_speed(sg_host_t host) {
- smx_process_t self = SIMIX_process_self();
-
- /* Go to that function to follow the code flow through the simcall barrier */
- if (0) SIMIX_host_get_speed(host);
- /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
- self->simcall.call = SIMCALL_HOST_GET_SPEED;
- memset(&self->simcall.result, 0, sizeof(self->simcall.result));
- memset(self->simcall.args, 0, sizeof(self->simcall.args));
- self->simcall.args[0].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);
- SIMIX_process_yield(self);
- } else {
- SIMIX_simcall_handle(&self->simcall, 0);
- }
- return self->simcall.result.d;
- }
-
-inline static double simcall_BODY_host_get_available_speed(sg_host_t host) {
- smx_process_t self = SIMIX_process_self();
-
- /* Go to that function to follow the code flow through the simcall barrier */
- if (0) SIMIX_host_get_available_speed(host);
- /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
- self->simcall.call = SIMCALL_HOST_GET_AVAILABLE_SPEED;
- memset(&self->simcall.result, 0, sizeof(self->simcall.result));
- memset(self->simcall.args, 0, sizeof(self->simcall.args));
- self->simcall.args[0].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);
- SIMIX_process_yield(self);
- } else {
- SIMIX_simcall_handle(&self->simcall, 0);
- }
- return self->simcall.result.d;
- }
-
-inline static int simcall_BODY_host_get_state(sg_host_t host) {
- smx_process_t self = SIMIX_process_self();
-
- /* Go to that function to follow the code flow through the simcall barrier */
- if (0) SIMIX_host_get_state(host);
- /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
- self->simcall.call = SIMCALL_HOST_GET_STATE;
- memset(&self->simcall.result, 0, sizeof(self->simcall.result));
- memset(self->simcall.args, 0, sizeof(self->simcall.args));
- self->simcall.args[0].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);
- SIMIX_process_yield(self);
- } else {
- SIMIX_simcall_handle(&self->simcall, 0);
- }
- return self->simcall.result.i;
+ return (xbt_swag_t) self->simcall.result.dp;
}
inline static double simcall_BODY_host_get_current_power_peak(sg_host_t host) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.d;
+ return (double) self->simcall.result.d;
}
inline static double simcall_BODY_host_get_power_peak_at(sg_host_t host, int pstate_index) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.d;
- }
-
-inline static int simcall_BODY_host_get_nb_pstates(sg_host_t host) {
- smx_process_t self = SIMIX_process_self();
-
- /* Go to that function to follow the code flow through the simcall barrier */
- if (0) SIMIX_host_get_nb_pstates(host);
- /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
- self->simcall.call = SIMCALL_HOST_GET_NB_PSTATES;
- memset(&self->simcall.result, 0, sizeof(self->simcall.result));
- memset(self->simcall.args, 0, sizeof(self->simcall.args));
- self->simcall.args[0].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);
- SIMIX_process_yield(self);
- } else {
- SIMIX_simcall_handle(&self->simcall, 0);
- }
- return self->simcall.result.i;
+ return (double) self->simcall.result.d;
}
inline static double simcall_BODY_host_get_wattmin_at(sg_host_t host, int pstate_index) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.d;
+ return (double) self->simcall.result.d;
}
inline static double simcall_BODY_host_get_wattmax_at(sg_host_t host, int pstate_index) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.d;
+ return (double) self->simcall.result.d;
}
inline static void simcall_BODY_host_set_pstate(sg_host_t host, int pstate_index) {
}
-inline static int simcall_BODY_host_get_pstate(sg_host_t host) {
- smx_process_t self = SIMIX_process_self();
-
- /* Go to that function to follow the code flow through the simcall barrier */
- if (0) SIMIX_host_get_pstate(host);
- /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
- self->simcall.call = SIMCALL_HOST_GET_PSTATE;
- memset(&self->simcall.result, 0, sizeof(self->simcall.result));
- memset(self->simcall.args, 0, sizeof(self->simcall.args));
- self->simcall.args[0].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);
- SIMIX_process_yield(self);
- } else {
- SIMIX_simcall_handle(&self->simcall, 0);
- }
- return self->simcall.result.i;
- }
-
-inline static double simcall_BODY_host_get_consumed_energy(sg_host_t host) {
- smx_process_t self = SIMIX_process_self();
-
- /* Go to that function to follow the code flow through the simcall barrier */
- if (0) SIMIX_host_get_consumed_energy(host);
- /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
- self->simcall.call = SIMCALL_HOST_GET_CONSUMED_ENERGY;
- memset(&self->simcall.result, 0, sizeof(self->simcall.result));
- memset(self->simcall.args, 0, sizeof(self->simcall.args));
- self->simcall.args[0].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);
- SIMIX_process_yield(self);
- } else {
- SIMIX_simcall_handle(&self->simcall, 0);
- }
- return self->simcall.result.d;
- }
-
inline static xbt_dict_t simcall_BODY_host_get_mounted_storage_list(sg_host_t host) {
smx_process_t self = SIMIX_process_self();
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (xbt_dict_t) self->simcall.result.dp;
}
inline static xbt_dynar_t simcall_BODY_host_get_attached_storage_list(sg_host_t host) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (xbt_dynar_t) self->simcall.result.dp;
}
inline static void simcall_BODY_host_get_params(sg_host_t ind_vm, vm_params_t params) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (sg_host_t) self->simcall.result.dp;
}
inline static void simcall_BODY_vm_start(sg_host_t ind_vm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static void simcall_BODY_vm_migrate(sg_host_t ind_vm, sg_host_t ind_dst_pm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (void*) self->simcall.result.dp;
}
inline static void simcall_BODY_vm_set_bound(sg_host_t ind_vm, double bound) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (void*) self->simcall.result.dp;
}
inline static void simcall_BODY_process_kill(smx_process_t process) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static int simcall_BODY_process_get_PID(smx_process_t process) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static int simcall_BODY_process_get_PPID(smx_process_t process) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static void* simcall_BODY_process_get_data(smx_process_t process) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (void*) self->simcall.result.dp;
}
inline static void simcall_BODY_process_set_data(smx_process_t process, void* data) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (sg_host_t) self->simcall.result.dp;
}
inline static const char* simcall_BODY_process_get_name(smx_process_t process) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.cc;
+ return (const char*) self->simcall.result.cc;
}
inline static int simcall_BODY_process_is_suspended(smx_process_t process) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static xbt_dict_t simcall_BODY_process_get_properties(smx_process_t process) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (xbt_dict_t) self->simcall.result.dp;
}
inline static int simcall_BODY_process_join(smx_process_t process, double timeout) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static int simcall_BODY_process_sleep(double duration) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static smx_synchro_t simcall_BODY_process_execute(const char* name, double flops_amount, double priority, double bound, unsigned long affinity_mask) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_synchro_t) self->simcall.result.dp;
}
inline static smx_synchro_t simcall_BODY_process_parallel_execute(const char* name, int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount, double amount, double rate) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_synchro_t) self->simcall.result.dp;
}
inline static void simcall_BODY_process_execution_destroy(smx_synchro_t execution) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.d;
+ return (double) self->simcall.result.d;
}
inline static e_smx_state_t simcall_BODY_process_execution_get_state(smx_synchro_t execution) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (e_smx_state_t) self->simcall.result.i;
}
inline static void simcall_BODY_process_execution_set_priority(smx_synchro_t execution, double priority) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static void simcall_BODY_process_on_exit(smx_process_t process, int_f_pvoid_pvoid_t fun, void* data) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_process_t) self->simcall.result.dp;
}
inline static smx_rdv_t simcall_BODY_rdv_create(const char* name) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_rdv_t) self->simcall.result.dp;
}
inline static void simcall_BODY_rdv_destroy(smx_rdv_t rdv) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.ui;
+ return (unsigned int) self->simcall.result.ui;
}
inline static smx_synchro_t simcall_BODY_rdv_get_head(smx_rdv_t rdv) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_synchro_t) self->simcall.result.dp;
}
inline static void simcall_BODY_rdv_set_receiver(smx_rdv_t rdv, smx_process_t receiver) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_process_t) self->simcall.result.dp;
}
inline static smx_synchro_t simcall_BODY_comm_iprobe(smx_rdv_t rdv, int type, int src, int tag, simix_match_func_t match_fun, void* data) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_synchro_t) self->simcall.result.dp;
}
inline static void simcall_BODY_comm_send(smx_process_t sender, 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) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_synchro_t) self->simcall.result.dp;
}
inline static void simcall_BODY_comm_recv(smx_process_t receiver, smx_rdv_t rdv, void* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout, double rate) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_synchro_t) self->simcall.result.dp;
}
inline static void simcall_BODY_comm_cancel(smx_synchro_t comm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static void simcall_BODY_comm_wait(smx_synchro_t comm, double timeout) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static int simcall_BODY_comm_testany(xbt_dynar_t comms) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static double simcall_BODY_comm_get_remains(smx_synchro_t comm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.d;
+ return (double) self->simcall.result.d;
}
inline static e_smx_state_t simcall_BODY_comm_get_state(smx_synchro_t comm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (e_smx_state_t) self->simcall.result.i;
}
inline static void* simcall_BODY_comm_get_src_data(smx_synchro_t comm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (void*) self->simcall.result.dp;
}
inline static void* simcall_BODY_comm_get_dst_data(smx_synchro_t comm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (void*) self->simcall.result.dp;
}
inline static smx_process_t simcall_BODY_comm_get_src_proc(smx_synchro_t comm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_process_t) self->simcall.result.dp;
}
inline static smx_process_t simcall_BODY_comm_get_dst_proc(smx_synchro_t comm) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_process_t) self->simcall.result.dp;
}
inline static smx_mutex_t simcall_BODY_mutex_init() {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_mutex_t) self->simcall.result.dp;
}
inline static void simcall_BODY_mutex_destroy(smx_mutex_t mutex) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static void simcall_BODY_mutex_unlock(smx_mutex_t mutex) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_cond_t) self->simcall.result.dp;
}
inline static void simcall_BODY_cond_destroy(smx_cond_t cond) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_sem_t) self->simcall.result.dp;
}
inline static void simcall_BODY_sem_destroy(smx_sem_t sem) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static void simcall_BODY_sem_acquire(smx_sem_t sem) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static sg_size_t simcall_BODY_file_read(smx_file_t fd, sg_size_t size, sg_host_t host) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.sgsz;
+ return (sg_size_t) self->simcall.result.sgsz;
}
inline static sg_size_t simcall_BODY_file_write(smx_file_t fd, sg_size_t size, sg_host_t host) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.sgsz;
+ return (sg_size_t) self->simcall.result.sgsz;
}
inline static smx_file_t simcall_BODY_file_open(const char* fullpath, sg_host_t host) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (smx_file_t) self->simcall.result.dp;
}
inline static int simcall_BODY_file_close(smx_file_t fd, sg_host_t host) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static int simcall_BODY_file_unlink(smx_file_t fd, sg_host_t host) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static sg_size_t simcall_BODY_file_get_size(smx_file_t fd) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.sgsz;
+ return (sg_size_t) self->simcall.result.sgsz;
}
inline static sg_size_t simcall_BODY_file_tell(smx_file_t fd) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.sgsz;
+ return (sg_size_t) self->simcall.result.sgsz;
}
inline static int simcall_BODY_file_seek(smx_file_t fd, sg_offset_t offset, int origin) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static xbt_dynar_t simcall_BODY_file_get_info(smx_file_t fd) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (xbt_dynar_t) self->simcall.result.dp;
}
inline static int simcall_BODY_file_move(smx_file_t fd, const char* fullpath) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static sg_size_t simcall_BODY_storage_get_free_size(smx_storage_t storage) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.sgsz;
+ return (sg_size_t) self->simcall.result.sgsz;
}
inline static sg_size_t simcall_BODY_storage_get_used_size(smx_storage_t name) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.sgsz;
+ return (sg_size_t) self->simcall.result.sgsz;
}
inline static xbt_dict_t simcall_BODY_storage_get_properties(smx_storage_t storage) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (xbt_dict_t) self->simcall.result.dp;
}
inline static xbt_dict_t simcall_BODY_storage_get_content(smx_storage_t storage) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (xbt_dict_t) self->simcall.result.dp;
}
inline static xbt_dict_t simcall_BODY_asr_get_properties(const char* name) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (xbt_dict_t) self->simcall.result.dp;
}
inline static int simcall_BODY_mc_random(int min, int max) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
inline static void simcall_BODY_set_category(smx_synchro_t synchro, const char* category) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
#endif
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.dp;
+ return (mc_snapshot_t) self->simcall.result.dp;
}
inline static int simcall_BODY_mc_compare_snapshots(mc_snapshot_t s1, mc_snapshot_t s2) {
} else {
SIMIX_simcall_handle(&self->simcall, 0);
}
- return self->simcall.result.i;
+ return (int) self->simcall.result.i;
}
#endif
*/
typedef enum {
SIMCALL_NONE,
- SIMCALL_HOST_GET_NAME,
SIMCALL_HOST_ON,
SIMCALL_HOST_OFF,
SIMCALL_HOST_GET_PROPERTIES,
- SIMCALL_HOST_GET_CORE,
SIMCALL_HOST_GET_PROCESS_LIST,
- SIMCALL_HOST_GET_SPEED,
- SIMCALL_HOST_GET_AVAILABLE_SPEED,
- SIMCALL_HOST_GET_STATE,
SIMCALL_HOST_GET_CURRENT_POWER_PEAK,
SIMCALL_HOST_GET_POWER_PEAK_AT,
- SIMCALL_HOST_GET_NB_PSTATES,
SIMCALL_HOST_GET_WATTMIN_AT,
SIMCALL_HOST_GET_WATTMAX_AT,
SIMCALL_HOST_SET_PSTATE,
- SIMCALL_HOST_GET_PSTATE,
- SIMCALL_HOST_GET_CONSUMED_ENERGY,
SIMCALL_HOST_GET_MOUNTED_STORAGE_LIST,
SIMCALL_HOST_GET_ATTACHED_STORAGE_LIST,
SIMCALL_HOST_GET_PARAMS,
#include <xbt/base.h>
#include "smx_private.h"
#ifdef HAVE_MC
-#include "mc/mc_forward.h"
+#include "src/mc/mc_forward.h"
#endif
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_popping);
/** @brief Simcalls' names (generated from src/simix/simcalls.in) */
const char* simcall_names[] = {
- [SIMCALL_HOST_GET_NAME] = "SIMCALL_HOST_GET_NAME",
- [SIMCALL_HOST_ON] = "SIMCALL_HOST_ON",
- [SIMCALL_HOST_OFF] = "SIMCALL_HOST_OFF",
- [SIMCALL_HOST_GET_PROPERTIES] = "SIMCALL_HOST_GET_PROPERTIES",
- [SIMCALL_HOST_GET_CORE] = "SIMCALL_HOST_GET_CORE",
- [SIMCALL_HOST_GET_PROCESS_LIST] = "SIMCALL_HOST_GET_PROCESS_LIST",
- [SIMCALL_HOST_GET_SPEED] = "SIMCALL_HOST_GET_SPEED",
- [SIMCALL_HOST_GET_AVAILABLE_SPEED] = "SIMCALL_HOST_GET_AVAILABLE_SPEED",
- [SIMCALL_HOST_GET_STATE] = "SIMCALL_HOST_GET_STATE",
- [SIMCALL_HOST_GET_CURRENT_POWER_PEAK] = "SIMCALL_HOST_GET_CURRENT_POWER_PEAK",
- [SIMCALL_HOST_GET_POWER_PEAK_AT] = "SIMCALL_HOST_GET_POWER_PEAK_AT",
- [SIMCALL_HOST_GET_NB_PSTATES] = "SIMCALL_HOST_GET_NB_PSTATES",
- [SIMCALL_HOST_GET_WATTMIN_AT] = "SIMCALL_HOST_GET_WATTMIN_AT",
- [SIMCALL_HOST_GET_WATTMAX_AT] = "SIMCALL_HOST_GET_WATTMAX_AT",
- [SIMCALL_HOST_SET_PSTATE] = "SIMCALL_HOST_SET_PSTATE",
- [SIMCALL_HOST_GET_PSTATE] = "SIMCALL_HOST_GET_PSTATE",
- [SIMCALL_HOST_GET_CONSUMED_ENERGY] = "SIMCALL_HOST_GET_CONSUMED_ENERGY",
- [SIMCALL_HOST_GET_MOUNTED_STORAGE_LIST] = "SIMCALL_HOST_GET_MOUNTED_STORAGE_LIST",
- [SIMCALL_HOST_GET_ATTACHED_STORAGE_LIST] = "SIMCALL_HOST_GET_ATTACHED_STORAGE_LIST",
- [SIMCALL_HOST_GET_PARAMS] = "SIMCALL_HOST_GET_PARAMS",
- [SIMCALL_HOST_SET_PARAMS] = "SIMCALL_HOST_SET_PARAMS",
- [SIMCALL_VM_CREATE] = "SIMCALL_VM_CREATE",
- [SIMCALL_VM_START] = "SIMCALL_VM_START",
- [SIMCALL_VM_GET_STATE] = "SIMCALL_VM_GET_STATE",
- [SIMCALL_VM_MIGRATE] = "SIMCALL_VM_MIGRATE",
- [SIMCALL_VM_GET_PM] = "SIMCALL_VM_GET_PM",
- [SIMCALL_VM_SET_BOUND] = "SIMCALL_VM_SET_BOUND",
- [SIMCALL_VM_SET_AFFINITY] = "SIMCALL_VM_SET_AFFINITY",
- [SIMCALL_VM_DESTROY] = "SIMCALL_VM_DESTROY",
- [SIMCALL_VM_SUSPEND] = "SIMCALL_VM_SUSPEND",
- [SIMCALL_VM_RESUME] = "SIMCALL_VM_RESUME",
- [SIMCALL_VM_SHUTDOWN] = "SIMCALL_VM_SHUTDOWN",
- [SIMCALL_VM_SAVE] = "SIMCALL_VM_SAVE",
- [SIMCALL_VM_RESTORE] = "SIMCALL_VM_RESTORE",
- [SIMCALL_VM_MIGRATEFROM_RESUMETO] = "SIMCALL_VM_MIGRATEFROM_RESUMETO",
- [SIMCALL_PROCESS_CREATE] = "SIMCALL_PROCESS_CREATE",
- [SIMCALL_PROCESS_KILL] = "SIMCALL_PROCESS_KILL",
- [SIMCALL_PROCESS_KILLALL] = "SIMCALL_PROCESS_KILLALL",
- [SIMCALL_PROCESS_CLEANUP] = "SIMCALL_PROCESS_CLEANUP",
- [SIMCALL_PROCESS_SUSPEND] = "SIMCALL_PROCESS_SUSPEND",
- [SIMCALL_PROCESS_RESUME] = "SIMCALL_PROCESS_RESUME",
- [SIMCALL_PROCESS_COUNT] = "SIMCALL_PROCESS_COUNT",
- [SIMCALL_PROCESS_GET_PID] = "SIMCALL_PROCESS_GET_PID",
- [SIMCALL_PROCESS_GET_PPID] = "SIMCALL_PROCESS_GET_PPID",
- [SIMCALL_PROCESS_GET_DATA] = "SIMCALL_PROCESS_GET_DATA",
- [SIMCALL_PROCESS_SET_DATA] = "SIMCALL_PROCESS_SET_DATA",
- [SIMCALL_PROCESS_SET_HOST] = "SIMCALL_PROCESS_SET_HOST",
- [SIMCALL_PROCESS_GET_HOST] = "SIMCALL_PROCESS_GET_HOST",
- [SIMCALL_PROCESS_GET_NAME] = "SIMCALL_PROCESS_GET_NAME",
- [SIMCALL_PROCESS_IS_SUSPENDED] = "SIMCALL_PROCESS_IS_SUSPENDED",
- [SIMCALL_PROCESS_GET_PROPERTIES] = "SIMCALL_PROCESS_GET_PROPERTIES",
- [SIMCALL_PROCESS_JOIN] = "SIMCALL_PROCESS_JOIN",
- [SIMCALL_PROCESS_SLEEP] = "SIMCALL_PROCESS_SLEEP",
- [SIMCALL_PROCESS_EXECUTE] = "SIMCALL_PROCESS_EXECUTE",
- [SIMCALL_PROCESS_PARALLEL_EXECUTE] = "SIMCALL_PROCESS_PARALLEL_EXECUTE",
- [SIMCALL_PROCESS_EXECUTION_DESTROY] = "SIMCALL_PROCESS_EXECUTION_DESTROY",
- [SIMCALL_PROCESS_EXECUTION_CANCEL] = "SIMCALL_PROCESS_EXECUTION_CANCEL",
- [SIMCALL_PROCESS_EXECUTION_GET_REMAINS] = "SIMCALL_PROCESS_EXECUTION_GET_REMAINS",
- [SIMCALL_PROCESS_EXECUTION_GET_STATE] = "SIMCALL_PROCESS_EXECUTION_GET_STATE",
- [SIMCALL_PROCESS_EXECUTION_SET_PRIORITY] = "SIMCALL_PROCESS_EXECUTION_SET_PRIORITY",
- [SIMCALL_PROCESS_EXECUTION_SET_BOUND] = "SIMCALL_PROCESS_EXECUTION_SET_BOUND",
- [SIMCALL_PROCESS_EXECUTION_SET_AFFINITY] = "SIMCALL_PROCESS_EXECUTION_SET_AFFINITY",
- [SIMCALL_PROCESS_EXECUTION_WAIT] = "SIMCALL_PROCESS_EXECUTION_WAIT",
- [SIMCALL_PROCESS_ON_EXIT] = "SIMCALL_PROCESS_ON_EXIT",
- [SIMCALL_PROCESS_AUTO_RESTART_SET] = "SIMCALL_PROCESS_AUTO_RESTART_SET",
- [SIMCALL_PROCESS_RESTART] = "SIMCALL_PROCESS_RESTART",
- [SIMCALL_RDV_CREATE] = "SIMCALL_RDV_CREATE",
- [SIMCALL_RDV_DESTROY] = "SIMCALL_RDV_DESTROY",
- [SIMCALL_RDV_COMM_COUNT_BY_HOST] = "SIMCALL_RDV_COMM_COUNT_BY_HOST",
- [SIMCALL_RDV_GET_HEAD] = "SIMCALL_RDV_GET_HEAD",
- [SIMCALL_RDV_SET_RECEIVER] = "SIMCALL_RDV_SET_RECEIVER",
- [SIMCALL_RDV_GET_RECEIVER] = "SIMCALL_RDV_GET_RECEIVER",
- [SIMCALL_COMM_IPROBE] = "SIMCALL_COMM_IPROBE",
- [SIMCALL_COMM_SEND] = "SIMCALL_COMM_SEND",
- [SIMCALL_COMM_ISEND] = "SIMCALL_COMM_ISEND",
- [SIMCALL_COMM_RECV] = "SIMCALL_COMM_RECV",
- [SIMCALL_COMM_IRECV] = "SIMCALL_COMM_IRECV",
- [SIMCALL_COMM_CANCEL] = "SIMCALL_COMM_CANCEL",
- [SIMCALL_COMM_WAITANY] = "SIMCALL_COMM_WAITANY",
- [SIMCALL_COMM_WAIT] = "SIMCALL_COMM_WAIT",
- [SIMCALL_COMM_TEST] = "SIMCALL_COMM_TEST",
- [SIMCALL_COMM_TESTANY] = "SIMCALL_COMM_TESTANY",
- [SIMCALL_COMM_GET_REMAINS] = "SIMCALL_COMM_GET_REMAINS",
- [SIMCALL_COMM_GET_STATE] = "SIMCALL_COMM_GET_STATE",
- [SIMCALL_COMM_GET_SRC_DATA] = "SIMCALL_COMM_GET_SRC_DATA",
- [SIMCALL_COMM_GET_DST_DATA] = "SIMCALL_COMM_GET_DST_DATA",
- [SIMCALL_COMM_GET_SRC_PROC] = "SIMCALL_COMM_GET_SRC_PROC",
- [SIMCALL_COMM_GET_DST_PROC] = "SIMCALL_COMM_GET_DST_PROC",
- [SIMCALL_MUTEX_INIT] = "SIMCALL_MUTEX_INIT",
- [SIMCALL_MUTEX_DESTROY] = "SIMCALL_MUTEX_DESTROY",
- [SIMCALL_MUTEX_LOCK] = "SIMCALL_MUTEX_LOCK",
- [SIMCALL_MUTEX_TRYLOCK] = "SIMCALL_MUTEX_TRYLOCK",
- [SIMCALL_MUTEX_UNLOCK] = "SIMCALL_MUTEX_UNLOCK",
- [SIMCALL_COND_INIT] = "SIMCALL_COND_INIT",
- [SIMCALL_COND_DESTROY] = "SIMCALL_COND_DESTROY",
- [SIMCALL_COND_SIGNAL] = "SIMCALL_COND_SIGNAL",
- [SIMCALL_COND_WAIT] = "SIMCALL_COND_WAIT",
- [SIMCALL_COND_WAIT_TIMEOUT] = "SIMCALL_COND_WAIT_TIMEOUT",
- [SIMCALL_COND_BROADCAST] = "SIMCALL_COND_BROADCAST",
- [SIMCALL_SEM_INIT] = "SIMCALL_SEM_INIT",
- [SIMCALL_SEM_DESTROY] = "SIMCALL_SEM_DESTROY",
- [SIMCALL_SEM_RELEASE] = "SIMCALL_SEM_RELEASE",
- [SIMCALL_SEM_WOULD_BLOCK] = "SIMCALL_SEM_WOULD_BLOCK",
- [SIMCALL_SEM_ACQUIRE] = "SIMCALL_SEM_ACQUIRE",
- [SIMCALL_SEM_ACQUIRE_TIMEOUT] = "SIMCALL_SEM_ACQUIRE_TIMEOUT",
- [SIMCALL_SEM_GET_CAPACITY] = "SIMCALL_SEM_GET_CAPACITY",
- [SIMCALL_FILE_READ] = "SIMCALL_FILE_READ",
- [SIMCALL_FILE_WRITE] = "SIMCALL_FILE_WRITE",
- [SIMCALL_FILE_OPEN] = "SIMCALL_FILE_OPEN",
- [SIMCALL_FILE_CLOSE] = "SIMCALL_FILE_CLOSE",
- [SIMCALL_FILE_UNLINK] = "SIMCALL_FILE_UNLINK",
- [SIMCALL_FILE_GET_SIZE] = "SIMCALL_FILE_GET_SIZE",
- [SIMCALL_FILE_TELL] = "SIMCALL_FILE_TELL",
- [SIMCALL_FILE_SEEK] = "SIMCALL_FILE_SEEK",
- [SIMCALL_FILE_GET_INFO] = "SIMCALL_FILE_GET_INFO",
- [SIMCALL_FILE_MOVE] = "SIMCALL_FILE_MOVE",
- [SIMCALL_STORAGE_GET_FREE_SIZE] = "SIMCALL_STORAGE_GET_FREE_SIZE",
- [SIMCALL_STORAGE_GET_USED_SIZE] = "SIMCALL_STORAGE_GET_USED_SIZE",
- [SIMCALL_STORAGE_GET_PROPERTIES] = "SIMCALL_STORAGE_GET_PROPERTIES",
- [SIMCALL_STORAGE_GET_CONTENT] = "SIMCALL_STORAGE_GET_CONTENT",
- [SIMCALL_ASR_GET_PROPERTIES] = "SIMCALL_ASR_GET_PROPERTIES",
- [SIMCALL_MC_RANDOM] = "SIMCALL_MC_RANDOM",
- [SIMCALL_SET_CATEGORY] = "SIMCALL_SET_CATEGORY",
+ "SIMCALL_NONE", "SIMCALL_HOST_ON",
+ "SIMCALL_HOST_OFF",
+ "SIMCALL_HOST_GET_PROPERTIES",
+ "SIMCALL_HOST_GET_PROCESS_LIST",
+ "SIMCALL_HOST_GET_CURRENT_POWER_PEAK",
+ "SIMCALL_HOST_GET_POWER_PEAK_AT",
+ "SIMCALL_HOST_GET_WATTMIN_AT",
+ "SIMCALL_HOST_GET_WATTMAX_AT",
+ "SIMCALL_HOST_SET_PSTATE",
+ "SIMCALL_HOST_GET_MOUNTED_STORAGE_LIST",
+ "SIMCALL_HOST_GET_ATTACHED_STORAGE_LIST",
+ "SIMCALL_HOST_GET_PARAMS",
+ "SIMCALL_HOST_SET_PARAMS",
+ "SIMCALL_VM_CREATE",
+ "SIMCALL_VM_START",
+ "SIMCALL_VM_GET_STATE",
+ "SIMCALL_VM_MIGRATE",
+ "SIMCALL_VM_GET_PM",
+ "SIMCALL_VM_SET_BOUND",
+ "SIMCALL_VM_SET_AFFINITY",
+ "SIMCALL_VM_DESTROY",
+ "SIMCALL_VM_SUSPEND",
+ "SIMCALL_VM_RESUME",
+ "SIMCALL_VM_SHUTDOWN",
+ "SIMCALL_VM_SAVE",
+ "SIMCALL_VM_RESTORE",
+ "SIMCALL_VM_MIGRATEFROM_RESUMETO",
+ "SIMCALL_PROCESS_CREATE",
+ "SIMCALL_PROCESS_KILL",
+ "SIMCALL_PROCESS_KILLALL",
+ "SIMCALL_PROCESS_CLEANUP",
+ "SIMCALL_PROCESS_SUSPEND",
+ "SIMCALL_PROCESS_RESUME",
+ "SIMCALL_PROCESS_COUNT",
+ "SIMCALL_PROCESS_GET_PID",
+ "SIMCALL_PROCESS_GET_PPID",
+ "SIMCALL_PROCESS_GET_DATA",
+ "SIMCALL_PROCESS_SET_DATA",
+ "SIMCALL_PROCESS_SET_HOST",
+ "SIMCALL_PROCESS_GET_HOST",
+ "SIMCALL_PROCESS_GET_NAME",
+ "SIMCALL_PROCESS_IS_SUSPENDED",
+ "SIMCALL_PROCESS_GET_PROPERTIES",
+ "SIMCALL_PROCESS_JOIN",
+ "SIMCALL_PROCESS_SLEEP",
+ "SIMCALL_PROCESS_EXECUTE",
+ "SIMCALL_PROCESS_PARALLEL_EXECUTE",
+ "SIMCALL_PROCESS_EXECUTION_DESTROY",
+ "SIMCALL_PROCESS_EXECUTION_CANCEL",
+ "SIMCALL_PROCESS_EXECUTION_GET_REMAINS",
+ "SIMCALL_PROCESS_EXECUTION_GET_STATE",
+ "SIMCALL_PROCESS_EXECUTION_SET_PRIORITY",
+ "SIMCALL_PROCESS_EXECUTION_SET_BOUND",
+ "SIMCALL_PROCESS_EXECUTION_SET_AFFINITY",
+ "SIMCALL_PROCESS_EXECUTION_WAIT",
+ "SIMCALL_PROCESS_ON_EXIT",
+ "SIMCALL_PROCESS_AUTO_RESTART_SET",
+ "SIMCALL_PROCESS_RESTART",
+ "SIMCALL_RDV_CREATE",
+ "SIMCALL_RDV_DESTROY",
+ "SIMCALL_RDV_COMM_COUNT_BY_HOST",
+ "SIMCALL_RDV_GET_HEAD",
+ "SIMCALL_RDV_SET_RECEIVER",
+ "SIMCALL_RDV_GET_RECEIVER",
+ "SIMCALL_COMM_IPROBE",
+ "SIMCALL_COMM_SEND",
+ "SIMCALL_COMM_ISEND",
+ "SIMCALL_COMM_RECV",
+ "SIMCALL_COMM_IRECV",
+ "SIMCALL_COMM_CANCEL",
+ "SIMCALL_COMM_WAITANY",
+ "SIMCALL_COMM_WAIT",
+ "SIMCALL_COMM_TEST",
+ "SIMCALL_COMM_TESTANY",
+ "SIMCALL_COMM_GET_REMAINS",
+ "SIMCALL_COMM_GET_STATE",
+ "SIMCALL_COMM_GET_SRC_DATA",
+ "SIMCALL_COMM_GET_DST_DATA",
+ "SIMCALL_COMM_GET_SRC_PROC",
+ "SIMCALL_COMM_GET_DST_PROC",
+ "SIMCALL_MUTEX_INIT",
+ "SIMCALL_MUTEX_DESTROY",
+ "SIMCALL_MUTEX_LOCK",
+ "SIMCALL_MUTEX_TRYLOCK",
+ "SIMCALL_MUTEX_UNLOCK",
+ "SIMCALL_COND_INIT",
+ "SIMCALL_COND_DESTROY",
+ "SIMCALL_COND_SIGNAL",
+ "SIMCALL_COND_WAIT",
+ "SIMCALL_COND_WAIT_TIMEOUT",
+ "SIMCALL_COND_BROADCAST",
+ "SIMCALL_SEM_INIT",
+ "SIMCALL_SEM_DESTROY",
+ "SIMCALL_SEM_RELEASE",
+ "SIMCALL_SEM_WOULD_BLOCK",
+ "SIMCALL_SEM_ACQUIRE",
+ "SIMCALL_SEM_ACQUIRE_TIMEOUT",
+ "SIMCALL_SEM_GET_CAPACITY",
+ "SIMCALL_FILE_READ",
+ "SIMCALL_FILE_WRITE",
+ "SIMCALL_FILE_OPEN",
+ "SIMCALL_FILE_CLOSE",
+ "SIMCALL_FILE_UNLINK",
+ "SIMCALL_FILE_GET_SIZE",
+ "SIMCALL_FILE_TELL",
+ "SIMCALL_FILE_SEEK",
+ "SIMCALL_FILE_GET_INFO",
+ "SIMCALL_FILE_MOVE",
+ "SIMCALL_STORAGE_GET_FREE_SIZE",
+ "SIMCALL_STORAGE_GET_USED_SIZE",
+ "SIMCALL_STORAGE_GET_PROPERTIES",
+ "SIMCALL_STORAGE_GET_CONTENT",
+ "SIMCALL_ASR_GET_PROPERTIES",
+ "SIMCALL_MC_RANDOM",
+ "SIMCALL_SET_CATEGORY",
#ifdef HAVE_LATENCY_BOUND_TRACKING
- [SIMCALL_COMM_IS_LATENCY_BOUNDED] = "SIMCALL_COMM_IS_LATENCY_BOUNDED",
+ "SIMCALL_COMM_IS_LATENCY_BOUNDED",
#endif
#ifdef HAVE_MC
- [SIMCALL_MC_SNAPSHOT] = "SIMCALL_MC_SNAPSHOT",
- [SIMCALL_MC_COMPARE_SNAPSHOTS] = "SIMCALL_MC_COMPARE_SNAPSHOTS",
+ "SIMCALL_MC_SNAPSHOT",
+ "SIMCALL_MC_COMPARE_SNAPSHOTS",
#endif
-[SIMCALL_NONE] = "NONE"
};
/**
if (simcall->issuer->context->iwannadie && simcall->call != SIMCALL_PROCESS_CLEANUP)
return;
switch (simcall->call) {
-case SIMCALL_HOST_GET_NAME:
- simcall->result.cc = SIMIX_host_get_name((sg_host_t) simcall->args[0].dp);
- SIMIX_simcall_answer(simcall);
- break;
-
case SIMCALL_HOST_ON:
SIMIX_host_on((sg_host_t) simcall->args[0].dp);
SIMIX_simcall_answer(simcall);
SIMIX_simcall_answer(simcall);
break;
-case SIMCALL_HOST_GET_CORE:
- simcall->result.i = SIMIX_host_get_core((sg_host_t) simcall->args[0].dp);
- SIMIX_simcall_answer(simcall);
- break;
-
case SIMCALL_HOST_GET_PROCESS_LIST:
simcall->result.dp = SIMIX_host_get_process_list((sg_host_t) simcall->args[0].dp);
SIMIX_simcall_answer(simcall);
break;
-case SIMCALL_HOST_GET_SPEED:
- simcall->result.d = SIMIX_host_get_speed((sg_host_t) simcall->args[0].dp);
- SIMIX_simcall_answer(simcall);
- break;
-
-case SIMCALL_HOST_GET_AVAILABLE_SPEED:
- simcall->result.d = SIMIX_host_get_available_speed((sg_host_t) simcall->args[0].dp);
- SIMIX_simcall_answer(simcall);
- break;
-
-case SIMCALL_HOST_GET_STATE:
- simcall->result.i = SIMIX_host_get_state((sg_host_t) simcall->args[0].dp);
- SIMIX_simcall_answer(simcall);
- break;
-
case SIMCALL_HOST_GET_CURRENT_POWER_PEAK:
simcall->result.d = SIMIX_host_get_current_power_peak((sg_host_t) simcall->args[0].dp);
SIMIX_simcall_answer(simcall);
SIMIX_simcall_answer(simcall);
break;
-case SIMCALL_HOST_GET_NB_PSTATES:
- simcall->result.i = SIMIX_host_get_nb_pstates((sg_host_t) simcall->args[0].dp);
- SIMIX_simcall_answer(simcall);
- break;
-
case SIMCALL_HOST_GET_WATTMIN_AT:
simcall->result.d = SIMIX_host_get_wattmin_at((sg_host_t) simcall->args[0].dp, simcall->args[1].i);
SIMIX_simcall_answer(simcall);
SIMIX_simcall_answer(simcall);
break;
-case SIMCALL_HOST_GET_PSTATE:
- simcall->result.i = SIMIX_host_get_pstate((sg_host_t) simcall->args[0].dp);
- SIMIX_simcall_answer(simcall);
- break;
-
-case SIMCALL_HOST_GET_CONSUMED_ENERGY:
- simcall->result.d = SIMIX_host_get_consumed_energy((sg_host_t) simcall->args[0].dp);
- SIMIX_simcall_answer(simcall);
- break;
-
case SIMCALL_HOST_GET_MOUNTED_STORAGE_LIST:
simcall->result.dp = SIMIX_host_get_mounted_storage_list((sg_host_t) simcall->args[0].dp);
SIMIX_simcall_answer(simcall);
XBT_PUBLIC_DATA(const char*) simcall_names[]; /* Name of each simcall */
#include "popping_enum.h" /* Definition of e_smx_simcall_t, with one value per simcall */
-#include "mc/mc_forward.h" /* Definition of mc_snapshot_t, used by one simcall */
+#include "src/mc/mc_forward.h" /* Definition of mc_snapshot_t, used by one simcall */
typedef int (*simix_match_func_t)(void *, void *, smx_synchro_t);
typedef void (*simix_copy_data_func_t)(smx_synchro_t, void*, size_t);
# ./include/simgrid/simix.h (otherwise you will get a warning at the
# compilation time)
-Func - host_get_name (const char*) (host, void*, sg_host_t)
Proc - host_on (void) (host, void*, sg_host_t)
Proc H host_off (void) (host, void*, sg_host_t)
Func - host_get_properties (void*, xbt_dict_t) (host, void*, sg_host_t)
-Func - host_get_core (int) (host, void*, sg_host_t)
Func - host_get_process_list (void*, xbt_swag_t) (host, void*, sg_host_t)
-Func - host_get_speed (double) (host, void*, sg_host_t)
-Func - host_get_available_speed (double) (host, void*, sg_host_t)
-Func - host_get_state (int) (host, void*, sg_host_t)
Func - host_get_current_power_peak (double) (host, void*, sg_host_t)
Func - host_get_power_peak_at (double) (host, void*, sg_host_t) (pstate_index, int)
-Func - host_get_nb_pstates (int) (host, void*, sg_host_t)
Func - host_get_wattmin_at (double) (host, void*, sg_host_t) (pstate_index, int)
Func - host_get_wattmax_at (double) (host, void*, sg_host_t) (pstate_index, int)
Proc - host_set_pstate (void) (host, void*, sg_host_t) (pstate_index, int)
-Func - host_get_pstate (int) (host, void*, sg_host_t)
-Func - host_get_consumed_energy (double) (host, void*, sg_host_t)
Func - host_get_mounted_storage_list (void*, xbt_dict_t) (host, void*, sg_host_t)
Func - host_get_attached_storage_list (void*, xbt_dynar_t) (host, void*, sg_host_t)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (c) 2014. The SimGrid Team. All rights reserved.
+# Copyright (c) 2014-2015. 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.
def check(self):
# libsmx.c simcall_BODY_
if self.simcalls_BODY is None:
- f = open('libsmx.c')
+ f = open('libsmx.cpp')
self.simcalls_BODY = set(re.findall('simcall_BODY_(.*?)\(', f.read()))
f.close()
if self.name not in self.simcalls_BODY:
return ' SIMCALL_%s,'%(self.name.upper())
def string(self):
- return ' [SIMCALL_%s] = "SIMCALL_%s",'%(self.name.upper(), self.name.upper())
+ return ' "SIMCALL_%s",'% self.name.upper()
def accessors(self):
res = []
res.append(' SIMIX_simcall_handle(&self->simcall, 0);')
res.append(' } ')
if self.res.type != 'void':
- res.append(' return self->simcall.result.%s;'%self.res.field())
+ res.append(' return (%s) self->simcall.result.%s;' %
+ (self.res.rettype(), self.res.field()))
else:
res.append(' ')
res.append(' }')
fd.close()
###
- ### smx_popping_generated.c
+ ### smx_popping_generated.cpp
###
- fd = header("popping_generated.c")
+ fd = header("popping_generated.cpp")
fd.write('#include <xbt/base.h>\n');
fd.write('#include "smx_private.h"\n');
fd.write('#ifdef HAVE_MC\n');
- fd.write('#include "mc/mc_forward.h"\n');
+ fd.write('#include "src/mc/mc_forward.h"\n');
fd.write('#endif\n');
fd.write('\n');
fd.write('XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_popping);\n\n');
fd.write('/** @brief Simcalls\' names (generated from src/simix/simcalls.in) */\n')
fd.write('const char* simcall_names[] = {\n')
+ fd.write(' "SIMCALL_NONE",');
handle(fd, Simcall.string, simcalls, simcalls_dict)
- fd.write('[SIMCALL_NONE] = "NONE"\n')
fd.write('};\n\n')
fd.close()
###
- ### smx_popping_bodies.c
+ ### smx_popping_bodies.cpp
###
- fd = header('popping_bodies.c')
+ fd = header('popping_bodies.cpp')
fd.write('#include "smx_private.h"\n')
- fd.write('#include "mc/mc_forward.h"\n')
+ fd.write('#include "src/mc/mc_forward.h"\n')
fd.write('#include "xbt/ex.h"\n')
handle(fd, Simcall.body, simcalls, simcalls_dict)
fd.close()
/* 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 "portable.h"
+#include "src/portable.h"
#include "xbt/log.h"
#include "xbt/swag.h"
#include "xbt/xbt_os_thread.h"
#include "smx_private.h"
+#include "smx_private.hpp"
#include "simgrid/sg_config.h"
-#include "internal_config.h"
+#include "src/internal_config.h"
#include "simgrid/modelchecker.h"
"Context switching mechanism");
char* smx_context_factory_name = NULL; /* factory name specified by --cfg=contexts/factory:value */
-smx_ctx_factory_initializer_t smx_factory_initializer_to_use = NULL;
int smx_context_stack_size;
int smx_context_stack_size_was_set = 0;
int smx_context_guard_size;
#endif
if (!simix_global->context_factory) {
/* select the context factory to use to create the contexts */
- if (smx_factory_initializer_to_use) {
- smx_factory_initializer_to_use(&simix_global->context_factory);
- }
+ if (simgrid::simix::factory_initializer)
+ simix_global->context_factory = simgrid::simix::factory_initializer();
else { /* use the factory specified by --cfg=contexts/factory:value */
-
-
- if (!strcmp(smx_context_factory_name, "thread")) {
- /* use os threads (either pthreads or windows ones) */
- SIMIX_ctx_thread_factory_init(&simix_global->context_factory);
- }
+#if defined(CONTEXT_THREADS)
+ if (!strcmp(smx_context_factory_name, "thread"))
+ simix_global->context_factory = simgrid::simix::thread_factory();
+#else
+ if (0);
+#endif
#ifdef CONTEXT_UCONTEXT
- else if (!strcmp(smx_context_factory_name, "ucontext")) {
- /* use ucontext */
- SIMIX_ctx_sysv_factory_init(&simix_global->context_factory);
- }
+ else if (!strcmp(smx_context_factory_name, "ucontext"))
+ simix_global->context_factory = simgrid::simix::sysv_factory();
#endif
#ifdef HAVE_RAWCTX
- else if (!strcmp(smx_context_factory_name, "raw")) {
- /* use raw contexts */
- SIMIX_ctx_raw_factory_init(&simix_global->context_factory);
- }
+ else if (!strcmp(smx_context_factory_name, "raw"))
+ simix_global->context_factory = simgrid::simix::raw_factory();
#endif
#ifdef HAVE_BOOST_CONTEXT
- else if (!strcmp(smx_context_factory_name, "boost")) {
- /* use Boost.Context */
- SIMIX_ctx_boost_factory_init(&simix_global->context_factory);
- }
+ else if (!strcmp(smx_context_factory_name, "boost"))
+ simix_global->context_factory = simgrid::simix::boost_factory();
#endif
else {
XBT_ERROR("Invalid context factory specified. Valid factories on this machine:");
#ifdef HAVE_RAWCTX
XBT_ERROR(" raw: high performance context factory implemented specifically for SimGrid");
#else
- XBT_ERROR(" (raw contexts are disabled at compilation time on this machine -- check configure logs for details)");
+ XBT_ERROR(" (raw contexts were disabled at compilation time on this machine -- check configure logs for details)");
#endif
#ifdef CONTEXT_UCONTEXT
XBT_ERROR(" ucontext: classical system V contexts (implemented with makecontext, swapcontext and friends)");
#else
- XBT_ERROR(" (ucontext is disabled at compilation time on this machine -- check configure logs for details)");
+ XBT_ERROR(" (ucontext was disabled at compilation time on this machine -- check configure logs for details)");
+#endif
+#ifdef HAVE_BOOST_CONTEXT
+ XBT_ERROR(" boost: this uses the boost libraries context implementation");
+#else
+ XBT_ERROR(" (boost was disabled at compilation time on this machine -- check configure logs for details. Did you install the libboost-context-dev package?)");
#endif
XBT_ERROR(" thread: slow portability layer using system threads (pthreads on UNIX, CreateThread() on windows)");
xbt_die("Please use a valid factory.");
*/
void SIMIX_context_mod_exit(void)
{
- if (simix_global->context_factory) {
- smx_pfn_context_factory_finalize_t finalize_factory;
-
- /* finalize the context factory */
- finalize_factory = simix_global->context_factory->finalize;
- finalize_factory(&simix_global->context_factory);
- }
+ delete simix_global->context_factory;
+ simix_global->context_factory = nullptr;
xbt_dict_remove((xbt_dict_t) _sg_cfg_set,"contexts/factory");
}
* for the user contexts.
* \return 1 if parallelism is used
*/
-XBT_INLINE int SIMIX_context_is_parallel(void) {
+int SIMIX_context_is_parallel(void) {
return smx_parallel_contexts > 1;
}
* for the user contexts.
* \return the number of threads (1 means no parallelism)
*/
-XBT_INLINE int SIMIX_context_get_nthreads(void) {
+int SIMIX_context_get_nthreads(void) {
return smx_parallel_contexts;
}
* \return when the number of user processes ready to run is above
* this threshold, they are run in parallel
*/
-XBT_INLINE int SIMIX_context_get_parallel_threshold(void) {
+int SIMIX_context_get_parallel_threshold(void) {
return smx_parallel_threshold;
}
* \param threshold when the number of user processes ready to run is above
* this threshold, they are run in parallel
*/
-XBT_INLINE void SIMIX_context_set_parallel_threshold(int threshold) {
+void SIMIX_context_set_parallel_threshold(int threshold) {
smx_parallel_threshold = threshold;
}
* parallel.
* \return how threads are synchronized if processes are run in parallel
*/
-XBT_INLINE e_xbt_parmap_mode_t SIMIX_context_get_parallel_mode(void) {
+e_xbt_parmap_mode_t SIMIX_context_get_parallel_mode(void) {
return smx_parallel_synchronization_mode;
}
* parallel.
* \param mode how to synchronize threads if processes are run in parallel
*/
-XBT_INLINE void SIMIX_context_set_parallel_mode(e_xbt_parmap_mode_t mode) {
+void SIMIX_context_set_parallel_mode(e_xbt_parmap_mode_t mode) {
smx_parallel_synchronization_mode = mode;
}
* \brief Returns the current context of this thread.
* \return the current context of this thread
*/
-XBT_INLINE smx_context_t SIMIX_context_get_current(void)
+smx_context_t SIMIX_context_get_current(void)
{
if (SIMIX_context_is_parallel()) {
#ifdef HAVE_THREAD_LOCAL_STORAGE
* \brief Sets the current context of this thread.
* \param context the context to set
*/
-XBT_INLINE void SIMIX_context_set_current(smx_context_t context)
+void SIMIX_context_set_current(smx_context_t context)
{
if (SIMIX_context_is_parallel()) {
#ifdef HAVE_THREAD_LOCAL_STORAGE
+++ /dev/null
-/* context_base - Code factorization across context switching implementations */
-
-/* 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. */
-
-#include "xbt/function_types.h"
-#include "simgrid/simix.h"
-#include "smx_private.h"
-#include "mc/mc.h"
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
-
-void smx_ctx_base_factory_init(smx_context_factory_t *factory)
-{
- /* instantiate the context factory */
- *factory = xbt_new0(s_smx_context_factory_t, 1);
-
- (*factory)->create_context = NULL;
- (*factory)->finalize = smx_ctx_base_factory_finalize;
- (*factory)->free = smx_ctx_base_free;
- (*factory)->stop = smx_ctx_base_stop;
- (*factory)->suspend = NULL;
- (*factory)->runall = NULL;
- (*factory)->self = smx_ctx_base_self;
- (*factory)->get_process = smx_ctx_base_get_process;
-
- (*factory)->name = "base context factory";
-}
-
-int smx_ctx_base_factory_finalize(smx_context_factory_t * factory)
-{
- free(*factory);
- *factory = NULL;
- return 0;
-}
-
-smx_context_t
-smx_ctx_base_factory_create_context_sized(size_t size, xbt_main_func_t code,
- int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process)
-{
- smx_context_t context = xbt_malloc0(size);
-
- /* Store the address of the stack in heap to compare it apart of heap comparison */
- if(MC_is_active())
- MC_ignore_heap(context, size);
-
- /* If the user provided a function for the process then use it.
- Otherwise, it is the context for maestro and we should set it as the
- current context */
- if (code) {
- context->cleanup_func = cleanup_func;
- context->argc = argc;
- context->argv = argv;
- context->code = code;
- } else {
- SIMIX_context_set_current(context);
- }
- context->process = process;
-
- return context;
-}
-
-void smx_ctx_base_free(smx_context_t context)
-{
- int i;
- if (context) {
-
- /* free argv */
- if (context->argv) {
- for (i = 0; i < context->argc; i++)
- free(context->argv[i]);
-
- free(context->argv);
- }
-
- /* free structure */
- free(context);
- }
-}
-
-void smx_ctx_base_stop(smx_context_t context)
-{
- if (context->cleanup_func)
- context->cleanup_func(context->process);
- context->process->suspended = 0;
- context->iwannadie = 0;
- simcall_process_cleanup(context->process);
- context->iwannadie = 1;
-}
-
-smx_context_t smx_ctx_base_self(void)
-{
- return SIMIX_context_get_current();
-}
-
-smx_process_t smx_ctx_base_get_process(smx_context_t context)
-{
- return context->process;
-}
+++ /dev/null
-/* Copyright (c) 2015. 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. */
-
-/** @file smx_context_boost.cpp Userspace context switching implementation based on Boost.Context */
-
-#include <cstdint>
-
-#include <boost/context/all.hpp>
-
-#include "xbt/log.h"
-#include "smx_private.h"
-#include "internal_config.h"
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
-
-typedef struct s_smx_ctx_boost {
- s_smx_ctx_base_t super; /* Fields of super implementation */
-#if HAVE_BOOST_CONTEXT == 1
- boost::context::fcontext_t* fc;
-#else
- boost::context::fcontext_t fc;
-#endif
- void* stack;
-} s_smx_ctx_boost_t, *smx_ctx_boost_t;
-
-static int smx_ctx_boost_factory_finalize(smx_context_factory_t *factory);
-static smx_context_t
-smx_ctx_boost_create_context(xbt_main_func_t code, int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func, smx_process_t process);
-static void smx_ctx_boost_free(smx_context_t context);
-
-static void smx_ctx_boost_wrapper(std::intptr_t arg);
-
-static void smx_ctx_boost_stop_serial(smx_context_t context);
-static void smx_ctx_boost_suspend_serial(smx_context_t context);
-static void smx_ctx_boost_resume_serial(smx_process_t first_process);
-static void smx_ctx_boost_runall_serial(void);
-
-#ifdef CONTEXT_THREADS
-static void smx_ctx_boost_stop_parallel(smx_context_t context);
-static void smx_ctx_boost_suspend_parallel(smx_context_t context);
-static void smx_ctx_boost_resume_parallel(smx_process_t first_process);
-static void smx_ctx_boost_runall_parallel(void);
-#endif
-
-#ifdef CONTEXT_THREADS
-static xbt_parmap_t boost_parmap;
-static smx_ctx_boost_t* boost_workers_context;
-static unsigned long boost_threads_working;
-static xbt_os_thread_key_t boost_worker_id_key;
-#endif
-
-static unsigned long boost_process_index = 0;
-static smx_ctx_boost_t boost_maestro_context;
-
-void SIMIX_ctx_boost_factory_init(smx_context_factory_t *factory)
-{
- smx_ctx_base_factory_init(factory);
- XBT_VERB("Activating boost context factory");
-
- (*factory)->finalize = smx_ctx_boost_factory_finalize;
- (*factory)->create_context = smx_ctx_boost_create_context;
- /* Do not overload that method (*factory)->finalize */
- (*factory)->free = smx_ctx_boost_free;
- (*factory)->name = "smx_boost_context_factory";
-
- if (SIMIX_context_is_parallel()) {
-#ifndef CONTEXT_THREADS
- THROWF(arg_error, 0, "No thread support for parallel context execution");
-#else
- int nthreads = SIMIX_context_get_nthreads();
- boost_parmap = xbt_parmap_new(nthreads, SIMIX_context_get_parallel_mode());
- boost_workers_context = xbt_new(smx_ctx_boost_t, nthreads);
- boost_maestro_context = NULL;
-
- xbt_os_thread_key_create(&boost_worker_id_key);
-
- (*factory)->stop = smx_ctx_boost_stop_parallel;
- (*factory)->suspend = smx_ctx_boost_suspend_parallel;
- (*factory)->runall = smx_ctx_boost_runall_parallel;
-#endif
- } else {
- (*factory)->stop = smx_ctx_boost_stop_serial;
- (*factory)->suspend = smx_ctx_boost_suspend_serial;
- (*factory)->runall = smx_ctx_boost_runall_serial;
- }
-}
-
-/* Initialization functions */
-
-static int smx_ctx_boost_factory_finalize(smx_context_factory_t *factory)
-{
-#ifdef CONTEXT_THREADS
- if (boost_parmap) {
- xbt_parmap_destroy(boost_parmap);
- boost_parmap = nullptr;
- }
- xbt_free(boost_workers_context);
- boost_workers_context = nullptr;
-#endif
- return smx_ctx_base_factory_finalize(factory);
-}
-
-static smx_context_t
-smx_ctx_boost_create_context(xbt_main_func_t code, int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func, smx_process_t process)
-{
- smx_ctx_boost_t context =
- (smx_ctx_boost_t) smx_ctx_base_factory_create_context_sized(
- sizeof(s_smx_ctx_boost_t),
- code,
- argc,
- argv,
- cleanup_func,
- process);
-
- /* if the user provided a function for the process then use it,
- otherwise it is the context for maestro */
- if (code) {
- context->stack = SIMIX_context_stack_new();
- // We need to pass the bottom of the stack to make_fcontext,
- // depending on the stack direction it may be the lower or higher address:
-#if PTH_STACKGROWTH == -1
- void* stack = (char*) context->stack + smx_context_usable_stack_size - 1;
-#else
- void* stack = context->stack;
-#endif
- context->fc = boost::context::make_fcontext(
- stack,
- smx_context_usable_stack_size,
- smx_ctx_boost_wrapper);
- } else {
- context->stack = nullptr;
-#if HAVE_BOOST_CONTEXT == 1
- context->fc = new boost::context::fcontext_t();
-#endif
- if (boost_maestro_context == nullptr)
- boost_maestro_context = context;
- }
-
- return (smx_context_t) context;
-}
-
-static void smx_ctx_boost_free(smx_context_t c)
-{
- smx_ctx_boost_t context = (smx_ctx_boost_t) c;
- if (!context)
- return;
-#if HAVE_BOOST_CONTEXT == 1
- if (!context->stack)
- delete context->fc;
-#endif
- if ((smx_ctx_boost_t) c == boost_maestro_context)
- boost_maestro_context = nullptr;
- SIMIX_context_stack_delete(context->stack);
- smx_ctx_base_free(c);
-}
-
-static void smx_ctx_boost_wrapper(std::intptr_t arg)
-{
- smx_context_t context = (smx_context_t) arg;
- context->code(context->argc, context->argv);
- smx_ctx_boost_stop_serial(context);
-}
-
-static void smx_ctx_boost_stop_serial(smx_context_t context)
-{
- smx_ctx_base_stop(context);
- simix_global->context_factory->suspend(context);
-}
-
-static void smx_ctx_boost_suspend_serial(smx_context_t context)
-{
- /* determine the next context */
- smx_ctx_boost_t next_context;
- unsigned long int i = boost_process_index++;
-
- if (i < xbt_dynar_length(simix_global->process_to_run)) {
- /* execute the next process */
- XBT_DEBUG("Run next process");
- next_context = (smx_ctx_boost_t) xbt_dynar_get_as(
- simix_global->process_to_run, i, smx_process_t)->context;
- }
- else {
- /* all processes were run, return to maestro */
- XBT_DEBUG("No more process to run");
- next_context = (smx_ctx_boost_t) boost_maestro_context;
- }
- SIMIX_context_set_current((smx_context_t) next_context);
-#if HAVE_BOOST_CONTEXT == 1
- boost::context::jump_fcontext(
- ((smx_ctx_boost_t)context)->fc, next_context->fc, (intptr_t)next_context);
-#else
- boost::context::jump_fcontext(
- &((smx_ctx_boost_t)context)->fc, next_context->fc, (intptr_t)next_context);
-#endif
-}
-
-static void smx_ctx_boost_resume_serial(smx_process_t first_process)
-{
- smx_ctx_boost_t context = (smx_ctx_boost_t) first_process->context;
- SIMIX_context_set_current((smx_context_t) context);
-#if HAVE_BOOST_CONTEXT == 1
- boost::context::jump_fcontext(boost_maestro_context->fc, context->fc,
- (intptr_t)context);
-#else
- boost::context::jump_fcontext(&boost_maestro_context->fc, context->fc,
- (intptr_t)context);
-#endif
-}
-
-static void smx_ctx_boost_runall_serial(void)
-{
- smx_process_t first_process =
- xbt_dynar_get_as(simix_global->process_to_run, 0, smx_process_t);
- boost_process_index = 1;
-
- /* execute the first process */
- smx_ctx_boost_resume_serial(first_process);
-}
-
-// **** Parallel code
-
-#ifdef CONTEXT_THREADS
-
-static void smx_ctx_boost_stop_parallel(smx_context_t context)
-{
- smx_ctx_base_stop(context);
- smx_ctx_boost_suspend_parallel(context);
-}
-
-static void smx_ctx_boost_suspend_parallel(smx_context_t context)
-{
- smx_process_t next_work = (smx_process_t) xbt_parmap_next(boost_parmap);
- smx_ctx_boost_t next_context;
-
- if (next_work != NULL) {
- XBT_DEBUG("Run next process");
- next_context = (smx_ctx_boost_t) next_work->context;
- }
- else {
- XBT_DEBUG("No more processes to run");
- unsigned long worker_id =
- (unsigned long) xbt_os_thread_get_specific(boost_worker_id_key);
- next_context = boost_workers_context[worker_id];
- }
-
- SIMIX_context_set_current((smx_context_t) next_context);
-#if HAVE_BOOST_CONTEXT == 1
- boost::context::jump_fcontext(
- ((smx_ctx_boost_t)context)->fc, next_context->fc, (intptr_t)next_context);
-#else
- boost::context::jump_fcontext(
- &((smx_ctx_boost_t)context)->fc, next_context->fc, (intptr_t)next_context);
-#endif
-}
-
-static void smx_ctx_boost_resume_parallel(smx_process_t process)
-{
- unsigned long worker_id = __sync_fetch_and_add(&boost_threads_working, 1);
- xbt_os_thread_set_specific(boost_worker_id_key, (void*) worker_id);
-
- smx_ctx_boost_t worker_context = (smx_ctx_boost_t)SIMIX_context_self();
- boost_workers_context[worker_id] = worker_context;
- smx_ctx_boost_t context = (smx_ctx_boost_t) process->context;
-
- SIMIX_context_set_current((smx_context_t) context);
-#if HAVE_BOOST_CONTEXT == 1
- boost::context::jump_fcontext(worker_context->fc, context->fc,
- (intptr_t)context);
-#else
- boost::context::jump_fcontext(&worker_context->fc, context->fc,
- (intptr_t)context);
-#endif
-}
-
-static void smx_ctx_boost_runall_parallel(void)
-{
- boost_threads_working = 0;
- xbt_parmap_apply(boost_parmap, (void_f_pvoid_t) smx_ctx_boost_resume_parallel,
- simix_global->process_to_run);
-}
-
-#endif
+++ /dev/null
-/* context_raw - fast context switching inspired from System V ucontexts */
-
-/* Copyright (c) 2009-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 <math.h>
-#include "smx_private.h"
-#include "xbt/parmap.h"
-#include "xbt/dynar.h"
-#include "mc/mc.h"
-
-typedef char * raw_stack_t;
-typedef void (*rawctx_entry_point_t)(void *);
-
-typedef struct s_smx_ctx_raw {
- s_smx_ctx_base_t super; /* Fields of super implementation */
- char *malloced_stack; /* malloced area containing the stack */
- raw_stack_t stack_top; /* pointer to stack top (within previous area) */
-#ifdef TIME_BENCH_PER_SR
- unsigned int thread; /* Just for measuring purposes */
-#endif
-} s_smx_ctx_raw_t, *smx_ctx_raw_t;
-
-#ifdef CONTEXT_THREADS
-static xbt_parmap_t raw_parmap;
-static smx_ctx_raw_t* raw_workers_context; /* space to save the worker context in each thread */
-static unsigned long raw_threads_working; /* number of threads that have started their work */
-static xbt_os_thread_key_t raw_worker_id_key; /* thread-specific storage for the thread id */
-#endif
-#ifdef ADAPTIVE_THRESHOLD
-#define SCHED_ROUND_LIMIT 5
-xbt_os_timer_t round_time;
-double par_time,seq_time;
-double par_ratio,seq_ratio;
-int reached_seq_limit, reached_par_limit;
-static unsigned int par_proc_that_ran = 0,seq_proc_that_ran = 0; /* Counters of processes that have run in SCHED_ROUND_LIMIT scheduling rounds */
-static unsigned int seq_sched_round=0, par_sched_round=0; /* Amount of SR that ran serial/parallel*/
-/*Varables used to calculate running variance and mean*/
-double prev_avg_par_proc=0,prev_avg_seq_proc=0;
-double delta=0;
-double s_par_proc=0,s_seq_proc=0; /*Standard deviation of number of processes computed in par/seq during the current simulation*/
-double avg_par_proc=0,sd_par_proc=0;
-double avg_seq_proc=0,sd_seq_proc=0;
-long long par_window=(long long)HUGE_VAL,seq_window=0;
-#endif
-
-static unsigned long raw_process_index = 0; /* index of the next process to run in the
- * list of runnable processes */
-static smx_ctx_raw_t raw_maestro_context;
-extern raw_stack_t raw_makecontext(char* malloced_stack, int stack_size,
- rawctx_entry_point_t entry_point, void* arg);
-extern void raw_swapcontext(raw_stack_t* old, raw_stack_t new);
-
-#if PROCESSOR_x86_64
-__asm__ (
-#if defined(APPLE)
- ".text\n"
- ".globl _raw_makecontext\n"
- "_raw_makecontext:\n"
-#elif defined(_WIN32)
- ".text\n"
- ".globl raw_makecontext\n"
- "raw_makecontext:\n"
-#else
- ".text\n"
- ".globl raw_makecontext\n"
- ".type raw_makecontext,@function\n"
- "raw_makecontext:\n"/* Calling convention sets the arguments in rdi, rsi, rdx and rcx, respectively */
-#endif
- " mov %rdi,%rax\n" /* stack */
- " add %rsi,%rax\n" /* size */
- " andq $-16, %rax\n" /* align stack */
- " movq $0, -8(%rax)\n" /* @return for func */
- " mov %rdx,-16(%rax)\n" /* func */
- " mov %rcx,-24(%rax)\n" /* arg/rdi */
- " movq $0, -32(%rax)\n" /* rsi */
- " movq $0, -40(%rax)\n" /* rdx */
- " movq $0, -48(%rax)\n" /* rcx */
- " movq $0, -56(%rax)\n" /* r8 */
- " movq $0, -64(%rax)\n" /* r9 */
- " movq $0, -72(%rax)\n" /* rbp */
- " movq $0, -80(%rax)\n" /* rbx */
- " movq $0, -88(%rax)\n" /* r12 */
- " movq $0, -96(%rax)\n" /* r13 */
- " movq $0, -104(%rax)\n" /* r14 */
- " movq $0, -112(%rax)\n" /* r15 */
- " sub $112,%rax\n"
- " ret\n"
-);
-
-__asm__ (
-#if defined(APPLE)
- ".text\n"
- ".globl _raw_swapcontext\n"
- "_raw_swapcontext:\n"
-#elif defined(_WIN32)
- ".text\n"
- ".globl raw_swapcontext\n"
- "raw_swapcontext:\n"
-#else
- ".text\n"
- ".globl raw_swapcontext\n"
- ".type raw_swapcontext,@function\n"
- "raw_swapcontext:\n" /* Calling convention sets the arguments in rdi and rsi, respectively */
-#endif
- " push %rdi\n"
- " push %rsi\n"
- " push %rdx\n"
- " push %rcx\n"
- " push %r8\n"
- " push %r9\n"
- " push %rbp\n"
- " push %rbx\n"
- " push %r12\n"
- " push %r13\n"
- " push %r14\n"
- " push %r15\n"
- " mov %rsp,(%rdi)\n" /* old */
- " mov %rsi,%rsp\n" /* new */
- " pop %r15\n"
- " pop %r14\n"
- " pop %r13\n"
- " pop %r12\n"
- " pop %rbx\n"
- " pop %rbp\n"
- " pop %r9\n"
- " pop %r8\n"
- " pop %rcx\n"
- " pop %rdx\n"
- " pop %rsi\n"
- " pop %rdi\n"
- " ret\n"
-);
-#elif PROCESSOR_i686
-__asm__ (
-#if defined(APPLE) || defined(_WIN32)
- ".text\n"
- ".globl _raw_makecontext\n"
- "_raw_makecontext:\n"
-#else
- ".text\n"
- ".globl raw_makecontext\n"
- ".type raw_makecontext,@function\n"
- "raw_makecontext:\n"
-#endif
- " movl 4(%esp),%eax\n" /* stack */
- " addl 8(%esp),%eax\n" /* size */
- " andl $-16, %eax\n" /* align stack */
- " movl 12(%esp),%ecx\n" /* func */
- " movl 16(%esp),%edx\n" /* arg */
- " movl %edx, -4(%eax)\n"
- " movl $0, -8(%eax)\n" /* @return for func */
- " movl %ecx,-12(%eax)\n"
- " movl $0, -16(%eax)\n" /* ebp */
- " movl $0, -20(%eax)\n" /* ebx */
- " movl $0, -24(%eax)\n" /* esi */
- " movl $0, -28(%eax)\n" /* edi */
- " subl $28,%eax\n"
- " retl\n"
-);
-
-__asm__ (
-#if defined(APPLE) || defined(_WIN32)
- ".text\n"
- ".globl _raw_swapcontext\n"
- "_raw_swapcontext:\n"
-#else
- ".text\n"
- ".globl raw_swapcontext\n"
- ".type raw_swapcontext,@function\n"
- "raw_swapcontext:\n"
-#endif
- " movl 4(%esp),%eax\n" /* old */
- " movl 8(%esp),%edx\n" /* new */
- " pushl %ebp\n"
- " pushl %ebx\n"
- " pushl %esi\n"
- " pushl %edi\n"
- " movl %esp,(%eax)\n"
- " movl %edx,%esp\n"
- " popl %edi\n"
- " popl %esi\n"
- " popl %ebx\n"
- " popl %ebp\n"
- " retl\n"
-);
-#else
-
-
-/* If you implement raw contexts for other processors, don't forget to
- update the definition of HAVE_RAWCTX in tools/cmake/CompleteInFiles.cmake */
-
-raw_stack_t raw_makecontext(char* malloced_stack, int stack_size,
- rawctx_entry_point_t entry_point, void* arg) {
- THROW_UNIMPLEMENTED;
-}
-
-void raw_swapcontext(raw_stack_t* old, raw_stack_t new) {
- THROW_UNIMPLEMENTED;
-}
-
-#endif
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
-
-#ifdef TIME_BENCH_PER_SR
-#include "xbt/xbt_os_time.h"
-#define NUM_THREADS 4
-static xbt_os_timer_t timer;
-static double time_thread_sr[NUM_THREADS];
-static double time_thread_ssr[NUM_THREADS];
-static double time_wasted_sr = 0;
-static double time_wasted_ssr = 0;
-static unsigned int sr_count = 0;
-static unsigned int ssr_count = 0;
-static char new_sr = 0;
-#endif
-
-#ifdef TIME_BENCH_ENTIRE_SRS
-static unsigned int sr_count = 0;
-static xbt_os_timer_t timer;
-#endif
-
-static void smx_ctx_raw_wrapper(smx_ctx_raw_t context);
-static int smx_ctx_raw_factory_finalize(smx_context_factory_t *factory);
-static smx_context_t smx_ctx_raw_create_context(xbt_main_func_t code, int argc,
- char **argv, void_pfn_smxprocess_t cleanup_func, smx_process_t process);
-static void smx_ctx_raw_free(smx_context_t context);
-static void smx_ctx_raw_wrapper(smx_ctx_raw_t context);
-static void smx_ctx_raw_stop(smx_context_t context);
-static void smx_ctx_raw_suspend_serial(smx_context_t context);
-static void smx_ctx_raw_resume_serial(smx_process_t first_process);
-#ifdef TIME_BENCH_PER_SR
-static void smx_ctx_raw_runall_serial(xbt_dynar_t processes);
-void smx_ctx_raw_new_sr(void);
-#else
-static void smx_ctx_raw_runall_serial(void);
-#endif
-static void smx_ctx_raw_suspend_parallel(smx_context_t context);
-static void smx_ctx_raw_resume_parallel(smx_process_t first_process);
-static void smx_ctx_raw_runall_parallel(void);
-static void smx_ctx_raw_runall(void);
-
-/**
- * \brief Initializes the raw context factory.
- * \param factory where to initialize the factory
- */
-void SIMIX_ctx_raw_factory_init(smx_context_factory_t *factory)
-{
-
- XBT_VERB("Using raw contexts. Because the glibc is just not good enough for us.");
- smx_ctx_base_factory_init(factory);
-
- (*factory)->finalize = smx_ctx_raw_factory_finalize;
- (*factory)->create_context = smx_ctx_raw_create_context;
- /* Do not overload that method (*factory)->finalize */
- (*factory)->free = smx_ctx_raw_free;
- (*factory)->stop = smx_ctx_raw_stop;
- (*factory)->name = "smx_raw_context_factory";
-
- if (SIMIX_context_is_parallel()) {
-#ifdef CONTEXT_THREADS
- int nthreads = SIMIX_context_get_nthreads();
- xbt_os_thread_key_create(&raw_worker_id_key);
- raw_parmap = xbt_parmap_new(nthreads, SIMIX_context_get_parallel_mode());
- raw_workers_context = xbt_new(smx_ctx_raw_t, nthreads);
- raw_maestro_context=NULL;
-
-#endif
- if (SIMIX_context_get_parallel_threshold() > 1) {
- /* choose dynamically */
- (*factory)->runall = smx_ctx_raw_runall;
- (*factory)->suspend = NULL;
- }
- else {
- /* always parallel */
- (*factory)->runall = smx_ctx_raw_runall_parallel;
- (*factory)->suspend = smx_ctx_raw_suspend_parallel;
- }
- }
- else {
- /* always serial */
- (*factory)->runall = smx_ctx_raw_runall_serial;
- (*factory)->suspend = smx_ctx_raw_suspend_serial;
- }
-#ifdef TIME_BENCH_ENTIRE_SRS
- (*factory)->runall = smx_ctx_raw_runall;
- (*factory)->suspend = NULL;
- timer = xbt_os_timer_new();
-#endif
-
-#ifdef ADAPTIVE_THRESHOLD
- round_time = xbt_os_timer_new();
- reached_seq_limit = 0;
- reached_par_limit = 0;
-#endif
-
-#ifdef TIME_BENCH_PER_SR
- timer = xbt_os_timer_new();
-#endif
-}
-
-/**
- * \brief Finalizes the raw context factory.
- * \param factory the raw context factory
- */
-static int smx_ctx_raw_factory_finalize(smx_context_factory_t *factory)
-{
-#ifdef TIME_BENCH_PER_SR
- XBT_VERB("Total wasted time in %u SR: %f", sr_count, time_wasted_sr);
- XBT_VERB("Total wasted time in %u SSR: %f", ssr_count, time_wasted_ssr);
-#endif
-
-#ifdef CONTEXT_THREADS
- if (raw_parmap)
- xbt_parmap_destroy(raw_parmap);
- xbt_free(raw_workers_context);
-#endif
- return smx_ctx_base_factory_finalize(factory);
-}
-
-/**
- * \brief Creates a new raw context.
- * \param code main function of this context or NULL to create the maestro
- * context
- * \param argc argument number
- * \param argv arguments to pass to the main function
- * \param cleanup_func a function to call to free the user data when the
- * context finished
- * \param process SIMIX process
- */
-static smx_context_t
-smx_ctx_raw_create_context(xbt_main_func_t code, int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process)
-{
-
- smx_ctx_raw_t context =
- (smx_ctx_raw_t) smx_ctx_base_factory_create_context_sized(
- sizeof(s_smx_ctx_raw_t),
- code,
- argc,
- argv,
- cleanup_func,
- process);
-
- /* if the user provided a function for the process then use it,
- otherwise it is the context for maestro */
- if (code) {
- context->malloced_stack = SIMIX_context_stack_new();
- context->stack_top =
- raw_makecontext(context->malloced_stack,
- smx_context_usable_stack_size,
- (void_f_pvoid_t)smx_ctx_raw_wrapper, context);
-
- } else {
- if(process != NULL && raw_maestro_context==NULL)
- raw_maestro_context = context;
-
- if(MC_is_active())
- MC_ignore_heap(&(raw_maestro_context->stack_top), sizeof(raw_maestro_context->stack_top));
-
- }
-
- return (smx_context_t) context;
-}
-
-/**
- * \brief Destroys a raw context.
- * \param context a raw context
- */
-static void smx_ctx_raw_free(smx_context_t context)
-{
- if (context) {
- SIMIX_context_stack_delete(((smx_ctx_raw_t) context)->malloced_stack);
- }
- smx_ctx_base_free(context);
-}
-
-/**
- * \brief Wrapper for the main function of a context.
- * \param context a raw context
- */
-static void smx_ctx_raw_wrapper(smx_ctx_raw_t context)
-{
- (context->super.code) (context->super.argc, context->super.argv);
-
- smx_ctx_raw_stop((smx_context_t) context);
-}
-
-/**
- * \brief Stops a raw context.
- *
- * This function is called when the main function of the context if finished.
- *
- * \param context the current context
- */
-static void smx_ctx_raw_stop(smx_context_t context)
-{
- smx_ctx_base_stop(context);
- simix_global->context_factory->suspend(context);
-}
-
-/**
- * \brief Suspends a running context and resumes another one or returns to
- * maestro.
- * \param context the current context
- */
-static void smx_ctx_raw_suspend_serial(smx_context_t context)
-{
- /* determine the next context */
- smx_context_t next_context;
- unsigned long int i;
-#ifdef TIME_BENCH_PER_SR
- i = ++raw_process_index;
-#else
- i = raw_process_index++;
-#endif
- if (i < xbt_dynar_length(simix_global->process_to_run)) {
- /* execute the next process */
- XBT_DEBUG("Run next process");
- next_context = xbt_dynar_get_as(
- simix_global->process_to_run, i, smx_process_t)->context;
- }
- else {
- /* all processes were run, return to maestro */
- XBT_DEBUG("No more process to run");
- next_context = (smx_context_t) raw_maestro_context;
- }
- SIMIX_context_set_current(next_context);
- raw_swapcontext(&((smx_ctx_raw_t) context)->stack_top,
- ((smx_ctx_raw_t) next_context)->stack_top);
-}
-
-/**
- * \brief Resumes sequentially all processes ready to run.
- * \param first_process the first process to resume
- */
-static void smx_ctx_raw_resume_serial(smx_process_t first_process)
-{
- smx_ctx_raw_t context = (smx_ctx_raw_t) first_process->context;
- SIMIX_context_set_current((smx_context_t) context);
- raw_swapcontext(&raw_maestro_context->stack_top,
- ((smx_ctx_raw_t) context)->stack_top);
-}
-
-#ifdef TIME_BENCH_PER_SR
-static void smx_ctx_raw_runall_serial(xbt_dynar_t processes)
-{
- smx_process_t process;
- unsigned int cursor;
- double elapsed = 0;
- double tmax = 0;
- unsigned long num_proc = xbt_dynar_length(simix_global->process_to_run);
- unsigned int t=0;
- unsigned int data_size = (num_proc / NUM_THREADS) + ((num_proc % NUM_THREADS) ? 1 : 0);
-
- ssr_count++;
- time_thread_ssr[0] = 0;
- xbt_dynar_foreach(processes, cursor, process){
- XBT_VERB("Schedule item %u of %lu",cursor,num_proc);
- if(cursor >= t * data_size + data_size){
- if(time_thread_ssr[t] > tmax)
- tmax = time_thread_ssr[t];
- t++;
- time_thread_ssr[t] = 0;
- }
-
- if(new_sr){
- ((smx_ctx_raw_t)process->context)->thread = t;
- time_thread_sr[t] = 0;
- }
-
- xbt_os_cputimer_start(timer);
- smx_ctx_raw_resume_serial(process);
- xbt_os_cputimer_stop(timer);
- elapsed = xbt_os_timer_elapsed(timer);
- time_thread_ssr[t] += elapsed;
- time_thread_sr[((smx_ctx_raw_t)process->context)->thread] += elapsed;
- }
-
- if(new_sr)
- new_sr = FALSE;
-
- if(time_thread_ssr[t] > tmax)
- tmax = time_thread_ssr[t];
-
- for(cursor=0; cursor <= t; cursor++){
- XBT_VERB("Time SSR thread %u = %f (max %f)", cursor, time_thread_ssr[cursor], tmax);
- time_wasted_ssr += tmax - time_thread_ssr[cursor];
- }
-}
-
-void smx_ctx_raw_new_sr(void)
-{
- int i;
- double tmax = 0;
- new_sr = TRUE;
- sr_count++;
- for(i=0; i < NUM_THREADS; i++){
- if(time_thread_sr[i] > tmax)
- tmax = time_thread_sr[i];
- }
-
- for(i=0; i < NUM_THREADS; i++){
- XBT_CRITICAL("Time SR thread %u = %f (max %f)", i, time_thread_sr[i], tmax);
- time_wasted_sr += tmax - time_thread_sr[i];
- }
-
- XBT_CRITICAL("Total time SR %u = %f, %d", sr_count, tmax, xbt_dynar_length(simix_global->process_that_ran));
- XBT_CRITICAL("New scheduling round");
-}
-#else
-/**
- * \brief Resumes sequentially all processes ready to run.
- */
-static void smx_ctx_raw_runall_serial(void)
-{
- smx_process_t first_process =
- xbt_dynar_get_as(simix_global->process_to_run, 0, smx_process_t);
- raw_process_index = 1;
-
- /* execute the first process */
- smx_ctx_raw_resume_serial(first_process);
-}
-#endif
-
-/**
- * \brief Suspends a running context and resumes another one or returns to
- * the main function of the current worker thread.
- * \param context the context of the current worker thread
- */
-static void smx_ctx_raw_suspend_parallel(smx_context_t context)
-{
-#ifdef CONTEXT_THREADS
- /* determine the next context */
- smx_process_t next_work = xbt_parmap_next(raw_parmap);
- smx_context_t next_context;
- raw_stack_t next_stack;
-
- if (next_work != NULL) {
- /* there is a next process to resume */
- XBT_DEBUG("Run next process");
- next_context = next_work->context;
- next_stack = ((smx_ctx_raw_t) next_context)->stack_top;
- }
- else {
- /* all processes were run, go to the barrier */
- XBT_DEBUG("No more processes to run");
-
- unsigned long worker_id =
- (unsigned long)(uintptr_t) xbt_os_thread_get_specific(raw_worker_id_key);
-
- next_context = (smx_context_t)raw_workers_context[worker_id];
- XBT_DEBUG("Restoring worker stack %lu (working threads = %lu)",
- worker_id, raw_threads_working);
- next_stack = ((smx_ctx_raw_t)next_context)->stack_top;
- }
-
- SIMIX_context_set_current(next_context);
- raw_swapcontext(&((smx_ctx_raw_t) context)->stack_top, next_stack);
-#endif
-}
-
-/**
- * \brief Resumes sequentially in the current worker thread the processes ready
- * to run.
- * \param first_process the first process to resume
- */
-static void smx_ctx_raw_resume_parallel(smx_process_t first_process)
-{
-#ifdef CONTEXT_THREADS
- unsigned long worker_id = __sync_fetch_and_add(&raw_threads_working, 1);
- xbt_os_thread_set_specific(raw_worker_id_key, (void*)(uintptr_t) worker_id);
- smx_ctx_raw_t worker_context = (smx_ctx_raw_t)SIMIX_context_self();
- raw_workers_context[worker_id] = worker_context;
- XBT_DEBUG("Saving worker stack %lu", worker_id);
- raw_stack_t* worker_stack = &(worker_context)->stack_top;
-
-
- smx_context_t context = first_process->context;
- SIMIX_context_set_current(context);
- raw_swapcontext(worker_stack, ((smx_ctx_raw_t) context)->stack_top);
-#endif
-}
-
-/**
- * \brief Resumes in parallel all processes ready to run.
- */
-static void smx_ctx_raw_runall_parallel(void)
-{
-#ifdef CONTEXT_THREADS
- raw_threads_working = 0;
- xbt_parmap_apply(raw_parmap, (void_f_pvoid_t) smx_ctx_raw_resume_parallel,
- simix_global->process_to_run);
-#else
- xbt_die("You asked for a parallel execution, but you don't have any threads.");
-#endif
-}
-
-/**
- * \brief Resumes all processes ready to run.
- */
-#ifdef ADAPTIVE_THRESHOLD
-static void smx_ctx_raw_runall(void)
-{
- unsigned long nb_processes = xbt_dynar_length(simix_global->process_to_run);
- unsigned long threshold = SIMIX_context_get_parallel_threshold();
- reached_seq_limit = (seq_sched_round % SCHED_ROUND_LIMIT == 0);
- reached_par_limit = (par_sched_round % SCHED_ROUND_LIMIT == 0);
-
- if(reached_seq_limit && reached_par_limit){
- par_ratio = (par_proc_that_ran != 0) ? (par_time / (double)par_proc_that_ran) : 0;
- seq_ratio = (seq_proc_that_ran != 0) ? (seq_time / (double)seq_proc_that_ran) : 0;
- if(seq_ratio > par_ratio){
- if(nb_processes < avg_par_proc) {
- threshold = (threshold>2) ? threshold - 1 : threshold ;
- SIMIX_context_set_parallel_threshold(threshold);
- }
- } else {
- if(nb_processes > avg_seq_proc){
- SIMIX_context_set_parallel_threshold(threshold+1);
- }
- }
- }
-
- //XBT_CRITICAL("Thresh: %d", SIMIX_context_get_parallel_threshold());
- if (nb_processes >= SIMIX_context_get_parallel_threshold()) {
- simix_global->context_factory->suspend = smx_ctx_raw_suspend_parallel;
- if(nb_processes < par_window){
- par_sched_round++;
- xbt_os_walltimer_start(round_time);
- smx_ctx_raw_runall_parallel();
- xbt_os_walltimer_stop(round_time);
- par_time += xbt_os_timer_elapsed(round_time);
-
- prev_avg_par_proc = avg_par_proc;
- delta = nb_processes - avg_par_proc;
- avg_par_proc = (par_sched_round==1) ? nb_processes : avg_par_proc + delta / (double) par_sched_round;
-
- if(par_sched_round>=2){
- s_par_proc = s_par_proc + (nb_processes - prev_avg_par_proc) * delta;
- sd_par_proc = sqrt(s_par_proc / (par_sched_round-1));
- par_window = (int) (avg_par_proc + sd_par_proc);
- }else{
- sd_par_proc = 0;
- }
-
- par_proc_that_ran += nb_processes;
- } else{
- smx_ctx_raw_runall_parallel();
- }
- } else {
- simix_global->context_factory->suspend = smx_ctx_raw_suspend_serial;
- if(nb_processes > seq_window){
- seq_sched_round++;
- xbt_os_walltimer_start(round_time);
- smx_ctx_raw_runall_serial();
- xbt_os_walltimer_stop(round_time);
- seq_time += xbt_os_timer_elapsed(round_time);
-
- prev_avg_seq_proc = avg_seq_proc;
- delta = (nb_processes-avg_seq_proc);
- avg_seq_proc = (seq_sched_round==1) ? nb_processes : avg_seq_proc + delta / (double) seq_sched_round;
-
- if(seq_sched_round>=2){
- s_seq_proc = s_seq_proc + (nb_processes - prev_avg_seq_proc)*delta;
- sd_seq_proc = sqrt(s_seq_proc / (seq_sched_round-1));
- seq_window = (int) (avg_seq_proc - sd_seq_proc);
- } else {
- sd_seq_proc = 0;
- }
-
- seq_proc_that_ran += nb_processes;
- } else {
- smx_ctx_raw_runall_serial();
- }
- }
-}
-
-#else
-
-static void smx_ctx_raw_runall(void)
-{
-#ifdef TIME_BENCH_ENTIRE_SRS
- sr_count++;
- timer = xbt_os_timer_new();
- double elapsed = 0;
-#endif
- unsigned long nb_processes = xbt_dynar_length(simix_global->process_to_run);
- if (SIMIX_context_is_parallel() && SIMIX_context_get_parallel_threshold()<nb_processes) {
- XBT_DEBUG("Runall // %lu", nb_processes);
- simix_global->context_factory->suspend = smx_ctx_raw_suspend_parallel;
-
- #ifdef TIME_BENCH_ENTIRE_SRS
- xbt_os_walltimer_start(timer);
- #endif
-
- smx_ctx_raw_runall_parallel();
-
- #ifdef TIME_BENCH_ENTIRE_SRS
- xbt_os_walltimer_stop(timer);
- elapsed = xbt_os_timer_elapsed(timer);
- #endif
- } else {
- XBT_DEBUG("Runall serial %lu", nb_processes);
- simix_global->context_factory->suspend = smx_ctx_raw_suspend_serial;
-
- #ifdef TIME_BENCH_PER_SR
- smx_ctx_raw_runall_serial(simix_global->process_to_run);
- #else
-
- #ifdef TIME_BENCH_ENTIRE_SRS
- xbt_os_walltimer_start(timer);
- #endif
-
- smx_ctx_raw_runall_serial();
-
- #ifdef TIME_BENCH_ENTIRE_SRS
- xbt_os_walltimer_stop(timer);
- elapsed = xbt_os_timer_elapsed(timer);
- #endif
- #endif
- }
-
-#ifdef TIME_BENCH_ENTIRE_SRS
- XBT_CRITICAL("Total time SR %u = %f, %d", sr_count, elapsed, nb_processes);
-#endif
-}
-#endif
+++ /dev/null
-/* context_sysv - context switching with ucontexts from System V */
-
-/* Copyright (c) 2009-2015. 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 <stdarg.h>
-
-#include "xbt/parmap.h"
-#include "smx_private.h"
-#include "internal_config.h"
-#include "context_sysv_config.h" /* loads context system definitions */
-#include "mc/mc.h"
-
-#ifdef _XBT_WIN32
-# include <xbt/win32_ucontext.h> /* context relative declarations */
-#else
-# include <ucontext.h> /* context relative declarations */
-#endif
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
-
-typedef struct s_smx_ctx_sysv {
- s_smx_ctx_base_t super; /* Fields of super implementation */
- ucontext_t uc; /* the ucontext that executes the code */
- char *stack; /* the thread stack */
-} s_smx_ctx_sysv_t, *smx_ctx_sysv_t;
-
-#ifdef CONTEXT_THREADS
-static xbt_parmap_t sysv_parmap;
-static smx_ctx_sysv_t* sysv_workers_context; /* space to save the worker's context in each thread */
-static unsigned long sysv_threads_working; /* number of threads that have started their work */
-static xbt_os_thread_key_t sysv_worker_id_key; /* thread-specific storage for the thread id */
-#endif
-static unsigned long sysv_process_index = 0; /* index of the next process to run in the
- * list of runnable processes */
-static smx_ctx_sysv_t sysv_maestro_context;
-
-static int smx_ctx_sysv_factory_finalize(smx_context_factory_t *factory);
-static void smx_ctx_sysv_free(smx_context_t context);
-static smx_context_t
-smx_ctx_sysv_create_context(xbt_main_func_t code, int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func, smx_process_t process);
-
-static void smx_ctx_sysv_wrapper(int count, ...);
-
-static void smx_ctx_sysv_stop_serial(smx_context_t context);
-static void smx_ctx_sysv_suspend_serial(smx_context_t context);
-static void smx_ctx_sysv_resume_serial(smx_process_t first_process);
-static void smx_ctx_sysv_runall_serial(void);
-
-static void smx_ctx_sysv_stop_parallel(smx_context_t context);
-static void smx_ctx_sysv_suspend_parallel(smx_context_t context);
-static void smx_ctx_sysv_resume_parallel(smx_process_t first_process);
-static void smx_ctx_sysv_runall_parallel(void);
-
-/* This is a bit paranoid about sizeof(smx_ctx_sysv_t) not being a multiple of
- * sizeof(int), but it doesn't harm. */
-#define CTX_ADDR_LEN \
- (sizeof(smx_ctx_sysv_t) / sizeof(int) + \
- !!(sizeof(smx_ctx_sysv_t) % sizeof(int)))
-
-void SIMIX_ctx_sysv_factory_init(smx_context_factory_t *factory)
-{
- smx_ctx_base_factory_init(factory);
- XBT_VERB("Activating SYSV context factory");
-
- (*factory)->finalize = smx_ctx_sysv_factory_finalize;
- (*factory)->create_context = smx_ctx_sysv_create_context;
- /* Do not overload that method (*factory)->finalize */
- (*factory)->free = smx_ctx_sysv_free;
- (*factory)->name = "smx_sysv_context_factory";
-
- if (SIMIX_context_is_parallel()) {
-#ifdef CONTEXT_THREADS /* To use parallel ucontexts a thread pool is needed */
- int nthreads = SIMIX_context_get_nthreads();
- sysv_parmap = xbt_parmap_new(nthreads, SIMIX_context_get_parallel_mode());
- sysv_workers_context = xbt_new(smx_ctx_sysv_t, nthreads);
- sysv_maestro_context = NULL;
- xbt_os_thread_key_create(&sysv_worker_id_key);
- (*factory)->stop = smx_ctx_sysv_stop_parallel;
- (*factory)->suspend = smx_ctx_sysv_suspend_parallel;
- (*factory)->runall = smx_ctx_sysv_runall_parallel;
-#else
- THROWF(arg_error, 0, "No thread support for parallel context execution");
-#endif
- } else {
- (*factory)->stop = smx_ctx_sysv_stop_serial;
- (*factory)->suspend = smx_ctx_sysv_suspend_serial;
- (*factory)->runall = smx_ctx_sysv_runall_serial;
- }
-}
-
-static int smx_ctx_sysv_factory_finalize(smx_context_factory_t *factory)
-{
-#ifdef CONTEXT_THREADS
- if (sysv_parmap)
- xbt_parmap_destroy(sysv_parmap);
- xbt_free(sysv_workers_context);
-#endif
- return smx_ctx_base_factory_finalize(factory);
-}
-
-static smx_context_t
-smx_ctx_sysv_create_context(xbt_main_func_t code, int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process)
-{
- int ctx_addr[CTX_ADDR_LEN];
- smx_ctx_sysv_t context =
- (smx_ctx_sysv_t) smx_ctx_base_factory_create_context_sized(
- sizeof(s_smx_ctx_sysv_t),
- code,
- argc,
- argv,
- cleanup_func,
- process);
-
- /* if the user provided a function for the process then use it,
- otherwise it is the context for maestro */
- if (code) {
-
- context->stack = SIMIX_context_stack_new();
- getcontext(&(context->uc));
-
- context->uc.uc_link = NULL;
-
- context->uc.uc_stack.ss_sp =
- pth_skaddr_makecontext(context->stack, smx_context_usable_stack_size);
-
- context->uc.uc_stack.ss_size =
- pth_sksize_makecontext(context->stack, smx_context_usable_stack_size);
-
- memcpy(ctx_addr, &context, sizeof(smx_ctx_sysv_t));
- switch (CTX_ADDR_LEN) {
- case 1:
- makecontext(&context->uc, (void (*)())smx_ctx_sysv_wrapper,
- 1, ctx_addr[0]);
- break;
- case 2:
- makecontext(&context->uc, (void (*)())smx_ctx_sysv_wrapper,
- 2, ctx_addr[0], ctx_addr[1]);
- break;
- default:
- xbt_die("Ucontexts are not supported on this arch yet (addr len = %zu/%zu = %zu)",
- sizeof(smx_ctx_sysv_t), sizeof(int), CTX_ADDR_LEN);
- }
- } else {
- if (process != NULL && sysv_maestro_context == NULL)
- sysv_maestro_context = context;
- }
-
-#ifdef HAVE_MC
- if (MC_is_active() && code) {
- MC_register_stack_area(context->stack, ((smx_context_t)context)->process,
- &(context->uc), smx_context_usable_stack_size);
- }
-#endif
-
- return (smx_context_t) context;
-}
-
-static void smx_ctx_sysv_free(smx_context_t context)
-{
-
- if (context) {
- SIMIX_context_stack_delete(((smx_ctx_sysv_t)context)->stack);
- }
- smx_ctx_base_free(context);
-}
-
-static void smx_ctx_sysv_wrapper(int first, ...)
-{
- int ctx_addr[CTX_ADDR_LEN];
- smx_ctx_sysv_t context;
-
- ctx_addr[0] = first;
- if (CTX_ADDR_LEN > 1) {
- va_list ap;
- int i;
- va_start(ap, first);
- for (i = 1; i < CTX_ADDR_LEN; i++)
- ctx_addr[i] = va_arg(ap, int);
- va_end(ap);
- }
- memcpy(&context, ctx_addr, sizeof(smx_ctx_sysv_t));
- (context->super.code) (context->super.argc, context->super.argv);
-
- simix_global->context_factory->stop((smx_context_t) context);
-}
-
-static void smx_ctx_sysv_stop_serial(smx_context_t context)
-{
- smx_ctx_base_stop(context);
- smx_ctx_sysv_suspend_serial(context);
-}
-
-static void smx_ctx_sysv_suspend_serial(smx_context_t context)
-{
- /* determine the next context */
- smx_context_t next_context;
- unsigned long int i = sysv_process_index++;
-
- if (i < xbt_dynar_length(simix_global->process_to_run)) {
- /* execute the next process */
- XBT_DEBUG("Run next process");
- next_context = xbt_dynar_get_as(
- simix_global->process_to_run,i, smx_process_t)->context;
- }
- else {
- /* all processes were run, return to maestro */
- XBT_DEBUG("No more process to run");
- next_context = (smx_context_t) sysv_maestro_context;
- }
- SIMIX_context_set_current(next_context);
- swapcontext(&((smx_ctx_sysv_t) context)->uc,
- &((smx_ctx_sysv_t) next_context)->uc);
-}
-
-static void smx_ctx_sysv_resume_serial(smx_process_t first_process)
-{
- smx_context_t context = first_process->context;
- SIMIX_context_set_current(context);
- swapcontext(&sysv_maestro_context->uc,
- &((smx_ctx_sysv_t) context)->uc);
-}
-
-static void smx_ctx_sysv_runall_serial(void)
-{
- smx_process_t first_process =
- xbt_dynar_get_as(simix_global->process_to_run, 0, smx_process_t);
- sysv_process_index = 1;
-
- /* execute the first process */
- smx_ctx_sysv_resume_serial(first_process);
-}
-
-static void smx_ctx_sysv_stop_parallel(smx_context_t context)
-{
- smx_ctx_base_stop(context);
- smx_ctx_sysv_suspend_parallel(context);
-}
-
-/* This function is called by maestro at the beginning of a scheduling round to get all working threads executing some stuff
- * It is much easier to understand what happens if you see the working threads as bodies that swap their soul for the
- * ones of the simulated processes that must run.
- */
-static void smx_ctx_sysv_runall_parallel(void) {
-#ifdef CONTEXT_THREADS
- sysv_threads_working = 0;
- // parmap_apply ensures that every working thread get an index in the process_to_run array (through an atomic fetch_and_add),
- // and runs the smx_ctx_sysv_resume_parallel function on that index
- xbt_parmap_apply(sysv_parmap, (void_f_pvoid_t) smx_ctx_sysv_resume_parallel,
- simix_global->process_to_run);
-#else
- xbt_die("You asked for a parallel execution, but you don't have any threads.");
-#endif
-}
-
-/* This function is in charge of running one particular simulated process on the current thread */
-static void smx_ctx_sysv_resume_parallel(smx_process_t simulated_process_to_run) {
-#ifdef CONTEXT_THREADS
- unsigned long worker_id = __sync_fetch_and_add(&sysv_threads_working, 1); // what is my containing body?
- xbt_os_thread_set_specific(sysv_worker_id_key, (void*) worker_id); // Store the number of my containing body in os-thread-specific area
- smx_ctx_sysv_t worker_context = (smx_ctx_sysv_t)SIMIX_context_self(); // get my current soul
- sysv_workers_context[worker_id] = worker_context; // write down that this soul is hosted in that body (for now)
- ucontext_t* worker_stack = &worker_context->uc; // retrieves the system-level info that fuels this soul
-
- smx_context_t context = simulated_process_to_run->context; // That's the first soul that I should become
- SIMIX_context_set_current(context); // write in simix that I switched my soul
- swapcontext(worker_stack, &((smx_ctx_sysv_t) context)->uc); // actually do that using the relevant syscall
- // No body runs that soul anymore at this point. Instead the current body took the soul of simulated process
- // The simulated process wakes back after the call to "SIMIX_context_suspend(self->context);" within smx_process.c::SIMIX_process_yield()
-
- // From now on, the simulated processes will change their soul with the next soul to execute (in suspend_parallel, below).
- // When nobody is to be executed in this scheduling round, the last simulated process will take back the initial soul of the current working thread
-#endif
-}
-
-/* This function is called when a simulated process wants to yield back to the maestro in a blocking simcall.
- * This naturally occurs within SIMIX_context_suspend(self->context), called from SIMIX_process_yield()
- * Actually, it does not really yield back to maestro, but into the next process that must be executed.
- * If no one is to be executed, then it yields to the initial soul that was in this working thread (that was saved in resume_parallel).
- */
-static void smx_ctx_sysv_suspend_parallel(smx_context_t context) {
-#ifdef CONTEXT_THREADS
- /* determine the next context */
- smx_process_t next_work = xbt_parmap_next(sysv_parmap); // get the next soul to embody now
- smx_context_t next_context;
- ucontext_t* next_stack; // will contain the next soul to run, either simulated or initial minion's one
-
- if (next_work != NULL) { // there is a next soul to embody (ie, a next process to resume)
- XBT_DEBUG("Run next process");
- next_context = next_work->context;
- }
- else {
- /* all processes were run, go to the barrier */
- XBT_DEBUG("No more processes to run");
- unsigned long worker_id = // Get back the identity of my body that was stored when starting the scheduling round
- (unsigned long) xbt_os_thread_get_specific(sysv_worker_id_key);
- next_context = (smx_context_t)sysv_workers_context[worker_id]; // deduce the initial soul of that body
- // When given that soul, the body will wait for the next scheduling round
- }
-
- next_stack = &((smx_ctx_sysv_t)next_context)->uc;
-
- SIMIX_context_set_current(next_context);
- swapcontext(&((smx_ctx_sysv_t) context)->uc, next_stack); // get that next soul
-#endif
-}
+++ /dev/null
-/* context_thread - implementation of context switching with native threads */
-
-/* Copyright (c) 2009-2015. 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/function_types.h"
-#include "smx_private.h"
-#include "portable.h" /* loads context system definitions */
-#include "xbt/swag.h"
-#include "xbt/xbt_os_thread.h"
-#include "xbt_modinter.h" /* prototype of os thread module's init/exit in XBT */
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
-
-typedef struct s_smx_ctx_thread {
- s_smx_ctx_base_t super; /* Fields of super implementation */
- xbt_os_thread_t thread; /* a plain dumb thread (portable to posix or windows) */
- xbt_os_sem_t begin; /* this semaphore is used to schedule/yield the process */
- xbt_os_sem_t end; /* this semaphore is used to schedule/unschedule the process */
-} s_smx_ctx_thread_t, *smx_ctx_thread_t;
-
-static xbt_os_sem_t smx_ctx_thread_sem;
-
-static smx_context_t
-smx_ctx_thread_factory_create_context(xbt_main_func_t code,
- int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process);
-
-static void smx_ctx_thread_free(smx_context_t context);
-static void smx_ctx_thread_stop(smx_context_t context);
-static void smx_ctx_thread_suspend(smx_context_t context);
-static void smx_ctx_thread_runall_serial(void);
-static void smx_ctx_thread_runall_parallel(void);
-static smx_context_t smx_ctx_thread_self(void);
-
-static int smx_ctx_thread_factory_finalize(smx_context_factory_t *factory);
-static void *smx_ctx_thread_wrapper(void *param);
-
-void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory)
-{
- smx_ctx_base_factory_init(factory);
- XBT_VERB("Activating thread context factory");
-
- (*factory)->finalize = smx_ctx_thread_factory_finalize;
- (*factory)->create_context = smx_ctx_thread_factory_create_context;
- /* Do not overload that method (*factory)->finalize */
- (*factory)->free = smx_ctx_thread_free;
- (*factory)->stop = smx_ctx_thread_stop;
- (*factory)->suspend = smx_ctx_thread_suspend;
-
- if (SIMIX_context_is_parallel())
- (*factory)->runall = smx_ctx_thread_runall_parallel;
- else
- (*factory)->runall = smx_ctx_thread_runall_serial;
-
- (*factory)->self = smx_ctx_thread_self;
- (*factory)->name = "ctx_thread_factory";
-
- if (SIMIX_context_is_parallel()) {
- smx_ctx_thread_sem = xbt_os_sem_init(SIMIX_context_get_nthreads());
- } else {
- smx_ctx_thread_sem = NULL;
- }
-}
-
-static int smx_ctx_thread_factory_finalize(smx_context_factory_t *factory)
-{
- if (smx_ctx_thread_sem) {
- xbt_os_sem_destroy(smx_ctx_thread_sem);
- smx_ctx_thread_sem = NULL;
- }
- return smx_ctx_base_factory_finalize(factory);
-}
-
-static smx_context_t
-smx_ctx_thread_factory_create_context(xbt_main_func_t code, int argc,
- char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t process)
-{
- smx_ctx_thread_t context = (smx_ctx_thread_t)
- smx_ctx_base_factory_create_context_sized(sizeof(s_smx_ctx_thread_t),
- code, argc, argv,
- cleanup_func, process);
-
- /* If the user provided a function for the process then use it
- otherwise is the context for maestro */
- if (code) {
- context->begin = xbt_os_sem_init(0);
- context->end = xbt_os_sem_init(0);
- if (smx_context_stack_size_was_set)
- xbt_os_thread_setstacksize(smx_context_stack_size);
- if (smx_context_guard_size_was_set)
- xbt_os_thread_setguardsize(smx_context_guard_size);
-
- /* create and start the process */
- /* NOTE: The first argument to xbt_os_thread_create used to be the process *
- * name, but now the name is stored at SIMIX level, so we pass a null */
- context->thread =
- xbt_os_thread_create(NULL, smx_ctx_thread_wrapper, context, context);
-
-
- /* wait the starting of the newly created process */
- xbt_os_sem_acquire(context->end);
-
- } else {
- xbt_os_thread_set_extra_data(context);
- }
-
- return (smx_context_t) context;
-}
-
-static void smx_ctx_thread_free(smx_context_t pcontext)
-{
- smx_ctx_thread_t context = (smx_ctx_thread_t) pcontext;
-
- /* check if this is the context of maestro (it doesn't have a real thread) */
- if (context->thread) {
- /* wait about the thread terminason */
- xbt_os_thread_join(context->thread, NULL);
-
- /* destroy the synchronisation objects */
- xbt_os_sem_destroy(context->begin);
- xbt_os_sem_destroy(context->end);
- }
-
- smx_ctx_base_free(pcontext);
-}
-
-static void smx_ctx_thread_stop(smx_context_t pcontext)
-{
- smx_ctx_thread_t context = (smx_ctx_thread_t) pcontext;
-
- /* please no debug here: our procdata was already free'd */
- smx_ctx_base_stop(pcontext);
-
- if (smx_ctx_thread_sem) /* parallel run */
- xbt_os_sem_release(smx_ctx_thread_sem);
-
- /* signal to the maestro that it has finished */
- xbt_os_sem_release(((smx_ctx_thread_t) context)->end);
-
- /* exit */
- /* We should provide return value in case other wants it */
- xbt_os_thread_exit(NULL);
-}
-
-static void *smx_ctx_thread_wrapper(void *param)
-{
- smx_ctx_thread_t context = (smx_ctx_thread_t) param;
-#ifndef WIN32
- /* Install alternate signal stack, for SIGSEGV handler. */
- stack_t stack;
- stack.ss_sp = sigsegv_stack;
- stack.ss_size = sizeof sigsegv_stack;
- stack.ss_flags = 0;
- sigaltstack(&stack, NULL);
-#endif
- /* Tell the maestro we are starting, and wait for its green light */
- xbt_os_sem_release(context->end);
- xbt_os_sem_acquire(context->begin);
- if (smx_ctx_thread_sem) /* parallel run */
- xbt_os_sem_acquire(smx_ctx_thread_sem);
-
- smx_process_t self=SIMIX_process_self();
- if(SMPI_switch_data_segment && self->segment_index != -1){
- SMPI_switch_data_segment(self->segment_index);
- }
-
- (context->super.code) (context->super.argc, context->super.argv);
-
- smx_ctx_thread_stop((smx_context_t) context);
- return NULL;
-}
-
-static void smx_ctx_thread_suspend(smx_context_t context)
-{
- if (smx_ctx_thread_sem) /* parallel run */
- xbt_os_sem_release(smx_ctx_thread_sem);
- xbt_os_sem_release(((smx_ctx_thread_t) context)->end);
- xbt_os_sem_acquire(((smx_ctx_thread_t) context)->begin);
- if (smx_ctx_thread_sem) /* parallel run */
- xbt_os_sem_acquire(smx_ctx_thread_sem);
-}
-
-static void smx_ctx_thread_runall_serial(void)
-{
- smx_process_t process;
- unsigned int cursor;
-
- xbt_dynar_foreach(simix_global->process_to_run, cursor, process) {
- XBT_DEBUG("Handling %p",process);
- xbt_os_sem_release(((smx_ctx_thread_t) process->context)->begin);
- xbt_os_sem_acquire(((smx_ctx_thread_t) process->context)->end);
- }
-}
-
-static void smx_ctx_thread_runall_parallel(void)
-{
- unsigned int index;
- smx_process_t process;
-
- xbt_dynar_foreach(simix_global->process_to_run, index, process)
- xbt_os_sem_release(((smx_ctx_thread_t) process->context)->begin);
-
- xbt_dynar_foreach(simix_global->process_to_run, index, process) {
- xbt_os_sem_acquire(((smx_ctx_thread_t) process->context)->end);
- }
-}
-
-static smx_context_t smx_ctx_thread_self(void)
-{
- return (smx_context_t) xbt_os_thread_get_extra_data();
-}
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_deployment, simix,
"Logging specific to SIMIX (deployment)");
-static xbt_main_func_t parse_code = NULL;
-static double start_time = 0.0;
-static double kill_time = -1.0;
-
-static int auto_restart = 0;
-
extern int surf_parse_lineno;
-static void parse_process(sg_platf_process_cbarg_t process)
+void SIMIX_init_application(void)
{
- sg_host_t host = sg_host_by_name(process->host);
- if (!host)
- THROWF(arg_error, 0, "Host '%s' unknown", process->host);
- parse_code = SIMIX_get_registered_function(process->function);
- xbt_assert(parse_code, "Function '%s' unknown", process->function);
-
- start_time = process->start_time;
- kill_time = process->kill_time;
- auto_restart = process->on_failure == SURF_PROCESS_ON_FAILURE_DIE ? 0 : 1;
-
- smx_process_arg_t arg = NULL;
- smx_process_t process_created = NULL;
-
- arg = xbt_new0(s_smx_process_arg_t, 1);
- arg->code = parse_code;
- arg->data = NULL;
- arg->hostname = sg_host_name(host);
- arg->argc = process->argc;
- arg->argv = xbt_new(char *,process->argc);
- int i;
- for (i=0; i<process->argc; i++)
- arg->argv[i] = xbt_strdup(process->argv[i]);
- arg->name = xbt_strdup(arg->argv[0]);
- arg->kill_time = kill_time;
- arg->properties = current_property_set;
- if (!sg_host_simix(host)->boot_processes) {
- sg_host_simix(host)->boot_processes = xbt_dynar_new(sizeof(smx_process_arg_t), _SIMIX_host_free_process_arg);
- }
- xbt_dynar_push_as(sg_host_simix(host)->boot_processes,smx_process_arg_t,arg);
-
- if (start_time > SIMIX_get_clock()) {
- arg = xbt_new0(s_smx_process_arg_t, 1);
- arg->name = (char*)(process->argv)[0];
- arg->code = parse_code;
- arg->data = NULL;
- arg->hostname = sg_host_name(host);
- arg->argc = process->argc;
- arg->argv = (char**)(process->argv);
- arg->kill_time = kill_time;
- arg->properties = current_property_set;
-
- XBT_DEBUG("Process %s(%s) will be started at time %f", arg->name,
- arg->hostname, start_time);
- SIMIX_timer_set(start_time, &SIMIX_process_create_from_wrapper, arg);
- } else { // start_time <= SIMIX_get_clock()
- XBT_DEBUG("Starting Process %s(%s) right now", process->argv[0], sg_host_name(host));
-
- if (simix_global->create_process_function)
- process_created = simix_global->create_process_function(
- (char*)(process->argv)[0],
- parse_code,
- NULL,
- sg_host_name(host),
- kill_time,
- process->argc,
- (char**)(process->argv),
- current_property_set,
- auto_restart, NULL);
- else
- process_created = simcall_process_create((char*)(process->argv)[0], parse_code, NULL, sg_host_name(host), kill_time, process->argc,
- (char**)process->argv, current_property_set,auto_restart);
-
- /* verify if process has been created (won't be the case if the host is currently dead, but that's fine) */
- if (!process_created) {
- return;
- }
- }
- current_property_set = NULL;
-}
-
-void SIMIX_init_application(void){
surf_parse_reset_callbacks();
- sg_platf_process_add_cb(parse_process);
}
/**
* \param name the reference name of the function.
* \param code the function
*/
-XBT_INLINE void SIMIX_function_register(const char *name,
+void SIMIX_function_register(const char *name,
xbt_main_func_t code)
{
xbt_assert(simix_global,
- "SIMIX_global_init has to be called before SIMIX_function_register.");
-
- xbt_dict_set(simix_global->registered_functions, name, code, NULL);
+ "SIMIX_global_init has to be called before SIMIX_function_register.");
+ xbt_dict_set(simix_global->registered_functions, name, (void*) code, NULL);
}
static xbt_main_func_t default_function = NULL;
sg_host_t host = sg_host_by_name(process_host);
if (!host)
THROWF(arg_error, 0, "Host '%s' unknown", process_host);
- process.host = sg_host_name(host);
+ process.host = sg_host_get_name(host);
process.argc = 1 + xbt_dynar_length(arguments);
process.argv = (const char**)xbt_new(char *, process.argc + 1);
}
process.argv[process.argc] = NULL;
- parse_code = SIMIX_get_registered_function(process_function);
+ xbt_main_func_t parse_code = SIMIX_get_registered_function(process_function);
xbt_assert(parse_code, "Function '%s' unknown", process_function);
process.function = process_function;
}
-void SIMIX_post_create_environment(void) {
-
- void **host = NULL;
- void **storage = NULL;
- xbt_lib_cursor_t cursor = NULL;
- char *name = NULL;
-
- /* Create host at SIMIX level */
- xbt_lib_foreach(host_lib, cursor, name, host) {
- if(host[SURF_HOST_LEVEL])
- SIMIX_host_create(name);
- }
-
- /* Create storage at SIMIX level */
- xbt_lib_foreach(storage_lib, cursor, name, storage) {
- if(storage[SURF_STORAGE_LEVEL])
- SIMIX_storage_create(name, storage[SURF_STORAGE_LEVEL], NULL);
- }
-
+void SIMIX_post_create_environment(void)
+{
surf_presolve();
}
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <stdlib.h>
+#include "src/portable.h"
+#ifdef HAVE_SYS_PTRACE_H
+# include <sys/types.h>
+# include <sys/ptrace.h>
+#endif
#include "smx_private.h"
+#include "smx_private.hpp"
#include "xbt/heap.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/str.h"
#include "xbt/ex.h" /* ex_backtrace_display */
#include "mc/mc.h"
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
#include "simgrid/sg_config.h"
+#include "src/surf/callbacks.h"
+
#ifdef HAVE_MC
-#include "mc/mc_private.h"
-#include "mc/mc_protocol.h"
-#include "mc/mc_client.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_client.h"
#endif
#ifdef HAVE_MC
#include <stdlib.h>
-#include "mc/mc_protocol.h"
+#include "src/mc/mc_protocol.h"
#endif
-#include "mc/mc_record.h"
+#include "src/mc/mc_record.h"
#ifdef HAVE_SMPI
-#include "smpi/private.h"
+#include "src/smpi/private.h"
#endif
XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories");
smx_global_t simix_global = NULL;
static xbt_heap_t simix_timers = NULL;
+/** @brief Timer datatype */
+typedef struct s_smx_timer {
+ double date;
+ void(* func)(void*);
+ void* args;
+} s_smx_timer_t;
+
void (*SMPI_switch_data_segment)(int) = NULL;
static void* SIMIX_synchro_mallocator_new_f(void);
}
#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);
}
#endif
/********************************* SIMIX **************************************/
-XBT_INLINE double SIMIX_timer_next(void)
+double SIMIX_timer_next(void)
{
return xbt_heap_size(simix_timers) > 0 ? xbt_heap_maxkey(simix_timers) : -1.0;
}
+static void kill_process(smx_process_t process)
+{
+ SIMIX_process_kill(process, NULL);
+}
+
+static void SIMIX_storage_create_(smx_storage_t storage)
+{
+ const char* key = xbt_dict_get_elm_key(storage);
+ SIMIX_storage_create(key, storage, NULL);
+}
+
/**
* \ingroup SIMIX_API
* \brief Initialize SIMIX internal data.
simix_global->registered_functions = xbt_dict_new_homogeneous(NULL);
simix_global->create_process_function = SIMIX_process_create;
- simix_global->kill_process_function = SIMIX_process_kill;
+ simix_global->kill_process_function = kill_process;
simix_global->cleanup_process_function = SIMIX_process_cleanup;
simix_global->synchro_mallocator = xbt_mallocator_new(65536,
SIMIX_synchro_mallocator_new_f, SIMIX_synchro_mallocator_free_f,
/* register a function to be called by SURF after the environment creation */
sg_platf_init();
sg_platf_postparse_add_cb(SIMIX_post_create_environment);
+ surf_on_host_created(SIMIX_host_create);
+ surf_on_storage_created(SIMIX_storage_create_);
}
if (!simix_timers) {
#ifdef HAVE_MC
// The communication initialization is done ASAP.
// We need to communicate initialization of the different layers to the model-checker.
- if (mc_mode == MC_MODE_NONE) {
- if (getenv(MC_ENV_SOCKET_FD)) {
- mc_mode = MC_MODE_CLIENT;
- MC_client_init();
- MC_client_hello();
- MC_client_handle_messages();
- }
- }
+ MC_client_init();
#endif
if (_sg_cfg_exit_asap)
*
* \return Return the clock.
*/
-XBT_INLINE double SIMIX_get_clock(void)
+double SIMIX_get_clock(void)
{
if(MC_is_active() || MC_record_replay_is_active()){
return MC_process_clock_get(SIMIX_process_self());
}
}
/* Wake up all processes waiting for a Surf action to finish */
- xbt_dynar_foreach(model_list, iter, model) {
+ xbt_dynar_foreach(all_existing_models, iter, model) {
XBT_DEBUG("Handling process whose action failed");
while ((action = surf_model_extract_failed_action_set(model))) {
XBT_DEBUG(" Handling Action %p",action);
while (xbt_heap_size(simix_timers) > 0 && SIMIX_get_clock() >= SIMIX_timer_next()) {
//FIXME: make the timers being real callbacks
// (i.e. provide dispatchers that read and expand the args)
- timer = xbt_heap_pop(simix_timers);
+ timer = (smx_timer_t) xbt_heap_pop(simix_timers);
if (timer->func)
- ((void (*)(void*))timer->func)(timer->args);
+ timer->func(timer->args);
xbt_free(timer);
}
/* Wake up all processes waiting for a Surf action to finish */
- xbt_dynar_foreach(model_list, iter, model) {
+ xbt_dynar_foreach(all_existing_models, iter, model) {
XBT_DEBUG("Handling process whose action failed");
while ((action = surf_model_extract_failed_action_set(model))) {
XBT_DEBUG(" Handling Action %p",action);
* \param arg Parameters of the function
*
*/
-XBT_INLINE smx_timer_t SIMIX_timer_set(double date, void *function, void *arg)
+smx_timer_t SIMIX_timer_set(double date, void (*function)(void*), void *arg)
{
smx_timer_t timer = xbt_new0(s_smx_timer_t, 1);
return timer;
}
/** @brief cancels a timer that was added earlier */
-XBT_INLINE void SIMIX_timer_remove(smx_timer_t timer) {
+void SIMIX_timer_remove(smx_timer_t timer) {
xbt_heap_rm_elm(simix_timers, timer, timer->date);
}
/** @brief Returns the date at which the timer will trigger (or 0 if NULL timer) */
-XBT_INLINE double SIMIX_timer_get_date(smx_timer_t timer) {
+double SIMIX_timer_get_date(smx_timer_t timer) {
return timer?timer->date:0;
}
* to call SIMIX_process_create().
* \param function create process function
*/
-XBT_INLINE void SIMIX_function_register_process_create(smx_creation_func_t
+void SIMIX_function_register_process_create(smx_creation_func_t
function)
{
simix_global->create_process_function = function;
*
* \param function Kill process function
*/
-XBT_INLINE void SIMIX_function_register_process_kill(void_pfn_smxprocess_t_smxprocess_t
+void SIMIX_function_register_process_kill(void_pfn_smxprocess_t
function)
{
simix_global->kill_process_function = function;
*
* \param function cleanup process function
*/
-XBT_INLINE void SIMIX_function_register_process_cleanup(void_pfn_smxprocess_t
+void SIMIX_function_register_process_cleanup(void_pfn_smxprocess_t
function)
{
simix_global->cleanup_process_function = function;
break;
}
XBT_INFO("Process %lu (%s@%s): waiting for %s synchro %p (%s) in state %d to finish",
- process->pid, process->name, sg_host_name(process->host),
+ process->pid, process->name, sg_host_get_name(process->host),
synchro_description, process->waiting_synchro,
process->waiting_synchro->name, (int)process->waiting_synchro->state);
}
else {
- XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_name(process->host));
+ XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_get_name(process->host));
}
}
}
}
xbt_dict_t SIMIX_asr_get_properties(const char *name)
{
- return xbt_lib_get_or_null(as_router_lib, name, ROUTING_PROP_ASR_LEVEL);
+ return (xbt_dict_t) xbt_lib_get_or_null(as_router_lib, name, ROUTING_PROP_ASR_LEVEL);
}
#include "xbt/log.h"
#include "xbt/dict.h"
#include "mc/mc.h"
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_host, simix,
"SIMIX hosts");
* \brief Internal function to create a SIMIX host.
* \param name name of the host to create
*/
-void SIMIX_host_create(const char *name) // FIXME: braindead prototype. Take sg_host as parameter
+void SIMIX_host_create(sg_host_t host) // FIXME: braindead prototype. Take sg_host as parameter
{
- sg_host_t host = xbt_lib_get_elm_or_null(host_lib, name);
smx_host_priv_t smx_host = xbt_new0(s_smx_host_priv_t, 1);
s_smx_process_t proc;
smx_process_t process = NULL;
xbt_swag_foreach(process, host->process_list) {
SIMIX_process_kill(process, issuer);
- XBT_DEBUG("Killing %s on %s by %s", process->name, sg_host_name(process->host), issuer->name);
+ XBT_DEBUG("Killing %s on %s by %s", process->name, sg_host_get_name(process->host), issuer->name);
}
}
}
return surf_host_get_properties(surf_host_resource_priv(host));
}
-double SIMIX_host_get_speed(sg_host_t host){
- return surf_host_get_speed(host, 1.0);
-}
-
-int SIMIX_host_get_core(sg_host_t host){
- return surf_host_get_core(host);
-}
xbt_swag_t SIMIX_host_get_process_list(sg_host_t host){
smx_host_priv_t host_priv = sg_host_simix(host);
}
-double SIMIX_host_get_available_speed(sg_host_t host){
- return surf_host_get_available_speed(host);
-}
-
double SIMIX_host_get_current_power_peak(sg_host_t host) {
return surf_host_get_current_power_peak(host);
}
return surf_host_get_power_peak_at(host, pstate_index);
}
-int SIMIX_host_get_nb_pstates(sg_host_t host) {
- return surf_host_get_nb_pstates(host);
-}
-
-
void SIMIX_host_set_pstate(sg_host_t host, int pstate_index) {
surf_host_set_pstate(host, pstate_index);
}
-int SIMIX_host_get_pstate(sg_host_t host) {
- return surf_host_get_pstate(host);
-}
-
-double SIMIX_host_get_consumed_energy(sg_host_t host) {
- return surf_host_get_consumed_energy(host);
-}
double SIMIX_host_get_wattmin_at(sg_host_t host,int pstate) {
return surf_host_get_wattmin_at(host,pstate);
}
return surf_host_get_wattmax_at(host,pstate);
}
-int SIMIX_host_get_state(sg_host_t host){
- return surf_host_get_state(surf_host_resource_priv(host));
-}
-
void _SIMIX_host_free_process_arg(void *data)
{
- smx_process_arg_t arg = *(void**)data;
+ smx_process_arg_t arg = *(smx_process_arg_t*)data;
int i;
for (i = 0; i < arg->argc; i++)
xbt_free(arg->argv[i]);
arg->properties = properties;
arg->auto_restart = auto_restart;
- if( SIMIX_host_get_state(host) == SURF_RESOURCE_OFF
- && !xbt_dict_get_or_null(watched_hosts_lib,sg_host_name(host))){
- xbt_dict_set(watched_hosts_lib,sg_host_name(host),host,NULL);
- XBT_DEBUG("Have pushed host %s to watched_hosts_lib because state == SURF_RESOURCE_OFF",sg_host_name(host));
+ if( sg_host_get_state(host) == SURF_RESOURCE_OFF
+ && !xbt_dict_get_or_null(watched_hosts_lib,sg_host_get_name(host))){
+ xbt_dict_set(watched_hosts_lib,sg_host_get_name(host),host,NULL);
+ XBT_DEBUG("Have pushed host %s to watched_hosts_lib because state == SURF_RESOURCE_OFF",sg_host_get_name(host));
}
xbt_dynar_push_as(sg_host_simix(host)->auto_restart_processes,smx_process_arg_t,arg);
}
NULL);
} else {
simcall_process_create(arg->argv[0],
- arg->code,
+ (xbt_main_func_t) arg->code,
NULL,
arg->hostname,
arg->kill_time,
double flops_amount, double priority, double bound, unsigned long affinity_mask){
/* alloc structures and initialize */
- smx_synchro_t synchro = xbt_mallocator_get(simix_global->synchro_mallocator);
+ smx_synchro_t synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
synchro->type = SIMIX_SYNC_EXECUTE;
synchro->name = xbt_strdup(name);
synchro->state = SIMIX_RUNNING;
* surf layer should not be zero (i.e., unlimited). It should be the
* capacity of a CPU core. */
if (bound == 0)
- surf_cpu_action_set_bound(synchro->execution.surf_exec, SIMIX_host_get_speed(issuer->host));
+ surf_cpu_action_set_bound(synchro->execution.surf_exec, sg_host_get_speed(issuer->host));
else
surf_cpu_action_set_bound(synchro->execution.surf_exec, bound);
int i;
/* alloc structures and initialize */
- smx_synchro_t synchro = xbt_mallocator_get(simix_global->synchro_mallocator);
+ smx_synchro_t synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
synchro->type = SIMIX_SYNC_PARALLEL_EXECUTE;
synchro->name = xbt_strdup(name);
synchro->state = SIMIX_RUNNING;
break;
case SIMIX_FAILED:
- XBT_DEBUG("SIMIX_execution_finished: host '%s' failed", sg_host_name(simcall->issuer->host));
+ XBT_DEBUG("SIMIX_execution_finished: host '%s' failed", sg_host_get_name(simcall->issuer->host));
simcall->issuer->context->iwannadie = 1;
SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
break;
} s_smx_host_priv_t;
XBT_PRIVATE void _SIMIX_host_free_process_arg(void *);
-XBT_PRIVATE void SIMIX_host_create(const char *name);
+XBT_PRIVATE void SIMIX_host_create(sg_host_t host);
XBT_PRIVATE void SIMIX_host_destroy(void *host);
XBT_PRIVATE void SIMIX_host_add_auto_restart_process(sg_host_t host,
XBT_PRIVATE void SIMIX_host_restart_processes(sg_host_t host);
XBT_PRIVATE void SIMIX_host_autorestart(sg_host_t host);
XBT_PRIVATE xbt_dict_t SIMIX_host_get_properties(sg_host_t host);
-XBT_PRIVATE int SIMIX_host_get_core(sg_host_t host);
XBT_PRIVATE xbt_swag_t SIMIX_host_get_process_list(sg_host_t host);
-XBT_PRIVATE double SIMIX_host_get_speed(sg_host_t host);
-XBT_PRIVATE double SIMIX_host_get_available_speed(sg_host_t host);
-XBT_PRIVATE int SIMIX_host_get_state(sg_host_t host);
XBT_PRIVATE double SIMIX_host_get_current_power_peak(sg_host_t host);
XBT_PRIVATE double SIMIX_host_get_power_peak_at(sg_host_t host, int pstate_index);
-XBT_PRIVATE int SIMIX_host_get_nb_pstates(sg_host_t host);
-XBT_PRIVATE double SIMIX_host_get_consumed_energy(sg_host_t host);
XBT_PRIVATE double SIMIX_host_get_wattmin_at(sg_host_t host,int pstate);
XBT_PRIVATE double SIMIX_host_get_wattmax_at(sg_host_t host,int pstate);
XBT_PRIVATE void SIMIX_host_set_pstate(sg_host_t host, int pstate_index);
-XBT_PRIVATE int SIMIX_host_get_pstate(sg_host_t host);
XBT_PRIVATE smx_synchro_t SIMIX_process_execute(smx_process_t issuer, const char *name,
double flops_amount, double priority, double bound, unsigned long affinity_mask);
XBT_PRIVATE smx_synchro_t SIMIX_process_parallel_execute(const char *name,
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "smx_private.h"
-//#include "surf/storage_private.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/dict.h"
/* check if the host is active */
if (surf_host_get_state(surf_host_resource_priv(host)) != SURF_RESOURCE_ON) {
THROWF(host_error, 0, "Host %s failed, you cannot call this function",
- sg_host_name(host));
+ sg_host_get_name(host));
}
- synchro = xbt_mallocator_get(simix_global->synchro_mallocator);
+ synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
synchro->type = SIMIX_SYNC_IO;
synchro->name = NULL;
synchro->category = NULL;
/* check if the host is active */
if (surf_host_get_state(surf_host_resource_priv(host)) != SURF_RESOURCE_ON) {
THROWF(host_error, 0, "Host %s failed, you cannot call this function",
- sg_host_name(host));
+ sg_host_get_name(host));
}
- synchro = xbt_mallocator_get(simix_global->synchro_mallocator);
+ synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
synchro->type = SIMIX_SYNC_IO;
synchro->name = NULL;
synchro->category = NULL;
/* check if the host is active */
if (surf_host_get_state(surf_host_resource_priv(host)) != SURF_RESOURCE_ON) {
THROWF(host_error, 0, "Host %s failed, you cannot call this function",
- sg_host_name(host));
+ sg_host_get_name(host));
}
- synchro = xbt_mallocator_get(simix_global->synchro_mallocator);
+ synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
synchro->type = SIMIX_SYNC_IO;
synchro->name = NULL;
synchro->category = NULL;
/* check if the host is active */
if (surf_host_get_state(surf_host_resource_priv(host)) != SURF_RESOURCE_ON) {
THROWF(host_error, 0, "Host %s failed, you cannot call this function",
- sg_host_name(host));
+ sg_host_get_name(host));
}
- synchro = xbt_mallocator_get(simix_global->synchro_mallocator);
+ synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
synchro->type = SIMIX_SYNC_IO;
synchro->name = NULL;
synchro->category = NULL;
/* check if the host is active */
if (surf_host_get_state(surf_host_resource_priv(host)) != SURF_RESOURCE_ON) {
THROWF(host_error, 0, "Host %s failed, you cannot call this function",
- sg_host_name(host));
+ sg_host_get_name(host));
}
int res = surf_host_unlink(host, fd->surf_file);
xbt_dict_t SIMIX_storage_get_properties(smx_storage_t storage){
xbt_assert((storage != NULL), "Invalid parameters (simix storage is NULL)");
- return surf_resource_get_properties(surf_storage_resource_priv(storage));
+ return (xbt_dict_t) surf_resource_get_properties((surf_cpp_resource_t)
+ surf_storage_resource_priv(storage));
}
const char* SIMIX_storage_get_name(smx_storage_t storage){
#include "smx_private.h"
#include "xbt/log.h"
#include "mc/mc.h"
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
#include "xbt/dict.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_network, simix,
static void SIMIX_waitany_remove_simcall_from_actions(smx_simcall_t simcall);
static void SIMIX_comm_copy_data(smx_synchro_t comm);
static smx_synchro_t SIMIX_comm_new(e_smx_comm_type_t type);
-static XBT_INLINE void SIMIX_rdv_push(smx_rdv_t rdv, smx_synchro_t comm);
+static inline void SIMIX_rdv_push(smx_rdv_t rdv, smx_synchro_t comm);
static smx_synchro_t SIMIX_fifo_probe_comm(xbt_fifo_t fifo, e_smx_comm_type_t type,
int (*match_fun)(void *, void *,smx_synchro_t),
void *user_data, smx_synchro_t my_synchro);
smx_rdv_t SIMIX_rdv_create(const char *name)
{
/* two processes may have pushed the same rdv_create simcall at the same time */
- smx_rdv_t rdv = name ? xbt_dict_get_or_null(rdv_points, name) : NULL;
+ smx_rdv_t rdv = name ? (smx_rdv_t) xbt_dict_get_or_null(rdv_points, name) : NULL;
if (!rdv) {
rdv = xbt_new0(s_smx_rvpoint_t, 1);
smx_rdv_t SIMIX_rdv_get_by_name(const char *name)
{
- return xbt_dict_get_or_null(rdv_points, name);
+ return (smx_rdv_t) xbt_dict_get_or_null(rdv_points, name);
}
int SIMIX_rdv_comm_count_by_host(smx_rdv_t rdv, sg_host_t host)
smx_synchro_t SIMIX_rdv_get_head(smx_rdv_t rdv)
{
- return xbt_fifo_get_item_content(xbt_fifo_get_first_item(rdv->comm_fifo));
+ return (smx_synchro_t) xbt_fifo_get_item_content(
+ xbt_fifo_get_first_item(rdv->comm_fifo));
}
/**
* \param rdv The rendez-vous point
* \param comm The communication synchro
*/
-static XBT_INLINE void SIMIX_rdv_push(smx_rdv_t rdv, smx_synchro_t comm)
+static inline void SIMIX_rdv_push(smx_rdv_t rdv, smx_synchro_t comm)
{
xbt_fifo_push(rdv->comm_fifo, comm);
comm->comm.rdv = rdv;
* \param rdv The rendez-vous point
* \param comm The communication synchro
*/
-XBT_INLINE void SIMIX_rdv_remove(smx_rdv_t rdv, smx_synchro_t comm)
+void SIMIX_rdv_remove(smx_rdv_t rdv, smx_synchro_t comm)
{
xbt_fifo_remove(rdv->comm_fifo, comm);
comm->comm.rdv = NULL;
smx_synchro_t synchro;
/* alloc structures */
- synchro = xbt_mallocator_get(simix_global->synchro_mallocator);
+ synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
synchro->type = SIMIX_SYNC_COMMUNICATE;
synchro->state = SIMIX_WAITING;
//find a match in the already received fifo
XBT_DEBUG("first try in the perm recv mailbox");
- other_synchro = SIMIX_fifo_probe_comm(rdv->done_comm_fifo, smx_type, match_fun, data, this_synchro);
+ other_synchro = SIMIX_fifo_probe_comm(
+ rdv->done_comm_fifo, (e_smx_comm_type_t) smx_type,
+ match_fun, data, this_synchro);
}
// }else{
if(!other_synchro){
XBT_DEBUG("try in the normal mailbox");
- other_synchro = SIMIX_fifo_probe_comm(rdv->comm_fifo, smx_type, match_fun, data, this_synchro);
+ other_synchro = SIMIX_fifo_probe_comm(
+ rdv->comm_fifo, (e_smx_comm_type_t) smx_type,
+ match_fun, data, this_synchro);
}
// }
if(other_synchro)other_synchro->comm.refcount--;
* \brief Starts the simulation of a communication synchro.
* \param synchro the communication synchro
*/
-static XBT_INLINE void SIMIX_comm_start(smx_synchro_t synchro)
+static inline void SIMIX_comm_start(smx_synchro_t synchro)
{
/* If both the sender and the receiver are already there, start the communication */
if (synchro->state == SIMIX_READY) {
unsigned int destroy_count = 0;
smx_simcall_t simcall;
- while ((simcall = xbt_fifo_shift(synchro->simcalls))) {
+ while ((simcall = (smx_simcall_t) xbt_fifo_shift(synchro->simcalls))) {
/* If a waitany simcall is waiting for this synchro to finish, then remove
it from the other synchros in the waitany list. Afterwards, get the
XBT_DEBUG("Link failure in synchro %p between '%s' and '%s': posting an exception to the issuer: %s (%p) detached:%d",
synchro,
- synchro->comm.src_proc ? sg_host_name(synchro->comm.src_proc->host) : NULL,
- synchro->comm.dst_proc ? sg_host_name(synchro->comm.dst_proc->host) : NULL,
+ synchro->comm.src_proc ? sg_host_get_name(synchro->comm.src_proc->host) : NULL,
+ synchro->comm.dst_proc ? sg_host_get_name(synchro->comm.dst_proc->host) : NULL,
simcall->issuer->name, simcall->issuer, synchro->comm.detached);
if (synchro->comm.src_proc == simcall->issuer) {
XBT_DEBUG("I'm source");
XBT_DEBUG("Copying comm %p data from %s (%p) -> %s (%p) (%zu bytes)",
comm,
- comm->comm.src_proc ? sg_host_name(comm->comm.src_proc->host) : "a finished process",
+ comm->comm.src_proc ? sg_host_get_name(comm->comm.src_proc->host) : "a finished process",
comm->comm.src_buff,
- comm->comm.dst_proc ? sg_host_name(comm->comm.dst_proc->host) : "a finished process",
+ comm->comm.dst_proc ? sg_host_get_name(comm->comm.dst_proc->host) : "a finished process",
comm->comm.dst_buff, buff_size);
/* Copy at most dst_buff_size bytes of the message to receiver's buffer */
#include "xbt/config.h"
#include "xbt/xbt_os_time.h"
#include "xbt/function_types.h"
-#include "xbt/ex_interface.h"
-#include "instr/instr_private.h"
+#include "src/xbt/ex_interface.h"
+#include "src/instr/instr_private.h"
#include "smx_process_private.h"
#include "smx_host_private.h"
#include "smx_io_private.h"
#include "popping_private.h"
#include "smx_synchro_private.h"
+#ifdef __cplusplus
+
+#include <simgrid/simix.hpp>
+
+namespace simgrid {
+namespace simix {
+
+/* Hack: let msg load directly the right factory
+ *
+ * This is a factory of factory! How nice is this?
+ */
+typedef ContextFactory* (*ContextFactoryInitializer)(void);
+XBT_PUBLIC_DATA(ContextFactoryInitializer) factory_initializer;
+
+}
+}
+
+typedef simgrid::simix::ContextFactory *smx_context_factory_t;
+
+#else
+
+typedef struct s_smx_context_factory *smx_context_factory_t;
+
+#endif
+
SG_BEGIN_DECL()
/* Define only for SimGrid benchmarking purposes */
#ifdef TIME_BENCH_PER_SR
XBT_PRIVATE void smx_ctx_raw_new_sr(void);
#endif
+
/********************************** Simix Global ******************************/
typedef struct s_smx_global {
smx_context_factory_t context_factory;
smx_process_t maestro_process;
xbt_dict_t registered_functions;
smx_creation_func_t create_process_function;
- void_pfn_smxprocess_t_smxprocess_t kill_process_function;
+ void_pfn_smxprocess_t kill_process_function;
/** Callback used when killing a SMX_process */
void_pfn_smxprocess_t cleanup_process_function;
xbt_mallocator_t synchro_mallocator;
void* data; /**< @brief user data */
} s_smx_file_t;
-/*********************************** Time ************************************/
-
-/** @brief Timer datatype */
-typedef struct s_smx_timer {
- double date;
- void* func;
- void* args;
-} s_smx_timer_t;
-
/********************************* synchro *************************************/
typedef enum {
XBT_PRIVATE void SIMIX_context_mod_init(void);
XBT_PRIVATE void SIMIX_context_mod_exit(void);
+smx_context_t SIMIX_context_new(
+ xbt_main_func_t code, int argc, char **argv,
+ void_pfn_smxprocess_t cleanup_func,
+ smx_process_t simix_process);
+
#ifndef WIN32
XBT_PUBLIC_DATA(char sigsegv_stack[SIGSTKSZ]);
#endif
XBT_PRIVATE void SIMIX_context_set_current(smx_context_t context);
XBT_PRIVATE smx_context_t SIMIX_context_get_current(void);
-/* All factories init */
-
-XBT_PRIVATE void SIMIX_ctx_thread_factory_init(smx_context_factory_t *factory);
-XBT_PRIVATE void SIMIX_ctx_sysv_factory_init(smx_context_factory_t *factory);
-XBT_PRIVATE void SIMIX_ctx_raw_factory_init(smx_context_factory_t *factory);
-XBT_PRIVATE void SIMIX_ctx_boost_factory_init(smx_context_factory_t *factory);
-
/* ****************************** */
/* context manipulation functions */
/* ****************************** */
-/* Scenario for the end of a context:
- *
- * CASE 1: death after end of the main function
- * the context_wrapper, called internally by the context module, calls
- * SIMIX_context_stop after user code stops, smx_context_stop calls user
- * cleanup_func if any (in context settings), add current process to trashbin
- * and yields back to maestro.
- * From time to time, maestro calls SIMIX_context_empty_trash, which destroy
- * all the process and context data structures, and frees the memory
- *
- * CASE 2: brutal death
- * SIMIX_process_kill (from any process) set process->iwannadie = 1 and then
- * schedules the process. Then the process is awaken in the middle of the
- * SIMIX_process_yield function, and at the end of it, it checks that
- * iwannadie == 1, and call SIMIX_context_stop(same than first case afterward)
- */
-
-/**
- * \brief creates a new context for a user level process
- * \param code a main function
- * \param argc the number of arguments of the main function
- * \param argv the vector of arguments of the main function
- * \param cleanup_func the function to call when the context stops
- * \param cleanup_arg the argument of the cleanup_func function
- */
-static XBT_INLINE smx_context_t SIMIX_context_new(xbt_main_func_t code,
- int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
- smx_process_t simix_process)
-{
- if (!simix_global)
- xbt_die("simix is not initialized, please call MSG_init first");
- return simix_global->context_factory->create_context(code,
- argc, argv,
- cleanup_func,
- simix_process);
-}
-
-/**
- * \brief destroy a context
- * \param context the context to destroy
- * Argument must be stopped first -- runs in maestro context
- */
-static XBT_INLINE void SIMIX_context_free(smx_context_t context)
-{
- simix_global->context_factory->free(context);
-}
-
-/**
- * \brief stops the execution of a context
- * \param context to stop
- */
-static XBT_INLINE void SIMIX_context_stop(smx_context_t context)
-{
- simix_global->context_factory->stop(context);
-}
-
-/**
- \brief suspends a context and return the control back to the one which
- scheduled it
- \param context the context to be suspended (it must be the running one)
- */
-static XBT_INLINE void SIMIX_context_suspend(smx_context_t context)
-{
- simix_global->context_factory->suspend(context);
-}
-
-/**
- \brief Executes all the processes to run (in parallel if possible).
- */
-static XBT_INLINE void SIMIX_context_runall(void)
-{
- if (!xbt_dynar_is_empty(simix_global->process_to_run)) {
- simix_global->context_factory->runall();
- }
-}
-
-/**
- \brief returns the current running context
- */
-static XBT_INLINE smx_context_t SIMIX_context_self(void)
-{
- if (simix_global && simix_global->context_factory) {
- return simix_global->context_factory->self();
- }
- return NULL;
-}
-
-/**
- \brief returns the SIMIX process associated to a context
- \param context The context
- \return The SIMIX process
- */
-static XBT_INLINE smx_process_t SIMIX_context_get_process(smx_context_t context)
-{
- return simix_global->context_factory->get_process(context);
-}
-
XBT_PUBLIC(int) SIMIX_process_get_maxpid(void);
XBT_PRIVATE void SIMIX_post_create_environment(void);
+// FIXME, Dirty hack for SMPI+MSG
+XBT_PRIVATE void SIMIX_process_set_cleanup_function(
+ smx_process_t process, void_pfn_smxprocess_t cleanup);
+
SG_END_DECL()
#endif
--- /dev/null
+/* Copyright (c) 2007-2010, 2012-2015. 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 SIMGRID_SIMIX_PRIVATE_HPP
+#define SIMGRID_SIMIX_PRIVATE_HPP
+
+#include <simgrid/simix.hpp>
+#include "smx_private.h"
+
+/**
+ * \brief destroy a context
+ * \param context the context to destroy
+ * Argument must be stopped first -- runs in maestro context
+ */
+static XBT_INLINE void SIMIX_context_free(smx_context_t context)
+{
+ delete context;
+}
+
+/**
+ * \brief stops the execution of a context
+ * \param context to stop
+ */
+static XBT_INLINE void SIMIX_context_stop(smx_context_t context)
+{
+ context->stop();
+}
+
+/**
+ \brief suspends a context and return the control back to the one which
+ scheduled it
+ \param context the context to be suspended (it must be the running one)
+ */
+static XBT_INLINE void SIMIX_context_suspend(smx_context_t context)
+{
+ context->suspend();
+}
+
+/**
+ \brief Executes all the processes to run (in parallel if possible).
+ */
+static XBT_INLINE void SIMIX_context_runall(void)
+{
+ if (!xbt_dynar_is_empty(simix_global->process_to_run))
+ simix_global->context_factory->run_all();
+}
+
+/**
+ \brief returns the current running context
+ */
+static XBT_INLINE smx_context_t SIMIX_context_self(void)
+{
+ if (simix_global && simix_global->context_factory)
+ return simix_global->context_factory->self();
+ else
+ return nullptr;
+}
+
+/**
+ \brief returns the SIMIX process associated to a context
+ \param context The context
+ \return The SIMIX process
+ */
+static XBT_INLINE smx_process_t SIMIX_context_get_process(smx_context_t context)
+{
+ return context->process();
+}
+
+namespace simgrid {
+namespace simix {
+
+XBT_PRIVATE ContextFactory* thread_factory();
+XBT_PRIVATE ContextFactory* sysv_factory();
+XBT_PRIVATE ContextFactory* raw_factory();
+XBT_PRIVATE ContextFactory* boost_factory();
+
+}
+}
+
+#endif
#include "xbt/log.h"
#include "xbt/dict.h"
#include "mc/mc.h"
-#include "mc/mc_replay.h"
-#include "mc/mc_client.h"
+#include "src/mc/mc_replay.h"
+#include "src/mc/mc_client.h"
+#include "src/simix/smx_private.hpp"
#ifdef HAVE_SMPI
-#include "smpi/private.h"
+#include "src/smpi/private.h"
#endif
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_process, simix,
*
* \return The SIMIX process
*/
-XBT_INLINE smx_process_t SIMIX_process_self(void)
+smx_process_t SIMIX_process_self(void)
{
smx_context_t self_context = SIMIX_context_self();
/* cancel non-blocking communications */
smx_synchro_t synchro;
- while ((synchro = xbt_fifo_pop(process->comms))) {
+ while ((synchro = (smx_synchro_t) xbt_fifo_pop(process->comms))) {
/* make sure no one will finish the comm after this process is destroyed,
* because src_proc or dst_proc would be an invalid pointer */
{
smx_process_t process = NULL;
- while ((process = xbt_swag_extract(simix_global->process_to_destroy))) {
+ while ((process = (smx_process_t) xbt_swag_extract(simix_global->process_to_destroy))) {
XBT_DEBUG("Getting rid of %p",process);
SIMIX_context_free(process->context);
maestro->pid = simix_process_maxpid++;
maestro->ppid = -1;
maestro->name = (char *) "";
- maestro->running_ctx = xbt_new(xbt_running_ctx_t, 1);
+ maestro->running_ctx = (xbt_running_ctx_t*) xbt_malloc0(sizeof(xbt_running_ctx_t));
XBT_RUNNING_CTX_INITIALIZE(maestro->running_ctx);
maestro->context = SIMIX_context_new(NULL, 0, NULL, NULL, maestro);
maestro->simcall.issuer = maestro;
/* Add the process to the list of process to restart, only if
* the host is down
*/
- if (arg->auto_restart && !SIMIX_host_get_state(arg->host)) {
+ if (arg->auto_restart && !sg_host_get_state(arg->host)) {
SIMIX_host_add_auto_restart_process(arg->host,arg->name,arg->code, arg->data,
- sg_host_name(arg->host),
+ sg_host_get_name(arg->host),
SIMIX_timer_get_date(arg->kill_timer),
arg->argc,arg->argv,arg->properties,
arg->auto_restart);
}
- XBT_DEBUG("Process %s (%s) is dead",arg->name,sg_host_name(arg->host));
+ XBT_DEBUG("Process %s (%s) is dead",arg->name,sg_host_get_name(arg->host));
/* stop the context */
SIMIX_context_stop(arg->context);
}
kill_time, argc, argv, properties, auto_restart,
simcall->issuer);
}
+
+static void kill_process(void* process)
+{
+ simix_global->kill_process_function((smx_process_t) process);
+}
+
/**
* \brief Internal function to create a process.
*
XBT_DEBUG("Start process %s on host '%s'", name, hostname);
- if (!SIMIX_host_get_state(host)) {
+ if (!sg_host_get_state(host)) {
int i;
XBT_WARN("Cannot launch process '%s' on failed host '%s'", name,
hostname);
XBT_VERB("Create context %s", process->name);
process->context = SIMIX_context_new(code, argc, argv, simix_global->cleanup_process_function, process);
- process->running_ctx = xbt_new(xbt_running_ctx_t, 1);
+ process->running_ctx = (xbt_running_ctx_t*) xbt_malloc0(sizeof(xbt_running_ctx_t));
XBT_RUNNING_CTX_INITIALIZE(process->running_ctx);
if(MC_is_active()){
/* Now insert it in the global process list and in the process to run list */
xbt_swag_insert(process, simix_global->process_list);
- XBT_DEBUG("Inserting %s(%s) in the to_run list", process->name, sg_host_name(host));
+ XBT_DEBUG("Inserting %s(%s) in the to_run list", process->name, sg_host_get_name(host));
xbt_dynar_push_as(simix_global->process_to_run, smx_process_t, process);
if (kill_time > SIMIX_get_clock() && simix_global->kill_process_function) {
XBT_DEBUG("Process %s(%s) will be kill at time %f", process->name,
- sg_host_name(process->host), kill_time);
- process->kill_timer = SIMIX_timer_set(kill_time, simix_global->kill_process_function, process);
+ sg_host_get_name(process->host), kill_time);
+ process->kill_timer = SIMIX_timer_set(kill_time, kill_process, process);
}
}
return process;
*/
void SIMIX_process_kill(smx_process_t process, smx_process_t issuer) {
- XBT_DEBUG("Killing process %s on %s", process->name, sg_host_name(process->host));
+ XBT_DEBUG("Killing process %s on %s", process->name, sg_host_get_name(process->host));
process->context->iwannadie = 1;
process->blocked = 0;
{
smx_process_t p = NULL;
- while ((p = xbt_swag_extract(simix_global->process_list))) {
+ while ((p = (smx_process_t) xbt_swag_extract(simix_global->process_list))) {
if (p != issuer) {
SIMIX_process_kill(p,issuer);
}
surf_action_cancel(sync->sleep.surf_sleep);
smx_simcall_t simcall;
- while ((simcall = xbt_fifo_shift(sync->simcalls))) {
+ while ((simcall = (smx_simcall_t) xbt_fifo_shift(sync->simcalls))) {
simcall_process_sleep__set__result(simcall, SIMIX_DONE);
simcall->issuer->waiting_synchro = NULL;
if (simcall->issuer->suspended) {
smx_synchro_t SIMIX_process_sleep(smx_process_t process, double duration)
{
- smx_synchro_t synchro;
sg_host_t host = process->host;
/* check if the host is active */
if (surf_host_get_state(surf_host_resource_priv(host)) != SURF_RESOURCE_ON) {
THROWF(host_error, 0, "Host %s failed, you cannot call this function",
- sg_host_name(host));
+ sg_host_get_name(host));
}
- synchro = xbt_mallocator_get(simix_global->synchro_mallocator);
+ smx_synchro_t synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
synchro->type = SIMIX_SYNC_SLEEP;
synchro->name = NULL;
synchro->category = NULL;
e_smx_state_t state;
xbt_assert(synchro->type == SIMIX_SYNC_SLEEP || synchro->type == SIMIX_SYNC_JOIN);
- while ((simcall = xbt_fifo_shift(synchro->simcalls))) {
+ while ((simcall = (smx_simcall_t) xbt_fifo_shift(synchro->simcalls))) {
switch(surf_action_get_state(synchro->sleep.surf_sleep)){
case SURF_ACTION_FAILED:
smx_process_t SIMIX_process_from_PID(int PID)
{
smx_process_t proc;
- xbt_swag_foreach(proc, simix_global->process_list)
- {
- if(proc->pid == PID)
- return proc;
+ xbt_swag_foreach(proc, simix_global->process_list) {
+ if (proc->pid == (unsigned long) PID)
+ return proc;
}
return NULL;
}
}
/** @brief Restart a process, starting it again from the beginning. */
smx_process_t SIMIX_process_restart(smx_process_t process, smx_process_t issuer) {
- XBT_DEBUG("Restarting process %s on %s", process->name, sg_host_name(process->host));
+ XBT_DEBUG("Restarting process %s on %s", process->name, sg_host_get_name(process->host));
//retrieve the arguments of the old process
//FIXME: Factorize this with SIMIX_host_add_auto_restart_process ?
s_smx_process_arg_t arg;
arg.code = process->code;
- arg.hostname = sg_host_name(process->host);
+ arg.hostname = sg_host_get_name(process->host);
arg.kill_time = SIMIX_timer_get_date(process->kill_timer);
arg.argc = process->argc;
arg.data = process->data;
XBT_IN("(%p, %f)",smx_host,timeout);
smx_synchro_t sync;
- sync = xbt_mallocator_get(simix_global->synchro_mallocator);
+ sync = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
sync->type = SIMIX_SYNC_SYNCHRO;
sync->name = xbt_strdup("synchro");
sync->synchro.sleep = surf_host_sleep(smx_host, timeout);
static void SIMIX_synchro_finish(smx_synchro_t synchro)
{
XBT_IN("(%p)",synchro);
- smx_simcall_t simcall = xbt_fifo_shift(synchro->simcalls);
+ smx_simcall_t simcall = (smx_simcall_t) xbt_fifo_shift(synchro->simcalls);
switch (synchro->state) {
void SIMIX_mutex_unlock(smx_mutex_t mutex, smx_process_t issuer)
{
XBT_IN("(%p, %p)",mutex,issuer);
- smx_process_t p; /*process to wake up */
/* If the mutex is not owned by the issuer, that's not good */
if (issuer != mutex->owner)
SIMIX_process_get_name(mutex->owner),SIMIX_process_get_PID(mutex->owner));
if (xbt_swag_size(mutex->sleeping) > 0) {
- p = xbt_swag_extract(mutex->sleeping);
+ /*process to wake up */
+ smx_process_t p = (smx_process_t) xbt_swag_extract(mutex->sleeping);
SIMIX_synchro_destroy(p->waiting_synchro);
p->waiting_synchro = NULL;
mutex->owner = p;
/* If there are processes waiting for the condition choose one and try
to make it acquire the mutex */
- if ((proc = xbt_swag_extract(cond->sleeping))) {
+ if ((proc = (smx_process_t) xbt_swag_extract(cond->sleeping))) {
/* Destroy waiter's synchronization */
SIMIX_synchro_destroy(proc->waiting_synchro);
smx_process_t proc;
XBT_DEBUG("Sem release semaphore %p", sem);
- if ((proc = xbt_swag_extract(sem->sleeping))) {
+ if ((proc = (smx_process_t) xbt_swag_extract(sem->sleeping))) {
SIMIX_synchro_destroy(proc->waiting_synchro);
proc->waiting_synchro = NULL;
SIMIX_simcall_answer(&proc->simcall);
{
/* Create surf associated resource */
surf_vm_model_create(name, ind_phys_host);
-
- SIMIX_host_create(name);
+ sg_host_t host = sg_host_by_name(name);
+ SIMIX_host_create(host);
/* We will be able to register the VM to its physical host, so that we can promptly
* retrieve the list VMs on the physical host. */
- return sg_host_by_name(name);
+ return host;
}
{
if (__can_be_started(ind_vm))
surf_host_set_state(surf_host_resource_priv(ind_vm),
- (int)SURF_VM_STATE_RUNNING);
+ (e_surf_resource_state_t) SURF_VM_STATE_RUNNING);
else
THROWF(vm_error, 0, "The VM %s cannot be started", SIMIX_host_get_name(ind_vm));
}
/* FIXME: we may have to do something at the surf layer, e.g., vcpu action */
surf_host_set_state(surf_host_resource_priv(ind_vm),
- (int)SURF_VM_STATE_CREATED);
+ (e_surf_resource_state_t) SURF_VM_STATE_CREATED);
}
void simcall_HANDLER_vm_shutdown(smx_simcall_t simcall, sg_host_t ind_vm)
#include <math.h>
#include "smpi/mpi.h"
-#include "smpi/private.h"
+#include "src/smpi/private.h"
#include "xbt/ex.h"
#include "xbt.h"
#include "colls_private.h"
#ifdef HAVE_MC
-#include "mc/mc_private.h"
+#include "src/mc/mc_private.h"
#endif
#include <float.h>
#ifndef SMPI_PRIVATE_H
#define SMPI_PRIVATE_H
-#include "internal_config.h"
+#include "src/internal_config.h"
#include "xbt.h"
#include "xbt/base.h"
#include "xbt/xbt_os_time.h"
#include "xbt/synchro_core.h"
#include "simgrid/simix.h"
-#include "smpi/smpi_interface.h"
+#include "src/include/smpi/smpi_interface.h"
#include "smpi/smpi.h"
#include "smpi/smpi_cocci.h"
-#include "instr/instr_private.h"
+#include "src/instr/instr_private.h"
SG_BEGIN_DECL()
#include "private.h"
#include "xbt/virtu.h"
#include "mc/mc.h"
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
#include "xbt/replay.h"
#include <errno.h>
-#include "simix/smx_private.h"
+#include "src/simix/smx_private.h"
#include "surf/surf.h"
#include "simgrid/sg_config.h"
#include "colls/colls.h"
if (request->flags & RECV) {
print_request("New recv", request);
- int async_small_thres = sg_cfg_get_int("smpi/async_small_thres");
+ int async_small_thresh = sg_cfg_get_int("smpi/async_small_thresh");
xbt_mutex_t mut = smpi_process_mailboxes_mutex();
- if (async_small_thres != 0 ||request->flags & RMA)
+ if (async_small_thresh != 0 ||request->flags & RMA)
xbt_mutex_acquire(mut);
- if (async_small_thres == 0 && !(request->flags & RMA)) {
+ if (async_small_thresh == 0 && !(request->flags & RMA)) {
mailbox = smpi_process_mailbox();
}
- else if (request->flags & RMA || request->size < async_small_thres){
+ else if (request->flags & RMA || request->size < async_small_thresh){
//We have to check both mailboxes (because SSEND messages are sent to the large mbox). begin with the more appropriate one : the small one.
mailbox = smpi_process_mailbox_small();
XBT_DEBUG("Is there a corresponding send already posted in the small mailbox %p (in case of SSEND)?", mailbox);
request, -1.0);
XBT_DEBUG("recv simcall posted");
- if (async_small_thres != 0 || request->flags & RMA)
+ if (async_small_thresh != 0 || request->flags & RMA)
xbt_mutex_release(mut);
} else {
XBT_DEBUG("sending size of %zu : sleep %f ", request->size, smpi_os(request->size));
}
- int async_small_thres = sg_cfg_get_int("smpi/async_small_thres");
+ int async_small_thresh = sg_cfg_get_int("smpi/async_small_thresh");
xbt_mutex_t mut=smpi_process_remote_mailboxes_mutex(receiver);
- if (async_small_thres != 0 || request->flags & RMA)
+ if (async_small_thresh != 0 || request->flags & RMA)
xbt_mutex_acquire(mut);
- if (!(async_small_thres != 0 || request->flags & RMA)) {
+ if (!(async_small_thresh != 0 || request->flags & RMA)) {
mailbox = smpi_process_remote_mailbox(receiver);
}
- else if (request->flags & RMA || request->size < async_small_thres) { // eager mode
+ else if (request->flags & RMA || request->size < async_small_thresh) { // eager mode
mailbox = smpi_process_remote_mailbox(receiver);
XBT_DEBUG("Is there a corresponding recv already posted in the large mailbox %p?", mailbox);
smx_synchro_t action = simcall_comm_iprobe(mailbox, 1,request->dst, request->tag, &match_send, (void*)request);
if (request->action)
simcall_set_category(request->action, TRACE_internal_smpi_get_category());
- if (async_small_thres != 0 || request->flags & RMA)
+ if (async_small_thresh != 0 || request->flags & RMA)
xbt_mutex_release(mut);
}
print_request("New iprobe", request);
// We have to test both mailboxes as we don't know if we will receive one one or another
- if (sg_cfg_get_int("smpi/async_small_thres")>0){
+ if (sg_cfg_get_int("smpi/async_small_thresh")>0){
mailbox = smpi_process_mailbox_small();
XBT_DEBUG("trying to probe the perm recv mailbox");
request->action = simcall_comm_iprobe(mailbox, 0, request->src, request->tag, &match_recv, (void*)request);
/* 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 "internal_config.h"
+#include "src/internal_config.h"
#include "private.h"
#include "xbt/dict.h"
#include "xbt/sysdep.h"
#include "surf/surf.h"
#include "simgrid/sg_config.h"
#include "simgrid/modelchecker.h"
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
#ifndef WIN32
#include <sys/mman.h>
return strncmp("/dev/shm/my-buffer-", file, 19) == 0;
}
-void smpi_get_executable_global_size(){
- int size_bss_binary=0;
- int size_data_binary=0;
- FILE *fp;
- char *line = NULL; /* Temporal storage for each line that is readed */
- ssize_t read; /* Number of bytes readed */
- size_t n = 0; /* Amount of bytes to read by xbt_getline */
-
- char *lfields[7];
- int i, found = 0;
-
- char *command = bprintf("objdump --section-headers %s", xbt_binary_name);
-
- fp = popen(command, "r");
-
- if(fp == NULL){
- perror("popen failed");
- xbt_abort();
- }
-
- while ((read = xbt_getline(&line, &n, fp)) != -1 && found != 2) {
-
- if(n == 0)
- continue;
-
- /* Wipeout the new line character */
- line[read - 1] = '\0';
-
- lfields[0] = strtok(line, " ");
-
- if(lfields[0] == NULL)
- continue;
-
- if(strcmp(lfields[0], "Sections:") == 0
- || strcmp(lfields[0], "Idx") == 0
- || strncmp(lfields[0], xbt_binary_name, strlen(xbt_binary_name)) == 0)
- continue;
-
- for (i = 1; i < 7 && lfields[i - 1] != NULL; i++) {
- lfields[i] = strtok(NULL, " ");
- }
-
- /*
- * we are looking for these fields
- 23 .data 02625a20 00000000006013e0 00000000006013e0 000013e0 2**5
- CONTENTS, ALLOC, LOAD, DATA
- 24 .bss 02625a40 0000000002c26e00 0000000002c26e00 02626e00 2**5
- ALLOC
- */
-
- if(i>=6){
- if(strcmp(lfields[1], ".data") == 0){
- size_data_binary = strtoul(lfields[2], NULL, 16);
- smpi_start_data_exe = (char*) strtoul(lfields[4], NULL, 16);
- found++;
- }else if(strcmp(lfields[1], ".bss") == 0){
- //the beginning of bss is not exactly the end of data if not aligned, grow bss reported size accordingly
- //TODO : check if this is OK, as some segments may be inserted between them..
- size_bss_binary = ((char*) strtoul(lfields[4], NULL, 16) - (smpi_start_data_exe + size_data_binary))
- + strtoul(lfields[2], NULL, 16);
- found++;
- }
-
- }
-
- }
-
- smpi_size_data_exe = (unsigned long) smpi_start_data_exe
- - (unsigned long) TOPAGE(smpi_start_data_exe)
- + size_data_binary+size_bss_binary;
- xbt_free(command);
- xbt_free(line);
- pclose(fp);
-
-}
-
void smpi_initialize_global_memory_segments(){
#ifndef HAVE_PRIVATIZATION
#include "xbt/dict.h"
#include "smpi_mpi_dt_private.h"
#include "limits.h"
-#include "simix/smx_private.h"
+#include "src/simix/smx_private.h"
#include "colls/colls.h"
#include "xbt/ex.h"
#include "xbt/log.h"
#include "simgrid/simix.h"
#include "smpi/smpi.h"
-#include "internal_config.h"
+#include "src/internal_config.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_dvfs, smpi,
"Logging specific to SMPI (experimental DVFS support)");
}
/**
- * \brief Return the number of pstates defined for host
+ * \brief Return the number of pstates defined for the current host
*/
int smpi_get_host_nb_pstates(void)
{
- return simcall_host_get_nb_pstates(SIMIX_host_self());
+ return sg_host_get_nb_pstates(SIMIX_host_self());
}
/**
*
* \param pstate_index pstate to switch to
*/
-int smpi_get_host_pstate()
-{
- return simcall_host_get_pstate(SIMIX_host_self());
+int smpi_get_host_pstate() {
+ return sg_host_get_pstate(SIMIX_host_self());
}
/**
*
* \return Returns the consumed energy
*/
-double smpi_get_host_consumed_energy(void)
-{
- return simcall_host_get_consumed_energy(SIMIX_host_self());
+double smpi_get_host_consumed_energy(void) {
+ return sg_host_get_consumed_energy(SIMIX_host_self());
}
#include "private.h"
#include "smpi_mpi_dt_private.h"
#include "mc/mc.h"
-#include "mc/mc_record.h"
+#include "src/mc/mc_record.h"
#include "xbt/replay.h"
#include "surf/surf.h"
-#include "simix/smx_private.h"
+#include "src/simix/smx_private.h"
#include "simgrid/sg_config.h"
-#include "mc/mc_replay.h"
-#include "msg/msg_private.h"
+#include "src/mc/mc_replay.h"
+#include "src/msg/msg_private.h"
#include <float.h> /* DBL_MAX */
#include <stdint.h>
if (argc && argv) {
proc = SIMIX_process_self();
//FIXME: dirty cleanup method to avoid using msg cleanup functions on these processes when using MSG+SMPI
- proc->context->cleanup_func=SIMIX_process_cleanup;
+ SIMIX_process_set_cleanup_function(proc, SIMIX_process_cleanup);
char* instance_id = (*argv)[1];
int rank = atoi((*argv)[2]);
/* Now using segment index of the process */
static void smpi_check_options(){
//check correctness of MPI parameters
- xbt_assert(sg_cfg_get_int("smpi/async_small_thres") <=
+ xbt_assert(sg_cfg_get_int("smpi/async_small_thresh") <=
sg_cfg_get_int("smpi/send_is_detached_thres"));
if (sg_cfg_is_default_value("smpi/running_power")) {
for (i = 0; i < process_count; i++) {
process_data[i] = xbt_new(s_smpi_process_data_t, 1);
//process_data[i]->index = i;
- process_data[i]->argc = NULL;
- process_data[i]->argv = NULL;
+ process_data[i]->argc = NULL;
+ process_data[i]->argv = NULL;
process_data[i]->mailbox = simcall_rdv_create(get_mailbox_name(name, i));
process_data[i]->mailbox_small =
simcall_rdv_create(get_mailbox_name_small(name, i));
- process_data[i]->mailboxes_mutex=xbt_mutex_init();
- process_data[i]->timer = xbt_os_timer_new();
+ process_data[i]->mailboxes_mutex = xbt_mutex_init();
+ process_data[i]->timer = xbt_os_timer_new();
if (MC_is_active())
MC_ignore_heap(process_data[i]->timer, xbt_os_timer_size());
- process_data[i]->comm_self = MPI_COMM_NULL;
- process_data[i]->comm_intra = MPI_COMM_NULL;
- process_data[i]->comm_world = NULL;
- process_data[i]->state = SMPI_UNINITIALIZED;
- process_data[i]->sampling = 0;
+ process_data[i]->comm_self = MPI_COMM_NULL;
+ process_data[i]->comm_intra = MPI_COMM_NULL;
+ process_data[i]->comm_world = NULL;
+ process_data[i]->state = SMPI_UNINITIALIZED;
+ process_data[i]->sampling = 0;
process_data[i]->finalization_barrier = NULL;
}
//if the process was launched through smpirun script
--- /dev/null
+/* Copyright (c) 2015. 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 <iostream>
+
+#include <limits.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+#include "../xbt/memory_map.hpp"
+
+#include "private.h"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_memory, smpi,
+ "Memory layout support for SMPI");
+
+#define TOPAGE(addr) (void *)(((unsigned long)(addr) / xbt_pagesize) * xbt_pagesize)
+
+#define PROT_RWX (PROT_READ | PROT_WRITE | PROT_EXEC)
+#define PROT_RW (PROT_READ | PROT_WRITE )
+#define PROT_RX (PROT_READ | PROT_EXEC )
+
+void smpi_get_executable_global_size(void)
+{
+ char buffer[PATH_MAX];
+ char* full_name = realpath(xbt_binary_name, buffer);
+ if (full_name == nullptr)
+ xbt_die("Could not resolve binary file name");
+
+ std::vector<simgrid::xbt::VmMap> map = simgrid::xbt::get_memory_map(getpid());
+ for (auto i = map.begin(); i != map.end() ; ++i) {
+ // TODO, In practice, this implementation would not detect a completely
+ // anonymous data segment. This does not happen in practice, however.
+
+ // File backed RW entry:
+ if (i->pathname == full_name
+ && (i->prot & PROT_RWX) == PROT_RW) {
+ smpi_start_data_exe = (char*) i->start_addr;
+ smpi_size_data_exe = i->end_addr - i->start_addr;
+ ++i;
+ /* Here we are making the assumption that a suitable empty region
+ following the rw- area is the end of the data segment. It would
+ be better to check with the size of the data segment. */
+ if (i != map.end()
+ && i->pathname.empty()
+ && (i->prot & PROT_RWX) == PROT_RW
+ && i->start_addr == (std::uint64_t) smpi_start_data_exe + smpi_size_data_exe) {
+ smpi_size_data_exe = i->end_addr - (std::uint64_t) smpi_start_data_exe;
+ }
+ return;
+ }
+ }
+ xbt_die("Did not find my data segment.");
+}
int dt_size_recv = 1;
if(!known)
dt_size_recv = smpi_datatype_size(recvtype);
+ if((smpi_comm_rank(comm)==root)){
extra->recvcounts= xbt_malloc(size*sizeof(int));
for(i=0; i< size; i++)//copy data to avoid bad free
extra->recvcounts[i] = recvcounts[i]*dt_size_recv;
-
+ }
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,extra);
smpi_mpi_gatherv(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcounts,
int dt_size_send = 1;
if(!known)
dt_size_send = smpi_datatype_size(sendtype);
+ if((smpi_comm_rank(comm)==root)){
extra->sendcounts= xbt_malloc(size*sizeof(int));
for(i=0; i< size; i++)//copy data to avoid bad free
extra->sendcounts[i] = sendcounts[i]*dt_size_send;
+ }
extra->datatype2 = encode_datatype(recvtype, &known);
int dt_size_recv = 1;
if(!known)
MPI_Info_free(&(*win)->info);
}
xbt_free(*win);
- win = MPI_WIN_NULL;
+ *win = MPI_WIN_NULL;
return MPI_SUCCESS;
}
if [ -z "${HOSTFILE}" ] ; then
HOSTFILETMP=1
- HOSTFILE="$(mktemp tmphostXXXXXX)"
+ HOSTFILE="$(mktemp smpitmp-hostfXXXXXX)"
perl -ne 'print "$1\n" if /.*<host.*?id="(.*?)".*?\/>.*/' ${PLATFORM} > ${HOSTFILE}
perl -ne 'if (/.*<cluster.*?prefix="(.*?)".*?radical="(.*?)".*?suffix="(.*?)".*/) {
my ($pre,$rad,$post)=($1,$2,$3);
multiple_processes=`grep -c ":" $HOSTFILE`
if [ "${multiple_processes}" -gt 0 ] ; then
UNROLLEDHOSTFILETMP=1
- UNROLLEDHOSTFILE="$(mktemp tmphostXXXXXX)"
+ UNROLLEDHOSTFILE="$(mktemp smpitmp-hostfXXXXXX)"
perl -ne ' do{ for ( 1 .. $2 ) { print "$1\n" } } if /(.*?):(\d+).*/' ${HOSTFILE} > ${UNROLLEDHOSTFILE}
if [ ${HOSTFILETMP} = 1 ] ; then
rm ${HOSTFILE}
##-------------------------------- DEFAULT or SPECIFIED PLATFORM --------------------------------------
if [ -z "${PLATFORM}" ]; then
- PLATFORMTMP="$(mktemp tmpXXXXXX)"
+ PLATFORMTMP="$(mktemp smpitmp-platfXXXXXX)"
cat > ${PLATFORMTMP} <<PLATFORMHEAD
<?xml version='1.0'?>
##-------------------------------- end DEFAULT or SPECIFIED PLATFORM --------------------------------------
##-------------------------------- DEFAULT APPLICATION --------------------------------------
-APPLICATIONTMP="$(mktemp tmpXXXXXX)"
+APPLICATIONTMP="$(mktemp smpitmp-appXXXXXX)"
#APPLICATIONTMP="app.xml"
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
+ printf "File not found: %s\n" "${APP_TRACES:-\${APP_TRACES\}}" >&2
exit 1
fi
fi
--- /dev/null
+/* Copyright (c) 2015. 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/asserts.h>
+
+#include "src/surf/callbacks.h"
+#include "src/surf/surf_interface.hpp"
+#include "src/surf/host_interface.hpp"
+
+void surf_on_host_created(void (*callback)(sg_host_t))
+{
+ simgrid::surf::hostCreatedCallbacks.connect([callback](simgrid::surf::Host* host) {
+ const char* id = host->getName();
+ sg_host_t h = sg_host_by_name(id);
+ xbt_assert(h != NULL, "Host not found for name %s", id);
+ callback(h);
+ });
+}
+
+void surf_on_storage_created(void (*callback)(sg_storage_t))
+{
+ simgrid::surf::storageCreatedCallbacks.connect([callback](simgrid::surf::Storage* storage) {
+ const char* id = storage->getName();
+ // TODO, create sg_storage_by_name
+ sg_storage_t s = xbt_lib_get_elm_or_null(storage_lib, id);
+ xbt_assert(s != NULL, "Storage not found for name %s", id);
+ callback(s);
+ });
+}
--- /dev/null
+/* Copyright (c) 2015. 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 SIMGRID_SURF_CALLBACKS_H
+#define SIMGRID_SURF_CALLBACKS_H
+
+/** \file callbacks.h
+ *
+ * C interface for the C++ SURF callbacks.
+ */
+
+#include <xbt/base.h>
+#include "simgrid/host.h"
+#include "simgrid/msg.h"
+
+SG_BEGIN_DECL();
+
+XBT_PRIVATE void surf_on_host_created(void (*callback)(sg_host_t));
+XBT_PRIVATE void surf_on_storage_created(void (*callback)(sg_storage_t));
+
+SG_END_DECL();
+
+#endif
return;
}
- surf_cpu_model_pm = new CpuCas01Model();
- surf_cpu_model_vm = new CpuCas01Model();
+ surf_cpu_model_pm = new simgrid::surf::CpuCas01Model();
+ surf_cpu_model_vm = new simgrid::surf::CpuCas01Model();
- sg_platf_host_add_cb(cpu_parse_init);
- sg_platf_postparse_add_cb(cpu_add_traces);
+ sg_platf_postparse_add_cb(simgrid::surf::cpu_add_traces);
- Model *model_pm = surf_cpu_model_pm;
- Model *model_vm = surf_cpu_model_vm;
- xbt_dynar_push(model_list, &model_pm);
- xbt_dynar_push(model_list, &model_vm);
+ simgrid::surf::Model *model_pm = surf_cpu_model_pm;
+ simgrid::surf::Model *model_vm = surf_cpu_model_vm;
+ xbt_dynar_push(all_existing_models, &model_pm);
+ xbt_dynar_push(all_existing_models, &model_vm);
}
-CpuCas01Model::CpuCas01Model() : CpuModel()
+namespace simgrid {
+namespace surf {
+
+CpuCas01Model::CpuCas01Model() : simgrid::surf::CpuModel()
{
char *optim = xbt_cfg_get_string(_sg_cfg_set, "cpu/optim");
int select = xbt_cfg_get_boolean(_sg_cfg_set, "cpu/maxmin_selective_update");
delete p_cpuRunningActionSetThatDoesNotNeedBeingChecked;
}
-Cpu *CpuCas01Model::createCpu(const char *name, xbt_dynar_t power_peak,
- int pstate, double power_scale,
- tmgr_trace_t power_trace, int core,
+Cpu *CpuCas01Model::createCpu(const char *name, xbt_dynar_t speedPeak,
+ int pstate, double speedScale,
+ tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t state_initial,
tmgr_trace_t state_trace,
xbt_dict_t cpu_properties)
{
Cpu *cpu = NULL;
sg_host_t host = sg_host_by_name(name);
- xbt_assert(!sg_host_surfcpu(host),
- "Host '%s' declared several times in the platform file",
- name);
- xbt_assert(xbt_dynar_getfirst_as(power_peak, double) > 0.0,
- "Power has to be >0.0. Did you forget to specify the mandatory power attribute?");
+ xbt_assert(xbt_dynar_getfirst_as(speedPeak, double) > 0.0,
+ "Speed has to be >0.0. Did you forget to specify the mandatory power attribute?");
xbt_assert(core > 0, "Invalid number of cores %d. Must be larger than 0", core);
- cpu = new CpuCas01(this, name, power_peak, pstate, power_scale, power_trace, core, state_initial, state_trace, cpu_properties);
- sg_host_surfcpu_set(host, cpu);
-
+ cpu = new CpuCas01(this, name, speedPeak, pstate, speedScale, speedTrace, core, state_initial, state_trace, cpu_properties);
+ sg_host_surfcpu_register(host, cpu);
return cpu;
}
/************
* Resource *
************/
-CpuCas01::CpuCas01(CpuCas01Model *model, const char *name, xbt_dynar_t powerPeak,
- int pstate, double powerScale, tmgr_trace_t powerTrace, int core,
+CpuCas01::CpuCas01(CpuCas01Model *model, const char *name, xbt_dynar_t speedPeak,
+ int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t stateInitial, tmgr_trace_t stateTrace,
xbt_dict_t properties)
: Cpu(model, name, properties,
- lmm_constraint_new(model->getMaxminSystem(), this, core * powerScale * xbt_dynar_get_as(powerPeak, pstate, double)),
- core, xbt_dynar_get_as(powerPeak, pstate, double), powerScale) {
- p_powerEvent = NULL;
- p_powerPeakList = powerPeak;
+ lmm_constraint_new(model->getMaxminSystem(), this, core * speedScale * xbt_dynar_get_as(speedPeak, pstate, double)),
+ core, xbt_dynar_get_as(speedPeak, pstate, double), speedScale,
+ stateInitial) {
+ p_speedEvent = NULL;
+
+ // Copy the power peak array:
+ p_speedPeakList = xbt_dynar_new(sizeof(double), nullptr);
+ unsigned long n = xbt_dynar_length(speedPeak);
+ for (unsigned long i = 0; i != n; ++i) {
+ double value = xbt_dynar_get_as(speedPeak, i, double);
+ xbt_dynar_push(p_speedPeakList, &value);
+ }
+
m_pstate = pstate;
- XBT_DEBUG("CPU create: peak=%f, pstate=%d", m_powerPeak, m_pstate);
+ XBT_DEBUG("CPU create: peak=%f, pstate=%d", m_speedPeak, m_pstate);
m_core = core;
- setState(stateInitial);
- if (powerTrace)
- p_powerEvent = tmgr_history_add_trace(history, powerTrace, 0.0, 0, this);
+ if (speedTrace)
+ p_speedEvent = tmgr_history_add_trace(history, speedTrace, 0.0, 0, this);
if (stateTrace)
p_stateEvent = tmgr_history_add_trace(history, stateTrace, 0.0, 0, this);
CpuCas01::~CpuCas01(){
if (getModel() == surf_cpu_model_pm)
- xbt_dynar_free(&p_powerPeakList);
+ xbt_dynar_free(&p_speedPeakList);
}
void CpuCas01::setStateEvent(tmgr_trace_event_t stateEvent)
void CpuCas01::setPowerEvent(tmgr_trace_event_t powerEvent)
{
- p_powerEvent = powerEvent;
+ p_speedEvent = powerEvent;
}
-xbt_dynar_t CpuCas01::getPowerPeakList(){
- return p_powerPeakList;
+xbt_dynar_t CpuCas01::getSpeedPeakList(){
+ return p_speedPeakList;
}
int CpuCas01::getPState()
lmm_variable_t var = NULL;
lmm_element_t elem = NULL;
- if (event_type == p_powerEvent) {
+ if (event_type == p_speedEvent) {
/* TODO (Hypervisor): do the same thing for constraint_core[i] */
- xbt_assert(m_core == 1, "FIXME: add power scaling code also for constraint_core[i]");
+ xbt_assert(m_core == 1, "FIXME: add speed scaling code also for constraint_core[i]");
- m_powerScale = value;
+ m_speedScale = value;
lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(),
- m_core * m_powerScale *
- m_powerPeak);
- TRACE_surf_host_set_power(date, getName(),
- m_core * m_powerScale *
- m_powerPeak);
+ m_core * m_speedScale *
+ m_speedPeak);
+ TRACE_surf_host_set_speed(date, getName(),
+ m_core * m_speedScale *
+ m_speedPeak);
while ((var = lmm_get_var_from_cnst
(getModel()->getMaxminSystem(), getConstraint(), &elem))) {
CpuCas01Action *action = static_cast<CpuCas01Action*>(lmm_variable_id(var));
lmm_update_variable_bound(getModel()->getMaxminSystem(),
action->getVariable(),
- m_powerScale * m_powerPeak);
+ m_speedScale * m_speedPeak);
}
if (tmgr_trace_event_free(event_type))
- p_powerEvent = NULL;
+ p_speedEvent = NULL;
} else if (event_type == p_stateEvent) {
/* TODO (Hypervisor): do the same thing for constraint_core[i] */
xbt_assert(m_core == 1, "FIXME: add state change code also for constraint_core[i]");
XBT_IN("(%s,%g)", getName(), size);
CpuCas01Action *action = new CpuCas01Action(getModel(), size, getState() != SURF_RESOURCE_ON,
- m_powerScale * m_powerPeak, getConstraint());
+ m_speedScale * m_speedPeak, getConstraint());
XBT_OUT();
return action;
XBT_IN("(%s,%g)", getName(), duration);
CpuCas01Action *action = new CpuCas01Action(getModel(), 1.0, getState() != SURF_RESOURCE_ON,
- m_powerScale * m_powerPeak, getConstraint());
+ m_speedScale * m_speedPeak, getConstraint());
// FIXME: sleep variables should not consume 1.0 in lmm_expand
double CpuCas01::getCurrentPowerPeak()
{
- return m_powerPeak;
+ return m_speedPeak;
}
double CpuCas01::getPowerPeakAt(int pstate_index)
{
- xbt_dynar_t plist = p_powerPeakList;
+ xbt_dynar_t plist = p_speedPeakList;
xbt_assert((pstate_index <= (int)xbt_dynar_length(plist)), "Invalid parameters (pstate index out of bounds)");
return xbt_dynar_get_as(plist, pstate_index, double);
int CpuCas01::getNbPstates()
{
- return xbt_dynar_length(p_powerPeakList);
+ return xbt_dynar_length(p_speedPeakList);
}
void CpuCas01::setPstate(int pstate_index)
{
- xbt_dynar_t plist = p_powerPeakList;
+ xbt_dynar_t plist = p_speedPeakList;
xbt_assert((pstate_index <= (int)xbt_dynar_length(plist)), "Invalid parameters (pstate index out of bounds)");
double new_pstate = xbt_dynar_get_as(plist, pstate_index, double);
m_pstate = pstate_index;
- m_powerPeak = new_pstate;
+ m_speedPeak = new_pstate;
}
int CpuCas01::getPstate()
* Action *
**********/
-CpuCas01Action::CpuCas01Action(Model *model, double cost, bool failed, double power, lmm_constraint_t constraint)
+CpuCas01Action::CpuCas01Action(Model *model, double cost, bool failed, double speed, lmm_constraint_t constraint)
: CpuAction(model, cost, failed,
lmm_variable_new(model->getMaxminSystem(), this,
- 1.0, power, 1))
+ 1.0, speed, 1))
{
m_suspended = 0;
if (model->getUpdateMechanism() == UM_LAZY) {
}
lmm_expand(model->getMaxminSystem(), constraint, getVariable(), 1.0);
}
+
+}
+}
/***********
* Classes *
***********/
+
+namespace simgrid {
+namespace surf {
+
class XBT_PRIVATE CpuCas01Model;
class XBT_PRIVATE CpuCas01;
class XBT_PRIVATE CpuCas01Action;
/*********
* Model *
*********/
-class CpuCas01Model : public CpuModel {
+
+class CpuCas01Model : public simgrid::surf::CpuModel {
public:
CpuCas01Model();
~CpuCas01Model();
double (CpuCas01Model::*shareResources)(double now);
void (CpuCas01Model::*updateActionsState)(double now, double delta);
- Cpu *createCpu(const char *name, xbt_dynar_t power_peak, int pstate,
- double power_scale,
- tmgr_trace_t power_trace, int core,
+ Cpu *createCpu(const char *name, xbt_dynar_t speedPeak, int pstate,
+ double speedScale,
+ tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t state_initial,
tmgr_trace_t state_trace,
xbt_dict_t cpu_properties);
class CpuCas01 : public Cpu {
public:
- CpuCas01(CpuCas01Model *model, const char *name, xbt_dynar_t power_peak,
- int pstate, double powerScale, tmgr_trace_t powerTrace, int core,
+ CpuCas01(CpuCas01Model *model, const char *name, xbt_dynar_t speedPeak,
+ int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t stateInitial, tmgr_trace_t stateTrace,
xbt_dict_t properties) ;
~CpuCas01();
bool isUsed();
void setStateEvent(tmgr_trace_event_t stateEvent);
void setPowerEvent(tmgr_trace_event_t stateEvent);
- xbt_dynar_t getPowerPeakList();
+ xbt_dynar_t getSpeedPeakList();
int getPState();
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)*/
+ tmgr_trace_event_t p_speedEvent;
+ xbt_dynar_t p_speedPeakList; /*< List of supported CPU capacities (pstate related) */
+ int m_pstate; /*< Current pstate (index in the speedPeakList)*/
};
/**********
friend CpuAction *CpuCas01::execute(double size);
friend CpuAction *CpuCas01::sleep(double duration);
public:
- CpuCas01Action(Model *model, double cost, bool failed, double power,
+ CpuCas01Action(Model *model, double cost, bool failed, double speed,
lmm_constraint_t constraint);
~CpuCas01Action() {};
};
+
+}
+}
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "cpu_interface.hpp"
+#include "plugins/energy.hpp"
XBT_LOG_EXTERNAL_CATEGORY(surf_kernel);
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu, surf,
int autoload_surf_cpu_model = 1;
void_f_void_t surf_cpu_model_init_preparse = NULL;
-CpuModel *surf_cpu_model_pm;
-CpuModel *surf_cpu_model_vm;
+simgrid::surf::CpuModel *surf_cpu_model_pm;
+simgrid::surf::CpuModel *surf_cpu_model_vm;
+
+namespace simgrid {
+namespace surf {
+
/*************
* Callbacks *
*************/
surf_callback(void, Cpu*) cpuDestructedCallbacks;
surf_callback(void, Cpu*, e_surf_resource_state_t, e_surf_resource_state_t) cpuStateChangedCallbacks;
surf_callback(void, CpuAction*, e_surf_action_state_t, e_surf_action_state_t) cpuActionStateChangedCallbacks;
-
-void cpu_parse_init(sg_platf_host_cbarg_t host){
- surf_cpu_model_pm->createCpu(
- host->id,
- host->power_peak,
- host->pstate,
- host->power_scale,
- host->power_trace,
- host->core_amount,
- host->initial_state,
- host->state_trace,
- host->properties);
-}
-
void cpu_add_traces(){
surf_cpu_model_pm->addTraces();
}
/*********
* Model *
*********/
+
void CpuModel::updateActionsStateLazy(double now, double /*delta*/)
{
CpuAction *action;
/************
* Resource *
************/
-
Cpu::Cpu(){
- surf_callback_emit(cpuCreatedCallbacks, this);
}
+
Cpu::Cpu(Model *model, const char *name, xbt_dict_t props,
- int core, double powerPeak, double powerScale)
- : Resource(model, name, props)
+ int core, double speedPeak, double speedScale,
+ e_surf_resource_state_t stateInitial)
+ : Resource(model, name, props, stateInitial)
, m_core(core)
- , m_powerPeak(powerPeak)
- , m_powerScale(powerScale)
+ , m_speedPeak(speedPeak)
+ , m_speedScale(speedScale)
, p_constraintCore(NULL)
, p_constraintCoreId(NULL)
{
- surf_callback_emit(cpuCreatedCallbacks, this);
+
}
Cpu::Cpu(Model *model, const char *name, xbt_dict_t props,
- lmm_constraint_t constraint, int core, double powerPeak, double powerScale)
- : Resource(model, name, props, constraint)
+ lmm_constraint_t constraint, int core, double speedPeak,
+ double speedScale, e_surf_resource_state_t stateInitial)
+ : Resource(model, name, props, constraint, stateInitial)
, m_core(core)
- , m_powerPeak(powerPeak)
- , m_powerScale(powerScale)
+ , m_speedPeak(speedPeak)
+ , m_speedScale(speedScale)
{
- surf_callback_emit(cpuCreatedCallbacks, this);
/* At now, we assume that a VM does not have a multicore CPU. */
if (core > 1)
xbt_assert(model == surf_cpu_model_pm);
for (i = 0; i < core; i++) {
/* just for a unique id, never used as a string. */
p_constraintCoreId[i] = bprintf("%s:%i", name, i);
- p_constraintCore[i] = lmm_constraint_new(model->getMaxminSystem(), p_constraintCoreId[i], m_powerScale * m_powerPeak);
+ p_constraintCore[i] = lmm_constraint_new(model->getMaxminSystem(), p_constraintCoreId[i], m_speedScale * m_speedPeak);
}
}
}
+Cpu::Cpu(Model *model, const char *name, xbt_dict_t props,
+ lmm_constraint_t constraint, int core, double speedPeak, double speedScale)
+: Cpu(model, name, props, constraint, core, speedPeak, speedScale, SURF_RESOURCE_ON)
+{}
+
+Cpu::Cpu(Model *model, const char *name, xbt_dict_t props,
+ int core, double speedPeak, double speedScale)
+: Cpu(model, name, props, core, speedPeak, speedScale, SURF_RESOURCE_ON)
+{}
+
Cpu::~Cpu(){
surf_callback_emit(cpuDestructedCallbacks, this);
if (p_constraintCoreId){
double Cpu::getCurrentPowerPeak()
{
- return m_powerPeak;
+ return m_speedPeak;
}
double Cpu::getSpeed(double load)
{
- return load * m_powerPeak;
+ return load * m_speedPeak;
}
double Cpu::getAvailableSpeed()
{
/* number between 0 and 1 */
- return m_powerScale;
+ return m_speedScale;
}
int Cpu::getCore()
Resource::setState(state);
surf_callback_emit(cpuStateChangedCallbacks, this, old, state);
}
+
/**********
* Action *
**********/
Action::setState(state);
surf_callback_emit(cpuActionStateChangedCallbacks, this, old, state);
}
+
+}
+}
/***********
* Classes *
***********/
+
+namespace simgrid {
+namespace surf {
+
class CpuModel;
class Cpu;
class CpuAction;
*/
XBT_PUBLIC_DATA( surf_callback(void, CpuAction*, e_surf_action_state_t, e_surf_action_state_t)) cpuActionStateChangedCallbacks;
-XBT_PUBLIC(void) cpu_parse_init(sg_platf_host_cbarg_t host);
-
XBT_PUBLIC(void) cpu_add_traces();
/*********
*/
XBT_PUBLIC_CLASS CpuModel : public Model {
public:
- /** @brief Constructor */
CpuModel() : Model() {};
/**
* @brief Create a Cpu
*
* @param name The name of the Cpu
- * @param power_peak The power peak of this Cpu
+ * @param speedPeak The peak spead (max speed in Flops)
* @param pstate [TODO]
- * @param power_scale The power scale of this Cpu
- * @param power_trace [TODO]
+ * @param speedScale The speed scale (in [O;1] available speed from peak)
+ * @param speedTrace Trace variations
* @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 Cpu *createCpu(const char *name, xbt_dynar_t power_peak,
- int pstate, double power_scale,
- tmgr_trace_t power_trace, int core,
+ virtual Cpu *createCpu(const char *name, xbt_dynar_t speedPeak,
+ int pstate, double speedScale,
+ tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t state_initial,
tmgr_trace_t state_trace,
xbt_dict_t cpu_properties)=0;
* @brief SURF cpu resource interface class
* @details A Cpu represent a cpu associated to a host
*/
-XBT_PUBLIC_CLASS Cpu : public Resource {
+XBT_PUBLIC_CLASS Cpu : public simgrid::surf::Resource {
public:
- /**
- * @brief Cpu constructor
- */
Cpu();
/**
* @param props Dictionary of properties associated to this Cpu
* @param constraint The lmm constraint associated to this Cpu if it is part of a LMM component
* @param core The number of core of this Cpu
- * @param powerPeak The power peak of this Cpu
- * @param powerScale The power scale of this Cpu
+ * @param speedPeak The speed peak of this Cpu in flops (max speed)
+ * @param speedScale The speed scale of this Cpu in [0;1] (available amount)
+ * @param stateInitial whether it is created running or crashed
*/
- Cpu(Model *model, const char *name, xbt_dict_t props,
- lmm_constraint_t constraint, int core, double powerPeak, double powerScale);
+ Cpu(simgrid::surf::Model *model, const char *name, xbt_dict_t props,
+ lmm_constraint_t constraint, int core, double speedPeak, double speedScale,
+ e_surf_resource_state_t stateInitial);
/**
* @brief Cpu constructor
* @param name The name of the Cpu
* @param props Dictionary of properties associated to this Cpu
* @param core The number of core of this Cpu
- * @param powerPeak The power peak of this Cpu in [TODO]
- * @param powerScale The power scale of this Cpu in [TODO]
+ * @param speedPeak The speed peak of this Cpu in flops (max speed)
+ * @param speedScale The speed scale of this Cpu in [0;1] (available amount)
+ * @param stateInitial whether it is created running or crashed
*/
- Cpu(Model *model, const char *name, xbt_dict_t props,
- int core, double powerPeak, double powerScale);
+ Cpu(simgrid::surf::Model *model, const char *name, xbt_dict_t props,
+ int core, double speedPeak, double speedScale,
+ e_surf_resource_state_t stateInitial);
+
+ Cpu(simgrid::surf::Model *model, const char *name, xbt_dict_t props,
+ lmm_constraint_t constraint, int core, double speedPeak, double speedScale);
+ Cpu(simgrid::surf::Model *model, const char *name, xbt_dict_t props,
+ int core, double speedPeak, double speedScale);
- /**
- * @brief Cpu destructor
- */
~Cpu();
/**
* @param size The value of the processing amount (in flop) needed to process
* @return The CpuAction corresponding to the processing
*/
- virtual CpuAction *execute(double size)=0;
+ virtual simgrid::surf::Action *execute(double size)=0;
/**
* @brief Make a process sleep for duration (in seconds)
* @param duration The number of seconds to sleep
* @return The CpuAction corresponding to the sleeping
*/
- virtual CpuAction *sleep(double duration)=0;
+ virtual simgrid::surf::Action *sleep(double duration)=0;
- /**
- * @brief Get the number of cores of the current Cpu
- *
- * @return The number of cores of the current Cpu
- */
+ /** @brief Get the amount of cores */
virtual int getCore();
- /**
- * @brief Get the speed of the current Cpu
- * @details [TODO] load * m_powerPeak
- *
- * @param load [TODO]
- *
- * @return The speed of the current Cpu
- */
+ /** @brief Get the speed, accounting for the trace load and provided process load instead of the real current one */
virtual double getSpeed(double load);
- /**
- * @brief Get the available speed of the current Cpu
- * @details [TODO]
- *
- * @return The available speed of the current Cpu
- */
+ /** @brief Get the available speed of the current Cpu */
virtual double getAvailableSpeed();
- /**
- * @brief Get the current Cpu power peak
- *
- * @return The current Cpu power peak
- */
+ /** @brief Get the current Cpu power peak */
virtual double getCurrentPowerPeak();
-
virtual double getPowerPeakAt(int pstate_index)=0;
virtual int getNbPstates()=0;
-
virtual void setPstate(int pstate_index)=0;
virtual int getPstate()=0;
void setState(e_surf_resource_state_t state);
void addTraces(void);
- int m_core;
- double m_powerPeak; /*< CPU power peak */
- double m_powerScale; /*< Percentage of CPU disponible */
+ int m_core = 1; /* Amount of cores */
+ double m_speedPeak; /*< CPU speed peak, ie max value */
+ double m_speedScale; /*< Percentage of CPU available according to the trace, in [O,1] */
/* Note (hypervisor): */
lmm_constraint_t *p_constraintCore;
* @brief SURF Cpu action interface class
* @details A CpuAction represent the execution of code on a Cpu
*/
-XBT_PUBLIC_CLASS CpuAction : public Action {
+XBT_PUBLIC_CLASS CpuAction : public simgrid::surf::Action {
friend XBT_PUBLIC(Cpu*) getActionCpu(CpuAction *action);
public:
- /**
- * @brief CpuAction constructor
- *
- * @param model The CpuModel associated to this CpuAction
- * @param cost [TODO]
- * @param failed [TODO]
- */
- CpuAction(Model *model, double cost, bool failed)
+ /** @brief CpuAction constructor */
+ CpuAction(simgrid::surf::Model *model, double cost, bool failed)
: Action(model, cost, failed) {} //FIXME:REMOVE
- /**
- * @brief CpuAction constructor
- *
- * @param model The CpuModel associated to this CpuAction
- * @param cost [TODO]
- * @param failed [TODO]
- * @param var The lmm variable associated to this CpuAction if it is part of a LMM component
- */
- CpuAction(Model *model, double cost, bool failed, lmm_variable_t var)
+ /** @brief CpuAction constructor */
+ CpuAction(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var)
: Action(model, cost, failed, var) {}
/**
* @brief Set the affinity of the current CpuAction
* @details [TODO]
- *
- * @param cpu [TODO]
- * @param mask [TODO]
*/
virtual void setAffinity(Cpu *cpu, unsigned long mask);
};
+}
+}
+
#endif /* SURF_CPU_INTERFACE_HPP_ */
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_ti, surf_cpu,
"Logging specific to the SURF CPU TRACE INTEGRATION module");
-static void cpu_ti_action_update_index_heap(void *action, int i);
+namespace simgrid {
+namespace surf {
+
+static inline
+void cpu_ti_action_update_index_heap(void *action, int i)
+{
+ ((simgrid::surf::CpuTiAction*)action)->updateIndexHeap(i);
+}
/*********
* Trace *
*********/
-CpuTiTrace::CpuTiTrace(tmgr_trace_t power_trace)
+CpuTiTrace::CpuTiTrace(tmgr_trace_t speedTrace)
{
s_tmgr_event_t val;
unsigned int cpt;
double time = 0;
int i = 0;
p_timePoints = (double*) xbt_malloc0(sizeof(double) *
- (xbt_dynar_length(power_trace->s_list.event_list) + 1));
+ (xbt_dynar_length(speedTrace->s_list.event_list) + 1));
p_integral = (double*) xbt_malloc0(sizeof(double) *
- (xbt_dynar_length(power_trace->s_list.event_list) + 1));
- m_nbPoints = xbt_dynar_length(power_trace->s_list.event_list) + 1;
- xbt_dynar_foreach(power_trace->s_list.event_list, cpt, val) {
+ (xbt_dynar_length(speedTrace->s_list.event_list) + 1));
+ m_nbPoints = xbt_dynar_length(speedTrace->s_list.event_list) + 1;
+ xbt_dynar_foreach(speedTrace->s_list.event_list, cpt, val) {
p_timePoints[i] = time;
p_integral[i] = integral;
integral += val.delta * val.value;
}
/**
-* \brief Auxiliary function to update the CPU power scale.
+* \brief Auxiliary function to update the CPU speed scale.
*
-* This function uses the trace structure to return the power scale at the determined time a.
-* \param trace Trace structure to search the updated power scale
+* This function uses the trace structure to return the speed scale at the determined time a.
+* \param trace Trace structure to search the updated speed scale
* \param a Time
-* \return CPU power scale
+* \return CPU speed scale
*/
double CpuTiTgmr::getPowerScale(double a)
{
reduced_a = a - floor(a / m_lastTime) * m_lastTime;
point = p_trace->binarySearch(p_trace->p_timePoints, reduced_a, 0,
p_trace->m_nbPoints - 1);
- xbt_dynar_get_cpy(p_powerTrace->s_list.event_list, point, &val);
+ xbt_dynar_get_cpy(p_speedTrace->s_list.event_list, point, &val);
return val.value;
}
/**
* \brief Creates a new integration trace from a tmgr_trace_t
*
-* \param power_trace CPU availability trace
-* \param value Percentage of CPU power available (useful to fixed tracing)
+* \param speedTrace CPU availability trace
+* \param value Percentage of CPU speed available (useful to fixed tracing)
* \param spacing Initial spacing
* \return Integration trace structure
*/
-CpuTiTgmr::CpuTiTgmr(tmgr_trace_t power_trace, double value)
+CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value)
{
double total_time = 0.0;
s_tmgr_event_t val;
p_trace = 0;
/* no availability file, fixed trace */
- if (!power_trace) {
+ if (!speedTrace) {
m_type = TRACE_FIXED;
m_value = value;
XBT_DEBUG("No availability trace. Constant value = %f", value);
}
/* only one point available, fixed trace */
- if (xbt_dynar_length(power_trace->s_list.event_list) == 1) {
- xbt_dynar_get_cpy(power_trace->s_list.event_list, 0, &val);
+ if (xbt_dynar_length(speedTrace->s_list.event_list) == 1) {
+ xbt_dynar_get_cpy(speedTrace->s_list.event_list, 0, &val);
m_type = TRACE_FIXED;
m_value = val.value;
return;
}
m_type = TRACE_DYNAMIC;
- p_powerTrace = power_trace;
+ p_speedTrace = speedTrace;
/* count the total time of trace file */
- xbt_dynar_foreach(power_trace->s_list.event_list, cpt, val) {
+ xbt_dynar_foreach(speedTrace->s_list.event_list, cpt, val) {
total_time += val.delta;
}
- p_trace = new CpuTiTrace(power_trace);
+ p_trace = new CpuTiTrace(speedTrace);
m_lastTime = total_time;
m_total = p_trace->integrateSimple(0, total_time);
return low;
}
+}
+}
+
/*************
* CallBacks *
*************/
static void cpu_ti_define_callbacks()
{
- sg_platf_host_add_cb(cpu_parse_init);
- sg_platf_postparse_add_cb(cpu_add_traces);
+ sg_platf_postparse_add_cb(simgrid::surf::cpu_add_traces);
}
/*********
xbt_assert(!surf_cpu_model_pm,"CPU model already initialized. This should not happen.");
xbt_assert(!surf_cpu_model_vm,"CPU model already initialized. This should not happen.");
- surf_cpu_model_pm = new CpuTiModel();
- surf_cpu_model_vm = new CpuTiModel();
+ surf_cpu_model_pm = new simgrid::surf::CpuTiModel();
+ surf_cpu_model_vm = new simgrid::surf::CpuTiModel();
cpu_ti_define_callbacks();
- Model *model_pm = static_cast<Model*>(surf_cpu_model_pm);
- Model *model_vm = static_cast<Model*>(surf_cpu_model_vm);
- xbt_dynar_push(model_list, &model_pm);
- xbt_dynar_push(model_list, &model_vm);
+ simgrid::surf::Model *model_pm = static_cast<simgrid::surf::Model*>(surf_cpu_model_pm);
+ simgrid::surf::Model *model_vm = static_cast<simgrid::surf::Model*>(surf_cpu_model_vm);
+ xbt_dynar_push(all_existing_models, &model_pm);
+ xbt_dynar_push(all_existing_models, &model_vm);
}
+namespace simgrid {
+namespace surf {
+
CpuTiModel::CpuTiModel() : CpuModel()
{
p_runningActionSetThatDoesNotNeedBeingChecked = new ActionList();
}
Cpu *CpuTiModel::createCpu(const char *name,
- xbt_dynar_t powerPeak,
+ xbt_dynar_t speedPeak,
int pstate,
- double powerScale,
- tmgr_trace_t powerTrace,
+ double speedScale,
+ tmgr_trace_t speedTrace,
int core,
e_surf_resource_state_t stateInitial,
tmgr_trace_t stateTrace,
{
xbt_assert(core==1,"Multi-core not handled with this model yet");
sg_host_t host = sg_host_by_name(name);
- xbt_assert(!sg_host_surfcpu(host),
- "Host '%s' declared several times in the platform file",
- name);
- xbt_assert(xbt_dynar_getfirst_as(powerPeak, double) > 0.0,
- "Power has to be >0.0. Did you forget to specify the mandatory power attribute?");
- CpuTi *cpu = new CpuTi(this, name, powerPeak, pstate, powerScale, powerTrace,
+ xbt_assert(xbt_dynar_getfirst_as(speedPeak, double) > 0.0,
+ "Speed has to be >0.0. Did you forget to specify the mandatory speed attribute?");
+ CpuTi *cpu = new CpuTi(this, name, speedPeak, pstate, speedScale, speedTrace,
core, stateInitial, stateTrace, cpuProperties);
- sg_host_surfcpu_set(host, cpu);
+ sg_host_surfcpu_register(host, cpu);
return cpu;
}
xbt_assert(cpu, "Host %s undefined", elm);
xbt_assert(trace, "Trace %s undefined", trace_name);
- XBT_DEBUG("Add power trace: %s to CPU(%s)", trace_name, elm);
+ XBT_DEBUG("Add speed trace: %s to CPU(%s)", trace_name, elm);
if (cpu->p_availTrace)
delete cpu->p_availTrace;
- cpu->p_availTrace = new CpuTiTgmr(trace, cpu->m_powerScale);
+ cpu->p_availTrace = new CpuTiTgmr(trace, cpu->m_speedScale);
/* add a fake trace event if periodicity == 0 */
if (trace && xbt_dynar_length(trace->s_list.event_list) > 1) {
if (val.delta == 0) {
tmgr_trace_t empty_trace;
empty_trace = tmgr_empty_trace_new();
- cpu->p_powerEvent =
+ cpu->p_speedEvent =
tmgr_history_add_trace(history, empty_trace,
cpu->p_availTrace->m_lastTime, 0, cpu);
}
/************
* Resource *
************/
-CpuTi::CpuTi(CpuTiModel *model, const char *name, xbt_dynar_t powerPeak,
- int pstate, double powerScale, tmgr_trace_t powerTrace, int core,
+CpuTi::CpuTi(CpuTiModel *model, const char *name, xbt_dynar_t speedPeak,
+ int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t stateInitial, tmgr_trace_t stateTrace,
- xbt_dict_t properties)
-: Cpu(model, name, properties, core, 0, powerScale)
+ xbt_dict_t properties)
+ : Cpu(model, name, properties, core, 0, speedScale, stateInitial)
{
- p_powerEvent = NULL;
- setState(stateInitial);
- m_powerScale = powerScale;
+ p_speedEvent = NULL;
+ m_speedScale = speedScale;
m_core = core;
tmgr_trace_t empty_trace;
s_tmgr_event_t val;
xbt_assert(core==1,"Multi-core not handled with this model yet");
- XBT_DEBUG("power scale %f", powerScale);
- p_availTrace = new CpuTiTgmr(powerTrace, powerScale);
+ XBT_DEBUG("speed scale %f", speedScale);
+ p_availTrace = new CpuTiTgmr(speedTrace, speedScale);
p_actionSet = new ActionTiList();
m_lastUpdate = 0;
- xbt_dynar_get_cpy(powerPeak, 0, &m_powerPeak);
- xbt_dynar_free(&powerPeak); /* kill memory leak */
- XBT_DEBUG("CPU create: peak=%f", m_powerPeak);
+ xbt_dynar_get_cpy(speedPeak, 0, &m_speedPeak);
+ XBT_DEBUG("CPU create: peak=%f", m_speedPeak);
if (stateTrace)
p_stateEvent = tmgr_history_add_trace(history, stateTrace, 0.0, 0, this);
- if (powerTrace && xbt_dynar_length(powerTrace->s_list.event_list) > 1) {
+ if (speedTrace && xbt_dynar_length(speedTrace->s_list.event_list) > 1) {
// add a fake trace event if periodicity == 0
- xbt_dynar_get_cpy(powerTrace->s_list.event_list,
- xbt_dynar_length(powerTrace->s_list.event_list) - 1, &val);
+ xbt_dynar_get_cpy(speedTrace->s_list.event_list,
+ xbt_dynar_length(speedTrace->s_list.event_list) - 1, &val);
if (val.delta == 0) {
empty_trace = tmgr_empty_trace_new();
- p_powerEvent =
+ p_speedEvent =
tmgr_history_add_trace(history, empty_trace,
p_availTrace->m_lastTime, 0, this);
}
{
CpuTiAction *action;
- if (event_type == p_powerEvent) {
- tmgr_trace_t power_trace;
+ if (event_type == p_speedEvent) {
+ tmgr_trace_t speedTrace;
CpuTiTgmr *trace;
s_tmgr_event_t val;
modified(true);
- power_trace = p_availTrace->p_powerTrace;
- xbt_dynar_get_cpy(power_trace->s_list.event_list,
- xbt_dynar_length(power_trace->s_list.event_list) - 1, &val);
+ speedTrace = p_availTrace->p_speedTrace;
+ xbt_dynar_get_cpy(speedTrace->s_list.event_list,
+ xbt_dynar_length(speedTrace->s_list.event_list) - 1, &val);
/* free old trace */
delete p_availTrace;
- m_powerScale = val.value;
+ m_speedScale = val.value;
trace = new CpuTiTgmr(TRACE_FIXED, val.value);
XBT_DEBUG("value %f", val.value);
p_availTrace = trace;
if (tmgr_trace_event_free(event_type))
- p_powerEvent = NULL;
+ p_speedEvent = NULL;
} else if (event_type == p_stateEvent) {
if (value > 0) {
(action->getRemains()) * sum_priority *
action->getPriority();
- total_area /= m_powerPeak;
+ total_area /= m_speedPeak;
action->setFinishTime(p_availTrace->solve(now, total_area));
/* verify which event will happen before (max_duration or finish time) */
double CpuTi::getAvailableSpeed()
{
- m_powerScale = p_availTrace->getPowerScale(surf_get_clock());
+ m_speedScale = p_availTrace->getPowerScale(surf_get_clock());
return Cpu::getAvailableSpeed();
}
return;
/* calcule the surface */
- area_total = p_availTrace->integrate(m_lastUpdate, now) * m_powerPeak;
+ area_total = p_availTrace->integrate(m_lastUpdate, now) * m_speedPeak;
XBT_DEBUG("Flops total: %f, Last update %f", area_total,
m_lastUpdate);
* Action *
**********/
-static void cpu_ti_action_update_index_heap(void *action, int i)
-{
-((CpuTiAction*)action)->updateIndexHeap(i);
-}
-
CpuTiAction::CpuTiAction(CpuTiModel *model_, double cost, bool failed,
CpuTi *cpu)
: CpuAction(model_, cost, failed)
return m_remains;
}
+}
+}
+
#endif /* SURF_MODEL_CPUTI_H_ */
/* Epsilon */
#define EPSILON 0.000000001
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
*********/
class CpuTiTrace {
public:
- CpuTiTrace(tmgr_trace_t powerTrace);
+ CpuTiTrace(tmgr_trace_t speedTrace);
~CpuTiTrace();
double integrateSimple(double a, double b);
enum trace_type {
TRACE_FIXED, /*< Trace fixed, no availability file */
- TRACE_DYNAMIC /*< Dynamic, availability file disponible */
+ TRACE_DYNAMIC /*< Dynamic, have an availability file */
};
class CpuTiTgmr {
public:
CpuTiTgmr(trace_type type, double value): m_type(type), m_value(value){};
- CpuTiTgmr(tmgr_trace_t power_trace, double value);
+ CpuTiTgmr(tmgr_trace_t speedTrace, double value);
~CpuTiTgmr();
double integrate(double a, double b);
double getPowerScale(double a);
trace_type m_type;
- double m_value; /*< Percentage of cpu power disponible. Value fixed between 0 and 1 */
+ double m_value; /*< Percentage of cpu speed available. Value fixed between 0 and 1 */
/* Dynamic */
- double m_lastTime; /*< Integral interval last point (discret time) */
+ double m_lastTime; /*< Integral interval last point (discrete time) */
double m_total; /*< Integral total between 0 and last_pointn */
CpuTiTrace *p_trace;
- tmgr_trace_t p_powerTrace;
+ tmgr_trace_t p_speedTrace;
};
/**********
class CpuTiAction: public CpuAction {
friend class CpuTi;
- // friend CpuAction *CpuTi::execute(double size);
- // friend CpuAction *CpuTi::sleep(double duration);
- // friend void CpuTi::updateActionsFinishTime(double now);//FIXME
- // friend void CpuTi::updateRemainingAmount(double now);//FIXME
public:
CpuTiAction(CpuTiModel *model, double cost, bool failed,
CpuTi *cpu);
class CpuTi : public Cpu {
public:
CpuTi() {};
- CpuTi(CpuTiModel *model, const char *name, xbt_dynar_t powerPeak,
- int pstate, double powerScale, tmgr_trace_t powerTrace, int core,
+ CpuTi(CpuTiModel *model, const char *name, xbt_dynar_t speedPeak,
+ int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t stateInitial, tmgr_trace_t stateTrace,
xbt_dict_t properties) ;
~CpuTi();
CpuTiTgmr *p_availTrace; /*< Structure with data needed to integrate trace file */
tmgr_trace_event_t p_stateEvent; /*< trace file with states events (ON or OFF) */
- tmgr_trace_event_t p_powerEvent; /*< trace file with availability events */
+ tmgr_trace_event_t p_speedEvent; /*< trace file with availability events */
ActionTiList *p_actionSet; /*< set with all actions running on cpu */
double m_sumPriority; /*< the sum of actions' priority that are running on cpu */
double m_lastUpdate; /*< last update of actions' remaining amount done */
public:
CpuTiModel();
~CpuTiModel();
- Cpu *createCpu(const char *name, xbt_dynar_t powerPeak,
- int pstate, double power_scale,
- tmgr_trace_t power_trace, int core,
+ Cpu *createCpu(const char *name, xbt_dynar_t speedPeak,
+ int pstate, double speedScale,
+ tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t state_initial,
tmgr_trace_t state_trace,
xbt_dict_t cpu_properties);
xbt_heap_t p_tiActionHeap;
protected:
- void NotifyResourceTurnedOn(Resource*){};
- void NotifyResourceTurnedOff(Resource*){};
+ void NotifyResourceTurnedOn(simgrid::surf::Resource*){};
+ void NotifyResourceTurnedOff(simgrid::surf::Resource*){};
void NotifyActionCancel(Action*){};
void NotifyActionResume(Action*){};
void NotifyActionSuspend(Action*){};
};
+
+}
+}
nb++;
}
XBT_DEBUG("\tThere are %d variables", nb);
- if (nb > 0 && !cnst->shared)
+ if (nb > 0 && !cnst->sharing_policy)
nb = 1;
if (!nb) {
cnst->remaining = 0.0;
elem = (lmm_element_t)_elem;
if (elem->variable->weight <= 0)
break;
- if (cnst->shared) {
+ if (cnst->sharing_policy) {
XBT_DEBUG("\tUpdate constraint %p (%g) with variable %p by %g",
cnst, cnst->remaining, elem->variable,
elem->variable->mu);
cnst->usage = MIN(cnst->usage, elem->value * elem->variable->mu);
}
}
- if (!cnst->shared) {
+ if (!cnst->sharing_policy) {
XBT_DEBUG("\tUpdate constraint %p (%g) by %g",
cnst, cnst->remaining, cnst->usage);
/* 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 <cstdlib>
+
+#include <algorithm>
+
#include "host_clm03.hpp"
#include "cpu_cas01.hpp"
#include "simgrid/sg_config.h"
-#include "vm_interface.hpp"
+#include "virtual_machine.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_host);
void surf_host_model_init_current_default(void)
{
- surf_host_model = new HostCLM03Model();
+ surf_host_model = new simgrid::surf::HostCLM03Model();
xbt_cfg_setdefault_boolean(_sg_cfg_set, "network/crosstraffic", "yes");
surf_cpu_model_init_Cas01();
surf_network_model_init_LegrandVelho();
- Model *model = surf_host_model;
- xbt_dynar_push(model_list, &model);
- xbt_dynar_push(model_list_invoke, &model);
- sg_platf_host_add_cb(host_parse_init);
+ simgrid::surf::Model *model = surf_host_model;
+ xbt_dynar_push(all_existing_models, &model);
}
void surf_host_model_init_compound()
{
-
xbt_assert(surf_cpu_model_pm, "No CPU model defined yet!");
xbt_assert(surf_network_model, "No network model defined yet!");
- surf_host_model = new HostCLM03Model();
- Model *model = surf_host_model;
- xbt_dynar_push(model_list, &model);
- xbt_dynar_push(model_list_invoke, &model);
- sg_platf_host_add_cb(host_parse_init);
+ surf_host_model = new simgrid::surf::HostCLM03Model();
+ xbt_dynar_push(all_existing_models, &surf_host_model);
}
-Host *HostCLM03Model::createHost(const char *name){
- sg_host_t sg_host = sg_host_by_name(name);
- Host *host = new HostCLM03(surf_host_model, name, NULL,
+namespace simgrid {
+namespace surf {
+
+Host *HostCLM03Model::createHost(const char *name,RoutingEdge *netElm, Cpu *cpu){
+ Host *host = new simgrid::surf::HostCLM03(surf_host_model, name, NULL,
(xbt_dynar_t)xbt_lib_get_or_null(storage_lib, name, ROUTING_STORAGE_HOST_LEVEL),
- sg_host_edge(sg_host),
- sg_host_surfcpu(sg_host));
+ netElm, cpu);
+ surf_callback_emit(hostCreatedCallbacks, host);
XBT_DEBUG("Create host %s with %ld mounted disks", name, xbt_dynar_length(host->p_storage));
xbt_lib_set(host_lib, name, SURF_HOST_LEVEL, host);
return host;
typeid(surf_network_model).name(), min_by_net,
typeid(surf_storage_model).name(), min_by_sto);
- double res = max(max(min_by_cpu, min_by_net), min_by_sto);
+ double res = std::max(std::max(min_by_cpu, min_by_net), min_by_sto);
if (min_by_cpu >= 0.0 && min_by_cpu < res)
res = min_by_cpu;
if (min_by_net >= 0.0 && min_by_net < res)
/**********
* Action *
**********/
+
+}
+}
* Classes *
***********/
+namespace simgrid {
+namespace surf {
+
class XBT_PRIVATE HostCLM03Model;
class XBT_PRIVATE HostCLM03;
class XBT_PRIVATE HostCLM03Action;
public:
HostCLM03Model(): HostModel(){}
~HostCLM03Model() {}
- Host *createHost(const char *name);
+ Host *createHost(const char *name, RoutingEdge *netElm, Cpu *cpu);
double shareResources(double now);
void updateActionsState(double now, double delta);
* Action *
**********/
-
+}
+}
#endif /* SURF_HOST_CLM03_HPP_ */
#include "host_interface.hpp"
-#include "simix/smx_private.h"
+#include "src/simix/smx_private.h"
#include "cpu_cas01.hpp"
#include "simgrid/sg_config.h"
#include "network_interface.hpp"
-#include "vm_interface.hpp"
+#include "virtual_machine.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_host, surf,
"Logging specific to the SURF host module");
-HostModel *surf_host_model = NULL;
+simgrid::surf::HostModel *surf_host_model = NULL;
+
+void host_add_traces(){
+ surf_host_model->addTraces();
+}
/*************
* Callbacks *
*************/
-surf_callback(void, Host*) hostCreatedCallbacks;
-surf_callback(void, Host*) hostDestructedCallbacks;
-surf_callback(void, Host*, e_surf_resource_state_t, e_surf_resource_state_t) hostStateChangedCallbacks;
-surf_callback(void, HostAction*, e_surf_action_state_t, e_surf_action_state_t) hostActionStateChangedCallbacks;
-
-void host_parse_init(sg_platf_host_cbarg_t host)
-{
- surf_host_model->createHost(host->id);
-}
-
-void host_add_traces(){
- surf_host_model->addTraces();
-}
+namespace simgrid {
+namespace surf {
+
+surf_callback(void, simgrid::surf::Host*) hostCreatedCallbacks;
+surf_callback(void, simgrid::surf::Host*) hostDestructedCallbacks;
+surf_callback(void, simgrid::surf::Host*, e_surf_resource_state_t, e_surf_resource_state_t) hostStateChangedCallbacks;
+surf_callback(void, simgrid::surf::HostAction*, e_surf_action_state_t, e_surf_action_state_t) hostActionStateChangedCallbacks;
/*********
* Model *
*********/
+
/* Each VM has a dummy CPU action on the PM layer. This CPU action works as the
* constraint (capacity) of the VM in the PM layer. If the VM does not have any
* active task, the dummy CPU action must be deactivated, so that the VM does
VMModel::ws_vms.begin();
iter != VMModel::ws_vms.end(); ++iter) {
- VM *ws_vm = &*iter;
+ VirtualMachine *ws_vm = &*iter;
CpuCas01 *cpu_cas01 = static_cast<CpuCas01*>(ws_vm->p_cpu);
xbt_assert(cpu_cas01, "cpu-less host");
/************
* Resource *
************/
-Host::Host(Model *model, const char *name, xbt_dict_t props,
+Host::Host(simgrid::surf::Model *model, const char *name, xbt_dict_t props,
xbt_dynar_t storage, RoutingEdge *netElm, Cpu *cpu)
: Resource(model, name, props)
, p_storage(storage), p_netElm(netElm), p_cpu(cpu)
{
p_params.ramsize = 0;
- surf_callback_emit(hostCreatedCallbacks, this);
}
-Host::Host(Model *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint,
+Host::Host(simgrid::surf::Model *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint,
xbt_dynar_t storage, RoutingEdge *netElm, Cpu *cpu)
: Resource(model, name, props, constraint)
, p_storage(storage), p_netElm(netElm), p_cpu(cpu)
{
p_params.ramsize = 0;
- surf_callback_emit(hostCreatedCallbacks, this);
}
Host::~Host(){
return p_cpu->getProperties();
}
-Storage *Host::findStorageOnMountList(const char* mount)
+simgrid::surf::Storage *Host::findStorageOnMountList(const char* mount)
{
- Storage *st = NULL;
+ simgrid::surf::Storage *st = NULL;
s_mount_t mnt;
unsigned int cursor;
{
XBT_DEBUG("See '%s'",mnt.name);
if(!strcmp(mount,mnt.name)){
- st = static_cast<Storage*>(mnt.storage);
+ st = static_cast<simgrid::surf::Storage*>(mnt.storage);
break;
}
}
char *storage_name = NULL;
xbt_dynar_foreach(p_storage,i,mnt){
- storage_name = (char *)static_cast<Storage*>(mnt.storage)->getName();
+ storage_name = (char *)static_cast<simgrid::surf::Storage*>(mnt.storage)->getName();
xbt_dict_set(storage_list,mnt.name,storage_name,NULL);
}
return storage_list;
xbt_dynar_t result = xbt_dynar_new(sizeof(void*), NULL);
xbt_lib_foreach(storage_lib, cursor, key, data) {
if(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != NULL) {
- Storage *storage = static_cast<Storage*>(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
+ simgrid::surf::Storage *storage = static_cast<simgrid::surf::Storage*>(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
if(!strcmp((const char*)storage->p_attach,this->getName())){
xbt_dynar_push_as(result, void *, (void*)storage->getName());
}
Action *Host::open(const char* fullpath) {
- Storage *st = NULL;
+ simgrid::surf::Storage *st = NULL;
s_mount_t mnt;
unsigned int cursor;
size_t longest_prefix_length = 0;
if(!strcmp(file_mount_name,mnt.name) && strlen(mnt.name)>longest_prefix_length)
{/* The current mount name is found in the full path and is bigger than the previous*/
longest_prefix_length = strlen(mnt.name);
- st = static_cast<Storage*>(mnt.storage);
+ st = static_cast<simgrid::surf::Storage*>(mnt.storage);
}
free(file_mount_name);
}
}
Action *Host::close(surf_file_t fd) {
- Storage *st = findStorageOnMountList(fd->mount);
+ simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
XBT_DEBUG("CLOSE %s on disk '%s'",fd->name, st->getName());
return st->close(fd);
}
Action *Host::read(surf_file_t fd, sg_size_t size) {
- Storage *st = findStorageOnMountList(fd->mount);
+ simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
XBT_DEBUG("READ %s on disk '%s'",fd->name, st->getName());
return st->read(fd, size);
}
Action *Host::write(surf_file_t fd, sg_size_t size) {
- Storage *st = findStorageOnMountList(fd->mount);
+ simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
XBT_DEBUG("WRITE %s on disk '%s'",fd->name, st->getName());
return st->write(fd, size);
}
return -1;
} else {
- Storage *st = findStorageOnMountList(fd->mount);
+ simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
/* Check if the file is on this storage */
if (!xbt_dict_get_or_null(st->p_content, fd->name)){
XBT_WARN("File %s is not on disk %s. Impossible to unlink", fd->name,
xbt_dynar_t Host::getInfo( surf_file_t fd)
{
- Storage *st = findStorageOnMountList(fd->mount);
+ simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
sg_size_t *psize = xbt_new(sg_size_t, 1);
*psize = fd->size;
xbt_dynar_t info = xbt_dynar_new(sizeof(void*), NULL);
xbt_dynar_t Host::getVms()
{
- xbt_dynar_t dyn = xbt_dynar_new(sizeof(VM*), NULL);
+ xbt_dynar_t dyn = xbt_dynar_new(sizeof(simgrid::surf::VirtualMachine*), NULL);
/* iterate for all virtual machines */
- for (VMModel::vm_list_t::iterator iter =
- VMModel::ws_vms.begin();
- iter != VMModel::ws_vms.end(); ++iter) {
+ for (simgrid::surf::VMModel::vm_list_t::iterator iter =
+ simgrid::surf::VMModel::ws_vms.begin();
+ iter != simgrid::surf::VMModel::ws_vms.end(); ++iter) {
- VM *ws_vm = &*iter;
+ simgrid::surf::VirtualMachine *ws_vm = &*iter;
if (this == ws_vm->p_subWs)
xbt_dynar_push(dyn, &ws_vm);
}
Action::setState(state);
surf_callback_emit(hostActionStateChangedCallbacks, this, old, state);
}
+
+}
+}
* Classes *
***********/
+namespace simgrid {
+namespace surf {
+
class XBT_PRIVATE HostModel;
class XBT_PRIVATE Host;
class XBT_PRIVATE HostAction;
*/
XBT_PUBLIC_DATA(surf_callback(void, HostAction*, e_surf_action_state_t, e_surf_action_state_t)) hostActionStateChangedCallbacks;
+}
+}
+
/*********
* Tools *
*********/
-XBT_PUBLIC_DATA(HostModel*) surf_host_model;
-XBT_PUBLIC(void) host_parse_init(sg_platf_host_cbarg_t host);
+XBT_PUBLIC_DATA(simgrid::surf::HostModel*) surf_host_model;
XBT_PUBLIC(void) host_add_traces();
/*********
* Model *
*********/
+
+namespace simgrid {
+namespace surf {
+
/** @ingroup SURF_host_interface
* @brief SURF Host model interface class
* @details A model is an object which handle the interactions between its Resources and its Actions
HostModel() : Model() {}
~HostModel() {}
- virtual Host *createHost(const char *name)=0;
+ virtual Host *createHost(const char *name, RoutingEdge *net, Cpu *cpu)=0;
void addTraces(){DIE_IMPOSSIBLE;}
virtual void adjustWeightOfDummyCpuActions();
* @brief SURF Host interface class
* @details An host represents a machine with a aggregation of a Cpu, a Link and a Storage
*/
-class Host : public Resource {
+class Host : public simgrid::surf::Resource {
public:
/**
* @brief Host constructor
* @param netElm The RoutingEdge associated to this Host
* @param cpu The Cpu associated to this Host
*/
- Host(Model *model, const char *name, xbt_dict_t props,
+ Host(simgrid::surf::Model *model, const char *name, xbt_dict_t props,
xbt_dynar_t storage, RoutingEdge *netElm, Cpu *cpu);
/**
* @param netElm The RoutingEdge associated to this Host
* @param cpu The Cpu associated to this Host
*/
- Host(Model *model, const char *name, xbt_dict_t props,
+ Host(simgrid::surf::Model *model, const char *name, xbt_dict_t props,
lmm_constraint_t constraint, xbt_dynar_t storage, RoutingEdge *netElm,
Cpu *cpu);
virtual Action *sleep(double duration)=0;
/** @brief Return the storage of corresponding mount point */
- virtual Storage *findStorageOnMountList(const char* storage);
+ virtual simgrid::surf::Storage *findStorageOnMountList(const char* storage);
/** @brief Get the xbt_dict_t of mount_point: Storage */
virtual xbt_dict_t getMountedStorageList();
* @param cost The cost of this HostAction in [TODO]
* @param failed [description]
*/
- HostAction(Model *model, double cost, bool failed)
+ HostAction(simgrid::surf::Model *model, double cost, bool failed)
: Action(model, cost, failed) {}
/**
* @param failed [description]
* @param var The lmm variable associated to this StorageAction if it is part of a LMM component
*/
- HostAction(Model *model, double cost, bool failed, lmm_variable_t var)
+ HostAction(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var)
: Action(model, cost, failed, var) {}
void setState(e_surf_action_state_t state);
};
+}
+}
#endif /* SURF_Host_INTERFACE_HPP_ */
/* 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 <cstdlib>
+
+#include <algorithm>
+
#include "host_ptask_L07.hpp"
#include "cpu_interface.hpp"
xbt_assert(!surf_network_model, "network model type already defined");
// Define the callbacks to parse the XML
- sg_platf_host_add_cb(cpu_parse_init);
- sg_platf_host_add_cb(host_parse_init);
sg_platf_link_add_cb(ptask_netlink_parse_init);
sg_platf_postparse_add_cb(host_add_traces);
- surf_host_model = new HostL07Model();
- Model *model = surf_host_model;
- xbt_dynar_push(model_list, &model);
- xbt_dynar_push(model_list_invoke, &model);
+ surf_host_model = new simgrid::surf::HostL07Model();
+ simgrid::surf::Model *model = surf_host_model;
+ xbt_dynar_push(all_existing_models, &model);
}
+namespace simgrid {
+namespace surf {
+
HostL07Model::HostL07Model() : HostModel() {
if (!ptask_maxmin_system)
ptask_maxmin_system = lmm_system_new(1);
surf_host_model = NULL;
- surf_network_model = new NetworkL07Model();
- surf_cpu_model_pm = new CpuL07Model();
+ surf_network_model = new NetworkL07Model(this);
+ surf_cpu_model_pm = new CpuL07Model(this);
routing_model_create(surf_network_model->createLink("__loopback__",
498000000, NULL,
return action;
}
-Host *HostL07Model::createHost(const char *name)
+Host *HostL07Model::createHost(const char *name,RoutingEdge *netElm, Cpu *cpu)
{
- HostL07 *wk = NULL;
- sg_host_t sg_host = sg_host_by_name(name);
-
- xbt_assert(!surf_host_resource_priv(sg_host),
- "Host '%s' declared several times in the platform file.",
- name);
-
- wk = new HostL07(this, name, NULL,
- sg_host_edge(sg_host),
- sg_host_surfcpu(sg_host));
+ HostL07 *host = new HostL07(this, name, NULL, netElm, cpu);
- xbt_lib_set(host_lib, name, SURF_HOST_LEVEL, wk);
+ surf_callback_emit(hostCreatedCallbacks, host);
+ xbt_lib_set(host_lib, name, SURF_HOST_LEVEL, host);
- return wk;
+ return host;
}
Action *NetworkL07Model::communicate(RoutingEdge *src, RoutingEdge *dst,
xbt_dict_t cpu_properties)
{
double power_initial = xbt_dynar_get_as(powerPeak, pstate, double);
- xbt_dynar_free(&powerPeak); // kill memory leak
sg_host_t sg_host = sg_host_by_name(name);
- xbt_assert(!surf_host_resource_priv(sg_host),
- "Host '%s' declared several times in the platform file.",
- name);
-
CpuL07 *cpu = new CpuL07(this, name, cpu_properties,
power_initial, power_scale, power_trace,
core, state_initial, state_trace);
-
- sg_host_surfcpu_set(sg_host, cpu);
-
+ sg_host_surfcpu_register(sg_host, cpu);
return cpu;
}
xbt_assert(!Link::byName(name),
"Link '%s' declared several times in the platform file.", name);
- return new LinkL07(this, name, properties,
+ Link* link = new LinkL07(this, name, properties,
bw_initial, bw_trace,
lat_initial, lat_trace,
state_initial, state_trace,
policy);
+ surf_callback_emit(networkLinkCreatedCallbacks, link);
+ return link;
}
void HostL07Model::addTraces()
xbt_assert(host, "Host %s undefined", elm);
xbt_assert(trace, "Trace %s undefined", trace_name);
- host->p_powerEvent = tmgr_history_add_trace(history, trace, 0.0, 0, host);
+ host->p_speedEvent = tmgr_history_add_trace(history, trace, 0.0, 0, host);
}
/* Connect traces relative to network */
{
}
-double HostL07::getPowerPeakAt(int /*pstate_index*/)
-{
- THROW_UNIMPLEMENTED;
-}
-
-int HostL07::getNbPstates()
-{
- THROW_UNIMPLEMENTED;
-}
-
-void HostL07::setPstate(int /*pstate_index*/)
-{
- THROW_UNIMPLEMENTED;
-}
-
-int HostL07::getPstate()
-{
- THROW_UNIMPLEMENTED;
-}
-
-double HostL07::getConsumedEnergy()
-{
- THROW_UNIMPLEMENTED;
-}
-
CpuL07::CpuL07(CpuL07Model *model, const char* name, xbt_dict_t props,
- double power_initial, double power_scale, tmgr_trace_t power_trace,
+ double speedInitial, double speedScale, tmgr_trace_t speedTrace,
int core, e_surf_resource_state_t state_initial, tmgr_trace_t state_trace)
- : Cpu(model, name, props, lmm_constraint_new(ptask_maxmin_system, this, power_initial * power_scale),
- core, power_initial, power_scale)
+ : Cpu(model, name, props, lmm_constraint_new(ptask_maxmin_system, this, speedInitial * speedScale),
+ core, speedInitial, speedScale, state_initial)
{
- xbt_assert(m_powerScale > 0, "Power has to be >0");
+ xbt_assert(m_speedScale > 0, "Power has to be >0");
- if (power_trace)
- p_powerEvent = tmgr_history_add_trace(history, power_trace, 0.0, 0, this);
+ if (speedTrace)
+ p_speedEvent = tmgr_history_add_trace(history, speedTrace, 0.0, 0, this);
else
- p_powerEvent = NULL;
+ p_speedEvent = NULL;
- setState(state_initial);
if (state_trace)
p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, this);
}
lmm_constraint_shared(getConstraint());
}
+Action *CpuL07::execute(double size)
+{
+ sg_host_t*host_list = xbt_new0(sg_host_t, 1);
+ double *flops_amount = xbt_new0(double, 1);
+ double *bytes_amount = xbt_new0(double, 1);
+
+ host_list[0] = sg_host_by_name(getName());
+ flops_amount[0] = size;
+
+ return static_cast<HostL07Model*>(getModel())->executeParallelTask(1, host_list,
+ flops_amount,
+ bytes_amount, -1);
+}
+
+Action *CpuL07::sleep(double duration)
+{
+ L07Action *action = NULL;
+
+ XBT_IN("(%s,%g)", getName(), duration);
+
+ action = static_cast<L07Action*>(execute(1.0));
+ action->m_maxDuration = duration;
+ action->m_suspended = 2;
+ lmm_update_variable_weight(ptask_maxmin_system, action->getVariable(), 0.0);
+
+ XBT_OUT();
+ return action;
+}
+
bool CpuL07::isUsed(){
return lmm_constraint_used(ptask_maxmin_system, getConstraint());
}
void CpuL07::updateState(tmgr_trace_event_t event_type, double value, double /*date*/){
XBT_DEBUG("Updating cpu %s (%p) with value %g", getName(), this, value);
- if (event_type == p_powerEvent) {
- m_powerScale = value;
- lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_powerPeak * m_powerScale);
+ if (event_type == p_speedEvent) {
+ m_speedScale = value;
+ lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_speedPeak * m_speedScale);
if (tmgr_trace_event_free(event_type))
- p_powerEvent = NULL;
+ p_speedEvent = NULL;
} else if (event_type == p_stateEvent) {
if (value > 0)
setState(SURF_RESOURCE_ON);
return p_cpu->getState();
}
-Action *HostL07::execute(double size)
-{
- sg_host_t*host_list = xbt_new0(sg_host_t, 1);
- double *flops_amount = xbt_new0(double, 1);
- double *bytes_amount = xbt_new0(double, 1);
-
- host_list[0] = sg_host_by_name(getName());
- flops_amount[0] = size;
-
- return static_cast<HostL07Model*>(getModel())->executeParallelTask(1, host_list,
- flops_amount,
- bytes_amount, -1);
-}
-
-Action *HostL07::sleep(double duration)
-{
- L07Action *action = NULL;
-
- XBT_IN("(%s,%g)", getName(), duration);
-
- action = static_cast<L07Action*>(execute(1.0));
- action->m_maxDuration = duration;
- action->m_suspended = 2;
- lmm_update_variable_weight(ptask_maxmin_system, action->getVariable(), 0.0);
-
- XBT_OUT();
- return action;
-}
double LinkL07::getBandwidth()
{
lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_bwCurrent);
}
-double LinkL07::getLatency()
-{
- return m_latCurrent;
-}
-
void LinkL07::updateLatency(double value, double date)
{
lmm_variable_t var = NULL;
}
}
-
-bool LinkL07::isShared()
-{
- return lmm_constraint_is_shared(getConstraint());
-}
-
/**********
* Action *
**********/
if (m_rate < 0)
lmm_update_variable_bound(ptask_maxmin_system, getVariable(), lat_bound);
else
- lmm_update_variable_bound(ptask_maxmin_system, getVariable(), min(m_rate, lat_bound));
+ lmm_update_variable_bound(ptask_maxmin_system, getVariable(),
+ std::min(m_rate, lat_bound));
}
}
XBT_OUT();
return m_remains;
}
+
+}
+}
/* 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 <cstdlib>
+
+#include <vector>
+
#include <xbt/base.h>
#include "host_interface.hpp"
#ifndef HOST_L07_HPP_
#define HOST_L07_HPP_
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
class XBT_PRIVATE LinkL07;
class XBT_PRIVATE L07Action;
-
/*********
* Tools *
*********/
double shareResources(double now);
void updateActionsState(double now, double delta);
- Host *createHost(const char *name);
+ Host *createHost(const char *name,RoutingEdge *netElm, Cpu *cpu);
Action *executeParallelTask(int host_nb,
sg_host_t *host_list,
double *flops_amount,
double rate);
xbt_dynar_t getRoute(Host *src, Host *dst);
void addTraces();
- NetworkModel *p_networkModel;
};
class CpuL07Model : public CpuModel {
public:
- CpuL07Model() : CpuModel() {};
+ CpuL07Model(HostL07Model *hmodel) : CpuModel() {p_hostModel = hmodel;};
~CpuL07Model() {surf_cpu_model_pm = NULL;};
- Cpu *createCpu(const char *name, xbt_dynar_t powerPeak,
- int pstate, double power_scale,
- tmgr_trace_t power_trace, int core,
+ Cpu *createCpu(const char *name, xbt_dynar_t speedPeak,
+ int pstate, double speedScale,
+ tmgr_trace_t speedTrace, int core,
e_surf_resource_state_t state_initial,
tmgr_trace_t state_trace,
xbt_dict_t cpu_properties);
class NetworkL07Model : public NetworkModel {
public:
- NetworkL07Model() : NetworkModel() {};
+ NetworkL07Model(HostL07Model *hmodel) : NetworkModel() {p_hostModel = hmodel;};
~NetworkL07Model() {surf_network_model = NULL;};
Link* createLink(const char *name,
double bw_initial,
class HostL07 : public Host {
public:
HostL07(HostModel *model, const char* name, xbt_dict_t props, RoutingEdge *netElm, Cpu *cpu);
- //bool isUsed();
bool isUsed() {DIE_IMPOSSIBLE;};
void updateState(tmgr_trace_event_t /*event_type*/, double /*value*/, double /*date*/) {DIE_IMPOSSIBLE;};
- Action *execute(double size);
- Action *sleep(double duration);
+ Action *execute(double size) {return p_cpu->execute(size);};
+ Action *sleep(double duration) {return p_cpu->sleep(duration);};
e_surf_resource_state_t getState();
- double getPowerPeakAt(int pstate_index);
- int getNbPstates();
- void setPstate(int pstate_index);
- int getPstate();
- double getConsumedEnergy();
};
class CpuL07 : public Cpu {
friend void HostL07Model::addTraces();
tmgr_trace_event_t p_stateEvent;
- tmgr_trace_event_t p_powerEvent;
+ tmgr_trace_event_t p_speedEvent;
public:
CpuL07(CpuL07Model *model, const char* name, xbt_dict_t properties,
double power_scale, double power_initial, tmgr_trace_t power_trace,
int core, e_surf_resource_state_t state_initial, tmgr_trace_t state_trace);
bool isUsed();
- //bool isUsed() {DIE_IMPOSSIBLE;};
void updateState(tmgr_trace_event_t event_type, double value, double date);
- CpuAction *execute(double /*size*/) {DIE_IMPOSSIBLE;};
- CpuAction *sleep(double /*duration*/) {DIE_IMPOSSIBLE;};
+ Action *execute(double size);
+ Action *sleep(double duration);
double getCurrentPowerPeak() {THROW_UNIMPLEMENTED;};
double getPowerPeakAt(int /*pstate_index*/) {THROW_UNIMPLEMENTED;};
bool isUsed();
void updateState(tmgr_trace_event_t event_type, double value, double date);
double getBandwidth();
- double getLatency();
- bool isShared();
void updateBandwidth(double value, double date=surf_get_clock());
void updateLatency(double value, double date=surf_get_clock());
- double m_latCurrent;
- tmgr_trace_event_t p_latEvent;
double m_bwCurrent;
tmgr_trace_event_t p_bwEvent;
};
* Action *
**********/
class L07Action : public HostAction {
- friend Action *HostL07::execute(double size);
- friend Action *HostL07::sleep(double duration);
+ friend Action *CpuL07::execute(double size);
+ friend Action *CpuL07::sleep(double duration);
friend Action *HostL07Model::executeParallelTask(int host_nb,
sg_host_t*host_list,
double *flops_amount,
void setPriority(double priority);
double getRemains();
- vector<RoutingEdge*> * p_edgeList = new vector<RoutingEdge*>();
+ std::vector<RoutingEdge*> * p_edgeList = new std::vector<RoutingEdge*>();
double *p_computationAmount;
double *p_communicationAmount;
double m_latency;
double m_rate;
};
+}
+}
+
#endif /* HOST_L07_HPP_ */
/* 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 "instr/instr_private.h"
+#include "src/instr/instr_private.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
#include "xbt/graph.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_routing, instr, "Tracing platform hierarchy");
char *child_name;
//bottom-up recursion
xbt_dict_foreach(surf_AS_get_routing_sons(rc), cursor, child_name, rc_son) {
- container_t child_container = xbt_dict_get (container->children, surf_AS_get_name(rc_son));
+ container_t child_container = (container_t) xbt_dict_get (
+ container->children, surf_AS_get_name(rc_son));
recursiveGraphExtraction (rc_son, child_container, filter);
}
}
surf_AS_get_graph(rc, graph, nodes, edges);
xbt_dict_foreach(edges,cursor,edge_name,edge) {
- linkContainers(PJ_container_get(edge->src->data), PJ_container_get(edge->dst->data), filter);
+ linkContainers(
+ PJ_container_get((const char*) edge->src->data),
+ PJ_container_get((const char*) edge->dst->data), filter);
}
xbt_dict_free (&nodes);
xbt_dict_free (&edges);
/*
* Callbacks
*/
-static void instr_routing_parse_start_AS (sg_platf_AS_cbarg_t AS)
+void sg_instr_AS_begin(sg_platf_AS_cbarg_t AS)
{
const char*id = AS->id;
if (TRACE_needs_platform()){
container_t father = *(container_t*)xbt_dynar_get_ptr(currentContainer, xbt_dynar_length(currentContainer)-1);
- container_t new = PJ_container_new (id, INSTR_AS, father);
- xbt_dynar_push (currentContainer, &new);
+ container_t container = PJ_container_new (id, INSTR_AS, father);
+ xbt_dynar_push (currentContainer, &container);
}
}
-static void instr_routing_parse_end_AS ()
+void sg_instr_AS_end()
{
if (TRACE_needs_platform()){
xbt_dynar_pop_ptr (currentContainer);
unsigned int i;
xbt_dynar_foreach (links_to_create, i, link_name){
- container_t new = PJ_container_new (link_name, INSTR_LINK, father);
+ container_t container = PJ_container_new (link_name, INSTR_LINK, father);
if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (! TRACE_disable_link())) {
- type_t bandwidth = PJ_type_get_or_null ("bandwidth", new->type);
+ type_t bandwidth = PJ_type_get_or_null ("bandwidth", container->type);
if (bandwidth == NULL){
- bandwidth = PJ_type_variable_new ("bandwidth", NULL, new->type);
+ bandwidth = PJ_type_variable_new ("bandwidth", NULL, container->type);
}
- type_t latency = PJ_type_get_or_null ("latency", new->type);
+ type_t latency = PJ_type_get_or_null ("latency", container->type);
if (latency == NULL){
- latency = PJ_type_variable_new ("latency", NULL, new->type);
+ latency = PJ_type_variable_new ("latency", NULL, container->type);
}
- new_pajeSetVariable (0, new, bandwidth, bandwidth_value);
- new_pajeSetVariable (0, new, latency, latency_value);
+ new_pajeSetVariable (0, container, bandwidth, bandwidth_value);
+ new_pajeSetVariable (0, container, latency, latency_value);
}
if (TRACE_uncategorized()){
- type_t bandwidth_used = PJ_type_get_or_null ("bandwidth_used", new->type);
+ type_t bandwidth_used = PJ_type_get_or_null ("bandwidth_used", container->type);
if (bandwidth_used == NULL){
- PJ_type_variable_new ("bandwidth_used", "0.5 0.5 0.5", new->type);
+ PJ_type_variable_new ("bandwidth_used", "0.5 0.5 0.5", container->type);
}
}
}
xbt_dynar_free (&links_to_create);
}
-static void instr_routing_parse_start_host (sg_platf_host_cbarg_t host)
+void sg_instr_new_host(sg_platf_host_cbarg_t host)
{
container_t father = *(container_t*)xbt_dynar_get_ptr(currentContainer, xbt_dynar_length(currentContainer)-1);
- container_t new = PJ_container_new (host->id, INSTR_HOST, father);
+ container_t container = PJ_container_new (host->id, INSTR_HOST, father);
- if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (! TRACE_disable_power())) {
- type_t power = PJ_type_get_or_null ("power", new->type);
- if (power == NULL){
- power = PJ_type_variable_new ("power", NULL, new->type);
+ if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (! TRACE_disable_speed())) {
+ type_t speed = PJ_type_get_or_null ("power", container->type);
+ if (speed == NULL){
+ speed = PJ_type_variable_new ("power", NULL, container->type);
}
- double current_power_state;
- xbt_dynar_get_cpy(host->power_peak, host->pstate, ¤t_power_state);
- new_pajeSetVariable (0, new, power, current_power_state);
+ double current_speed_state;
+ xbt_dynar_get_cpy(host->speed_peak, host->pstate, ¤t_speed_state);
+ new_pajeSetVariable (0, container, speed, current_speed_state);
}
if (TRACE_uncategorized()){
- type_t power_used = PJ_type_get_or_null ("power_used", new->type);
- if (power_used == NULL){
- PJ_type_variable_new ("power_used", "0.5 0.5 0.5", new->type);
+ type_t speed_used = PJ_type_get_or_null ("power_used", container->type);
+ if (speed_used == NULL){
+ PJ_type_variable_new ("power_used", "0.5 0.5 0.5", container->type);
}
}
if (TRACE_smpi_is_enabled() && TRACE_smpi_is_grouped()){
- type_t mpi = PJ_type_get_or_null ("MPI", new->type);
+ type_t mpi = PJ_type_get_or_null ("MPI", container->type);
if (mpi == NULL){
- mpi = PJ_type_container_new("MPI", new->type);
+ mpi = PJ_type_container_new("MPI", container->type);
PJ_type_state_new ("MPI_STATE", mpi);
PJ_type_link_new ("MPI_LINK", PJ_type_get_root(), mpi, mpi);
}
}
if (TRACE_msg_process_is_enabled()) {
- type_t msg_process = PJ_type_get_or_null ("MSG_PROCESS", new->type);
+ type_t msg_process = PJ_type_get_or_null ("MSG_PROCESS", container->type);
if (msg_process == NULL){
- msg_process = PJ_type_container_new("MSG_PROCESS", new->type);
+ msg_process = PJ_type_container_new("MSG_PROCESS", container->type);
type_t state = PJ_type_state_new ("MSG_PROCESS_STATE", msg_process);
PJ_value_new ("suspend", "1 0 1", state);
PJ_value_new ("sleep", "1 1 0", state);
}
if (TRACE_msg_vm_is_enabled()) {
- type_t msg_vm = PJ_type_get_or_null ("MSG_VM", new->type);
+ type_t msg_vm = PJ_type_get_or_null ("MSG_VM", container->type);
if (msg_vm == NULL){
- msg_vm = PJ_type_container_new("MSG_VM", new->type);
+ msg_vm = PJ_type_container_new("MSG_VM", container->type);
type_t state = PJ_type_state_new ("MSG_VM_STATE", msg_vm);
PJ_value_new ("suspend", "1 0 1", state);
PJ_value_new ("sleep", "1 1 0", state);
}
-static void instr_routing_parse_start_router (sg_platf_router_cbarg_t router)
+void sg_instr_new_router(sg_platf_router_cbarg_t router)
{
container_t father = *(container_t*)xbt_dynar_get_ptr(currentContainer, xbt_dynar_length(currentContainer)-1);
PJ_container_new (router->id, INSTR_ROUTER, father);
if (!TRACE_is_enabled()) return;
//always need the call backs to ASes (we need only the root AS),
//to create the rootContainer and the rootType properly
- sg_platf_AS_begin_add_cb(instr_routing_parse_start_AS);
- sg_platf_AS_end_add_cb(instr_routing_parse_end_AS);
if (!TRACE_needs_platform()) return;
sg_platf_link_add_cb(instr_routing_parse_start_link);
- sg_platf_host_add_cb(instr_routing_parse_start_host);
- sg_platf_router_add_cb(instr_routing_parse_start_router);
-
sg_platf_postparse_add_cb(instr_routing_parse_end_platform);
}
recursiveNewUserStateType (father_type, new_typename, PJ_type_get_root());
}
-static void recursiveNewValueForUserStateType (const char *typename, const char *value, const char *color, type_t root)
+static void recursiveNewValueForUserStateType (const char *type_name, const char *value, const char *color, type_t root)
{
- if (!strcmp (root->name, typename)){
+ if (!strcmp (root->name, type_name)){
PJ_value_new (value, color, root);
}
xbt_dict_cursor_t cursor = NULL;
type_t child_type;
char *name;
xbt_dict_foreach(root->children, cursor, name, child_type) {
- recursiveNewValueForUserStateType (typename, value, color, child_type);
+ recursiveNewValueForUserStateType (type_name, value, color, child_type);
}
}
-void instr_new_value_for_user_state_type (const char *typename, const char *value, const char *color)
+void instr_new_value_for_user_state_type (const char *type_name, const char *value, const char *color)
{
- recursiveNewValueForUserStateType (typename, value, color, PJ_type_get_root());
+ recursiveNewValueForUserStateType (type_name, value, color, PJ_type_get_root());
}
int instr_platform_traced ()
char *child_name;
//bottom-up recursion
xbt_dict_foreach(surf_AS_get_routing_sons(rc), cursor, child_name, rc_son) {
- container_t child_container = xbt_dict_get (container->children, surf_AS_get_name(rc_son));
+ container_t child_container = (container_t) xbt_dict_get (
+ container->children, surf_AS_get_name(rc_son));
recursiveXBTGraphExtraction (graph, nodes, edges, rc_son, child_container);
}
}
/* 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 "instr/instr_private.h"
-#include "surf/surf_private.h"
+#include "src/instr/instr_private.h"
+#include "src/surf/surf_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_surf, instr, "Tracing Surf");
TRACE_surf_resource_utilization_release();
}
-void TRACE_surf_host_set_power(double date, const char *resource, double power)
+void TRACE_surf_host_set_speed(double date, const char *resource, double speed)
{
if (TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) {
container_t container = PJ_container_get(resource);
type_t type = PJ_type_get ("power", container->type);
- new_pajeSetVariable(date, container, type, power);
+ new_pajeSetVariable(date, container, type, speed);
}
}
cnst->bound = bound_value;
cnst->usage = 0;
- cnst->shared = 1;
+ cnst->sharing_policy = 1; /* FIXME: don't hardcode the value */
insert_constraint(sys, cnst);
return cnst;
void lmm_constraint_shared(lmm_constraint_t cnst)
{
- cnst->shared = 0;
+ cnst->sharing_policy = 0;
}
-int lmm_constraint_is_shared(lmm_constraint_t cnst)
+/** Return true if the constraint is shared, and false if it's FATPIPE */
+int lmm_constraint_sharing_policy(lmm_constraint_t cnst)
{
- return (cnst->shared);
+ return (cnst->sharing_policy);
}
XBT_INLINE void lmm_constraint_free(lmm_system_t sys,
break;
if (i < var->cnsts_number) {
- if (cnst->shared)
+ if (cnst->sharing_policy)
var->cnsts[i].value += value;
else
var->cnsts[i].value = MAX(var->cnsts[i].value, value);
trace_buf = (char*)
xbt_realloc(trace_buf, strlen(trace_buf) + strlen(print_buf) + 1);
strcat(trace_buf, print_buf);
- sprintf(print_buf, "%s(",(cnst->shared)?"":"max");
+ sprintf(print_buf, "%s(",(cnst->sharing_policy)?"":"max");
trace_buf = (char*)
xbt_realloc(trace_buf,
strlen(trace_buf) + strlen(print_buf) + 1);
xbt_swag_foreach(_elem, elem_list) {
elem = (lmm_element_t)_elem;
sprintf(print_buf, "%f.'%d'(%f) %s ", elem->value,
- elem->variable->id_int, elem->variable->value,(cnst->shared)?"+":",");
+ elem->variable->id_int, elem->variable->value,(cnst->sharing_policy)?"+":",");
trace_buf = (char*)
xbt_realloc(trace_buf,
strlen(trace_buf) + strlen(print_buf) + 1);
strcat(trace_buf, print_buf);
- if(cnst->shared)
- sum += elem->value * elem->variable->value;
+ if(cnst->sharing_policy)
+ sum += elem->value * elem->variable->value;
else
- sum = MAX(sum,elem->value * elem->variable->value);
+ sum = MAX(sum,elem->value * elem->variable->value);
}
sprintf(print_buf, "0) <= %f ('%d')", cnst->bound, cnst->id_int);
trace_buf = (char*)
xbt_realloc(trace_buf, strlen(trace_buf) + strlen(print_buf) + 1);
strcat(trace_buf, print_buf);
- if (!cnst->shared) {
+ if (!cnst->sharing_policy) {
sprintf(print_buf, " [MAX-Constraint]");
trace_buf = (char*)
xbt_realloc(trace_buf,
if (elem->variable->weight <= 0)
break;
if ((elem->value > 0)) {
- if (cnst->shared)
+ if (cnst->sharing_policy)
cnst->usage += elem->value / elem->variable->weight;
else if (cnst->usage < elem->value / elem->variable->weight)
cnst->usage = elem->value / elem->variable->weight;
make_elem_active(elem);
- Action *action = static_cast<Action*>(elem->variable->id);
+ simgrid::surf::Action *action = static_cast<simgrid::surf::Action*>(elem->variable->id);
if (sys->keep_track && !action->is_linked())
sys->keep_track->push_back(*action);
}
for (i = 0; i < var->cnsts_number; i++) {
elem = &var->cnsts[i];
cnst = elem->constraint;
- if (cnst->shared) {
+ if (cnst->sharing_policy) {
//Remember: shared constraints require that sum(elem->value * var->value) < cnst->bound
double_update(&(cnst->remaining), elem->value * var->value, cnst->bound*sg_maxmin_precision);
double_update(&(cnst->usage), elem->value / var->weight, sg_maxmin_precision);
if (elem->variable->weight <= 0)
break;
if ((elem->value > 0)) {
- if (cnst->shared)
+ if (cnst->sharing_policy)
usage += elem->value * elem->variable->value;
else if (usage < elem->value * elem->variable->value)
usage = elem->value * elem->variable->value;
double remaining;
double usage;
double bound;
- int shared;
+ int sharing_policy; /* see @e_surf_link_sharing_policy_t (0: FATPIPE, 1: SHARED, 2: FULLDUPLEX) */
void *id;
int id_int;
double lambda;
s_xbt_swag_t saturated_variable_set; /* a list of lmm_variable_t */
s_xbt_swag_t saturated_constraint_set; /* a list of lmm_constraint_t_t */
- ActionLmmListPtr keep_track;
+ simgrid::surf::ActionLmmListPtr keep_track;
xbt_mallocator_t variable_mallocator;
} s_lmm_system_t;
/* 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 <algorithm>
+
#include "network_cm02.hpp"
#include "maxmin_private.hpp"
#include "simgrid/sg_config.h"
if (surf_network_model)
return;
- surf_network_model = new NetworkCm02Model();
+ surf_network_model = new simgrid::surf::NetworkCm02Model();
net_define_callbacks();
- Model *model = surf_network_model;
- xbt_dynar_push(model_list, &model);
+ simgrid::surf::Model *model = surf_network_model;
+ xbt_dynar_push(all_existing_models, &model);
xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor",
13.01);
if (surf_network_model)
return;
- surf_network_model = new NetworkCm02Model();
+ surf_network_model = new simgrid::surf::NetworkCm02Model();
net_define_callbacks();
- Model *model = surf_network_model;
- xbt_dynar_push(model_list, &model);
+ simgrid::surf::Model *model = surf_network_model;
+ xbt_dynar_push(all_existing_models, &model);
xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor", 1.0);
xbt_cfg_setdefault_double(_sg_cfg_set, "network/bandwidth_factor",
if (surf_network_model)
return;
- surf_network_model = new NetworkCm02Model();
+ surf_network_model = new simgrid::surf::NetworkCm02Model();
net_define_callbacks();
- Model *model = surf_network_model;
- xbt_dynar_push(model_list, &model);
+ simgrid::surf::Model *model = surf_network_model;
+ xbt_dynar_push(all_existing_models, &model);
lmm_set_default_protocol_function(func_reno_f, func_reno_fp,
func_reno_fpi);
surf_network_model->f_networkSolve = lagrange_solve;
if (surf_network_model)
return;
- surf_network_model = new NetworkCm02Model();
+ surf_network_model = new simgrid::surf::NetworkCm02Model();
net_define_callbacks();
- Model *model = surf_network_model;
- xbt_dynar_push(model_list, &model);
+ simgrid::surf::Model *model = surf_network_model;
+ xbt_dynar_push(all_existing_models, &model);
lmm_set_default_protocol_function(func_reno2_f, func_reno2_fp,
func_reno2_fpi);
surf_network_model->f_networkSolve = lagrange_solve;
if (surf_network_model)
return;
- surf_network_model = new NetworkCm02Model();
+ surf_network_model = new simgrid::surf::NetworkCm02Model();
net_define_callbacks();
- Model *model = surf_network_model;
- xbt_dynar_push(model_list, &model);
+ simgrid::surf::Model *model = surf_network_model;
+ xbt_dynar_push(all_existing_models, &model);
lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
func_vegas_fpi);
surf_network_model->f_networkSolve = lagrange_solve;
xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
}
+namespace simgrid {
+namespace surf {
+
NetworkCm02Model::NetworkCm02Model()
:NetworkModel()
{
"Link '%s' declared several times in the platform",
name);
- return new NetworkCm02Link(this, name, properties, p_maxminSystem, sg_bandwidth_factor * bw_initial, history,
+ Link* link = new NetworkCm02Link(this, name, properties, p_maxminSystem, sg_bandwidth_factor * bw_initial, history,
state_initial, state_trace, bw_initial, bw_trace, lat_initial, lat_trace, policy);
+ surf_callback_emit(networkLinkCreatedCallbacks, link);
+ return link;
}
void NetworkCm02Model::updateActionsStateLazy(double now, double /*delta*/)
}
xbt_dynar_foreach(route, i, _link) {
link = static_cast<NetworkCm02Link*>(_link);
- double bb = bandwidthFactor(size) * link->getBandwidth(); //(link->p_power.peak * link->p_power.scale);
+ double bb = bandwidthFactor(size) * link->getBandwidth();
bandwidth_bound =
- (bandwidth_bound < 0.0) ? bb : min(bandwidth_bound, bb);
+ (bandwidth_bound < 0.0) ? bb : std::min(bandwidth_bound, bb);
}
action->m_latCurrent = action->m_latency;
if (action->m_rate < 0) {
lmm_update_variable_bound(p_maxminSystem, action->getVariable(), (action->m_latCurrent > 0) ? sg_tcp_gamma / (2.0 * action->m_latCurrent) : -1.0);
} else {
- lmm_update_variable_bound(p_maxminSystem, action->getVariable(), (action->m_latCurrent > 0) ? min(action->m_rate, sg_tcp_gamma / (2.0 * action->m_latCurrent)) : action->m_rate);
+ lmm_update_variable_bound(p_maxminSystem, action->getVariable(), (action->m_latCurrent > 0) ? std::min(action->m_rate, sg_tcp_gamma / (2.0 * action->m_latCurrent)) : action->m_rate);
}
xbt_dynar_foreach(route, i, _link) {
"Cannot connect trace %s to link %s: trace undefined",
trace_name, elm);
- link->p_power.event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
+ link->p_speed.event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
}
xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) {
{
setState(state_init);
- p_power.scale = 1.0;
- p_power.peak = metric_peak;
+ p_speed.scale = 1.0;
+ p_speed.peak = metric_peak;
if (metric_trace)
- p_power.event = tmgr_history_add_trace(history, metric_trace, 0.0, 0, this);
+ p_speed.event = tmgr_history_add_trace(history, metric_trace, 0.0, 0, this);
else
- p_power.event = NULL;
+ p_speed.event = NULL;
m_latCurrent = lat_initial;
if (lat_trace)
/* "%g" " for event %p\n", surf_get_clock(), nw_link->name, */
/* value, event_type); */
- if (event_type == p_power.event) {
+ if (event_type == p_speed.event) {
updateBandwidth(value, date);
if (tmgr_trace_event_free(event_type))
- p_power.event = NULL;
+ p_speed.event = NULL;
} else if (event_type == p_latEvent) {
updateLatency(value, date);
if (tmgr_trace_event_free(event_type))
void NetworkCm02Link::updateBandwidth(double value, double date){
double delta = sg_weight_S_parameter / value - sg_weight_S_parameter /
- (p_power.peak * p_power.scale);
+ (p_speed.peak * p_speed.scale);
lmm_variable_t var = NULL;
lmm_element_t elem = NULL;
lmm_element_t nextelem = NULL;
NetworkCm02Action *action = NULL;
- p_power.peak = value;
+ p_speed.peak = value;
lmm_update_constraint_bound(getModel()->getMaxminSystem(),
getConstraint(),
sg_bandwidth_factor *
- (p_power.peak * p_power.scale));
- TRACE_surf_link_set_bandwidth(date, getName(), sg_bandwidth_factor * p_power.peak * p_power.scale);
+ (p_speed.peak * p_speed.scale));
+ TRACE_surf_link_set_bandwidth(date, getName(), sg_bandwidth_factor * p_speed.peak * p_speed.scale);
if (sg_weight_S_parameter > 0) {
while ((var = lmm_get_var_from_cnst_safe(getModel()->getMaxminSystem(), getConstraint(), &elem, &nextelem, &numelem))) {
action = (NetworkCm02Action*) lmm_variable_id(var);
lmm_update_variable_bound(getModel()->getMaxminSystem(), action->getVariable(), sg_tcp_gamma / (2.0 * action->m_latCurrent));
else {
lmm_update_variable_bound(getModel()->getMaxminSystem(), action->getVariable(),
- min(action->m_rate, sg_tcp_gamma / (2.0 * action->m_latCurrent)));
+ std::min(action->m_rate, sg_tcp_gamma / (2.0 * action->m_latCurrent)));
if (action->m_rate < sg_tcp_gamma / (2.0 * action->m_latCurrent)) {
XBT_INFO("Flow is limited BYBANDWIDTH");
m_lastValue = lmm_variable_getvalue(getVariable());
}
+}
+}
#include "xbt/fifo.h"
#include "xbt/graph.h"
+
+
/***********
* Classes *
***********/
+
+namespace simgrid {
+namespace surf {
+
class XBT_PRIVATE NetworkCm02Model;
class XBT_PRIVATE NetworkCm02Action;
+class XBT_PRIVATE NetworkSmpiModel;
+
+}
+}
/*********
* Tools *
/*********
* Model *
*********/
+
+namespace simgrid {
+namespace surf {
+
class NetworkCm02Model : public NetworkModel {
private:
void initialize();
public:
NetworkCm02Model(int /*i*/) : NetworkModel() {};
NetworkCm02Model();
- ~NetworkCm02Model() {
- }
+ ~NetworkCm02Model() { }
Link* createLink(const char *name,
double bw_initial,
tmgr_trace_t bw_trace,
Action *communicate(RoutingEdge *src, RoutingEdge *dst,
double size, double rate);
bool shareResourcesIsIdempotent() {return true;}
+ virtual void gapAppend(double /*size*/, const Link* /*link*/, NetworkAction * /*action*/) {};
+ bool m_haveGap = false;
};
/************
void updateState(tmgr_trace_event_t event_type, double value, double date);
void updateBandwidth(double value, double date=surf_get_clock());
void updateLatency(double value, double date=surf_get_clock());
+ virtual void gapAppend(double /*size*/, const Link* /*link*/, NetworkAction * /*action*/) {};
+
+
};
/**********
* Action *
**********/
-
class NetworkCm02Action : public NetworkAction {
friend Action *NetworkCm02Model::communicate(RoutingEdge *src, RoutingEdge *dst, double size, double rate);
+ friend NetworkSmpiModel;
public:
NetworkCm02Action(Model *model, double cost, bool failed)
: NetworkAction(model, cost, failed) {};
void updateRemainingLazy(double now);
+protected:
+ double m_senderGap;
};
+}
+}
+
#endif /* SURF_NETWORK_CM02_HPP_ */
#include "network_constant.hpp"
#include "surf/random_mgr.h"
+#include "host_interface.hpp"
+
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_network);
static int host_number_int = 0;
-static void netcste_count_hosts(sg_platf_host_cbarg_t /*h*/) {
- host_number_int++;
-}
static void netcste_parse_nolink(sg_platf_link_cbarg_t link){
xbt_die("There is no link in the Constant network model. "
"Please remove any link from your platform (and switch to routing='None')");
void surf_network_model_init_Constant()
{
xbt_assert(surf_network_model == NULL);
- surf_network_model = new NetworkConstantModel();
+ surf_network_model = new simgrid::surf::NetworkConstantModel();
routing_model_create(NULL);
- sg_platf_host_add_cb(netcste_count_hosts);
+ simgrid::surf::hostCreatedCallbacks.connect([](simgrid::surf::Host*) {
+ host_number_int++;
+ });
sg_platf_link_add_cb(netcste_parse_nolink);
- Model *model = surf_network_model;
- xbt_dynar_push(model_list, &model);
+ simgrid::surf::Model *model = surf_network_model;
+ xbt_dynar_push(all_existing_models, &model);
}
+namespace simgrid {
+namespace surf {
+
double NetworkConstantModel::shareResources(double /*now*/)
{
NetworkConstantAction *action = NULL;
return m_suspended;
}
+}
+}
#include "network_interface.hpp"
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
+
class XBT_PRIVATE NetworkConstantModel;
class XBT_PRIVATE NetworkConstantAction;
int m_suspended;
};
+}
+}
+
#endif /* NETWORK_CONSTANT_HPP_ */
/* 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 <algorithm>
+#include <utility>
+
#include "network_ib.hpp"
#include "simgrid/sg_config.h"
#include "maxmin_private.hpp"
+#include "src/surf/host_interface.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_network);
-static void IB_create_host_callback(sg_platf_host_cbarg_t t){
+static void IB_create_host_callback(simgrid::surf::Host* host){
+ using namespace simgrid::surf;
static int id=0;
// pour t->id -> rajouter une nouvelle struct dans le dict, pour stocker les comms actives
IBNode* act = new IBNode(id);
id++;
- xbt_dict_set(((NetworkIBModel*)surf_network_model)->active_nodes, t->id, act, NULL);
+ xbt_dict_set(((NetworkIBModel*)surf_network_model)->active_nodes,
+ host->getName(), act, NULL);
}
-static void IB_action_state_changed_callback(NetworkAction *action, e_surf_action_state_t statein, e_surf_action_state_t stateout){
+static void IB_action_state_changed_callback(
+ simgrid::surf::NetworkAction *action,
+ e_surf_action_state_t statein, e_surf_action_state_t stateout)
+{
+ using namespace simgrid::surf;
if(statein!=SURF_ACTION_RUNNING|| stateout!=SURF_ACTION_DONE)
return;
std::pair<IBNode*,IBNode*> pair = ((NetworkIBModel*)surf_network_model)->active_comms[action];
}
-static void IB_action_init_callback(NetworkAction *action,RoutingEdge *src, RoutingEdge *dst, double size, double rate){
+static void IB_action_init_callback(
+ simgrid::surf::NetworkAction *action, simgrid::surf::RoutingEdge *src, simgrid::surf::RoutingEdge *dst,
+ double size, double rate)
+{
+ using namespace simgrid::surf;
if(((NetworkIBModel*)surf_network_model)->active_nodes==NULL)
xbt_die("IB comm added, without any node connected !");
xbt_die("could not find dst node active comms !");
// act_dst->rate=rate;
- ((NetworkIBModel*)surf_network_model)->active_comms[action]=make_pair(act_src, act_dst);
+ ((NetworkIBModel*)surf_network_model)->active_comms[action]=std::make_pair(act_src, act_dst);
//post the action in the second dist, to retrieve in the other callback
XBT_DEBUG("IB callback - action %p init", action);
}
-
-
/*********
* Model *
*********/
/* } */
void surf_network_model_init_IB(void)
{
+ using simgrid::surf::networkActionStateChangedCallbacks;
+ using simgrid::surf::networkCommunicateCallbacks;
+ using simgrid::surf::hostCreatedCallbacks;
if (surf_network_model)
return;
- surf_network_model = new NetworkIBModel();
+ surf_network_model = new simgrid::surf::NetworkIBModel();
net_define_callbacks();
- xbt_dynar_push(model_list, &surf_network_model);
- surf_callback_connect(networkActionStateChangedCallbacks, IB_action_state_changed_callback);
- surf_callback_connect(networkCommunicateCallbacks, IB_action_init_callback);
+ xbt_dynar_push(all_existing_models, &surf_network_model);
+ surf_callback_connect(networkActionStateChangedCallbacks,
+ IB_action_state_changed_callback);
+ surf_callback_connect(networkCommunicateCallbacks,
+ IB_action_init_callback);
- sg_platf_host_add_cb(IB_create_host_callback);
+ hostCreatedCallbacks.connect(IB_create_host_callback);
xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
}
+namespace simgrid {
+namespace surf {
+
NetworkIBModel::NetworkIBModel()
: NetworkSmpiModel() {
m_haveGap=false;
my_penalty_out = num_comm_out * Bs;
}
- max_penalty_out = max(max_penalty_out,my_penalty_out);
+ max_penalty_out = std::max(max_penalty_out,my_penalty_out);
}
for (std::vector<ActiveComm*>::iterator it= root->ActiveCommsUp.begin(); it != root->ActiveCommsUp.end(); ++it) {
* Be
* (*it)->destination->ActiveCommsDown.size();//number of different nodes sending to dest
- double penalty=max(my_penalty_in,max_penalty_out);
+ double penalty = std::max(my_penalty_in,max_penalty_out);
double rate_before_update = (*it)->action->getBound();
//save initial rate of the action
delete comm;
xbt_free(updated);
}
+
+}
+}
#include <xbt/base.h>
#include "network_smpi.hpp"
+
+namespace simgrid {
+namespace surf {
+
class XBT_PRIVATE IBNode;
class XBT_PRIVATE ActiveComm{
};
+}
+}
+
#endif
/* 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 <algorithm>
+
#include "network_interface.hpp"
#include "simgrid/sg_config.h"
/*********
* C API *
*********/
-SG_BEGIN_DECL()
+
+extern "C" {
+
const char* sg_link_name(Link *link) {
return link->getName();
}
}
int sg_link_is_shared(Link *link){
- return link->isShared();
+ return link->sharingPolicy();
}
double sg_link_bandwidth(Link *link){
return link->getBandwidth();
void sg_link_exit(void) {
Link::linksExit();
}
-SG_END_DECL()
+
+}
+
/*****************
* List of links *
*****************/
+namespace simgrid {
+namespace surf {
+
boost::unordered_map<std::string,Link *> *Link::links = new boost::unordered_map<std::string,Link *>();
Link *Link::byName(const char* name) {
Link * res = NULL;
delete (kv.second);
delete links;
}
+
/*************
* Callbacks *
*************/
-surf_callback(void, Link*) networkLinkCreatedCallbacks;
-surf_callback(void, Link*) networkLinkDestructedCallbacks;
-surf_callback(void, Link*, e_surf_resource_state_t, e_surf_resource_state_t) networkLinkStateChangedCallbacks;
-surf_callback(void, NetworkAction*, e_surf_action_state_t, e_surf_action_state_t) networkActionStateChangedCallbacks;
-surf_callback(void, NetworkAction*, RoutingEdge *src, RoutingEdge *dst, double size, double rate) networkCommunicateCallbacks;
+surf_callback(void, simgrid::surf::Link*) networkLinkCreatedCallbacks;
+surf_callback(void, simgrid::surf::Link*) networkLinkDestructedCallbacks;
+surf_callback(void, simgrid::surf::Link*, e_surf_resource_state_t, e_surf_resource_state_t) networkLinkStateChangedCallbacks;
+surf_callback(void, simgrid::surf::NetworkAction*, e_surf_action_state_t, e_surf_action_state_t) networkActionStateChangedCallbacks;
+surf_callback(void, simgrid::surf::NetworkAction*, simgrid::surf::RoutingEdge *src, simgrid::surf::RoutingEdge *dst, double size, double rate) networkCommunicateCallbacks;
+
+}
+}
void netlink_parse_init(sg_platf_link_cbarg_t link){
if (link->policy == SURF_LINK_FULLDUPLEX) {
* Model *
*********/
-NetworkModel *surf_network_model = NULL;
+simgrid::surf::NetworkModel *surf_network_model = NULL;
+
+namespace simgrid {
+namespace surf {
double NetworkModel::latencyFactor(double /*size*/) {
return sg_latency_factor;
}
#endif
if (action->m_latency > 0) {
- minRes = (minRes < 0) ? action->m_latency : min(minRes, action->m_latency);
+ minRes = (minRes < 0) ? action->m_latency : std::min(minRes, action->m_latency);
}
}
* Resource *
************/
-Link::Link(NetworkModel *model, const char *name, xbt_dict_t props)
+Link::Link(simgrid::surf::NetworkModel *model, const char *name, xbt_dict_t props)
: Resource(model, name, props)
-, p_latEvent(NULL)
{
- surf_callback_emit(networkLinkCreatedCallbacks, this);
links->insert({name, this});
XBT_DEBUG("Create link '%s'",name);
}
-Link::Link(NetworkModel *model, const char *name, xbt_dict_t props,
+Link::Link(simgrid::surf::NetworkModel *model, const char *name, xbt_dict_t props,
lmm_constraint_t constraint,
tmgr_history_t history,
tmgr_trace_t state_trace)
-: Resource(model, name, props, constraint),
- p_latEvent(NULL)
+: Resource(model, name, props, constraint)
{
- surf_callback_emit(networkLinkCreatedCallbacks, this);
if (state_trace)
p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, this);
double Link::getBandwidth()
{
- return p_power.peak * p_power.scale;
+ return p_speed.peak * p_speed.scale;
}
-bool Link::isShared()
+int Link::sharingPolicy()
{
- return lmm_constraint_is_shared(getConstraint());
+ return lmm_constraint_sharing_policy(getConstraint());
}
void Link::setState(e_surf_resource_state_t state){
surf_callback_emit(networkLinkStateChangedCallbacks, this, old, state);
}
-
-
/**********
* Action *
**********/
surf_callback_emit(networkActionStateChangedCallbacks, this, old, state);
}
+}
+}
+
#endif /* NETWORK_INTERFACE_CPP_ */
/***********
* Classes *
***********/
+
+namespace simgrid {
+namespace surf {
+
class NetworkModel;
class NetworkAction;
* @brief Callbacks handler which emits the callbacks after Link creation
* @details Callback functions have the following signature: `void(Link*)`
*/
-XBT_PUBLIC_DATA( surf_callback(void, Link*)) networkLinkCreatedCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, simgrid::surf::Link*)) networkLinkCreatedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emits the callbacks after Link destruction
* @details Callback functions have the following signature: `void(Link*)`
*/
-XBT_PUBLIC_DATA( surf_callback(void, Link*)) networkLinkDestructedCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, simgrid::surf::Link*)) networkLinkDestructedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emits the callbacks after Link State changed
* @details Callback functions have the following signature: `void(LinkAction *action, e_surf_resource_state_t old, e_surf_resource_state_t current)`
*/
-XBT_PUBLIC_DATA( surf_callback(void, Link*, e_surf_resource_state_t, e_surf_resource_state_t)) networkLinkStateChangedCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, simgrid::surf::Link*, e_surf_resource_state_t, e_surf_resource_state_t)) networkLinkStateChangedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emits the callbacks after NetworkAction State changed
* @details Callback functions have the following signature: `void(NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t current)`
*/
-XBT_PUBLIC_DATA( surf_callback(void, NetworkAction*, e_surf_action_state_t, e_surf_action_state_t)) networkActionStateChangedCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, simgrid::surf::NetworkAction*, e_surf_action_state_t, e_surf_action_state_t)) networkActionStateChangedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emits the callbacks after communication created
* @details Callback functions have the following signature: `void(NetworkAction *action, RoutingEdge *src, RoutingEdge *dst, double size, double rate)`
*/
-XBT_PUBLIC_DATA( surf_callback(void, NetworkAction*, RoutingEdge *src, RoutingEdge *dst, double size, double rate)) networkCommunicateCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, simgrid::surf::NetworkAction*, simgrid::surf::RoutingEdge *src, simgrid::surf::RoutingEdge *dst, double size, double rate)) networkCommunicateCallbacks;
+
+}
+}
/*********
* Tools *
/*********
* Model *
*********/
+
+namespace simgrid {
+namespace surf {
+
/** @ingroup SURF_network_interface
* @brief SURF network model interface class
* @details A model is an object which handles the interactions between its Resources and its Actions
e_surf_link_sharing_policy_t policy,
xbt_dict_t properties)=0;
- virtual void gapAppend(double /*size*/, const Link* /*link*/, NetworkAction * /*action*/) {};
-
/**
* @brief Create a communication between two hosts.
* @details It makes calls to the routing part, and execute the communication
*/
virtual double bandwidthConstraint(double rate, double bound, double size);
double shareResourcesFull(double now);
- bool m_haveGap = false;
};
/************
* @brief SURF network link interface class
* @details A Link represents the link between two [hosts](\ref Host)
*/
-class Link : public Resource {
+class Link : public simgrid::surf::Resource {
public:
/**
* @brief Link constructor
* @param name The name of the Link
* @param props Dictionary of properties associated to this Link
*/
- Link(NetworkModel *model, const char *name, xbt_dict_t props);
+ Link(simgrid::surf::NetworkModel *model, const char *name, xbt_dict_t props);
/**
* @brief Link constructor
* @param history [TODO]
* @param state_trace [TODO]
*/
- Link(NetworkModel *model, const char *name, xbt_dict_t props,
+ Link(simgrid::surf::NetworkModel *model, const char *name, xbt_dict_t props,
lmm_constraint_t constraint,
tmgr_history_t history,
tmgr_trace_t state_trace);
/** @brief Update the latency in seconds of current Link */
virtual void updateLatency(double value, double date=surf_get_clock())=0;
- /**
- * @brief Check if the Link is shared
- *
- * @return true if the current NetwokrLink is shared, false otherwise
- */
- virtual bool isShared();
+ /** @brief The sharing policy is a @{link #e_surf_link_sharing_policy_t} (0: FATPIPE, 1: SHARED, 2: FULLDUPLEX) */
+ virtual int sharingPolicy();
/** @brief Check if the Link is used */
bool isUsed();
/* Using this object with the public part of
model does not make sense */
- double m_latCurrent;
- tmgr_trace_event_t p_latEvent;
+ double m_latCurrent = 0;
+ tmgr_trace_event_t p_latEvent = NULL;
/* LMM */
tmgr_trace_event_t p_stateEvent = NULL;
- s_surf_metric_t p_power;
+ s_surf_metric_t p_speed;
/* User data */
public:
* @brief SURF network action interface class
* @details A NetworkAction represents a communication between two [hosts](\ref Host)
*/
-class NetworkAction : public Action {
+class NetworkAction : public simgrid::surf::Action {
public:
/** @brief Constructor
*
* @param cost The cost of this NetworkAction in [TODO]
* @param failed [description]
*/
- NetworkAction(Model *model, double cost, bool failed)
- : Action(model, cost, failed) {}
+ NetworkAction(simgrid::surf::Model *model, double cost, bool failed)
+ : simgrid::surf::Action(model, cost, failed) {}
/**
* @brief NetworkAction constructor
* @param var The lmm variable associated to this Action if it is part of a
* LMM component
*/
- NetworkAction(Model *model, double cost, bool failed, lmm_variable_t var)
- : Action(model, cost, failed, var) {};
+ NetworkAction(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var)
+ : simgrid::surf::Action(model, cost, failed, var) {};
void setState(e_surf_action_state_t state);
double m_weight;
double m_rate;
const char* p_senderLinkName;
- double m_senderGap;
double m_senderSize;
xbt_fifo_item_t p_senderFifoItem;
#ifdef HAVE_LATENCY_BOUND_TRACKING
};
+}
+}
+
#endif /* SURF_NETWORK_INTERFACE_HPP_ */
/* 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 "network_ns3.hpp"
-#include "surf_private.h"
+#include "src/surf/network_ns3.hpp"
+#include "src/surf/surf_private.h"
+#include "src/surf/host_interface.hpp"
#include "simgrid/sg_config.h"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(ns3);
xbt_free(temp);
}
-static void parse_ns3_add_host(sg_platf_host_cbarg_t host)
+static void simgrid_ns3_add_host(simgrid::surf::Host* host)
{
- XBT_DEBUG("NS3_ADD_HOST '%s'",host->id);
+ const char* id = host->getName();
+ XBT_DEBUG("NS3_ADD_HOST '%s'", id);
xbt_lib_set(host_lib,
- host->id,
+ id,
NS3_HOST_LEVEL,
- ns3_add_host(host->id)
+ ns3_add_host(id)
);
}
link->properties);
}
-static void parse_ns3_add_router(sg_platf_router_cbarg_t router)
+static void simgrid_ns3_add_router(simgrid::surf::RoutingEdge* router)
{
- XBT_DEBUG("NS3_ADD_ROUTER '%s'",router->id);
+ const char* router_id = router->getName();
+ XBT_DEBUG("NS3_ADD_ROUTER '%s'",router_id);
xbt_lib_set(as_router_lib,
- router->id,
+ router_id,
NS3_ASR_LEVEL,
- ns3_add_router(router->id)
+ ns3_add_router(router_id)
);
}
-static void parse_ns3_add_AS(sg_platf_AS_cbarg_t AS)
+static void parse_ns3_add_AS(simgrid::surf::As* as)
{
- XBT_DEBUG("NS3_ADD_AS '%s'",AS->id);
- xbt_lib_set(as_router_lib,
- AS->id,
- NS3_ASR_LEVEL,
- ns3_add_AS(AS->id)
- );
+ const char* as_id = as->p_name;
+ XBT_DEBUG("NS3_ADD_AS '%s'", as_id);
+ xbt_lib_set(as_router_lib, as_id, NS3_ASR_LEVEL, ns3_add_AS(as_id) );
}
static void parse_ns3_add_cluster(sg_platf_cluster_cbarg_t cluster)
xbt_die("There is no routes!");
XBT_DEBUG("Have get_onelink_routes, found %ld routes",onelink_routes->used);
//save them in trace file
- Onelink *onelink;
+ simgrid::surf::Onelink *onelink;
unsigned int iter;
xbt_dynar_foreach(onelink_routes, iter, onelink) {
char *src = onelink->p_src->getName();
char *dst = onelink->p_dst->getName();
- NetworkNS3Link *link = static_cast<NetworkNS3Link *>(onelink->p_link);
+ simgrid::surf::NetworkNS3Link *link =
+ static_cast<simgrid::surf::NetworkNS3Link *>(onelink->p_link);
if (strcmp(src,dst) && link->m_created){
XBT_DEBUG("Route from '%s' to '%s' with link '%s'", src, dst, link->getName());
static void define_callbacks_ns3(void)
{
- sg_platf_host_add_cb (&parse_ns3_add_host);
- sg_platf_router_add_cb (&parse_ns3_add_router);
+ simgrid::surf::hostCreatedCallbacks.connect(simgrid_ns3_add_host);
+ simgrid::surf::routingEdgeCreatedCallbacks.connect(simgrid_ns3_add_router);
sg_platf_link_add_cb (&parse_ns3_add_link);
sg_platf_cluster_add_cb (&parse_ns3_add_cluster);
- sg_platf_AS_begin_add_cb (&parse_ns3_add_AS);
+ simgrid::surf::asCreatedCallbacks.connect(parse_ns3_add_AS);
sg_platf_postparse_add_cb(&create_ns3_topology); //get_one_link_routes
sg_platf_postparse_add_cb(&parse_ns3_end_platform); //InitializeRoutes
}
*********/
static void free_ns3_link(void * elmts)
{
- delete static_cast<NetworkNS3Link*>(elmts);
+ delete static_cast<simgrid::surf::NetworkNS3Link*>(elmts);
}
static void free_ns3_host(void * elmts)
if (surf_network_model)
return;
- surf_network_model = new NetworkNS3Model();
+ surf_network_model = new simgrid::surf::NetworkNS3Model();
- xbt_dynar_push(model_list, &surf_network_model);
+ xbt_dynar_push(all_existing_models, &surf_network_model);
}
+namespace simgrid {
+namespace surf {
+
NetworkNS3Model::NetworkNS3Model() : NetworkModel() {
if (ns3_initialize(xbt_cfg_get_string(_sg_cfg_set, "ns3/TcpModel"))) {
xbt_die("Impossible to initialize NS3 interface");
XBT_INFO("The NS3 network model doesn't support latency state traces");
if (state_trace)
XBT_INFO("The NS3 network model doesn't support link state traces");
- return new NetworkNS3Link(this, name, properties, bw_initial, lat_initial);
+ Link* link = new NetworkNS3Link(this, name, properties, bw_initial, lat_initial);
+ surf_callback_emit(networkLinkCreatedCallbacks, link);
+ return link;
}
xbt_dynar_t NetworkNS3Model::getRoute(RoutingEdge *src, RoutingEdge *dst)
{
m_refcount--;
if (!m_refcount) {
- if (actionHook::is_linked())
+ if (action_hook.is_linked())
p_stateSet->erase(p_stateSet->iterator_to(*this));
XBT_DEBUG ("Removing action %p", this);
delete this;
}
return 0;
}
+
+}
+}
#include <xbt/base.h>
#include "network_interface.hpp"
-#include "surf/ns3/ns3_interface.h"
+#include "src/surf/ns3/ns3_interface.h"
#ifndef NETWORK_NS3_HPP_
#define NETWORK_NS3_HPP_
/***********
* Classes *
***********/
+
+namespace simgrid {
+namespace surf {
+
class XBT_PRIVATE NetworkNS3Model;
class XBT_PRIVATE NetworkNS3Action;
+}
+}
+
/*********
* Tools *
*********/
* Model *
*********/
+namespace simgrid {
+namespace surf {
+
class NetworkNS3Model : public NetworkModel {
public:
NetworkNS3Model();
RoutingEdge *p_dstElm;
};
+}
+}
#endif /* NETWORK_NS3_HPP_ */
/* 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 <cstddef>
+
+#include <algorithm>
+
+#include <xbt/log.h>
+
#include "network_smpi.hpp"
#include "simgrid/sg_config.h"
if (surf_network_model)
return;
- surf_network_model = new NetworkSmpiModel();
+ surf_network_model = new simgrid::surf::NetworkSmpiModel();
net_define_callbacks();
- xbt_dynar_push(model_list, &surf_network_model);
+ xbt_dynar_push(all_existing_models, &surf_network_model);
xbt_cfg_setdefault_double(_sg_cfg_set, "network/sender_gap", 10e-6);
xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
}
+namespace simgrid {
+namespace surf {
+
NetworkSmpiModel::NetworkSmpiModel()
: NetworkCm02Model() {
m_haveGap=true;
}
}
-void NetworkSmpiModel::gapAppend(double size, Link* link, NetworkAction *action)
+void NetworkSmpiModel::gapAppend(double size, Link* link, NetworkAction *act)
{
const char *src = link->getName();
xbt_fifo_t fifo;
+ NetworkCm02Action *action= static_cast<NetworkCm02Action*>(act);
if (sg_sender_gap > 0.0) {
if (!gap_lookup) {
double NetworkSmpiModel::bandwidthConstraint(double rate, double bound, double size)
{
- return rate < 0 ? bound : min(bound, rate * bandwidthFactor(size));
+ return rate < 0 ? bound : std::min(bound, rate * bandwidthFactor(size));
}
/************
/**********
* Action *
**********/
+
+}
+}
#include "network_cm02.hpp"
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
NetworkSmpiModel();
~NetworkSmpiModel();
- using NetworkModel::gapAppend; // Explicit about overloaded method (silence Woverloaded-virtual from clang)
+ using NetworkCm02Model::gapAppend; // Explicit about overloaded method (silence Woverloaded-virtual from clang)
void gapAppend(double size, Link* link, NetworkAction *action);
void gapRemove(Action *action);
double latencyFactor(double size);
* Action *
**********/
-
-
+}
+}
/* 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 "surf/ns3/ns3_simulator.h"
+#include "src/surf/ns3/ns3_simulator.h"
#include "xbt/dict.h"
#include "xbt/log.h"
#include "xbt/sysdep.h"
#ifdef __cplusplus
+#include <cstdint>
+
#include "ns3/core-module.h"
#include "my-point-to-point-helper.h"
#include "ns3/inet-socket-address.h"
#include "ns3/tcp-socket-factory.h"
-using namespace ns3;
-using namespace std;
-
struct MySocket{
- uint32_t bufferedBytes;
- uint32_t sentBytes;
- uint32_t remaining;
- uint32_t totalBytes;
+ std::uint32_t bufferedBytes;
+ std::uint32_t sentBytes;
+ std::uint32_t remaining;
+ std::uint32_t totalBytes;
char finished;
void* action;
};
public:
NS3Sim();
~NS3Sim();
- void create_flow_NS3(Ptr<Node> src,
- Ptr<Node> dst,
- uint16_t port_number,
+ void create_flow_NS3(ns3::Ptr<ns3::Node> src,
+ ns3::Ptr<ns3::Node> dst,
+ std::uint16_t port_number,
double start,
const char *addr,
- uint32_t TotalBytes,
+ std::uint32_t TotalBytes,
void * action);
void simulator_start(double min);
void* get_action_from_socket(void *socket);
#include "energy.hpp"
#include "../cpu_cas01.hpp"
+#include "../virtual_machine.hpp"
/** @addtogroup SURF_plugin_energy
and then use the following function to retrieve the consumption of a given host: #MSG_host_get_consumed_energy().
*/
-XBT_LOG_EXTERNAL_CATEGORY(surf_kernel);
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_energy, surf,
"Logging specific to the SURF energy plugin");
-std::map<Cpu*, CpuEnergy*> *surf_energy=NULL;
+namespace simgrid {
+namespace energy {
-static void energyCpuCreatedCallback(Cpu *cpu){
- (*surf_energy)[cpu] = new CpuEnergy(cpu);
-}
+std::map<simgrid::surf::Host*, HostEnergy*> *surf_energy = NULL;
-static void update_consumption_running(Cpu *cpu, CpuEnergy *cpu_energy) {
- double cpu_load = lmm_constraint_get_usage(cpu->getConstraint()) / cpu->m_powerPeak;
- double start_time = cpu_energy->last_updated;
- double finish_time = surf_get_clock();
+}
+}
- double previous_energy = cpu_energy->total_energy;
- double energy_this_step = cpu_energy->getCurrentWattsValue(cpu_load)*(finish_time-start_time);
+using simgrid::energy::HostEnergy;
+using simgrid::energy::surf_energy;
- cpu_energy->total_energy = previous_energy + energy_this_step;
- cpu_energy->last_updated = finish_time;
+static void energyHostCreatedCallback(simgrid::surf::Host *host){
+ (*surf_energy)[host] = new HostEnergy(host);
+}
- XBT_DEBUG("[cpu_update_energy] period=[%.2f-%.2f]; current power peak=%.0E flop/s; consumption change: %.2f J -> %.2f J",
- start_time, finish_time, cpu->m_powerPeak, previous_energy, energy_this_step);
+static void energyVMCreatedCallback(simgrid::surf::VirtualMachine* vm) {
+ std::map<simgrid::surf::Host*, HostEnergy*>::iterator host_energy_it = surf_energy->find(vm->p_subWs);
+ xbt_assert(host_energy_it != surf_energy->end(), "The host is not in surf_energy.");
+ (*surf_energy)[vm] = host_energy_it->second;
+ host_energy_it->second->ref(); // protect the HostEnergy from getting deleted too early
}
-static void update_consumption_off(Cpu *cpu, CpuEnergy *cpu_energy) {
- double start_time = cpu_energy->last_updated;
+
+/* Computes the consumption so far. Called lazily on need. */
+static void update_consumption(simgrid::surf::Host *host, HostEnergy *host_energy) {
+ double cpu_load = lmm_constraint_get_usage(host->p_cpu->getConstraint()) / host->p_cpu->m_speedPeak;
+ double start_time = host_energy->last_updated;
double finish_time = surf_get_clock();
- double previous_energy = cpu_energy->total_energy;
- double energy_this_step = cpu_energy->watts_off*(finish_time-start_time);
+ double previous_energy = host_energy->total_energy;
+
+ double instantaneous_consumption;
+ if (host->getState() == SURF_RESOURCE_OFF)
+ instantaneous_consumption = host_energy->watts_off;
+ else
+ instantaneous_consumption = host_energy->getCurrentWattsValue(cpu_load);
+
+ double energy_this_step = instantaneous_consumption*(finish_time-start_time);
- cpu_energy->total_energy = previous_energy + energy_this_step;
- cpu_energy->last_updated = finish_time;
+ host_energy->total_energy = previous_energy + energy_this_step;
+ host_energy->last_updated = finish_time;
- XBT_DEBUG("[cpu_update_energy] off period=[%.2f-%.2f]; consumption change: %.2f J -> %.2f J",
- start_time, finish_time, previous_energy, energy_this_step);
+ XBT_DEBUG("[cpu_update_energy] period=[%.2f-%.2f]; current power peak=%.0E flop/s; consumption change: %.2f J -> %.2f J",
+ start_time, finish_time, host->p_cpu->m_speedPeak, previous_energy, energy_this_step);
}
-static void energyCpuDestructedCallback(Cpu *cpu){
- std::map<Cpu*, CpuEnergy*>::iterator cpu_energy_it = surf_energy->find(cpu);
- xbt_assert(cpu_energy_it != surf_energy->end(), "The cpu is not in surf_energy.");
+static void energyHostDestructedCallback(simgrid::surf::Host *host){
+ std::map<simgrid::surf::Host*, HostEnergy*>::iterator host_energy_it = surf_energy->find(host);
+ xbt_assert(host_energy_it != surf_energy->end(), "The host is not in surf_energy.");
- CpuEnergy *cpu_energy = cpu_energy_it->second;
- if (cpu->getState() == SURF_RESOURCE_OFF)
- update_consumption_off(cpu, cpu_energy);
- else
- update_consumption_running(cpu, cpu_energy);
+ HostEnergy *host_energy = host_energy_it->second;
+ update_consumption(host, host_energy);
- XBT_INFO("Total energy of host %s: %f Joules", cpu->getName(), cpu_energy->getConsumedEnergy());
- delete cpu_energy_it->second;
- surf_energy->erase(cpu_energy_it);
+ if (host_energy_it->second->refcount == 1) // Don't display anything for virtual CPUs
+ XBT_INFO("Total energy of host %s: %f Joules", host->getName(), host_energy->getConsumedEnergy());
+ host_energy_it->second->unref();
+ surf_energy->erase(host_energy_it);
}
-static void energyCpuActionStateChangedCallback(CpuAction *action, e_surf_action_state_t old, e_surf_action_state_t cur){
- Cpu *cpu = getActionCpu(action);
- CpuEnergy *cpu_energy = (*surf_energy)[cpu];
+static void energyCpuActionStateChangedCallback(
+ simgrid::surf::CpuAction *action, e_surf_action_state_t old, e_surf_action_state_t cur)
+{
+ const char *name = getActionCpu(action)->getName();
+ simgrid::surf::Host *host = static_cast<simgrid::surf::Host*>(surf_host_resource_priv(sg_host_by_name(name)));
- if(cpu_energy->last_updated < surf_get_clock()) {
- update_consumption_running(cpu, cpu_energy);
- }
+ HostEnergy *host_energy = (*surf_energy)[host];
+
+ if(host_energy->last_updated < surf_get_clock())
+ update_consumption(host, host_energy);
}
-static void energyStateChangedCallback(Cpu *cpu, e_surf_resource_state_t oldState, e_surf_resource_state_t newState){
- CpuEnergy *cpu_energy = (*surf_energy)[cpu];
+static void energyStateChangedCallback(simgrid::surf::Host *host, e_surf_resource_state_t oldState, e_surf_resource_state_t newState)
+{
+ HostEnergy *host_energy = (*surf_energy)[host];
- if(cpu_energy->last_updated < surf_get_clock()) {
- if (oldState == SURF_RESOURCE_OFF)
- update_consumption_off(cpu, cpu_energy);
- else
- update_consumption_running(cpu, cpu_energy);
- }
+ if(host_energy->last_updated < surf_get_clock())
+ update_consumption(host, host_energy);
}
static void sg_energy_plugin_exit()
* \details Enable energy plugin to get joules consumption of each cpu. You should call this function before #MSG_init().
*/
void sg_energy_plugin_init() {
- if (surf_energy == NULL) {
- surf_energy = new std::map<Cpu*, CpuEnergy*>();
- surf_callback_connect(cpuCreatedCallbacks, energyCpuCreatedCallback);
- surf_callback_connect(cpuDestructedCallbacks, energyCpuDestructedCallback);
- surf_callback_connect(cpuActionStateChangedCallbacks, energyCpuActionStateChangedCallback);
- surf_callback_connect(surfExitCallbacks, sg_energy_plugin_exit);
- surf_callback_connect(cpuStateChangedCallbacks, energyStateChangedCallback);
+ if (simgrid::energy::surf_energy == NULL) {
+ simgrid::energy::surf_energy =
+ new std::map<simgrid::surf::Host*, simgrid::energy::HostEnergy*>();
+ surf_callback_connect(simgrid::surf::hostCreatedCallbacks, energyHostCreatedCallback);
+ surf_callback_connect(simgrid::surf::VMCreatedCallbacks, energyVMCreatedCallback);
+ surf_callback_connect(simgrid::surf::hostDestructedCallbacks, energyHostDestructedCallback);
+ surf_callback_connect(simgrid::surf::cpuActionStateChangedCallbacks, energyCpuActionStateChangedCallback);
+ surf_callback_connect(simgrid::surf::surfExitCallbacks, sg_energy_plugin_exit);
+ surf_callback_connect(simgrid::surf::hostStateChangedCallbacks, energyStateChangedCallback);
}
}
+namespace simgrid {
+namespace energy {
+
/**
*
*/
-CpuEnergy::CpuEnergy(Cpu *ptr)
+HostEnergy::HostEnergy(simgrid::surf::Host *ptr)
{
- cpu = ptr;
+ host = ptr;
total_energy = 0;
power_range_watts_list = getWattsRangeList();
last_updated = surf_get_clock();
- if (cpu->getProperties() != NULL) {
- char* off_power_str = (char*)xbt_dict_get_or_null(cpu->getProperties(), "watt_off");
+ if (host->getProperties() != NULL) {
+ char* off_power_str = (char*)xbt_dict_get_or_null(host->getProperties(), "watt_off");
if (off_power_str != NULL)
watts_off = atof(off_power_str);
else
}
-CpuEnergy::~CpuEnergy(){
+HostEnergy::~HostEnergy(){
unsigned int iter;
xbt_dynar_t power_tuple = NULL;
xbt_dynar_foreach(power_range_watts_list, iter, power_tuple)
}
-double CpuEnergy::getWattMinAt(int pstate) {
+double HostEnergy::getWattMinAt(int pstate) {
xbt_dynar_t power_range_list = power_range_watts_list;
- xbt_assert(power_range_watts_list, "No power range properties specified for host %s", cpu->getName());
- xbt_dynar_t current_power_values = xbt_dynar_get_as(power_range_list, static_cast<CpuCas01*>(cpu)->getPState(), xbt_dynar_t);
+ xbt_assert(power_range_watts_list, "No power range properties specified for host %s", host->getName());
+ xbt_dynar_t current_power_values = xbt_dynar_get_as(power_range_list, static_cast<simgrid::surf::CpuCas01*>(host->p_cpu)->getPState(), xbt_dynar_t);
double min_power = xbt_dynar_get_as(current_power_values, 0, double);
return min_power;
}
-double CpuEnergy::getWattMaxAt(int pstate) {
+double HostEnergy::getWattMaxAt(int pstate) {
xbt_dynar_t power_range_list = power_range_watts_list;
- xbt_assert(power_range_watts_list, "No power range properties specified for host %s", cpu->getName());
- xbt_dynar_t current_power_values = xbt_dynar_get_as(power_range_list, static_cast<CpuCas01*>(cpu)->getPState(), xbt_dynar_t);
+ xbt_assert(power_range_watts_list, "No power range properties specified for host %s", host->getName());
+ xbt_dynar_t current_power_values = xbt_dynar_get_as(power_range_list, static_cast<simgrid::surf::CpuCas01*>(host->p_cpu)->getPState(), xbt_dynar_t);
double max_power = xbt_dynar_get_as(current_power_values, 1, double);
return max_power;
}
* Computes the power consumed by the host according to the current pstate and processor load
*
*/
-double CpuEnergy::getCurrentWattsValue(double cpu_load)
+double HostEnergy::getCurrentWattsValue(double cpu_load)
{
xbt_dynar_t power_range_list = power_range_watts_list;
- xbt_assert(power_range_watts_list, "No power range properties specified for host %s", cpu->getName());
+ xbt_assert(power_range_watts_list, "No power range properties specified for host %s", host->getName());
/* retrieve the power values associated with the current pstate */
- xbt_dynar_t current_power_values = xbt_dynar_get_as(power_range_list, static_cast<CpuCas01*>(cpu)->getPState(), xbt_dynar_t);
+ xbt_dynar_t current_power_values = xbt_dynar_get_as( power_range_list,
+ static_cast<simgrid::surf::CpuCas01*>(host->p_cpu)->getPState(),
+ xbt_dynar_t);
/* min_power corresponds to the idle power (cpu load = 0) */
/* max_power is the power consumed at 100% cpu load */
return current_power;
}
-double CpuEnergy::getConsumedEnergy()
+double HostEnergy::getConsumedEnergy()
{
- if(last_updated < surf_get_clock()) {
- if (cpu->getState() == SURF_RESOURCE_OFF)
- update_consumption_off(cpu, this);
- else
- update_consumption_running(cpu, this);
- }
- return total_energy;
+
+ if(last_updated < surf_get_clock())
+ update_consumption(host, this);
+ return total_energy;
+
}
-xbt_dynar_t CpuEnergy::getWattsRangeList()
+xbt_dynar_t HostEnergy::getWattsRangeList()
{
xbt_dynar_t power_range_list;
xbt_dynar_t power_tuple;
xbt_dynar_t current_power_values;
double min_power, max_power;
- if (cpu->getProperties() == NULL)
+ if (host->getProperties() == NULL)
return NULL;
- char* all_power_values_str = (char*)xbt_dict_get_or_null(cpu->getProperties(), "watt_per_state");
+ char* all_power_values_str = (char*)xbt_dict_get_or_null(host->getProperties(), "watt_per_state");
if (all_power_values_str == NULL)
return NULL;
current_power_values = xbt_str_split(xbt_dynar_get_as(all_power_values, i, char*), ":");
xbt_assert(xbt_dynar_length(current_power_values) > 1,
"Power properties incorrectly defined - could not retrieve min and max power values for host %s",
- cpu->getName());
+ host->getName());
/* min_power corresponds to the idle power (cpu load = 0) */
/* max_power is the power consumed at 100% cpu load */
xbt_dynar_free(&all_power_values);
return power_range_list;
}
+
+}
+}
#include <xbt/base.h>
-#include "../cpu_interface.hpp"
+#include "../host_interface.hpp"
#include <map>
-#ifndef CALLBACK_HPP_
-#define CALLBACK_HPP_
+#ifndef ENERGY_CALLBACK_HPP_
+#define ENERGY_CALLBACK_HPP_
-class XBT_PRIVATE CpuEnergy;
+namespace simgrid {
+namespace energy {
-extern XBT_PRIVATE std::map<Cpu*, CpuEnergy*> *surf_energy;
+class XBT_PRIVATE HostEnergy;
-class CpuEnergy {
+extern XBT_PRIVATE std::map<simgrid::surf::Host*, HostEnergy*> *surf_energy;
+
+class HostEnergy {
public:
- CpuEnergy(Cpu *ptr);
- ~CpuEnergy();
+ HostEnergy(simgrid::surf::Host *ptr);
+ ~HostEnergy();
double getCurrentWattsValue(double cpu_load);
double getConsumedEnergy();
double watts_off; /*< Consumption when the machine is turned off (shutdown) */
double total_energy; /*< Total energy consumed by the host */
double last_updated; /*< Timestamp of the last energy update event*/
- Cpu *cpu;
+ simgrid::surf::Host *host;
+
+ void unref() {if (--refcount == 0) delete this;}
+ void ref() {refcount++;}
+ int refcount = 1;
};
-#endif /* CALLBACK_HPP_ */
+}
+}
+
+#endif /* ENERGY_CALLBACK_HPP_ */
#include "surf/random_mgr.h"
#include "xbt/sysdep.h"
-#include "internal_config.h" /*_XBT_WIN32*/
+#include "src/internal_config.h" /*_XBT_WIN32*/
#include <math.h>
#include <stdlib.h>
+++ /dev/null
-/* 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. */
-
-#include "xbt/misc.h"
-#include "xbt/log.h"
-#include "xbt/str.h"
-#include "xbt/dict.h"
-#include "xbt/RngStream.h"
-#include "simgrid/platf_interface.h"
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_parse);
-xbt_dynar_t sg_platf_host_cb_list = NULL; // of sg_platf_host_cb_t
-xbt_dynar_t sg_platf_host_link_cb_list = NULL; // of sg_platf_host_link_cb_t
-xbt_dynar_t sg_platf_link_cb_list = NULL; // of sg_platf_link_cb_t
-xbt_dynar_t sg_platf_router_cb_list = NULL; // of sg_platf_router_cb_t
-xbt_dynar_t sg_platf_peer_cb_list = NULL; // of sg_platf_peer_cb_t
-xbt_dynar_t sg_platf_cluster_cb_list = NULL; // of sg_platf_cluster_cb_t
-xbt_dynar_t sg_platf_cabinet_cb_list = NULL; // of sg_platf_cluster_cb_t
-xbt_dynar_t sg_platf_AS_begin_cb_list = NULL; //of sg_platf_AS_begin_cb_t
-xbt_dynar_t sg_platf_AS_end_cb_list = NULL; //of void_f_void_t
-xbt_dynar_t sg_platf_postparse_cb_list = NULL; // of void_f_void_t
-xbt_dynar_t sg_platf_prop_cb_list = NULL; // of sg_platf_prop_cb_t
-
-xbt_dynar_t sg_platf_route_cb_list = NULL; // of sg_platf_route_cb_t
-xbt_dynar_t sg_platf_ASroute_cb_list = NULL; // of sg_platf_ASroute_cb_t
-xbt_dynar_t sg_platf_bypassRoute_cb_list = NULL; // of sg_platf_bypassRoute_cb_t
-xbt_dynar_t sg_platf_bypassASroute_cb_list = NULL; // of sg_platf_bypassASroute_cb_t
-
-xbt_dynar_t sg_platf_trace_cb_list = NULL;
-xbt_dynar_t sg_platf_trace_connect_cb_list = NULL;
-
-xbt_dynar_t sg_platf_storage_cb_list = NULL; // of sg_platf_storage_cb_t
-xbt_dynar_t sg_platf_storage_type_cb_list = NULL; // of sg_platf_storage_cb_t
-xbt_dynar_t sg_platf_mstorage_cb_list = NULL; // of sg_platf_storage_cb_t
-xbt_dynar_t sg_platf_mount_cb_list = NULL; // of sg_platf_storage_cb_t
-
-xbt_dynar_t sg_platf_process_cb_list = NULL;
-
-/* ***************************************** */
-/* TUTORIAL: New TAG */
-
-xbt_dynar_t sg_platf_gpu_cb_list = NULL;
-/* ***************************************** */
-
-
-static int surf_parse_models_setup_already_called;
-
-/* one RngStream for the platform, to respect some statistic rules */
-static RngStream sg_platf_rng_stream = NULL;
-
-/** Module management function: creates all internal data structures */
-void sg_platf_init(void) {
-
- //FIXME : Ugly, but useful...
- if(sg_platf_host_cb_list)
- return; //Already initialized, so do nothing...
-
- sg_platf_host_cb_list = xbt_dynar_new(sizeof(sg_platf_host_cb_t), NULL);
- sg_platf_host_link_cb_list = xbt_dynar_new(sizeof(sg_platf_host_link_cb_t), NULL);
- sg_platf_router_cb_list = xbt_dynar_new(sizeof(sg_platf_router_cb_t), NULL);
- sg_platf_link_cb_list = xbt_dynar_new(sizeof(sg_platf_link_cb_t), NULL);
- sg_platf_peer_cb_list = xbt_dynar_new(sizeof(sg_platf_peer_cb_t), NULL);
- sg_platf_cluster_cb_list = xbt_dynar_new(sizeof(sg_platf_cluster_cb_t), NULL);
- sg_platf_cabinet_cb_list = xbt_dynar_new(sizeof(sg_platf_cabinet_cb_t), NULL);
- sg_platf_postparse_cb_list = xbt_dynar_new(sizeof(sg_platf_link_cb_t),NULL);
- sg_platf_AS_begin_cb_list = xbt_dynar_new(sizeof(sg_platf_AS_cb_t),NULL);
- sg_platf_AS_end_cb_list = xbt_dynar_new(sizeof(sg_platf_AS_cb_t),NULL);
- sg_platf_prop_cb_list = xbt_dynar_new(sizeof(sg_platf_prop_cb_t),NULL);
-
- sg_platf_route_cb_list = xbt_dynar_new(sizeof(sg_platf_route_cb_t), NULL);
- sg_platf_ASroute_cb_list = xbt_dynar_new(sizeof(sg_platf_route_cb_t), NULL);
- sg_platf_bypassRoute_cb_list = xbt_dynar_new(sizeof(sg_platf_route_cb_t), NULL);
- sg_platf_bypassASroute_cb_list = xbt_dynar_new(sizeof(sg_platf_route_cb_t), NULL);
-
- sg_platf_trace_cb_list = xbt_dynar_new(sizeof(sg_platf_trace_cb_t), NULL);
- sg_platf_trace_connect_cb_list = xbt_dynar_new(sizeof(sg_platf_trace_connect_cb_t), NULL);
-
- sg_platf_storage_cb_list = xbt_dynar_new(sizeof(sg_platf_storage_cb_t), NULL);
- sg_platf_storage_type_cb_list = xbt_dynar_new(sizeof(sg_platf_storage_cb_t), NULL);
- sg_platf_mstorage_cb_list = xbt_dynar_new(sizeof(sg_platf_storage_cb_t), NULL);
- sg_platf_mount_cb_list = xbt_dynar_new(sizeof(sg_platf_storage_cb_t), NULL);
-
- sg_platf_process_cb_list = xbt_dynar_new(sizeof(sg_platf_process_cb_t), NULL);
-
- /* ***************************************** */
- /* TUTORIAL: New TAG */
-
- sg_platf_gpu_cb_list = xbt_dynar_new(sizeof(sg_platf_gpu_cb_t), NULL);
- /* ***************************************** */
-}
-/** Module management function: frees all internal data structures */
-void sg_platf_exit(void) {
- xbt_dynar_free(&sg_platf_host_cb_list);
- xbt_dynar_free(&sg_platf_host_link_cb_list);
- xbt_dynar_free(&sg_platf_router_cb_list);
- xbt_dynar_free(&sg_platf_link_cb_list);
- xbt_dynar_free(&sg_platf_postparse_cb_list);
- xbt_dynar_free(&sg_platf_peer_cb_list);
- xbt_dynar_free(&sg_platf_cluster_cb_list);
- xbt_dynar_free(&sg_platf_cabinet_cb_list);
- xbt_dynar_free(&sg_platf_AS_begin_cb_list);
- xbt_dynar_free(&sg_platf_AS_end_cb_list);
- xbt_dynar_free(&sg_platf_prop_cb_list);
-
- xbt_dynar_free(&sg_platf_trace_cb_list);
- xbt_dynar_free(&sg_platf_trace_connect_cb_list);
-
- xbt_dynar_free(&sg_platf_route_cb_list);
- xbt_dynar_free(&sg_platf_ASroute_cb_list);
- xbt_dynar_free(&sg_platf_bypassRoute_cb_list);
- xbt_dynar_free(&sg_platf_bypassASroute_cb_list);
-
- xbt_dynar_free(&sg_platf_storage_cb_list);
- xbt_dynar_free(&sg_platf_storage_type_cb_list);
- xbt_dynar_free(&sg_platf_mstorage_cb_list);
- xbt_dynar_free(&sg_platf_mount_cb_list);
-
- xbt_dynar_free(&sg_platf_process_cb_list);
-
- /* ***************************************** */
- /* TUTORIAL: New TAG */
-
- xbt_dynar_free(&sg_platf_gpu_cb_list);
-
- /* ***************************************** */
-
- /* make sure that we will reinit the models while loading the platf once reinited */
- surf_parse_models_setup_already_called = 0;
-}
-
-void sg_platf_new_host(sg_platf_host_cbarg_t h){
- unsigned int iterator;
- sg_platf_host_cb_t fun;
- xbt_dynar_foreach(sg_platf_host_cb_list, iterator, fun) {
- fun(h);
- }
-}
-void sg_platf_new_host_link(sg_platf_host_link_cbarg_t h){
- unsigned int iterator;
- sg_platf_host_link_cb_t fun;
- xbt_dynar_foreach(sg_platf_host_link_cb_list, iterator, fun) {
- fun(h);
- }
-}
-void sg_platf_new_router(sg_platf_router_cbarg_t router) {
- unsigned int iterator;
- sg_platf_router_cb_t fun;
- xbt_dynar_foreach(sg_platf_router_cb_list, iterator, fun) {
- fun(router);
- }
-}
-void sg_platf_new_link(sg_platf_link_cbarg_t link){
- unsigned int iterator;
- sg_platf_link_cb_t fun;
- xbt_dynar_foreach(sg_platf_link_cb_list, iterator, fun) {
- fun(link);
- }
-}
-
-void sg_platf_new_peer(sg_platf_peer_cbarg_t peer){
- unsigned int iterator;
- sg_platf_peer_cb_t fun;
- xbt_dynar_foreach(sg_platf_peer_cb_list, iterator, fun) {
- fun(peer);
- }
-}
-void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster){
- unsigned int iterator;
- sg_platf_cluster_cb_t fun;
- xbt_dynar_foreach(sg_platf_cluster_cb_list, iterator, fun) {
- fun(cluster);
- }
-}
-void sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet){
- unsigned int iterator;
- sg_platf_cabinet_cb_t fun;
- xbt_dynar_foreach(sg_platf_cabinet_cb_list, iterator, fun) {
- fun(cabinet);
- }
-}
-void sg_platf_new_storage(sg_platf_storage_cbarg_t storage){
- unsigned int iterator;
- sg_platf_storage_cb_t fun;
- xbt_dynar_foreach(sg_platf_storage_cb_list, iterator, fun) {
- fun(storage);
- }
-}
-void sg_platf_new_storage_type(sg_platf_storage_type_cbarg_t storage_type){
- unsigned int iterator;
- sg_platf_storage_type_cb_t fun;
- xbt_dynar_foreach(sg_platf_storage_type_cb_list, iterator, fun) {
- fun(storage_type);
- }
-}
-void sg_platf_new_mstorage(sg_platf_mstorage_cbarg_t mstorage){
- unsigned int iterator;
- sg_platf_mstorage_cb_t fun;
- xbt_dynar_foreach(sg_platf_mstorage_cb_list, iterator, fun) {
- fun(mstorage);
- }
-}
-void sg_platf_new_mount(sg_platf_mount_cbarg_t mount){
- unsigned int iterator;
- sg_platf_mount_cb_t fun;
- xbt_dynar_foreach(sg_platf_mount_cb_list, iterator, fun) {
- fun(mount);
- }
-}
-void sg_platf_new_route(sg_platf_route_cbarg_t route) {
- unsigned int iterator;
- sg_platf_route_cb_t fun;
- xbt_dynar_foreach(sg_platf_route_cb_list, iterator, fun) {
- fun(route);
- }
-}
-void sg_platf_new_ASroute(sg_platf_route_cbarg_t ASroute) {
- unsigned int iterator;
- sg_platf_route_cb_t fun;
- xbt_dynar_foreach(sg_platf_ASroute_cb_list, iterator, fun) {
- fun(ASroute);
- }
-}
-void sg_platf_new_bypassRoute(sg_platf_route_cbarg_t bypassRoute) {
- unsigned int iterator;
- sg_platf_route_cb_t fun;
- xbt_dynar_foreach(sg_platf_bypassRoute_cb_list, iterator, fun) {
- fun(bypassRoute);
- }
-}
-void sg_platf_new_bypassASroute(sg_platf_route_cbarg_t bypassASroute) {
- unsigned int iterator;
- sg_platf_route_cb_t fun;
- xbt_dynar_foreach(sg_platf_bypassASroute_cb_list, iterator, fun) {
- fun(bypassASroute);
- }
-}
-void sg_platf_new_prop(sg_platf_prop_cbarg_t prop) {
- unsigned int iterator;
- sg_platf_prop_cb_t fun;
- xbt_dynar_foreach(sg_platf_prop_cb_list, iterator, fun) {
- fun(prop);
- }
-}
-void sg_platf_new_trace(sg_platf_trace_cbarg_t trace) {
- unsigned int iterator;
- sg_platf_trace_cb_t fun;
- xbt_dynar_foreach(sg_platf_trace_cb_list, iterator, fun) {
- fun(trace);
- }
-}
-void sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect) {
- unsigned int iterator;
- sg_platf_trace_connect_cb_t fun;
- xbt_dynar_foreach(sg_platf_trace_connect_cb_list, iterator, fun) {
- fun(trace_connect);
- }
-}
-void sg_platf_new_process(sg_platf_process_cbarg_t process){
- unsigned int iterator;
- sg_platf_process_cb_t fun;
- xbt_dynar_foreach(sg_platf_process_cb_list, iterator, fun) {
- fun(process);
- }
-}
-
-void sg_platf_route_begin (sg_platf_route_cbarg_t route){
- route->link_list = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
-}
-void sg_platf_ASroute_begin (sg_platf_route_cbarg_t ASroute){
- ASroute->link_list = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
-}
-
-void sg_platf_route_end (sg_platf_route_cbarg_t route){
- sg_platf_new_route(route);
-}
-void sg_platf_ASroute_end (sg_platf_route_cbarg_t ASroute){
- sg_platf_new_ASroute(ASroute);
-}
-
-void sg_platf_route_add_link (const char* link_id, sg_platf_route_cbarg_t route){
- char *link_name = xbt_strdup(link_id);
- xbt_dynar_push(route->link_list, &link_name);
-}
-void sg_platf_ASroute_add_link (const char* link_id, sg_platf_route_cbarg_t ASroute){
- char *link_name = xbt_strdup(link_id);
- xbt_dynar_push(ASroute->link_list, &link_name);
-}
-
-void sg_platf_begin() { /* Do nothing: just for symmetry of user code */ }
-
-void sg_platf_end() {
- unsigned int iterator;
- void_f_void_t fun;
- xbt_dynar_foreach(sg_platf_postparse_cb_list, iterator, fun) {
- fun();
- }
-}
-
-static int surf_parse_models_setup_already_called = 0;
-
-void sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS) {
- unsigned int iterator;
- sg_platf_AS_cb_t fun;
-
- if (!surf_parse_models_setup_already_called && !xbt_dynar_is_empty(sg_platf_AS_begin_cb_list)) {
- /* Initialize the surf models. That must be done after we got all config, and before we need the models.
- * That is, after the last <config> tag, if any, and before the first of cluster|peer|AS|trace|trace_connect
- *
- * I'm not sure for <trace> and <trace_connect>, there may be a bug here
- * (FIXME: check it out by creating a file beginning with one of these tags)
- * but cluster and peer create ASes internally, so putting the code in there is ok.
- *
- * We are also guarding against xbt_dynar_length(sg_platf_AS_begin_cb_list) because we don't
- * want to initialize the models if we are parsing the file to get the deployment. That could happen if
- * the same file would be used for platf and deploy: it'd contain AS tags even during the deploy parsing.
- * Removing that guard would result of the models to get re-inited when parsing for deploy.
- */
- surf_parse_models_setup_already_called = 1;
- surf_config_models_setup();
- }
-
- xbt_dynar_foreach(sg_platf_AS_begin_cb_list, iterator, fun) {
- fun(AS);
- }
-}
-
-void sg_platf_new_AS_end() {
- unsigned int iterator;
- void_f_void_t fun;
- xbt_dynar_foreach(sg_platf_AS_end_cb_list, iterator, fun) {
- fun();
- }
-}
-
-/* ***************************************** */
-/* TUTORIAL: New TAG */
-
-void sg_platf_new_gpu(sg_platf_gpu_cbarg_t gpu) {
- unsigned int iterator;
- void_f_void_t fun;
- xbt_dynar_foreach(sg_platf_gpu_cb_list, iterator, fun) {
- fun();
- }
-}
-
-void sg_platf_gpu_add_cb(sg_platf_gpu_cb_t fct) {
- xbt_dynar_push(sg_platf_gpu_cb_list, &fct);
-}
-
-/* ***************************************** */
-
-
-void sg_platf_host_add_cb(sg_platf_host_cb_t fct) {
- xbt_dynar_push(sg_platf_host_cb_list, &fct);
-}
-void sg_platf_host_link_add_cb(sg_platf_host_link_cb_t fct) {
- xbt_dynar_push(sg_platf_host_link_cb_list, &fct);
-}
-void sg_platf_link_add_cb(sg_platf_link_cb_t fct) {
- xbt_dynar_push(sg_platf_link_cb_list, &fct);
-}
-void sg_platf_router_add_cb(sg_platf_router_cb_t fct) {
- xbt_dynar_push(sg_platf_router_cb_list, &fct);
-}
-void sg_platf_peer_add_cb(sg_platf_peer_cb_t fct) {
- xbt_dynar_push(sg_platf_peer_cb_list, &fct);
-}
-void sg_platf_cluster_add_cb(sg_platf_cluster_cb_t fct) {
- xbt_dynar_push(sg_platf_cluster_cb_list, &fct);
-}
-void sg_platf_cabinet_add_cb(sg_platf_cabinet_cb_t fct) {
- xbt_dynar_push(sg_platf_cabinet_cb_list, &fct);
-}
-void sg_platf_postparse_add_cb(void_f_void_t fct) {
- xbt_dynar_push(sg_platf_postparse_cb_list, &fct);
-}
-void sg_platf_AS_begin_add_cb(sg_platf_AS_cb_t fct) {
- xbt_dynar_push(sg_platf_AS_begin_cb_list, &fct);
-}
-void sg_platf_AS_end_add_cb(sg_platf_AS_cb_t fct) {
- xbt_dynar_push(sg_platf_AS_end_cb_list, &fct);
-}
-void sg_platf_storage_add_cb(sg_platf_storage_cb_t fct) {
- xbt_dynar_push(sg_platf_storage_cb_list, &fct);
-}
-void sg_platf_storage_type_add_cb(sg_platf_storage_type_cb_t fct) {
- xbt_dynar_push(sg_platf_storage_type_cb_list, &fct);
-}
-void sg_platf_mstorage_add_cb(sg_platf_mstorage_cb_t fct) {
- xbt_dynar_push(sg_platf_mstorage_cb_list, &fct);
-}
-void sg_platf_mount_add_cb(sg_platf_mount_cb_t fct) {
- xbt_dynar_push(sg_platf_mount_cb_list, &fct);
-}
-void sg_platf_route_add_cb(sg_platf_route_cb_t fct) {
- xbt_dynar_push(sg_platf_route_cb_list, &fct);
-}
-void sg_platf_ASroute_add_cb(sg_platf_route_cb_t fct) {
- xbt_dynar_push(sg_platf_ASroute_cb_list, &fct);
-}
-void sg_platf_bypassRoute_add_cb(sg_platf_route_cb_t fct) {
- xbt_dynar_push(sg_platf_bypassRoute_cb_list, &fct);
-}
-void sg_platf_bypassASroute_add_cb(sg_platf_route_cb_t fct) {
- xbt_dynar_push(sg_platf_bypassASroute_cb_list, &fct);
-}
-void sg_platf_prop_add_cb(sg_platf_prop_cb_t fct) {
- xbt_dynar_push(sg_platf_prop_cb_list, &fct);
-}
-void sg_platf_trace_add_cb(sg_platf_trace_cb_t fct) {
- xbt_dynar_push(sg_platf_trace_cb_list, &fct);
-}
-void sg_platf_trace_connect_add_cb(sg_platf_trace_connect_cb_t fct) {
- xbt_dynar_push(sg_platf_trace_connect_cb_list, &fct);
-}
-void sg_platf_rng_stream_init(unsigned long seed[6]) {
- RngStream_SetPackageSeed(seed);
- sg_platf_rng_stream = RngStream_CreateStream(NULL);
-}
-void sg_platf_process_add_cb(sg_platf_process_cb_t fct) {
- xbt_dynar_push(sg_platf_process_cb_list, &fct);
-}
-
-RngStream sg_platf_rng_stream_get(const char* id) {
- RngStream stream = NULL;
- unsigned int id_hash;
-
- stream = RngStream_CopyStream(sg_platf_rng_stream);
- id_hash = xbt_str_hash(id);
- RngStream_AdvanceState(stream, 0, (long)id_hash);
-
- return stream;
-}
--- /dev/null
+/* 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. */
+
+#include "xbt/misc.h"
+#include "xbt/log.h"
+#include "xbt/str.h"
+#include "xbt/dict.h"
+#include "xbt/RngStream.h"
+#include "simgrid/platf_interface.h"
+#include "surf/surf_routing.h"
+#include "surf/surf.h"
+
+#include "src/simix/smx_private.h"
+
+#include "cpu_interface.hpp"
+#include "host_interface.hpp"
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_parse);
+xbt_dynar_t sg_platf_link_cb_list = NULL; // of sg_platf_link_cb_t
+xbt_dynar_t sg_platf_cluster_cb_list = NULL; // of sg_platf_cluster_cb_t
+xbt_dynar_t sg_platf_postparse_cb_list = NULL; // of void_f_void_t
+
+static int surf_parse_models_setup_already_called = 0;
+
+/* one RngStream for the platform, to respect some statistic rules */
+static RngStream sg_platf_rng_stream = NULL;
+
+/** Module management function: creates all internal data structures */
+void sg_platf_init(void) {
+
+ //FIXME : Ugly, but useful...
+ if (sg_platf_postparse_cb_list)
+ return; //Already initialized, so do nothing...
+
+ sg_platf_link_cb_list = xbt_dynar_new(sizeof(sg_platf_link_cb_t), NULL);
+ sg_platf_cluster_cb_list = xbt_dynar_new(sizeof(sg_platf_cluster_cb_t), NULL);
+ sg_platf_postparse_cb_list = xbt_dynar_new(sizeof(sg_platf_link_cb_t),NULL);
+}
+
+/** Module management function: frees all internal data structures */
+void sg_platf_exit(void) {
+ xbt_dynar_free(&sg_platf_link_cb_list);
+ xbt_dynar_free(&sg_platf_postparse_cb_list);
+ xbt_dynar_free(&sg_platf_cluster_cb_list);
+
+ /* make sure that we will reinit the models while loading the platf once reinited */
+ surf_parse_models_setup_already_called = 0;
+}
+
+void sg_platf_new_host(sg_platf_host_cbarg_t host)
+{
+ xbt_assert(! sg_host_by_name(host->id),
+ "Refusing to create a second host named '%s'.", host->id);
+
+ simgrid::surf::RoutingEdge *net = NULL;
+ simgrid::surf::As* current_routing = routing_get_current();
+ if (current_routing)
+ net = routing_add_host(current_routing, host);
+
+ simgrid::surf::Cpu *cpu = surf_cpu_model_pm->createCpu(
+ host->id,
+ host->speed_peak,
+ host->pstate,
+ host->speed_scale,
+ host->speed_trace,
+ host->core_amount,
+ host->initial_state,
+ host->state_trace,
+ host->properties);
+ surf_host_model->createHost(host->id, net, cpu);
+
+ if (TRACE_is_enabled() && TRACE_needs_platform())
+ sg_instr_new_host(host);
+}
+
+/**
+ * \brief Add a "router" to the network element list
+ */
+void sg_platf_new_router(sg_platf_router_cbarg_t router)
+{
+ simgrid::surf::As* current_routing = routing_get_current();
+
+ if (current_routing->p_hierarchy == SURF_ROUTING_NULL)
+ current_routing->p_hierarchy = SURF_ROUTING_BASE;
+ xbt_assert(!xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL),
+ "Reading a router, processing unit \"%s\" already exists",
+ router->id);
+
+ simgrid::surf::RoutingEdge *info = new simgrid::surf::RoutingEdgeImpl(
+ xbt_strdup(router->id), -1, SURF_NETWORK_ELEMENT_ROUTER, current_routing);
+ info->setId(current_routing->parsePU(info));
+ xbt_lib_set(as_router_lib, router->id, ROUTING_ASR_LEVEL, (void *) info);
+ XBT_DEBUG("Having set name '%s' id '%d'", router->id, info->getId());
+ simgrid::surf::routingEdgeCreatedCallbacks(info);
+
+ if (router->coord && strcmp(router->coord, "")) {
+ unsigned int cursor;
+ char*str;
+
+ if (!COORD_ASR_LEVEL)
+ xbt_die ("To use host coordinates, please add --cfg=network/coordinates:yes to your command line");
+ /* Pre-parse the host coordinates */
+ xbt_dynar_t ctn_str = xbt_str_split_str(router->coord, " ");
+ xbt_dynar_t ctn = xbt_dynar_new(sizeof(double),NULL);
+ xbt_dynar_foreach(ctn_str,cursor, str) {
+ double val = atof(str);
+ xbt_dynar_push(ctn,&val);
+ }
+ xbt_dynar_shrink(ctn, 0);
+ xbt_dynar_free(&ctn_str);
+ xbt_lib_set(as_router_lib, router->id, COORD_ASR_LEVEL, (void *) ctn);
+ XBT_DEBUG("Having set router coordinates for '%s'",router->id);
+ }
+
+ if (TRACE_is_enabled())
+ sg_instr_new_router(router);
+}
+
+void sg_platf_new_link(sg_platf_link_cbarg_t link){
+ unsigned int iterator;
+ sg_platf_link_cb_t fun;
+ xbt_dynar_foreach(sg_platf_link_cb_list, iterator, fun) {
+ fun(link);
+ }
+}
+
+void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
+{
+ routing_new_cluster(cluster);
+
+ unsigned int iterator;
+ sg_platf_cluster_cb_t fun;
+ xbt_dynar_foreach(sg_platf_cluster_cb_list, iterator, fun) {
+ fun(cluster);
+ }
+}
+
+void sg_platf_new_storage(sg_platf_storage_cbarg_t storage)
+{
+ xbt_assert(!xbt_lib_get_or_null(storage_lib, storage->id,ROUTING_STORAGE_LEVEL),
+ "Reading a storage, processing unit \"%s\" already exists", storage->id);
+
+ // Verification of an existing type_id
+#ifndef NDEBUG
+ void* storage_type = xbt_lib_get_or_null(storage_type_lib, storage->type_id,ROUTING_STORAGE_TYPE_LEVEL);
+#endif
+ xbt_assert(storage_type,"Reading a storage, type id \"%s\" does not exists", storage->type_id);
+
+ XBT_DEBUG("ROUTING Create a storage name '%s' with type_id '%s' and content '%s'",
+ storage->id,
+ storage->type_id,
+ storage->content);
+
+ xbt_lib_set(storage_lib,
+ storage->id,
+ ROUTING_STORAGE_LEVEL,
+ (void *) xbt_strdup(storage->type_id));
+
+ void* stype = xbt_lib_get_or_null(storage_type_lib,
+ storage->type_id,
+ ROUTING_STORAGE_TYPE_LEVEL);
+ if(!stype) xbt_die("No storage type '%s'",storage->type_id);
+
+ // if storage content is not specified use the content of storage_type if exist
+ if(!strcmp(storage->content,"") && strcmp(((storage_type_t) stype)->content,"")){
+ storage->content = ((storage_type_t) stype)->content;
+ storage->content_type = ((storage_type_t) stype)->content_type;
+ XBT_DEBUG("For disk '%s' content is empty, inherit the content (of type %s) from storage type '%s' ",
+ storage->id,((storage_type_t) stype)->content_type,
+ ((storage_type_t) stype)->type_id);
+ }
+
+ XBT_DEBUG("SURF storage create resource\n\t\tid '%s'\n\t\ttype '%s' "
+ "\n\t\tmodel '%s' \n\t\tcontent '%s'\n\t\tcontent_type '%s' "
+ "\n\t\tproperties '%p''\n",
+ storage->id,
+ ((storage_type_t) stype)->model,
+ ((storage_type_t) stype)->type_id,
+ storage->content,
+ storage->content_type,
+ storage->properties);
+
+ surf_storage_model->createStorage(storage->id,
+ ((storage_type_t) stype)->type_id,
+ storage->content,
+ storage->content_type,
+ storage->properties,
+ storage->attach);
+}
+void sg_platf_new_storage_type(sg_platf_storage_type_cbarg_t storage_type){
+
+ xbt_assert(!xbt_lib_get_or_null(storage_type_lib, storage_type->id,ROUTING_STORAGE_TYPE_LEVEL),
+ "Reading a storage type, processing unit \"%s\" already exists", storage_type->id);
+
+ storage_type_t stype = xbt_new0(s_storage_type_t, 1);
+ stype->model = xbt_strdup(storage_type->model);
+ stype->properties = storage_type->properties;
+ stype->content = xbt_strdup(storage_type->content);
+ stype->content_type = xbt_strdup(storage_type->content_type);
+ stype->type_id = xbt_strdup(storage_type->id);
+ stype->size = storage_type->size;
+ stype->model_properties = storage_type->model_properties;
+
+ XBT_DEBUG("ROUTING Create a storage type id '%s' with model '%s', "
+ "content '%s', and content_type '%s'",
+ stype->type_id,
+ stype->model,
+ storage_type->content,
+ storage_type->content_type);
+
+ xbt_lib_set(storage_type_lib,
+ stype->type_id,
+ ROUTING_STORAGE_TYPE_LEVEL,
+ (void *) stype);
+}
+void sg_platf_new_mstorage(sg_platf_mstorage_cbarg_t mstorage)
+{
+ THROW_UNIMPLEMENTED;
+// mount_t mnt = xbt_new0(s_mount_t, 1);
+// mnt->id = xbt_strdup(mstorage->type_id);
+// mnt->name = xbt_strdup(mstorage->name);
+//
+// if(!mount_list){
+// XBT_DEBUG("Creata a Mount list for %s",A_surfxml_host_id);
+// mount_list = xbt_dynar_new(sizeof(char *), NULL);
+// }
+// xbt_dynar_push(mount_list,(void *) mnt);
+// free(mnt->id);
+// free(mnt->name);
+// xbt_free(mnt);
+// XBT_DEBUG("ROUTING Mount a storage name '%s' with type_id '%s'",mstorage->name, mstorage->id);
+}
+
+static void mount_free(void *p)
+{
+ mount_t mnt = (mount_t) p;
+ xbt_free(mnt->name);
+}
+
+void sg_platf_new_mount(sg_platf_mount_cbarg_t mount){
+ // Verification of an existing storage
+#ifndef NDEBUG
+ void* storage = xbt_lib_get_or_null(storage_lib, mount->storageId, ROUTING_STORAGE_LEVEL);
+#endif
+ xbt_assert(storage,"Disk id \"%s\" does not exists", mount->storageId);
+
+ XBT_DEBUG("ROUTING Mount '%s' on '%s'",mount->storageId, mount->name);
+
+ s_mount_t mnt;
+ mnt.storage = surf_storage_resource_priv(surf_storage_resource_by_name(mount->storageId));
+ mnt.name = xbt_strdup(mount->name);
+
+ if(!mount_list){
+ XBT_DEBUG("Create a Mount list for %s",A_surfxml_host_id);
+ mount_list = xbt_dynar_new(sizeof(s_mount_t), mount_free);
+ }
+ xbt_dynar_push(mount_list, &mnt);
+}
+
+void sg_platf_new_route(sg_platf_route_cbarg_t route)
+{
+ routing_get_current()->parseRoute(route);
+}
+
+void sg_platf_new_ASroute(sg_platf_route_cbarg_t ASroute)
+{
+ routing_get_current()->parseASroute(ASroute);
+}
+
+void sg_platf_new_bypassRoute(sg_platf_route_cbarg_t bypassRoute)
+{
+ routing_get_current()->parseBypassroute(bypassRoute);
+}
+
+void sg_platf_new_bypassASroute(sg_platf_route_cbarg_t bypassASroute)
+{
+ routing_get_current()->parseBypassroute(bypassASroute);
+}
+
+void sg_platf_new_process(sg_platf_process_cbarg_t process)
+{
+ if (!simix_global)
+ xbt_die("Cannot create process without SIMIX.");
+
+ sg_host_t host = sg_host_by_name(process->host);
+ if (!host)
+ THROWF(arg_error, 0, "Host '%s' unknown", process->host);
+ xbt_main_func_t parse_code = SIMIX_get_registered_function(process->function);
+ xbt_assert(parse_code, "Function '%s' unknown", process->function);
+
+ double start_time = process->start_time;
+ double kill_time = process->kill_time;
+ int auto_restart = process->on_failure == SURF_PROCESS_ON_FAILURE_DIE ? 0 : 1;
+
+ smx_process_arg_t arg = NULL;
+ smx_process_t process_created = NULL;
+
+ arg = xbt_new0(s_smx_process_arg_t, 1);
+ arg->code = parse_code;
+ arg->data = NULL;
+ arg->hostname = sg_host_get_name(host);
+ arg->argc = process->argc;
+ arg->argv = xbt_new(char *,process->argc);
+ int i;
+ for (i=0; i<process->argc; i++)
+ arg->argv[i] = xbt_strdup(process->argv[i]);
+ arg->name = xbt_strdup(arg->argv[0]);
+ arg->kill_time = kill_time;
+ arg->properties = current_property_set;
+ if (!sg_host_simix(host)->boot_processes) {
+ sg_host_simix(host)->boot_processes = xbt_dynar_new(sizeof(smx_process_arg_t), _SIMIX_host_free_process_arg);
+ }
+ xbt_dynar_push_as(sg_host_simix(host)->boot_processes,smx_process_arg_t,arg);
+
+ if (start_time > SIMIX_get_clock()) {
+ arg = xbt_new0(s_smx_process_arg_t, 1);
+ arg->name = (char*)(process->argv)[0];
+ arg->code = parse_code;
+ arg->data = NULL;
+ arg->hostname = sg_host_get_name(host);
+ arg->argc = process->argc;
+ arg->argv = (char**)(process->argv);
+ arg->kill_time = kill_time;
+ arg->properties = current_property_set;
+
+ XBT_DEBUG("Process %s(%s) will be started at time %f", arg->name,
+ arg->hostname, start_time);
+ SIMIX_timer_set(start_time, [](void* arg) {
+ SIMIX_process_create_from_wrapper((smx_process_arg_t) arg);
+ }, arg);
+ } else { // start_time <= SIMIX_get_clock()
+ XBT_DEBUG("Starting Process %s(%s) right now", process->argv[0], sg_host_get_name(host));
+
+ if (simix_global->create_process_function)
+ process_created = simix_global->create_process_function(
+ (char*)(process->argv)[0],
+ parse_code,
+ NULL,
+ sg_host_get_name(host),
+ kill_time,
+ process->argc,
+ (char**)(process->argv),
+ current_property_set,
+ auto_restart, NULL);
+ else
+ process_created = simcall_process_create((char*)(process->argv)[0], parse_code, NULL, sg_host_get_name(host), kill_time, process->argc,
+ (char**)process->argv, current_property_set,auto_restart);
+
+ /* verify if process has been created (won't be the case if the host is currently dead, but that's fine) */
+ if (!process_created) {
+ return;
+ }
+ }
+ current_property_set = NULL;
+}
+
+void sg_platf_route_begin (sg_platf_route_cbarg_t route){
+ route->link_list = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
+}
+void sg_platf_ASroute_begin (sg_platf_route_cbarg_t ASroute){
+ ASroute->link_list = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
+}
+
+void sg_platf_route_end (sg_platf_route_cbarg_t route){
+ sg_platf_new_route(route);
+}
+void sg_platf_ASroute_end (sg_platf_route_cbarg_t ASroute){
+ sg_platf_new_ASroute(ASroute);
+}
+
+void sg_platf_route_add_link (const char* link_id, sg_platf_route_cbarg_t route){
+ char *link_name = xbt_strdup(link_id);
+ xbt_dynar_push(route->link_list, &link_name);
+}
+void sg_platf_ASroute_add_link (const char* link_id, sg_platf_route_cbarg_t ASroute){
+ char *link_name = xbt_strdup(link_id);
+ xbt_dynar_push(ASroute->link_list, &link_name);
+}
+
+void sg_platf_begin() { /* Do nothing: just for symmetry of user code */ }
+
+void sg_platf_end() {
+ unsigned int iterator;
+ void_f_void_t fun;
+ xbt_dynar_foreach(sg_platf_postparse_cb_list, iterator, fun) {
+ fun();
+ }
+}
+
+void sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS)
+{
+ if (!surf_parse_models_setup_already_called) {
+ /* Initialize the surf models. That must be done after we got all config, and before we need the models.
+ * That is, after the last <config> tag, if any, and before the first of cluster|peer|AS|trace|trace_connect
+ *
+ * I'm not sure for <trace> and <trace_connect>, there may be a bug here
+ * (FIXME: check it out by creating a file beginning with one of these tags)
+ * but cluster and peer create ASes internally, so putting the code in there is ok.
+ *
+ * TODO, There used to be a guard protecting here against
+ * xbt_dynar_length(sg_platf_AS_begin_cb_list) because we don't want to
+ * initialize the models if we are parsing the file to get the deployment.
+ * That could happen if the same file would be used for platf and deploy:
+ * it'd contain AS tags even during the deploy parsing. Removing that guard
+ * would result of the models to get re-inited when parsing for deploy.
+ * Currently using the same file for platform and deployment is broken
+ * however. This guard will have to ba adapted in order to make this feature
+ * work again.
+ */
+ surf_parse_models_setup_already_called = 1;
+ surf_config_models_setup();
+ }
+
+ routing_AS_begin(AS);
+ if (TRACE_is_enabled())
+ sg_instr_AS_begin(AS);
+}
+
+void sg_platf_new_AS_end()
+{
+ routing_AS_end();
+ if (TRACE_is_enabled())
+ sg_instr_AS_end();
+}
+/* ***************************************** */
+
+void sg_platf_link_add_cb(sg_platf_link_cb_t fct) {
+ xbt_dynar_push(sg_platf_link_cb_list, &fct);
+}
+void sg_platf_cluster_add_cb(sg_platf_cluster_cb_t fct) {
+ xbt_dynar_push(sg_platf_cluster_cb_list, &fct);
+}
+void sg_platf_postparse_add_cb(void_f_void_t fct) {
+ xbt_dynar_push(sg_platf_postparse_cb_list, &fct);
+}
+
+void sg_platf_rng_stream_init(unsigned long seed[6]) {
+ RngStream_SetPackageSeed(seed);
+ sg_platf_rng_stream = RngStream_CreateStream(NULL);
+}
+
+RngStream sg_platf_rng_stream_get(const char* id) {
+ RngStream stream = NULL;
+ unsigned int id_hash;
+
+ stream = RngStream_CopyStream(sg_platf_rng_stream);
+ id_hash = xbt_str_hash(id);
+ RngStream_AdvanceState(stream, 0, (long)id_hash);
+
+ return stream;
+}
xbt_lib_t storage_type_lib;
int ROUTING_STORAGE_TYPE_LEVEL; //Routing for storage_type level
xbt_dynar_t mount_list = NULL;
-StorageModel *surf_storage_model = NULL;
+simgrid::surf::StorageModel *surf_storage_model = NULL;
+
+namespace simgrid {
+namespace surf {
/*************
* Callbacks *
*************/
-surf_callback(void, Storage*) storageCreatedCallbacks;
-surf_callback(void, Storage*) storageDestructedCallbacks;
-surf_callback(void, Storage*, e_surf_resource_state_t, e_surf_resource_state_t) storageStateChangedCallbacks;
-surf_callback(void, StorageAction*, e_surf_action_state_t, e_surf_action_state_t) storageActionStateChangedCallbacks;
+surf_callback(void, simgrid::surf::Storage*) storageCreatedCallbacks;
+surf_callback(void, simgrid::surf::Storage*) storageDestructedCallbacks;
+surf_callback(void, simgrid::surf::Storage*, e_surf_resource_state_t, e_surf_resource_state_t) storageStateChangedCallbacks;
+surf_callback(void, simgrid::surf::StorageAction*, e_surf_action_state_t, e_surf_action_state_t) storageActionStateChangedCallbacks;
/*********
* Model *
, p_typeId(xbt_strdup(type_id))
, p_writeActions(xbt_dynar_new(sizeof(Action*),NULL))
{
- surf_callback_emit(storageCreatedCallbacks, this);
p_content = parseContent(content_name);
setState(SURF_RESOURCE_ON);
}
, m_size(size), m_usedSize(0)
, p_typeId(xbt_strdup(type_id))
, p_writeActions(xbt_dynar_new(sizeof(Action*),NULL)) {
- surf_callback_emit(storageCreatedCallbacks, this);
p_content = parseContent(content_name);
p_attach = xbt_strdup(attach);
setState(SURF_RESOURCE_ON);
Action::setState(state);
surf_callback_emit(storageActionStateChangedCallbacks, this, old, state);
}
+
+}
+}
extern xbt_dynar_t mount_list;
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
* @brief Callbacks handler which emit the callbacks after Storage creation *
* @details Callback functions have the following signature: `void(Storage*)`
*/
-XBT_PUBLIC_DATA(surf_callback(void, Storage*)) storageCreatedCallbacks;
+XBT_PUBLIC_DATA(surf_callback(void, simgrid::surf::Storage*)) storageCreatedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emit the callbacks after Storage destruction *
* @details Callback functions have the following signature: `void(StoragePtr)`
*/
-XBT_PUBLIC_DATA(surf_callback(void, Storage*)) storageDestructedCallbacks;
+XBT_PUBLIC_DATA(surf_callback(void, simgrid::surf::Storage*)) storageDestructedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emit the callbacks after Storage State changed *
* @details Callback functions have the following signature: `void(StorageAction *action, e_surf_resource_state_t old, e_surf_resource_state_t current)`
*/
-XBT_PUBLIC_DATA(surf_callback(void, Storage*, e_surf_resource_state_t, e_surf_resource_state_t)) storageStateChangedCallbacks;
+XBT_PUBLIC_DATA(surf_callback(void, simgrid::surf::Storage*, e_surf_resource_state_t, e_surf_resource_state_t)) storageStateChangedCallbacks;
/** @ingroup SURF_callbacks
* @brief Callbacks handler which emit the callbacks after StorageAction State changed *
* @details Callback functions have the following signature: `void(StorageAction *action, e_surf_action_state_t old, e_surf_action_state_t current)`
*/
-XBT_PUBLIC_DATA(surf_callback(void, StorageAction*, e_surf_action_state_t, e_surf_action_state_t)) storageActionStateChangedCallbacks;
+XBT_PUBLIC_DATA(surf_callback(void, simgrid::surf::StorageAction*, e_surf_action_state_t, e_surf_action_state_t)) storageActionStateChangedCallbacks;
/*********
* Model *
* @brief SURF storage interface class
* @details A Storage represent a storage unit (e.g.: hard drive, usb key)
*/
-class Storage : public Resource {
+class Storage : public simgrid::surf::Resource {
public:
/**
* @brief Storage constructor
double progress;
};
+}
+}
+
typedef struct s_storage_type {
char *model;
char *content;
static XBT_INLINE void surf_storage_resource_free(void *r)
{
// specific to storage
- Storage *storage = static_cast<Storage*>(r);
+ simgrid::surf::Storage *storage = static_cast<simgrid::surf::Storage*>(r);
// generic resource
delete storage;
}
xbt_dynar_free(&dyn);
}
-static void parse_storage_init(sg_platf_storage_cbarg_t storage)
+void storage_register_callbacks()
{
- void* stype = xbt_lib_get_or_null(storage_type_lib,
- storage->type_id,
- ROUTING_STORAGE_TYPE_LEVEL);
- if(!stype) xbt_die("No storage type '%s'",storage->type_id);
-
- // if storage content is not specified use the content of storage_type if exist
- if(!strcmp(storage->content,"") && strcmp(((storage_type_t) stype)->content,"")){
- storage->content = ((storage_type_t) stype)->content;
- storage->content_type = ((storage_type_t) stype)->content_type;
- XBT_DEBUG("For disk '%s' content is empty, inherit the content (of type %s) from storage type '%s' ",
- storage->id,((storage_type_t) stype)->content_type,
- ((storage_type_t) stype)->type_id);
- }
-
- XBT_DEBUG("SURF storage create resource\n\t\tid '%s'\n\t\ttype '%s' "
- "\n\t\tmodel '%s' \n\t\tcontent '%s'\n\t\tcontent_type '%s' "
- "\n\t\tproperties '%p''\n",
- storage->id,
- ((storage_type_t) stype)->model,
- ((storage_type_t) stype)->type_id,
- storage->content,
- storage->content_type,
- storage->properties);
-
- surf_storage_model->createStorage(storage->id,
- ((storage_type_t) stype)->type_id,
- storage->content,
- storage->content_type,
- storage->properties,
- storage->attach);
-}
-
-static void parse_mstorage_init(sg_platf_mstorage_cbarg_t /*mstorage*/)
-{
- XBT_DEBUG("parse_mstorage_init");
-}
-
-static void parse_storage_type_init(sg_platf_storage_type_cbarg_t /*storagetype_*/)
-{
- XBT_DEBUG("parse_storage_type_init");
-}
-
-static void parse_mount_init(sg_platf_mount_cbarg_t /*mount*/)
-{
- XBT_DEBUG("parse_mount_init");
-}
-
-static void storage_parse_storage(sg_platf_storage_cbarg_t storage)
-{
- xbt_assert(!xbt_lib_get_or_null(storage_lib, storage->id,ROUTING_STORAGE_LEVEL),
- "Reading a storage, processing unit \"%s\" already exists", storage->id);
-
- // Verification of an existing type_id
-#ifndef NDEBUG
- void* storage_type = xbt_lib_get_or_null(storage_type_lib, storage->type_id,ROUTING_STORAGE_TYPE_LEVEL);
-#endif
- xbt_assert(storage_type,"Reading a storage, type id \"%s\" does not exists", storage->type_id);
-
- XBT_DEBUG("ROUTING Create a storage name '%s' with type_id '%s' and content '%s'",
- storage->id,
- storage->type_id,
- storage->content);
-
- xbt_lib_set(storage_lib,
- storage->id,
- ROUTING_STORAGE_LEVEL,
- (void *) xbt_strdup(storage->type_id));
-}
-
-static void storage_parse_storage_type(sg_platf_storage_type_cbarg_t storage_type)
-{
- xbt_assert(!xbt_lib_get_or_null(storage_type_lib, storage_type->id,ROUTING_STORAGE_TYPE_LEVEL),
- "Reading a storage type, processing unit \"%s\" already exists", storage_type->id);
-
- storage_type_t stype = xbt_new0(s_storage_type_t, 1);
- stype->model = xbt_strdup(storage_type->model);
- stype->properties = storage_type->properties;
- stype->content = xbt_strdup(storage_type->content);
- stype->content_type = xbt_strdup(storage_type->content_type);
- stype->type_id = xbt_strdup(storage_type->id);
- stype->size = storage_type->size;
- stype->model_properties = storage_type->model_properties;
-
- XBT_DEBUG("ROUTING Create a storage type id '%s' with model '%s', "
- "content '%s', and content_type '%s'",
- stype->type_id,
- stype->model,
- storage_type->content,
- storage_type->content_type);
-
- xbt_lib_set(storage_type_lib,
- stype->type_id,
- ROUTING_STORAGE_TYPE_LEVEL,
- (void *) stype);
-}
-
-static void storage_parse_mstorage(sg_platf_mstorage_cbarg_t /*mstorage*/)
-{
- THROW_UNIMPLEMENTED;
-// mount_t mnt = xbt_new0(s_mount_t, 1);
-// mnt->id = xbt_strdup(mstorage->type_id);
-// mnt->name = xbt_strdup(mstorage->name);
-//
-// if(!mount_list){
-// XBT_DEBUG("Creata a Mount list for %s",A_surfxml_host_id);
-// mount_list = xbt_dynar_new(sizeof(char *), NULL);
-// }
-// xbt_dynar_push(mount_list,(void *) mnt);
-// free(mnt->id);
-// free(mnt->name);
-// xbt_free(mnt);
-// XBT_DEBUG("ROUTING Mount a storage name '%s' with type_id '%s'",mstorage->name, mstorage->id);
-}
-
-static void mount_free(void *p)
-{
- mount_t mnt = (mount_t) p;
- xbt_free(mnt->name);
-}
-
-static void storage_parse_mount(sg_platf_mount_cbarg_t mount)
-{
- // Verification of an existing storage
-#ifndef NDEBUG
- void* storage = xbt_lib_get_or_null(storage_lib, mount->storageId, ROUTING_STORAGE_LEVEL);
-#endif
- xbt_assert(storage,"Disk id \"%s\" does not exists", mount->storageId);
-
- XBT_DEBUG("ROUTING Mount '%s' on '%s'",mount->storageId, mount->name);
-
- s_mount_t mnt;
- mnt.storage = surf_storage_resource_priv(surf_storage_resource_by_name(mount->storageId));
- mnt.name = xbt_strdup(mount->name);
-
- if(!mount_list){
- XBT_DEBUG("Create a Mount list for %s",A_surfxml_host_id);
- mount_list = xbt_dynar_new(sizeof(s_mount_t), mount_free);
- }
- xbt_dynar_push(mount_list, &mnt);
-}
-
-static void storage_define_callbacks()
-{
- sg_platf_storage_add_cb(parse_storage_init);
- sg_platf_storage_type_add_cb(parse_storage_type_init);
- sg_platf_mstorage_add_cb(parse_mstorage_init);
- sg_platf_mount_add_cb(parse_mount_init);
-}
-
-void storage_register_callbacks() {
-
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);
-
- sg_platf_storage_add_cb(storage_parse_storage);
- sg_platf_mstorage_add_cb(storage_parse_mstorage);
- sg_platf_storage_type_add_cb(storage_parse_storage_type);
- sg_platf_mount_add_cb(storage_parse_mount);
}
/*********
void surf_storage_model_init_default(void)
{
- surf_storage_model = new StorageN11Model();
- storage_define_callbacks();
- xbt_dynar_push(model_list, &surf_storage_model);
+ surf_storage_model = new simgrid::surf::StorageN11Model();
+ xbt_dynar_push(all_existing_models, &surf_storage_model);
}
+namespace simgrid {
+namespace surf {
+
StorageN11Model::StorageN11Model() : StorageModel() {
Action *action = NULL;
Storage *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);
-
+ surf_callback_emit(storageCreatedCallbacks, storage);
xbt_lib_set(storage_lib, id, SURF_STORAGE_LEVEL, storage);
XBT_DEBUG("SURF storage create resource\n\t\tid '%s'\n\t\ttype '%s'\n\t\tproperties '%p'\n\t\tBread '%f'\n",
THROW_UNIMPLEMENTED;
}
+}
+}
#ifndef STORAGE_N11_HPP_
#define STORAGE_N11_HPP_
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
};
+}
+}
+
#endif /* STORAGE_N11_HPP_ */
#include "surf_interface.hpp"
#include "network_interface.hpp"
#include "surf_routing_cluster.hpp"
-#include "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "plugins/energy.hpp"
-#include "vm_interface.hpp"
+#include "virtual_machine.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_kernel);
* TOOLS *
*********/
-static Host *get_casted_host(surf_resource_t resource){
- return static_cast<Host*>(surf_host_resource_priv(resource));
+static simgrid::surf::Host *get_casted_host(surf_resource_t resource){
+ return static_cast<simgrid::surf::Host*>(surf_host_resource_priv(resource));
}
-static VM *get_casted_vm(surf_resource_t resource){
- return static_cast<VM*>(surf_host_resource_priv(resource));
+static simgrid::surf::VirtualMachine *get_casted_vm(surf_resource_t resource){
+ return static_cast<simgrid::surf::VirtualMachine*>(surf_host_resource_priv(resource));
}
extern double NOW;
double next_event_date = -1.0;
tmgr_trace_event_t event = NULL;
double value = -1.0;
- Resource *resource = NULL;
- Model *model = NULL;
+ simgrid::surf::Resource *resource = NULL;
+ simgrid::surf::Model *model = NULL;
unsigned int iter;
XBT_DEBUG ("First Run! Let's \"purge\" events and put models in the right state");
}
}
}
- xbt_dynar_foreach(model_list, iter, model)
+ xbt_dynar_foreach(all_existing_models, iter, model)
model->updateActionsState(NOW, 0.0);
}
double next_event_date = -1.0;
double model_next_action_end = -1.0;
double value = -1.0;
- Resource *resource = NULL;
- Model *model = NULL;
+ simgrid::surf::Resource *resource = NULL;
+ simgrid::surf::Model *model = NULL;
tmgr_trace_event_t event = NULL;
unsigned int iter;
surf_min = max_date - NOW;
}
- XBT_DEBUG("Looking for next action end for all models except NS3");
- xbt_dynar_foreach(model_list_invoke, iter, model) {
- double next_action_end = -1.0;
- if (model->shareResourcesIsIdempotent()) {
- XBT_DEBUG("Running for Resource [%s]", typeid(model).name());
- next_action_end = model->shareResources(NOW);
- XBT_DEBUG("Resource [%s] : next action end = %f",
- typeid(model).name(), next_action_end);
- }
- if ((surf_min < 0.0 || next_action_end < surf_min)
- && next_action_end >= 0.0) {
- surf_min = next_action_end;
- }
+ /* Physical models MUST be resolved first */
+ XBT_DEBUG("Looking for next event in physical models");
+ double next_event_phy = surf_host_model->shareResources(NOW);
+ if ((surf_min < 0.0 || next_event_phy < surf_min) && next_event_phy >= 0.0) {
+ surf_min = next_event_phy;
+ }
+ if (surf_vm_model != NULL) {
+ XBT_DEBUG("Looking for next event in virtual models");
+ double next_event_virt = surf_vm_model->shareResources(NOW);
+ if ((surf_min < 0.0 || next_event_virt < surf_min) && next_event_virt >= 0.0)
+ surf_min = next_event_virt;
}
XBT_DEBUG("Min for resources (remember that NS3 don't update that value) : %f", surf_min);
NOW = NOW + surf_min;
/* FIXME: model_list or model_list_invoke? revisit here later */
/* sequential version */
- xbt_dynar_foreach(model_list, iter, model) {
+ xbt_dynar_foreach(all_existing_models, iter, model) {
model->updateActionsState(NOW, surf_min);
}
surf_model_t surf_resource_model(const void *host, int level) {
/* If level is SURF_WKS_LEVEL, ws is a host_CLM03 object. It has
* surf_resource at the generic_resource field. */
- Resource *ws = static_cast<Resource*>(xbt_lib_get_level((xbt_dictelm_t) host, level));
+ simgrid::surf::Resource *ws = static_cast<simgrid::surf::Resource*>(
+ xbt_lib_get_level((xbt_dictelm_t) host, level));
return ws->getModel();
}
-void *surf_as_cluster_get_backbone(AS_t as){
- return static_cast<AsCluster*>(as)->p_backbone;
-}
-
-void surf_as_cluster_set_backbone(AS_t as, void* backbone){
- static_cast<AsCluster*>(as)->p_backbone = static_cast<Link*>(backbone);
-}
-
-const char *surf_model_name(surf_model_t model){
- return typeid(model).name();
-}
-
surf_action_t surf_model_extract_done_action_set(surf_model_t model){
if (model->getDoneActionSet()->empty())
return NULL;
double *flops_amount,
double *bytes_amount,
double rate){
- return static_cast<Action*>(model->executeParallelTask(host_nb, host_list, flops_amount, bytes_amount, rate));
+ return static_cast<simgrid::surf::Action*>(
+ model->executeParallelTask(host_nb, host_list, flops_amount, bytes_amount, rate));
}
xbt_dynar_t surf_host_model_get_route(surf_host_model_t /*model*/,
surf_resource_t src, surf_resource_t dst){
xbt_dynar_t route = NULL;
- routing_platf->getRouteAndLatency(get_casted_host(src)->p_netElm,
- get_casted_host(dst)->p_netElm, &route, NULL);
+ routing_platf->getRouteAndLatency(
+ get_casted_host(src)->p_netElm,
+ get_casted_host(dst)->p_netElm, &route, NULL);
return route;
}
int surf_host_get_pstate(surf_resource_t host){
return sg_host_surfcpu(host)->getPstate();
}
+
+using simgrid::energy::HostEnergy;
+using simgrid::energy::surf_energy;
+
double surf_host_get_wattmin_at(surf_resource_t resource, int pstate){
xbt_assert(surf_energy!=NULL, "The Energy plugin is not active. Please call sg_energy_plugin_init() during initialization.");
- std::map<Cpu*, CpuEnergy*>::iterator cpuIt = surf_energy->find(get_casted_host(resource)->p_cpu);
- return cpuIt->second->getWattMinAt(pstate);
+ std::map<simgrid::surf::Host*, HostEnergy*>::iterator hostIt = surf_energy->find(get_casted_host(resource));
+ return hostIt->second->getWattMinAt(pstate);
}
double surf_host_get_wattmax_at(surf_resource_t resource, int pstate){
xbt_assert(surf_energy!=NULL, "The Energy plugin is not active. Please call sg_energy_plugin_init() during initialization.");
- std::map<Cpu*, CpuEnergy*>::iterator cpuIt = surf_energy->find(get_casted_host(resource)->p_cpu);
- return cpuIt->second->getWattMaxAt(pstate);
+ std::map<simgrid::surf::Host*, HostEnergy*>::iterator hostIt = surf_energy->find(get_casted_host(resource));
+ return hostIt->second->getWattMaxAt(pstate);
}
double surf_host_get_consumed_energy(surf_resource_t resource){
xbt_assert(surf_energy!=NULL, "The Energy plugin is not active. Please call sg_energy_plugin_init() during initialization.");
- std::map<Cpu*, CpuEnergy*>::iterator cpuIt = surf_energy->find(get_casted_host(resource)->p_cpu);
- return cpuIt->second->getConsumedEnergy();
+ std::map<simgrid::surf::Host*, HostEnergy*>::iterator hostIt = surf_energy->find(get_casted_host(resource));
+ return hostIt->second->getConsumedEnergy();
}
xbt_dict_t surf_host_get_mounted_storage_list(surf_resource_t host){
xbt_dynar_t vms = get_casted_host(host)->getVms();
xbt_dynar_t vms_ = xbt_dynar_new(sizeof(sg_host_t), NULL);
unsigned int cpt;
- VM *vm;
+ simgrid::surf::VirtualMachine *vm;
xbt_dynar_foreach(vms, cpt, vm) {
sg_host_t vm_ = xbt_lib_get_elm_or_null(host_lib, vm->getName());
xbt_dynar_push(vms_, &vm_);
void surf_vm_destroy(surf_resource_t resource){
/* Before clearing the entries in host_lib, we have to pick up resources. */
- VM *vm = get_casted_vm(resource);
+ simgrid::surf::VirtualMachine *vm = get_casted_vm(resource);
char* name = xbt_dict_get_elm_key(resource);
/* We deregister objects from host_lib, without invoking the freeing callback
* of each level.
}
xbt_dict_t surf_storage_get_content(surf_resource_t resource){
- return static_cast<Storage*>(surf_storage_resource_priv(resource))->getContent();
+ return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->getContent();
}
sg_size_t surf_storage_get_size(surf_resource_t resource){
- return static_cast<Storage*>(surf_storage_resource_priv(resource))->getSize();
+ return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->getSize();
}
sg_size_t surf_storage_get_free_size(surf_resource_t resource){
- return static_cast<Storage*>(surf_storage_resource_priv(resource))->getFreeSize();
+ return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->getFreeSize();
}
sg_size_t surf_storage_get_used_size(surf_resource_t resource){
- return static_cast<Storage*>(surf_storage_resource_priv(resource))->getUsedSize();
+ return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->getUsedSize();
}
const char* surf_storage_get_host(surf_resource_t resource){
- return static_cast<Storage*>(surf_storage_resource_priv(resource))->p_attach;
+ return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->p_attach;
}
surf_action_t surf_cpu_execute(surf_resource_t cpu, double size){
}
void surf_cpu_action_set_affinity(surf_action_t action, surf_resource_t cpu, unsigned long mask) {
- static_cast<CpuAction*>(action)->setAffinity(sg_host_surfcpu(cpu), mask);
+ static_cast<simgrid::surf::CpuAction*>(action)->setAffinity(sg_host_surfcpu(cpu), mask);
}
void surf_cpu_action_set_bound(surf_action_t action, double bound) {
- static_cast<CpuAction*>(action)->setBound(bound);
+ static_cast<simgrid::surf::CpuAction*>(action)->setBound(bound);
}
#ifdef HAVE_LATENCY_BOUND_TRACKING
#endif
surf_file_t surf_storage_action_get_file(surf_action_t action){
- return static_cast<StorageAction*>(action)->p_file;
+ return static_cast<simgrid::surf::StorageAction*>(action)->p_file;
}
#include "network_interface.hpp"
#include "cpu_interface.hpp"
#include "host_interface.hpp"
-#include "simix/smx_host_private.h"
+#include "src/simix/smx_host_private.h"
#include "surf_routing.hpp"
#include "simgrid/sg_config.h"
#include "mc/mc.h"
-#include "vm_interface.hpp"
+#include "virtual_machine.hpp"
XBT_LOG_NEW_CATEGORY(surf, "All SURF categories");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_kernel, surf,
* Utils *
*********/
-/* 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.
- *
- * 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.
- *
- * 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.
- *
- */
-
-/*static void remove_watched_host(void *key)
-{
- xbt_dict_remove(watched_hosts_lib, *(char**)key);
-}*/
-
-/*void surf_watched_hosts(void)
-{
- char *key;
- void *host;
- xbt_dict_cursor_t cursor;
- xbt_dynar_t hosts = xbt_dynar_new(sizeof(char*), NULL);
-
- XBT_DEBUG("Check for host SURF_RESOURCE_ON on watched_hosts_lib");
- xbt_dict_foreach(watched_hosts_lib, cursor, key, host)
- {
- if(SIMIX_host_get_state((smx_host_t)host) == SURF_RESOURCE_ON){
- XBT_INFO("Restart processes on host: %s", SIMIX_host_get_name((smx_host_t)host));
- SIMIX_host_autorestart((smx_host_t)host);
- xbt_dynar_push_as(hosts, char*, key);
- }
- else
- XBT_DEBUG("See SURF_RESOURCE_OFF on host: %s",key);
- }
- xbt_dynar_map(hosts, remove_watched_host);
- xbt_dynar_free(&hosts);
-}*/
-
/* model_list_invoke contains only surf_host and surf_vm.
* The callback functions of cpu_model and network_model will be called from
* those of these host models. */
-xbt_dynar_t model_list = NULL; /* for destroying all models correctly */
+xbt_dynar_t all_existing_models = NULL; /* to destroy models correctly */
xbt_dynar_t model_list_invoke = NULL; /* for invoking callbacks */
tmgr_history_t history = NULL;
xbt_dynar_t host_that_restart = NULL;
xbt_dict_t watched_hosts_lib;
+namespace simgrid {
+namespace surf {
+
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 */
static XBT_INLINE void surf_host_free(void *r)
{
- delete static_cast<Host*>(r);
+ delete static_cast<simgrid::surf::Host*>(r);
}
static XBT_INLINE void surf_storage_free(void *r)
{
- delete static_cast<Storage*>(r);
+ delete static_cast<simgrid::surf::Storage*>(r);
}
void sg_version_check(int lib_version_major,int lib_version_minor,int lib_version_patch) {
SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,surf_storage_free);
xbt_init(argc, argv);
- if (!model_list)
- model_list = xbt_dynar_new(sizeof(Model*), NULL);
+ if (!all_existing_models)
+ all_existing_models = xbt_dynar_new(sizeof(simgrid::surf::Model*), NULL);
if (!model_list_invoke)
- model_list_invoke = xbt_dynar_new(sizeof(Model*), NULL);
+ model_list_invoke = xbt_dynar_new(sizeof(simgrid::surf::Model*), NULL);
if (!history)
history = tmgr_history_new();
void surf_exit(void)
{
unsigned int iter;
- Model *model = NULL;
+ simgrid::surf::Model *model = NULL;
TRACE_end(); /* Just in case it was not called by the upper
* layer (or there is no upper layer) */
xbt_lib_free(&file_lib);
xbt_dict_free(&watched_hosts_lib);
- xbt_dynar_foreach(model_list, iter, model)
+ xbt_dynar_foreach(all_existing_models, iter, model)
delete model;
- xbt_dynar_free(&model_list);
+ xbt_dynar_free(&all_existing_models);
xbt_dynar_free(&model_list_invoke);
routing_exit();
- surf_callback_emit(surfExitCallbacks);
+ surf_callback_emit(simgrid::surf::surfExitCallbacks);
if (maxmin_system) {
lmm_system_free(maxmin_system);
* Model *
*********/
+namespace simgrid {
+namespace surf {
+
Model::Model()
: p_maxminSystem(NULL)
{
THROW_UNIMPLEMENTED;
}
+}
+}
+
/************
* Resource *
************/
+namespace simgrid {
+namespace surf {
+
Resource::Resource()
: p_name(NULL), p_properties(NULL), p_model(NULL)
{}
Resource::Resource(Model *model, const char *name, xbt_dict_t props)
- : p_name(xbt_strdup(name)), p_properties(props), p_model(model)
- , m_running(true), m_stateCurrent(SURF_RESOURCE_ON)
+ : Resource(model, name, props, SURF_RESOURCE_ON)
{}
Resource::Resource(Model *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint)
+ : Resource(model, name, props, constraint, SURF_RESOURCE_ON)
+{}
+
+Resource::Resource(
+ Model *model, const char *name, xbt_dict_t props,
+ lmm_constraint_t constraint, e_surf_resource_state_t stateInit)
: p_name(xbt_strdup(name)), p_properties(props), p_model(model)
- , m_running(true), m_stateCurrent(SURF_RESOURCE_ON), p_constraint(constraint)
+ , m_running(true), m_stateCurrent(stateInit), p_constraint(constraint)
{}
Resource::Resource(Model *model, const char *name, xbt_dict_t props, e_surf_resource_state_t stateInit)
return p_constraint;
}
+}
+}
+
/**********
* Action *
**********/
"SURF_ACTION_NOT_IN_THE_SYSTEM"
};
-void Action::initialize(Model *model, double cost, bool failed,
+/* added to manage the communication action's heap */
+void surf_action_lmm_update_index_heap(void *action, int i) {
+ static_cast<simgrid::surf::Action*>(action)->updateIndexHeap(i);
+}
+
+namespace simgrid {
+namespace surf {
+
+void Action::initialize(simgrid::surf::Model *model, double cost, bool failed,
lmm_variable_t var)
{
m_priority = 1.0;
p_stateSet->push_back(*this);
}
-Action::Action(Model *model, double cost, bool failed)
+Action::Action(simgrid::surf::Model *model, double cost, bool failed)
{
initialize(model, cost, failed);
}
-Action::Action(Model *model, double cost, bool failed, lmm_variable_t var)
+Action::Action(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var)
{
initialize(model, cost, failed, var);
}
}
}
-/* added to manage the communication action's heap */
-void surf_action_lmm_update_index_heap(void *action, int i) {
- static_cast<Action*>(action)->updateIndexHeap(i);
-}
-
void Action::updateIndexHeap(int i) {
m_indexHeap = i;
}
double_update(&m_remains, m_lastValue * delta, sg_surf_precision*sg_maxmin_precision);
if (getModel() == surf_cpu_model_pm && TRACE_is_enabled()) {
- Resource *cpu = static_cast<Resource*>(lmm_constraint_id(lmm_get_cnst_from_var(getModel()->getMaxminSystem(), getVariable(), 0)));
+ simgrid::surf::Resource *cpu = static_cast<simgrid::surf::Resource*>(
+ lmm_constraint_id(lmm_get_cnst_from_var(getModel()->getMaxminSystem(), getVariable(), 0)));
TRACE_surf_host_set_utilization(cpu->getName(), getCategory(), m_lastValue, m_lastUpdate, now - m_lastUpdate);
}
XBT_DEBUG("Updating action(%p): remains is now %f", this, m_remains);
m_lastUpdate = now;
m_lastValue = lmm_variable_getvalue(getVariable());
}
+
+}
+}
#include <string>
#include <vector>
#include <memory>
+#include <utility>
+
#include <boost/function.hpp>
#include <boost/intrusive/list.hpp>
#include "surf/trace_mgr.h"
#include "surf/surf_routing.h"
#include "simgrid/platf_interface.h"
#include "surf/surf.h"
-#include "surf/surf_private.h"
-#include "internal_config.h"
+#include "src/surf/surf_private.h"
+#include "src/internal_config.h"
#ifdef LIBSIGC
#include <sigc++/sigc++.h>
-#define surf_callback(arg1, ...) sigc::signal<arg1,__VA_ARGS__>
-#define surf_callback_connect(callback, fun_ptr) callback.connect(sigc::ptr_fun(fun_ptr))
-#define surf_callback_emit(callback, ...) callback.emit(__VA_ARGS__)
+namespace simgrid {
+namespace surf {
+ // Wraps sigc++ signals with the interface of boost::signals2:
+ template<class T> class signal;
+ template<class R, class... P>
+ class signal<R(P...)> {
+ private:
+ sigc::signal<R, P...> sig_;
+ public:
+ template<class T> XBT_ALWAYS_INLINE
+ void connect(T&& slot)
+ {
+ sig_.connect(std::forward<T>(slot));
+ }
+ template<class Res, class... Args> XBT_ALWAYS_INLINE
+ void connect(Res(*slot)(Args...))
+ {
+ sig_.connect(sigc::ptr_fun(slot));
+ }
+ template<class... Args>
+ R operator()(Args&&... args) const
+ {
+ return sig_.emit(std::forward<Args>(args)...);
+ }
+ };
+}
+}
#else
#include <boost/signals2.hpp>
-#define surf_callback(arg1, ...) boost::signals2::signal<arg1(__VA_ARGS__)>
+namespace simgrid {
+namespace surf {
+ template<class T>
+ using signal = ::boost::signals2::signal<T>;
+}
+}
+#endif
+
+// Deprecated:
+#define surf_callback(arg1, ...) ::simgrid::surf::signal<arg1(__VA_ARGS__)>
#define surf_callback_connect(callback, fun_ptr) callback.connect(fun_ptr)
#define surf_callback_emit(callback, ...) callback(__VA_ARGS__)
-#endif
#ifdef _MSC_VER
#pragma warning( disable : 4251)
extern XBT_PRIVATE tmgr_history_t history;
#define NO_MAX_DURATION -1.0
-using namespace std;
-
/*********
* Utils *
*********/
extern XBT_PRIVATE double sg_sender_gap;
+namespace simgrid {
+namespace surf {
+
extern XBT_PRIVATE surf_callback(void, void) surfExitCallbacks;
+}
+}
+
int XBT_PRIVATE __surf_is_absolute_file_path(const char *file_path);
/***********
/**********
* Action *
**********/
+
XBT_PRIVATE void surf_action_lmm_update_index_heap(void *action, int i);
+XBT_PUBLIC_DATA(xbt_dynar_t) all_existing_models;
+
+namespace simgrid {
+namespace surf {
+
/** @ingroup SURF_interface
* @brief SURF action interface class
* @details An action is an event generated by a resource (e.g.: a communication for the network)
/**
* @brief Common initializations for the constructors
*/
- void initialize(Model *model, double cost, bool failed,
+ void initialize(simgrid::surf::Model *model, double cost, bool failed,
lmm_variable_t var = NULL);
public:
* @param cost The cost of the Action
* @param failed If the action is impossible (e.g.: execute something on a switched off host)
*/
- Action(Model *model, double cost, bool failed);
+ Action(simgrid::surf::Model *model, double cost, bool failed);
/**
* @brief Action constructor
* @param failed If the action is impossible (e.g.: execute something on a switched off host)
* @param var The lmm variable associated to this Action if it is part of a LMM component
*/
- Action(Model *model, double cost, bool failed, lmm_variable_t var);
+ Action(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var);
/** @brief Destructor */
virtual ~Action();
s_xbt_swag_hookup_t p_stateHookup;
- Model *getModel() {return p_model;}
+ simgrid::surf::Model *getModel() {return p_model;}
protected:
ActionList* p_stateSet;
int m_latencyLimited; /**< Set to 1 if is limited by latency, 0 otherwise */
#endif
double m_cost;
- Model *p_model;
+ simgrid::surf::Model *p_model;
void *p_data; /**< for your convenience */
/* LMM */
/*********
* Model *
*********/
-XBT_PUBLIC_DATA(xbt_dynar_t) model_list;
/** @ingroup SURF_interface
* @brief SURF model interface class
*/
XBT_PUBLIC_CLASS Model {
public:
- /** @brief Constructor */
Model();
- /** @brief Destructor */
virtual ~Model();
virtual void addTraces() =0;
- /**
- * @brief Get the set of [actions](@ref Action) in *ready* state
- *
- * @return The set of [actions](@ref Action) in *ready* state
- */
+ /** @brief Get the set of [actions](@ref Action) in *ready* state */
virtual ActionList* getReadyActionSet() {return p_readyActionSet;}
- /**
- * @brief Get the set of [actions](@ref Action) in *running* state
- *
- * @return The set of [actions](@ref Action) in *running* state
- */
+ /** @brief Get the set of [actions](@ref Action) in *running* state */
virtual ActionList* getRunningActionSet() {return p_runningActionSet;}
- /**
- * @brief Get the set of [actions](@ref Action) in *failed* state
- *
- * @return The set of [actions](@ref Action) in *failed* state
- */
+ /** @brief Get the set of [actions](@ref Action) in *failed* state */
virtual ActionList* getFailedActionSet() {return p_failedActionSet;}
- /**
- * @brief Get the set of [actions](@ref Action) in *done* state
- *
- * @return The set of [actions](@ref Action) in *done* state
- */
+ /** @brief Get the set of [actions](@ref Action) in *done* state */
virtual ActionList* getDoneActionSet() {return p_doneActionSet;}
- /**
- * @brief Get the set of modified [actions](@ref Action)
- *
- * @return The set of modified [actions](@ref Action)
- */
+ /** @brief Get the set of modified [actions](@ref Action) */
virtual ActionLmmListPtr getModifiedSet() {return p_modifiedSet;}
- /**
- * @brief Get the maxmin system of the current Model
- *
- * @return The maxmin system of the current Model
- */
+ /** @brief Get the maxmin system of the current Model */
lmm_system_t getMaxminSystem() {return p_maxminSystem;}
/**
* @brief Get the update mechanism of the current Model
* @see e_UM_t
- *
- * @return [description]
*/
e_UM_t getUpdateMechanism() {return p_updateMechanism;}
- /**
- * @brief Get Action heap
- * @details [TODO]
- *
- * @return The Action heap
- */
+ /** @brief Get Action heap */
xbt_heap_t getActionHeap() {return p_actionHeap;}
/**
- * @brief share the resources
- * @details Share the resources between the actions
+ * @brief Share the resources between the actions
*
* @param now The current time of the simulation
* @return The delta of time till the next action will finish
void (*solve) (lmm_system_t));
/**
- * @brief Update state of actions
- * @details Update action to the current time
+ * @brief Update action to the current time
*
* @param now The current time of the simulation
* @param delta The delta of time since the last update
ActionList* p_doneActionSet; /**< Actions in state SURF_ACTION_DONE */
};
+}
+}
+
/************
* Resource *
************/
* @brief Resource which have a metric handled by a maxmin system
*/
typedef struct {
- double scale; /**< The scale of the metric */
- double peak; /**< The peak of the metric */
+ double peak; /**< The peak of the metric, ie its max value */
+ double scale; /**< Current availability of the metric according to the traces, in [0,1] */
tmgr_trace_event_t event; /**< The associated trace event associated to the metric */
} s_surf_metric_t;
+namespace simgrid {
+namespace surf {
+
/** @ingroup SURF_interface
* @brief SURF resource interface class
* @details A resource represent an element of a component (e.g.: a link for the network)
*/
XBT_PUBLIC_CLASS Resource {
public:
- /**
- * @brief Resource constructor
- */
Resource();
/**
- * @brief Resource constructor
+ * @brief Constructor of non-LMM Resources
*
* @param model Model associated to this Resource
* @param name The name of the Resource
Resource(Model *model, const char *name, xbt_dict_t props);
/**
- * @brief Resource constructor
+ * @brief Constructor of LMM Resources
*
* @param model Model associated to this Resource
* @param name The name of the Resource
* @param constraint The lmm constraint associated to this Resource if it is part of a LMM component
*/
Resource(Model *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint);
+
+ Resource(Model *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint, e_surf_resource_state_t stateInit);
+
/**
* @brief Resource constructor
*
*/
Resource(Model *model, const char *name, xbt_dict_t props, e_surf_resource_state_t stateInit);
- /**
- * @brief Resource destructor
- */
virtual ~Resource();
- /**
- * @brief Get the Model of the current Resource
- *
- * @return The Model of the current Resource
- */
+ /** @brief Get the Model of the current Resource */
Model *getModel();
- /**
- * @brief Get the name of the current Resource
- *
- * @return The name of the current Resource
- */
+ /** @brief Get the name of the current Resource */
const char *getName();
- /**
- * @brief Get the properties of the current Resource
- *
- * @return The properties of the current Resource
- */
+ /** @brief Get the properties of the current Resource */
virtual xbt_dict_t getProperties();
/**
*/
virtual void updateState(tmgr_trace_event_t event_type, double value, double date)=0;
- /**
- * @brief Check if the current Resource is used
- * @return true if the current Resource is used, false otherwise
- */
+ /** @brief Check if the current Resource is used (if it currently serves an action) */
virtual bool isUsed()=0;
- /**
- * @brief Check if the current Resource is active
- *
- * @return true if the current Resource is active, false otherwise
- */
+ /** @brief Check if the current Resource is active */
bool isOn();
-
- /**
- * @brief Turn on the current Resource
- */
+ /** @brief Turn on the current Resource */
void turnOn();
-
- /**
- * @brief Turn off the current Resource
- */
+ /** @brief Turn off the current Resource */
void turnOff();
- /**
- * @brief Get the [state](\ref e_surf_resource_state_t) of the current Resource
- *
- * @return The state of the currenrt Resource
- */
+ /** @brief Get the [state](\ref e_surf_resource_state_t) of the current Resource */
virtual e_surf_resource_state_t getState();
-
- /**
- * @brief Set the [state](\ref e_surf_resource_state_t) of the current Resource
- *
- * @param state The new state of the current Resource
- */
+ /** @brief Set the [state](\ref e_surf_resource_state_t) of the current Resource */
virtual void setState(e_surf_resource_state_t state);
private:
bool m_running;
e_surf_resource_state_t m_stateCurrent;
- /* LMM */
-public:
- /**
- * @brief Get the lmm constraint associated to this Resource if it is part of a LMM component
- *
- * @return The lmm constraint associated to this Resource
- */
+
+public: /* LMM */
+ /** @brief Get the lmm constraint associated to this Resource if it is part of a LMM component */
lmm_constraint_t getConstraint();
private:
lmm_constraint_t p_constraint;
};
+}
+}
+
#endif /* SURF_MODEL_H_ */
#include "xbt/log.h"
#include "surf/surfxml_parse.h"
#include "surf/random_mgr.h"
-#include "instr/instr_private.h"
+#include "src/instr/instr_private.h"
#include "surf/surfxml_parse_values.h"
#define NO_MAX_DURATION -1.0
XBT_PUBLIC(void) routing_exit(void);
XBT_PUBLIC(void) storage_register_callbacks(void);
-/* ***************************************** */
-/* TUTORIAL: New TAG */
-XBT_PUBLIC(void) gpu_register_callbacks(void);
-/* ***************************************** */
+XBT_PRIVATE void routing_new_cluster(sg_platf_cluster_cbarg_t cluster);
XBT_PUBLIC(void) routing_register_callbacks(void);
XBT_PUBLIC(void) generic_free_route(sg_platf_route_cbarg_t route); // FIXME rename to routing_route_free
/********** Tracing **********/
/* from surf_instr.c */
-void TRACE_surf_host_set_power(double date, const char *resource, double power);
+void TRACE_surf_host_set_speed(double date, const char *resource, double power);
void TRACE_surf_link_set_bandwidth(double date, const char *resource, double bandwidth);
+/********** Instr. **********/
+
+XBT_PRIVATE void sg_instr_AS_begin(sg_platf_AS_cbarg_t AS);
+XBT_PRIVATE void sg_instr_new_router(sg_platf_router_cbarg_t router);
+XBT_PRIVATE void sg_instr_new_host(sg_platf_host_cbarg_t host);
+XBT_PRIVATE void sg_instr_AS_end(void);
+
SG_END_DECL()
#endif /* _SURF_SURF_PRIVATE_H */
#include "surf/surfxml_parse_values.h"
+/*************
+ * Callbacks *
+ *************/
+
+namespace simgrid {
+namespace surf {
+
+surf_callback(void, simgrid::surf::RoutingEdge*) routingEdgeCreatedCallbacks;
+surf_callback(void, simgrid::surf::As*) asCreatedCallbacks;
+
+}
+}
/**
* @ingroup SURF_build_api
*
* Routing edges are either host and routers, whatever
*/
-RoutingEdge *sg_routing_edge_by_name_or_null(const char *name) {
+simgrid::surf::RoutingEdge *sg_routing_edge_by_name_or_null(const char *name)
+{
sg_host_t h = sg_host_by_name(name);
- RoutingEdge *net_elm = h==NULL?NULL: sg_host_edge(h);
+ simgrid::surf::RoutingEdge *net_elm = h==NULL?NULL: sg_host_edge(h);
if (!net_elm)
- net_elm = (RoutingEdge*) xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL);
+ net_elm = (simgrid::surf::RoutingEdge*) xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL);
return net_elm;
}
/* Global vars */
-RoutingPlatf *routing_platf = NULL;
-As *current_routing = NULL;
+simgrid::surf::RoutingPlatf *routing_platf = NULL;
/* global parse functions */
extern xbt_dynar_t mount_list;
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route, surf, "Routing part of surf");
-static void routing_parse_peer(sg_platf_peer_cbarg_t peer); /* peer bypass */
+/** The current AS in the parsing */
+static simgrid::surf::As *current_routing = NULL;
+simgrid::surf::As* routing_get_current()
+{
+ return current_routing;
+}
+
// static void routing_parse_Srandom(void); /* random bypass */
static void routing_parse_postparse(void);
/**
* \brief Add a "host_link" to the network element list
*/
-static void parse_S_host_link(sg_platf_host_link_cbarg_t host)
+void sg_platf_new_host_link(sg_platf_host_link_cbarg_t host)
{
- RoutingEdge *info = sg_host_edge(sg_host_by_name(host->id));
+ simgrid::surf::RoutingEdge *info = sg_host_edge(sg_host_by_name(host->id));
xbt_assert(info, "Host '%s' not found!", host->id);
xbt_assert(current_routing->p_modelDesc == &routing_models[SURF_MODEL_CLUSTER] ||
current_routing->p_modelDesc == &routing_models[SURF_MODEL_VIVALDI],
/**
* \brief Add a "host" to the network element list
*/
-static void parse_S_host(sg_platf_host_cbarg_t host)
+simgrid::surf::RoutingEdge *routing_add_host(
+ simgrid::surf::As* current_routing, sg_platf_host_cbarg_t host)
{
if (current_routing->p_hierarchy == SURF_ROUTING_NULL)
current_routing->p_hierarchy = SURF_ROUTING_BASE;
xbt_assert(!sg_host_by_name(host->id),
"Reading a host, processing unit \"%s\" already exists", host->id);
- RoutingEdge *info = new RoutingEdgeImpl(xbt_strdup(host->id),
+ simgrid::surf::RoutingEdge *routingEdge =
+ new simgrid::surf::RoutingEdgeImpl(xbt_strdup(host->id),
-1,
SURF_NETWORK_ELEMENT_HOST,
current_routing);
- info->setId(current_routing->parsePU(info));
- sg_host_edge_set(sg_host_by_name_or_create(host->id), info);
- XBT_DEBUG("Having set name '%s' id '%d'", host->id, info->getId());
+ routingEdge->setId(current_routing->parsePU(routingEdge));
+ sg_host_edge_set(sg_host_by_name_or_create(host->id), routingEdge);
+ XBT_DEBUG("Having set name '%s' id '%d'", host->id, routingEdge->getId());
+ simgrid::surf::routingEdgeCreatedCallbacks(routingEdge);
if(mount_list){
xbt_lib_set(storage_lib, host->id, ROUTING_STORAGE_HOST_LEVEL, (void *) mount_list);
xbt_lib_set(host_lib, host->id, COORD_HOST_LEVEL, (void *) ctn);
XBT_DEBUG("Having set host coordinates for '%s'",host->id);
}
-}
-/**
- * \brief Add a "router" to the network element list
- */
-static void parse_S_router(sg_platf_router_cbarg_t router)
-{
- if (current_routing->p_hierarchy == SURF_ROUTING_NULL)
- current_routing->p_hierarchy = SURF_ROUTING_BASE;
- xbt_assert(!xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL),
- "Reading a router, processing unit \"%s\" already exists",
- router->id);
-
- RoutingEdge *info = new RoutingEdgeImpl(xbt_strdup(router->id),
- -1,
- SURF_NETWORK_ELEMENT_ROUTER,
- current_routing);
- info->setId(current_routing->parsePU(info));
- xbt_lib_set(as_router_lib, router->id, ROUTING_ASR_LEVEL, (void *) info);
- XBT_DEBUG("Having set name '%s' id '%d'", router->id, info->getId());
-
- if (router->coord && strcmp(router->coord, "")) {
- unsigned int cursor;
- char*str;
-
- if (!COORD_ASR_LEVEL)
- xbt_die ("To use host coordinates, please add --cfg=network/coordinates:yes to your command line");
- /* Pre-parse the host coordinates */
- xbt_dynar_t ctn_str = xbt_str_split_str(router->coord, " ");
- xbt_dynar_t ctn = xbt_dynar_new(sizeof(double),NULL);
- xbt_dynar_foreach(ctn_str,cursor, str) {
- double val = atof(str);
- xbt_dynar_push(ctn,&val);
- }
- xbt_dynar_shrink(ctn, 0);
- xbt_dynar_free(&ctn_str);
- xbt_lib_set(as_router_lib, router->id, COORD_ASR_LEVEL, (void *) ctn);
- XBT_DEBUG("Having set router coordinates for '%s'",router->id);
- }
-}
-
-/**
- * \brief Store the route by calling the set_route function of the current routing component
- */
-static void parse_E_route(sg_platf_route_cbarg_t route)
-{
- /*FIXME:REMOVE:xbt_assert(current_routing->parse_route,
- "no defined method \"set_route\" in \"%s\"",
- current_routing->name);*/
-
- current_routing->parseRoute(route);
+ return routingEdge;
}
/**
current_routing->parseASroute(ASroute);
}
-/**
- * \brief Store the bypass route by calling the set_bypassroute function of the current routing component
- */
-static void parse_E_bypassRoute(sg_platf_route_cbarg_t route)
-{
- /*FIXME:REMOVE:xbt_assert(current_routing->parse_bypassroute,
- "Bypassing mechanism not implemented by routing '%s'",
- current_routing->name);*/
-
- current_routing->parseBypassroute(route);
-}
-
-/**
- * \brief Store the bypass route by calling the set_bypassroute function of the current routing component
- */
-static void parse_E_bypassASroute(sg_platf_route_cbarg_t ASroute)
-{
- /*FIXME:REMOVE:xbt_assert(current_routing->parse_bypassroute,
- "Bypassing mechanism not implemented by routing '%s'",
- current_routing->name);*/
- current_routing->parseBypassroute(ASroute);
-}
-
-static void routing_parse_trace(sg_platf_trace_cbarg_t trace)
+void sg_platf_new_trace(sg_platf_trace_cbarg_t trace)
{
tmgr_trace_t tmgr_trace;
if (!trace->file || strcmp(trace->file, "") != 0) {
xbt_dict_set(traces_set_list, trace->id, (void *) tmgr_trace, NULL);
}
-static void routing_parse_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect)
+void sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect)
{
xbt_assert(xbt_dict_get_or_null
(traces_set_list, trace_connect->trace),
}
/* make a new routing component */
- As *new_as = model->create();
+ simgrid::surf::As *new_as = model->create();
new_as->p_modelDesc = model;
new_as->p_hierarchy = SURF_ROUTING_NULL;
new_as->p_name = xbt_strdup(AS->id);
- RoutingEdge *info = new RoutingEdgeImpl(xbt_strdup(new_as->p_name),
+ simgrid::surf::RoutingEdge *info =
+ new simgrid::surf::RoutingEdgeImpl(xbt_strdup(new_as->p_name),
-1,
SURF_NETWORK_ELEMENT_AS,
current_routing);
current_routing = new_as;
current_routing->p_netElem = info;
+ simgrid::surf::routingEdgeCreatedCallbacks(info);
+ simgrid::surf::asCreatedCallbacks(new_as);
}
/**
* even if you add stuff to a closed AS
*
*/
-void routing_AS_end(sg_platf_AS_cbarg_t /*AS*/)
+void routing_AS_end()
{
if (current_routing == NULL) {
{
xbt_assert(src && dst, "bad parameters for \"elements_father\" method");
#define ELEMENTS_FATHER_MAXDEPTH 16 /* increase if it is not enough */
- As *src_as, *dst_as;
- As *path_src[ELEMENTS_FATHER_MAXDEPTH];
- As *path_dst[ELEMENTS_FATHER_MAXDEPTH];
+ simgrid::surf::As *src_as, *dst_as;
+ simgrid::surf::As *path_src[ELEMENTS_FATHER_MAXDEPTH];
+ simgrid::surf::As *path_dst[ELEMENTS_FATHER_MAXDEPTH];
int index_src = 0;
int index_dst = 0;
- As *current;
- As *current_src;
- As *current_dst;
- As *father;
+ simgrid::surf::As *current;
+ simgrid::surf::As *current_src;
+ simgrid::surf::As *current_dst;
+ simgrid::surf::As *father;
/* (1) find the as where the src and dst are located */
sg_routing_edge_t src_data = src;
* This function is called by "get_route" and "get_latency". It allows to walk
* recursively through the ASes tree.
*/
-static void _get_route_and_latency(RoutingEdge *src, RoutingEdge *dst,
- xbt_dynar_t * links, double *latency)
+static void _get_route_and_latency(
+ simgrid::surf::RoutingEdge *src, simgrid::surf::RoutingEdge *dst,
+ xbt_dynar_t * links, double *latency)
{
s_sg_platf_route_cbarg_t route = SG_PLATF_ROUTE_INITIALIZER;
memset(&route,0,sizeof(route));
XBT_DEBUG("Solve route/latency \"%s\" to \"%s\"", src->getName(), dst->getName());
/* Find how src and dst are interconnected */
- As *common_father, *src_father, *dst_father;
+ simgrid::surf::As *common_father, *src_father, *dst_father;
elements_father(src, dst, &common_father, &src_father, &dst_father);
XBT_DEBUG("elements_father: common father '%s' src_father '%s' dst_father '%s'",
common_father->p_name, src_father->p_name, dst_father->p_name);
route.link_list = xbt_dynar_new(sizeof(sg_routing_link_t), NULL);
// Find the net_card corresponding to father
- RoutingEdge *src_father_net_elm = src_father->p_netElem;
- RoutingEdge *dst_father_net_elm = dst_father->p_netElem;
+ simgrid::surf::RoutingEdge *src_father_net_elm = src_father->p_netElem;
+ simgrid::surf::RoutingEdge *dst_father_net_elm = dst_father->p_netElem;
common_father->getRouteAndLatency(src_father_net_elm, dst_father_net_elm,
&route, latency);
return edge->getRcType();
}
+namespace simgrid {
+namespace surf {
/**
* \brief Find a route between hosts
* walk through the routing components tree and find a route between hosts
* by calling the differents "get_route" functions in each routing component.
*/
-void RoutingPlatf::getRouteAndLatency(RoutingEdge *src, RoutingEdge *dst,
- xbt_dynar_t* route, double *latency)
+void RoutingPlatf::getRouteAndLatency(
+ simgrid::surf::RoutingEdge *src, simgrid::surf::RoutingEdge *dst,
+ xbt_dynar_t* route, double *latency)
{
XBT_DEBUG("routing_get_route_and_latency from %s to %s", src->getName(), dst->getName());
if (!*route) {
return ret;
}
+}
+}
+
e_surf_network_element_type_t routing_get_network_element_type(const char *name)
{
- RoutingEdge *rc = sg_routing_edge_by_name_or_null(name);
+ simgrid::surf::RoutingEdge *rc = sg_routing_edge_by_name_or_null(name);
if (rc)
return rc->getRcType();
void routing_model_create( void *loopback)
{
/* config the uniq global routing */
- routing_platf = new RoutingPlatf();
+ routing_platf = new simgrid::surf::RoutingPlatf();
routing_platf->p_root = NULL;
routing_platf->p_loopback = loopback;
routing_platf->p_lastRoute = xbt_dynar_new(sizeof(sg_routing_link_t),NULL);
void routing_cluster_add_backbone(void* bb) {
xbt_assert(current_routing->p_modelDesc == &routing_models[SURF_MODEL_CLUSTER],
"You have to be in model Cluster to use tag backbone!");
- xbt_assert(!surf_as_cluster_get_backbone(current_routing), "The backbone link is already defined!");
- surf_as_cluster_set_backbone(current_routing, bb);
+ xbt_assert(!static_cast<AsCluster*>(current_routing)->p_backbone, "The backbone link is already defined!");
+ static_cast<simgrid::surf::AsCluster*>(current_routing)->p_backbone =
+ static_cast<simgrid::surf::Link*>(bb);
XBT_DEBUG("Add a backbone to AS '%s'", current_routing->p_name);
}
-static void routing_parse_cabinet(sg_platf_cabinet_cbarg_t cabinet)
+void sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet)
{
int start, end, i;
char *groups , *host_id , *link_id = NULL;
memset(&host, 0, sizeof(host));
host.initial_state = SURF_RESOURCE_ON;
host.pstate = 0;
- host.power_scale = 1.0;
+ host.speed_scale = 1.0;
host.core_amount = 1;
s_sg_platf_link_cbarg_t link = SG_PLATF_LINK_INITIALIZER;
link_id = bprintf("link_%s%d%s",cabinet->prefix,i,cabinet->suffix);
host.id = host_id;
link.id = link_id;
- xbt_dynar_t power_state_list = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push(power_state_list,&cabinet->power);
- host.power_peak = power_state_list;
+ host.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push(host.speed_peak,&cabinet->speed);
sg_platf_new_host(&host);
+ xbt_dynar_free(&host.speed_peak);
sg_platf_new_link(&link);
char* link_up = bprintf("%s_UP",link_id);
xbt_dynar_free(&radical_elements);
}
-static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster)
+void routing_new_cluster(sg_platf_cluster_cbarg_t cluster)
{
+ using simgrid::surf::AsCluster;
+ using simgrid::surf::AsClusterTorus;
+ using simgrid::surf::AsClusterFatTree;
+
char *host_id, *groups, *link_id = NULL;
xbt_dict_t patterns = NULL;
int rankId=0;
bprintf("%s%d%s", cluster->prefix, i, cluster->suffix);
link_id = bprintf("%s_link_%d", cluster->id, i);
- XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\">", host_id, cluster->power);
+ XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\">", host_id, cluster->speed);
memset(&host, 0, sizeof(host));
host.id = host_id;
xbt_dict_set(patterns, "radical", bprintf("%d", i), NULL);
char *avail_file = xbt_str_varsubst(cluster->availability_trace, patterns);
XBT_DEBUG("\tavailability_file=\"%s\"", avail_file);
- host.power_trace = tmgr_trace_new_from_file(avail_file);
+ host.speed_trace = tmgr_trace_new_from_file(avail_file);
xbt_free(avail_file);
} else {
XBT_DEBUG("\tavailability_file=\"\"");
XBT_DEBUG("\tstate_file=\"\"");
}
- xbt_dynar_t power_state_list = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push(power_state_list,&cluster->power);
- host.power_peak = power_state_list;
+ host.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push(host.speed_peak,&cluster->speed);
host.pstate = 0;
//host.power_peak = cluster->power;
- host.power_scale = 1.0;
+ host.speed_scale = 1.0;
host.core_amount = cluster->core_amount;
host.initial_state = SURF_RESOURCE_ON;
host.coord = "";
sg_platf_new_host(&host);
+ xbt_dynar_free(&host.speed_peak);
XBT_DEBUG("</host>");
XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_id,
info_loop.link_up = Link::byName(tmp_link);
info_loop.link_down = info_loop.link_up;
free(tmp_link);
- xbt_dynar_set(current_routing->p_linkUpDownList, rankId*(static_cast<AsCluster*>(current_routing))->p_nb_links_per_node, &info_loop);
+ xbt_dynar_set(current_routing->p_linkUpDownList,
+ rankId*(static_cast<AsCluster*>(current_routing))->p_nb_links_per_node, &info_loop);
}
//add a limiter link (shared link to account for maximal bandwidth of the node)
info_lim.link_up = Link::byName(tmp_link);
info_lim.link_down = info_lim.link_up;
free(tmp_link);
+ auto as_cluster = static_cast<AsCluster*>(current_routing);
xbt_dynar_set(current_routing->p_linkUpDownList,
- rankId*(static_cast<AsCluster*>(current_routing))->p_nb_links_per_node + static_cast<AsCluster*>(current_routing)->p_has_loopback ,
+ rankId*(as_cluster)->p_nb_links_per_node + as_cluster->p_has_loopback ,
&info_lim);
}
// For fat trees, the links must be created once all nodes have been added
if(cluster->topology == SURF_CLUSTER_FAT_TREE) {
- static_cast<AsClusterFatTree*>(current_routing)->create_links();
+ static_cast<simgrid::surf::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
bprintf("%s%s_router%s", cluster->prefix, cluster->id,
cluster->suffix);
sg_platf_new_router(&router);
- ((AsCluster*)current_routing)->p_router = (RoutingEdge*) xbt_lib_get_or_null(as_router_lib, router.id, ROUTING_ASR_LEVEL);
+ ((AsCluster*)current_routing)->p_router = (simgrid::surf::RoutingEdge*) xbt_lib_get_or_null(as_router_lib, router.id, ROUTING_ASR_LEVEL);
free(newid);
//Make the backbone
xbt_dict_free(&random_value);
}
-static void routing_parse_peer(sg_platf_peer_cbarg_t peer)
+void sg_platf_new_peer(sg_platf_peer_cbarg_t peer)
{
+ using simgrid::surf::RoutingEdge;
+ using simgrid::surf::AsCluster;
+
char *host_id = NULL;
char *link_id = NULL;
char *router_id = NULL;
current_routing->p_linkUpDownList = xbt_dynar_new(sizeof(s_surf_parsing_link_up_down_t),NULL);
- XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\"/>", host_id, peer->power);
+ XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\"/>", host_id, peer->speed);
s_sg_platf_host_cbarg_t host = SG_PLATF_HOST_INITIALIZER;
memset(&host, 0, sizeof(host));
host.initial_state = SURF_RESOURCE_ON;
host.id = host_id;
- xbt_dynar_t power_state_list = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push(power_state_list,&peer->power);
- host.power_peak = power_state_list;
+ host.speed_peak = xbt_dynar_new(sizeof(double), NULL);
+ xbt_dynar_push(host.speed_peak,&peer->speed);
host.pstate = 0;
//host.power_peak = peer->power;
- host.power_scale = 1.0;
- host.power_trace = peer->availability_trace;
+ host.speed_scale = 1.0;
+ host.speed_trace = peer->availability_trace;
host.state_trace = peer->state_trace;
host.core_amount = 1;
sg_platf_new_host(&host);
+ xbt_dynar_free(&host.speed_peak);
s_sg_platf_link_cbarg_t link = SG_PLATF_LINK_INITIALIZER;
memset(&link, 0, sizeof(link));
xbt_lib_cursor_t cursor;
char *key;
void **data;
- RoutingEdge *host_elm;
+ simgrid::surf::RoutingEdge *host_elm;
xbt_lib_foreach(storage_lib, cursor, key, data) {
if(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != NULL) {
- Storage *storage = static_cast<Storage*>(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
+ simgrid::surf::Storage *storage = static_cast<simgrid::surf::Storage*>(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
host_elm = sg_routing_edge_by_name_or_null(storage->p_attach);
if(!host_elm)
surf_parse_error("Unable to attach storage %s: host %s doesn't exist.", storage->getName(), storage->p_attach);
void routing_register_callbacks()
{
- sg_platf_host_add_cb(parse_S_host);
- sg_platf_router_add_cb(parse_S_router);
- sg_platf_host_link_add_cb(parse_S_host_link);
- sg_platf_route_add_cb(parse_E_route);
- sg_platf_ASroute_add_cb(parse_E_ASroute);
- sg_platf_bypassRoute_add_cb(parse_E_bypassRoute);
- sg_platf_bypassASroute_add_cb(parse_E_bypassASroute);
-
- sg_platf_cluster_add_cb(routing_parse_cluster);
- sg_platf_cabinet_add_cb(routing_parse_cabinet);
-
- sg_platf_peer_add_cb(routing_parse_peer);
sg_platf_postparse_add_cb(routing_parse_postparse);
sg_platf_postparse_add_cb(check_disk_attachment);
- /* we care about the ASes while parsing the platf. Incredible, isnt it? */
- sg_platf_AS_end_add_cb(routing_AS_end);
- sg_platf_AS_begin_add_cb(routing_AS_begin);
-
- sg_platf_trace_add_cb(routing_parse_trace);
- sg_platf_trace_connect_add_cb(routing_parse_trace_connect);
-
instr_routing_define_callbacks();
}
* This fuction is call by "finalize". It allow to finalize the
* AS or routing components. It delete all the structures.
*/
-static void finalize_rec(As *as) {
+static void finalize_rec(simgrid::surf::As *as) {
xbt_dict_cursor_t cursor = NULL;
char *key;
AS_t elem;
delete routing_platf;
}
+namespace simgrid {
+namespace surf {
+
RoutingPlatf::~RoutingPlatf()
{
xbt_dynar_free(&p_lastRoute);
finalize_rec(p_root);
}
+}
+}
+
AS_t surf_AS_get_routing_root() {
return routing_platf->p_root;
}
-const char *surf_AS_get_name(As *as) {
+const char *surf_AS_get_name(simgrid::surf::As *as) {
return as->p_name;
}
-static As *surf_AS_recursive_get_by_name(As *current, const char * name) {
+static simgrid::surf::As *surf_AS_recursive_get_by_name(
+ simgrid::surf::As *current, const char * name)
+{
xbt_dict_cursor_t cursor = NULL;
char *key;
AS_t elem;
- As *tmp = NULL;
+ simgrid::surf::As *tmp = NULL;
if(!strcmp(current->p_name, name))
return current;
return tmp;
}
-
-As *surf_AS_get_by_name(const char * name) {
- As *as = surf_AS_recursive_get_by_name(routing_platf->p_root, name);
+simgrid::surf::As *surf_AS_get_by_name(const char * name)
+{
+ simgrid::surf::As *as = surf_AS_recursive_get_by_name(routing_platf->p_root, name);
if(as == NULL)
XBT_WARN("Impossible to find an AS with name %s, please check your input", name);
return as;
}
-xbt_dict_t surf_AS_get_routing_sons(As *as) {
+xbt_dict_t surf_AS_get_routing_sons(simgrid::surf::As *as)
+{
return as->p_routingSons;
}
-const char *surf_AS_get_model(As *as) {
+const char *surf_AS_get_model(simgrid::surf::As *as)
+{
return as->p_modelDesc->name;
}
-xbt_dynar_t surf_AS_get_hosts(As *as) {
+xbt_dynar_t surf_AS_get_hosts(simgrid::surf::As *as)
+{
xbt_dynar_t elms = as->p_indexNetworkElm;
sg_routing_edge_t relm;
xbt_dictelm_t delm;
int count = xbt_dynar_length(elms);
xbt_dynar_t res = xbt_dynar_new(sizeof(xbt_dictelm_t), NULL);
for (index = 0; index < count; index++) {
- relm = xbt_dynar_get_as(elms, index, RoutingEdge*);
+ relm = xbt_dynar_get_as(elms, index, simgrid::surf::RoutingEdge*);
delm = xbt_lib_get_elm_or_null(host_lib, relm->getName());
if (delm!=NULL) {
xbt_dynar_push(res, &delm);
XBT_PUBLIC(void) routing_model_create( void *loopback);
-/* ************************************************************************** */
-/* ************************* GRAPH EXPORTING FUNCTIONS ********************** */
-XBT_PRIVATE xbt_node_t new_xbt_graph_node (xbt_graph_t graph, const char *name, xbt_dict_t nodes);
-XBT_PRIVATE xbt_edge_t new_xbt_graph_edge (xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges);
+namespace simgrid {
+namespace surf {
/***********
* Classes *
* @brief A routing edge
* @details [long description]
*/
-struct RoutingEdge {
+class RoutingEdge {
public:
virtual ~RoutingEdge(){};
virtual int getId()=0;
* @param into [description]
* @param latency [description]
*/
- virtual void getRouteAndLatency(RoutingEdge *src, RoutingEdge *dst, sg_platf_route_cbarg_t into, double *latency)=0;
+ virtual void getRouteAndLatency(
+ RoutingEdge *src, RoutingEdge *dst,
+ sg_platf_route_cbarg_t into, double *latency)=0;
virtual xbt_dynar_t getOneLinkRoutes()=0;
virtual void getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges)=0;
- virtual sg_platf_route_cbarg_t getBypassRoute(RoutingEdge *src, RoutingEdge *dst, double *lat)=0;
+ virtual sg_platf_route_cbarg_t getBypassRoute(
+ RoutingEdge *src, RoutingEdge *dst,
+ double *lat)=0;
/* The parser calls the following functions to inform the routing models
* that a new element is added to the AS currently built.
*
* Of course, only the routing model of this AS is informed, not every ones */
virtual int parsePU(RoutingEdge *elm)=0; /* A host or a router, whatever */
- virtual int parseAS( RoutingEdge *elm)=0;
+ virtual int parseAS(RoutingEdge *elm)=0;
virtual void parseRoute(sg_platf_route_cbarg_t route)=0;
virtual void parseASroute(sg_platf_route_cbarg_t route)=0;
virtual void parseBypassroute(sg_platf_route_cbarg_t e_route)=0;
void getRouteAndLatency(RoutingEdge *src, RoutingEdge *dst, xbt_dynar_t * links, double *latency);
};
+/*************
+ * Callbacks *
+ *************/
+
+XBT_PUBLIC_DATA(surf_callback(void, RoutingEdge*)) routingEdgeCreatedCallbacks;
+XBT_PUBLIC_DATA(surf_callback(void, As*)) asCreatedCallbacks;
+
+}
+}
+
#endif /* NETWORK_ROUTING_HPP_ */
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "surf_routing_cluster.hpp"
+#include "surf_routing_private.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_cluster, surf, "Routing part of surf");
AS_t model_cluster_create(void)
{
- return new AsCluster();
+ return new simgrid::surf::AsCluster();
}
+namespace simgrid {
+namespace surf {
+
/* Creation routing model functions */
AsCluster::AsCluster() : AsNone()
{
}
if (p_backbone) {
- xbt_dynar_push_as(route->link_list, void *, static_cast<Resource*>(p_backbone));
+ xbt_dynar_push_as(route->link_list, void *,
+ static_cast<simgrid::surf::Resource*>(p_backbone));
if (lat)
*lat += p_backbone->getLatency();
}
if (info.link_up) { // link up
- const char *link_name = static_cast<Resource*>(info.link_up)->getName();
+ const char *link_name = static_cast<simgrid::surf::Resource*>(
+ info.link_up)->getName();
current = new_xbt_graph_node(graph, link_name, nodes);
new_xbt_graph_edge(graph, previous, current, edges);
}
if (info.link_down) { // link down
- const char *link_name = static_cast<Resource*>(info.link_down)->getName();
+ const char *link_name = static_cast<simgrid::surf::Resource*>(
+ info.link_down)->getName();
current = new_xbt_graph_node(graph, link_name, nodes);
new_xbt_graph_edge(graph, previous, current, edges);
return xbt_dynar_length(p_indexNetworkElm)-1;
}
+}
+}
#include "surf_routing_none.hpp"
#include "network_interface.hpp"
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
-class XBT_PRIVATE AsCluster;
+class XBT_PRIVATE AsCluster;
/* ************************************************** */
/* ************** Cluster ROUTING **************** */
};
+}
+}
#endif /* SURF_ROUTING_CLUSTER_HPP_ */
+#include <cstdlib>
+
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+#include <iostream>
+
#include "surf_routing_cluster_fat_tree.hpp"
#include "xbt/lib.h"
AS_t model_fat_tree_cluster_create(void)
{
- return new AsClusterFatTree();
+ return new simgrid::surf::AsClusterFatTree();
}
+namespace simgrid {
+namespace surf {
+
AsClusterFatTree::AsClusterFatTree() : levels(0) {
XBT_DEBUG("Creating a new fat tree.");
}
void AsClusterFatTree::parse_specific_arguments(sg_platf_cluster_cbarg_t
cluster) {
- std::vector<string> parameters;
- std::vector<string> tmp;
+ std::vector<std::string> parameters;
+ std::vector<std::string> tmp;
boost::split(parameters, cluster->topo_parameters, boost::is_any_of(";"));
}
-void AsClusterFatTree::generateDotFile(const string& filename) const {
- ofstream file;
+void AsClusterFatTree::generateDotFile(const std::string& filename) const {
+ std::ofstream file;
/* Maybe should we get directly a char*, as open takes strings only beginning
* with C++11...
*/
- file.open(filename.c_str(), ios::out | ios::trunc);
+ file.open(filename.c_str(), std::ios::out | std::ios::trunc);
if(file.is_open()) {
file << "graph AsClusterFatTree {\n";
uniqueId++;
free((void*)linkTemplate.id);
}
+
+}
+}
#ifndef SURF_ROUTING_CLUSTER_FAT_TREE_HPP_
#define SURF_ROUTING_CLUSTER_FAT_TREE_HPP_
+#include <string>
+#include <map>
+#include <vector>
+
#include <xbt/base.h>
#include "surf_routing_cluster.hpp"
+namespace simgrid {
+namespace surf {
/** \file surf_routing_cluster_fat_tree.cpp
* The class AsClusterFatTree describes PGFT, as introduced by Eitan Zahavi
/** \brief Add a processing node.
*/
void addProcessingNode(int id);
- void generateDotFile(const string& filename = "fatTree.dot") const;
+ void generateDotFile(const std::string& filename = "fatTree.dot") const;
private:
bool areRelated(FatTreeNode *parent, FatTreeNode *child);
bool isInSubTree(FatTreeNode *root, FatTreeNode *node);
};
+
+}
+}
+
#endif
AS_t model_torus_cluster_create(void)
{
- return new AsClusterTorus();
+ return new simgrid::surf::AsClusterTorus();
}
+namespace simgrid {
+namespace surf {
+
/* Creation routing model functions */
AsClusterTorus::AsClusterTorus() : AsCluster()
{
return;
}
+
+}
+}
#include "network_interface.hpp"
#include "surf_routing_cluster.hpp"
-class XBT_PRIVATE AsClusterTorus: public AsCluster {
+namespace simgrid {
+namespace surf {
+
+class XBT_PRIVATE AsClusterTorus: public simgrid::surf::AsCluster {
public:
AsClusterTorus();
virtual ~AsClusterTorus();
virtual void create_links_for_node(sg_platf_cluster_cbarg_t cluster, int id, int rank, int position);
virtual void getRouteAndLatency(RoutingEdge *src, RoutingEdge *dst, sg_platf_route_cbarg_t into, double *latency);
void parse_specific_arguments(sg_platf_cluster_cbarg_t cluster);
-
-
xbt_dynar_t p_dimensions;
-
};
+}
+}
#endif
}
AS_t model_dijkstra_create(void){
- return new AsDijkstra(0);
+ return new simgrid::surf::AsDijkstra(0);
}
AS_t model_dijkstracache_create(void){
- return new AsDijkstra(1);
+ return new simgrid::surf::AsDijkstra(1);
}
void model_dijkstra_both_end(AS_t as)
{
- AsDijkstra *THIS_AS = static_cast<AsDijkstra*>(as);
+ simgrid::surf::AsDijkstra *THIS_AS
+ = static_cast<simgrid::surf::AsDijkstra*>(as);
xbt_node_t node = NULL;
unsigned int cursor2;
xbt_dynar_t nodes = NULL;
/* Utility functions */
+namespace simgrid {
+namespace surf {
+
xbt_node_t AsDijkstra::routeGraphNewNode(int id, int graph_id)
{
xbt_node_t node = NULL;
}
xbt_dynar_free(&route->link_list);
}
+
+}
+}
int size;
} s_route_cache_element_t, *route_cache_element_t;
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
+
class XBT_PRIVATE AsDijkstra;
class AsDijkstra : public AsGeneric {
int m_cached;
};
+}
+}
+
#endif /* SURF_ROUTING_DIJKSTRA_HPP_ */
AS_t model_floyd_create(void)
{
- return new AsFloyd();
+ return new simgrid::surf::AsFloyd();
}
void model_floyd_end(AS_t current_routing)
{
- static_cast<AsFloyd*>(current_routing)->end();
+ static_cast<simgrid::surf::AsFloyd*>(current_routing)->end();
}
+namespace simgrid {
+namespace surf {
+
AsFloyd::AsFloyd(): AsGeneric() {
p_predecessorTable = NULL;
p_costTable = NULL;
}
}
}
+
+}
+}
#include "surf_routing_generic.hpp"
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
sg_platf_route_cbarg_t *p_linkTable;
};
-
+}
+}
#endif /* SURF_ROUTING_FLOYD_HPP_ */
AS_t model_full_create(void)
{
- return new AsFull();
+ return new simgrid::surf::AsFull();
}
void model_full_end(AS_t _routing)
sg_platf_route_cbarg_t e_route;
/* set utils vars */
- AsFull *routing = static_cast<AsFull*>(_routing);
+ simgrid::surf::AsFull *routing = static_cast<simgrid::surf::AsFull*>(_routing);
int table_size = (int)xbt_dynar_length(routing->p_indexNetworkElm);
/* Create table if necessary */
}
}
+namespace simgrid {
+namespace surf {
+
AsFull::AsFull(){
p_routingTable = 0;
}
xbt_dynar_free(&route->link_list);
}
-
-
-
+}
+}
#include "surf_routing_generic.hpp"
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
//virtual void parseBypassroute(sg_platf_route_cbarg_t e_route)=0;
};
+}
+}
#endif /* SURF_ROUTING_FULL_HPP_ */
/* 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 <cstdlib>
+
+#include <algorithm>
+
+#include <xbt/dict.h>
+#include <xbt/log.h>
+#include <xbt/sysdep.h>
+#include <xbt/dynar.h>
+#include <xbt/graph.h>
+
#include "simgrid/platf_interface.h" // platform creation API internal interface
#include "surf_routing_generic.hpp"
+#include "surf_routing_private.hpp"
#include "network_interface.hpp"
-#include "xbt/graph.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_routing_generic, surf_route, "Generic implementation of the surf routing");
}
}
+namespace simgrid {
+namespace surf {
+
void AsGeneric::parseRoute(sg_platf_route_cbarg_t /*route*/){
THROW_IMPOSSIBLE;
}
xbt_free(route_name);
}
+}
+}
+
/* ************************************************************************** */
/* *********************** GENERIC BUSINESS METHODS ************************* */
-xbt_dynar_t AsGeneric::getOneLinkRoutes() { // FIXME: kill that stub
- xbt_die("\"generic_get_onelink_routes\" not implemented yet");
- return NULL;
-}
-
static const char *instr_node_name(xbt_node_t node)
{
void *data = xbt_graph_node_get_data(node);
return ret;
}
+namespace simgrid {
+namespace surf {
+
+xbt_dynar_t AsGeneric::getOneLinkRoutes() { // FIXME: kill that stub
+ xbt_die("\"generic_get_onelink_routes\" not implemented yet");
+ return NULL;
+}
+
void AsGeneric::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges)
{
int src, dst;
}
xbt_dynar_foreach(route->link_list, cpt, link) {
- const char *link_name = static_cast<Resource*>(link)->getName();
+ const char *link_name = static_cast<simgrid::surf::Resource*>(
+ link)->getName();
current = new_xbt_graph_node(graph, link_name, nodes);
current_name = link_name;
new_xbt_graph_edge(graph, previous, current, edges);
int max_index_src = path_src->used - 1;
int max_index_dst = path_dst->used - 1;
- int max_index = max(max_index_src, max_index_dst);
+ int max_index = std::max(max_index_src, max_index_dst);
int i, max;
for (max = 0; max <= max_index; max++) {
dst_as->p_name,
p_name);
}
+
+}
+}
#ifndef SURF_ROUTING_GENERIC_HPP_
#define SURF_ROUTING_GENERIC_HPP_
-class XBT_PRIVATE AsGeneric;
+namespace simgrid {
+namespace surf {
-void generic_free_route(sg_platf_route_cbarg_t route);
+class XBT_PRIVATE AsGeneric;
class XBT_PRIVATE AsGeneric : public AsNone {
public:
virtual void srcDstCheck(RoutingEdge *src, RoutingEdge *dst);
};
+}
+}
+
#endif /* SURF_ROUTING_GENERIC_HPP_ */
AS_t model_none_create(void)
{
- return new AsNone();
+ return new simgrid::surf::AsNone();
}
+namespace simgrid {
+namespace surf {
+
xbt_dynar_t AsNone::getOneLinkRoutes() {
return NULL;
}
xbt_dynar_free(&p_linkUpDownList);
}
+}
+}
#ifndef SURF_ROUTING_NONE_HPP_
#define SURF_ROUTING_NONE_HPP_
+namespace simgrid {
+namespace surf {
+
class XBT_PRIVATE AsNone : public As {
public:
AsNone();
void parseBypassroute(sg_platf_route_cbarg_t e_route);
};
+}
+}
#endif /* SURF_ROUTING_NONE_HPP_ */
#define _SURF_SURF_ROUTING_PRIVATE_H
#include <float.h>
-#include "internal_config.h"
+#include "src/internal_config.h"
#include "surf_interface.hpp"
#include "xbt/base.h"
/* ************************************************** */
/* ************** Cluster ROUTING **************** */
-XBT_PRIVATE As *model_cluster_create(void); /* create structures for cluster routing model */
-XBT_PRIVATE As *model_torus_cluster_create(void);
-XBT_PRIVATE As *model_fat_tree_cluster_create(void);
+XBT_PRIVATE surf_As *model_cluster_create(void); /* create structures for cluster routing model */
+XBT_PRIVATE surf_As *model_torus_cluster_create(void);
+XBT_PRIVATE surf_As *model_fat_tree_cluster_create(void);
/* ************************************************** */
/* ************** Vivaldi ROUTING **************** */
AS_t model_vivaldi_create(void)
{
- return new AsVivaldi();
+ return new simgrid::surf::AsVivaldi();
}
+namespace simgrid {
+namespace surf {
+
void AsVivaldi::getRouteAndLatency(RoutingEdge *src, RoutingEdge *dst, sg_platf_route_cbarg_t route, double *lat)
{
s_surf_parsing_link_up_down_t info;
xbt_dynar_push_as(p_indexNetworkElm, sg_routing_edge_t, elm);
return xbt_dynar_length(p_indexNetworkElm)-1;
}
+
+}
+}
#define ROUTER_PEER(peername) bprintf("router_%s", peername)
#define LINK_PEER(peername) bprintf("link_%s", peername)
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
//virtual void parseBypassroute(sg_platf_route_cbarg_t e_route)=0;
};
+}
+}
#endif /* SURF_ROUTING_VIVALDI_HPP_ */
#include "xbt/file.h"
#include "xbt/dict.h"
#include "surf/surfxml_parse.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
#include "surf/random_mgr.h"
#include "simgrid/sg_config.h"
return surf_parse_get_value_with_unit(string, units);
}
-double surf_parse_get_power(const char *string)
+double surf_parse_get_speed(const char *string)
{
const struct unit_scale units[] = {
{ "yottaflops", 1e24 },
buf = A_surfxml_host_power;
XBT_DEBUG("Buffer: %s", buf);
- host.power_peak = xbt_dynar_new(sizeof(double), NULL);
+ host.speed_peak = xbt_dynar_new(sizeof(double), NULL);
if (strchr(buf, ',') == NULL){
- double power_value = get_cpu_power(A_surfxml_host_power);
- xbt_dynar_push_as(host.power_peak,double, power_value);
+ double speed = get_cpu_speed(A_surfxml_host_power);
+ xbt_dynar_push_as(host.speed_peak,double, speed);
}
else {
xbt_dynar_t pstate_list = xbt_str_split(buf, ",");
int i;
for (i = 0; i < xbt_dynar_length(pstate_list); i++) {
- double power_value;
- char* power_value_str;
-
- xbt_dynar_get_cpy(pstate_list, i, &power_value_str);
- xbt_str_trim(power_value_str, NULL);
- power_value = get_cpu_power(power_value_str);
- xbt_dynar_push_as(host.power_peak, double, power_value);
- XBT_DEBUG("Power value: %f", power_value);
+ double speed;
+ char* speed_str;
+
+ xbt_dynar_get_cpy(pstate_list, i, &speed_str);
+ xbt_str_trim(speed_str, NULL);
+ speed = get_cpu_speed(speed_str);
+ xbt_dynar_push_as(host.speed_peak, double, speed);
+ XBT_DEBUG("Speed value: %f", speed);
}
xbt_dynar_free(&pstate_list);
}
XBT_DEBUG("pstate: %s", A_surfxml_host_pstate);
- //host.power_peak = get_cpu_power(A_surfxml_host_power);
- host.power_scale = surf_parse_get_double( A_surfxml_host_availability);
+ host.speed_scale = surf_parse_get_double( A_surfxml_host_availability);
host.core_amount = surf_parse_get_int(A_surfxml_host_core);
- host.power_trace = tmgr_trace_new_from_file(A_surfxml_host_availability___file);
+ host.speed_trace = tmgr_trace_new_from_file(A_surfxml_host_availability___file);
host.state_trace = tmgr_trace_new_from_file(A_surfxml_host_state___file);
host.pstate = surf_parse_get_int(A_surfxml_host_pstate);
host.coord = A_surfxml_host_coordinates;
sg_platf_new_host(&host);
+ xbt_dynar_free(&host.speed_peak);
current_property_set = NULL;
}
cluster.prefix = A_surfxml_cluster_prefix;
cluster.suffix = A_surfxml_cluster_suffix;
cluster.radical = A_surfxml_cluster_radical;
- cluster.power = surf_parse_get_power(A_surfxml_cluster_power);
+ cluster.speed = surf_parse_get_speed(A_surfxml_cluster_power);
cluster.core_amount = surf_parse_get_int(A_surfxml_cluster_core);
cluster.bw = surf_parse_get_bandwidth(A_surfxml_cluster_bw);
cluster.lat = surf_parse_get_time(A_surfxml_cluster_lat);
cabinet.id = A_surfxml_cabinet_id;
cabinet.prefix = A_surfxml_cabinet_prefix;
cabinet.suffix = A_surfxml_cabinet_suffix;
- cabinet.power = surf_parse_get_power(A_surfxml_cabinet_power);
+ cabinet.speed = surf_parse_get_speed(A_surfxml_cabinet_power);
cabinet.bw = surf_parse_get_bandwidth(A_surfxml_cabinet_bw);
cabinet.lat = surf_parse_get_time(A_surfxml_cabinet_lat);
cabinet.radical = A_surfxml_cabinet_radical;
s_sg_platf_peer_cbarg_t peer = SG_PLATF_PEER_INITIALIZER;
memset(&peer,0,sizeof(peer));
peer.id = A_surfxml_peer_id;
- peer.power = surf_parse_get_power(A_surfxml_peer_power);
+ peer.speed = surf_parse_get_speed(A_surfxml_peer_power);
peer.bw_in = surf_parse_get_bandwidth(A_surfxml_peer_bw___in);
peer.bw_out = surf_parse_get_bandwidth(A_surfxml_peer_bw___out);
peer.lat = surf_parse_get_time(A_surfxml_peer_lat);
xbt_dict_set(current_model_property_set, A_surfxml_model___prop_id, xbt_strdup(A_surfxml_model___prop_value), NULL);
}
-/* ***************************************** */
-/* TUTORIAL: New TAG */
-void STag_surfxml_gpu(void)
-{
- XBT_DEBUG("STag_surfxml_gpu");
-}
-void ETag_surfxml_gpu(void)
-{
- s_sg_platf_gpu_cbarg_t gpu = SG_PLATF_GPU_INITIALIZER;
- memset(&gpu,0,sizeof(gpu));
-
- gpu.name = A_surfxml_gpu_name;
-
- sg_platf_new_gpu(&gpu);
-}
-/* ***************************************** */
+void STag_surfxml_gpu(void) {}
+void ETag_surfxml_gpu(void) {}
/* nothing to do in those functions */
void ETag_surfxml_prop(void){}
* With XML parser
*/
-double get_cpu_power(const char *power)
+double get_cpu_speed(const char *str_speed)
{
- double power_scale = 0.0;
+ double speed = 0.0;
const char *p, *q;
char *generator;
random_data_t random = NULL;
/* randomness is inserted like this: power="$rand(my_random)" */
- if (((p = strstr(power, "$rand(")) != NULL)
- && ((q = strstr(power, ")")) != NULL)) {
+ if (((p = strstr(str_speed, "$rand(")) != NULL)
+ && ((q = strstr(str_speed, ")")) != NULL)) {
if (p < q) {
generator = xbt_malloc(q - (p + 6) + 1);
memcpy(generator, p + 6, q - (p + 6));
generator[q - (p + 6)] = '\0';
random = xbt_dict_get_or_null(random_data_list, generator);
xbt_assert(random, "Random generator %s undefined", generator);
- power_scale = random_generate(random);
+ speed = random_generate(random);
}
} else {
- power_scale = surf_parse_get_power(power);
+ speed = surf_parse_get_speed(str_speed);
}
- return power_scale;
+ return speed;
}
double random_min, random_max, random_mean, random_std_deviation;
#include "xbt/dict.h"
#include "simgrid/platf.h"
#include "surf/surfxml_parse.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
+
+#ifdef HAVE_LUA
+#include "src/bindings/lua/simgrid_lua.h"
+#include "src/bindings/lua/lua_state_cloner.h"
+
+#include <lua.h> /* Always include this when calling Lua */
+#include <lauxlib.h> /* Always include this when calling Lua */
+#include <lualib.h> /* Prototype for luaL_openlibs(), */
+#endif
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_parse);
XBT_IMPORT_NO_EXPORT(unsigned int) surfxml_buffer_stack_stack_ptr;
XBT_IMPORT_NO_EXPORT(unsigned int) surfxml_buffer_stack_stack[1024];
-
void surfxml_bufferstack_push(int new)
{
if (!new)
xbt_dict_t trace_connect_list_bandwidth = NULL;
xbt_dict_t trace_connect_list_latency = NULL;
-/* ********************************************* */
-/* TUTORIAL: New TAG */
-/* This function should be in gpu.c */
-/* because sg_platf_gpu_add_cb take a staic fct */
-XBT_PUBLIC(void) gpu_register_callbacks(void){
- sg_platf_gpu_add_cb(NULL);
-}
/* ***************************************** */
static int after_config_done;
/* Register classical callbacks */
storage_register_callbacks();
routing_register_callbacks();
- gpu_register_callbacks();
- /* ***************************************** */
- /* TUTORIAL: New TAG */
- /* ***************************************** */
after_config_done = 1;
}
}
/* This function acts as a main in the parsing area. */
void parse_platform_file(const char *file)
{
- int parse_status;
+#ifdef HAVE_LUA
+ int is_lua = (file != NULL && strlen(file) > 3 && file[strlen(file)-3] == 'l' && file[strlen(file)-2] == 'u'
+ && file[strlen(file)-1] == 'a');
+#endif
surf_parse_init_callbacks();
- /* init the flex parser */
- surfxml_buffer_stack_stack_ptr = 1;
- surfxml_buffer_stack_stack[0] = 0;
- after_config_done = 0;
- surf_parse_open(file);
-
- /* Init my data */
- if (!surfxml_bufferstack_stack)
- surfxml_bufferstack_stack = xbt_dynar_new(sizeof(char *), NULL);
-
- traces_set_list = xbt_dict_new_homogeneous(NULL);
- trace_connect_list_host_avail = xbt_dict_new_homogeneous(free);
- trace_connect_list_power = xbt_dict_new_homogeneous(free);
- trace_connect_list_link_avail = xbt_dict_new_homogeneous(free);
- trace_connect_list_bandwidth = xbt_dict_new_homogeneous(free);
- trace_connect_list_latency = xbt_dict_new_homogeneous(free);
-
- /* Do the actual parsing */
- parse_status = surf_parse();
-
- /* Free my data */
- xbt_dict_free(&trace_connect_list_host_avail);
- xbt_dict_free(&trace_connect_list_power);
- xbt_dict_free(&trace_connect_list_link_avail);
- xbt_dict_free(&trace_connect_list_bandwidth);
- xbt_dict_free(&trace_connect_list_latency);
- xbt_dict_free(&traces_set_list);
- xbt_dict_free(&random_data_list);
- xbt_dynar_free(&surfxml_bufferstack_stack);
-
- /* Stop the flex parser */
- surf_parse_close();
- if (parse_status)
- surf_parse_error("Parse error in %s", file);
-}
+#ifdef HAVE_LUA
+ /* Check if file extension is "lua". If so, we will use
+ * the lua bindings to parse the platform file (since it is
+ * written in lua). If not, we will use the (old?) XML parser
+ */
+ if (is_lua) {
+ // Get maestro state. In case we're calling Lua from
+ // C only, this will be NULL -- no Lua code has been
+ // executed yet and hence, the SimGrid module has not
+ // yet been loaded.
+ // NOTE: After executing the lua_pcall() below,
+ // sglua_get_maestro() will not be NULL, since the
+ // SimGrid module was loaded!
+ lua_State* L = sglua_get_maestro();
+
+ // We may want to remove the task_copy_callback from
+ // the SimGrid module if we're using C code only (this
+ // callback is used for Lua-only code).
+ int remove_callback = FALSE;
+ if (L == NULL) {
+ L = luaL_newstate();
+ remove_callback = TRUE;
+ }
+ luaL_openlibs(L);
+
+ luaL_loadfile(L, file); // This loads the file without executing it.
+
+ /* Run the script */
+ if (lua_pcall(L, 0, 0, 0)) {
+ XBT_ERROR("FATAL ERROR:\n %s: %s\n\n", "Lua call failed. Errormessage:", lua_tostring(L, -1));
+ xbt_die("Lua call failed. See Log");
+ }
+ // Without this, task_copy_callback() will try to copy
+ // some tasks -- but these don't exist in case we're using
+ // C. Hence, we need to remove the callback -- we don't
+ // want to segfault.
+ if (remove_callback) {
+ MSG_task_set_copy_callback(NULL);
+ }
+ }
+ else
+#endif
+ { // Use XML parser
+
+ int parse_status;
+
+ /* init the flex parser */
+ surfxml_buffer_stack_stack_ptr = 1;
+ surfxml_buffer_stack_stack[0] = 0;
+ after_config_done = 0;
+ surf_parse_open(file);
+
+ traces_set_list = xbt_dict_new_homogeneous(NULL);
+ trace_connect_list_host_avail = xbt_dict_new_homogeneous(free);
+ trace_connect_list_power = xbt_dict_new_homogeneous(free);
+ trace_connect_list_link_avail = xbt_dict_new_homogeneous(free);
+ trace_connect_list_bandwidth = xbt_dict_new_homogeneous(free);
+ trace_connect_list_latency = xbt_dict_new_homogeneous(free);
+
+ /* Init my data */
+ if (!surfxml_bufferstack_stack)
+ surfxml_bufferstack_stack = xbt_dynar_new(sizeof(char *), NULL);
+
+ /* Do the actual parsing */
+ parse_status = surf_parse();
+
+ /* Free my data */
+ xbt_dict_free(&trace_connect_list_host_avail);
+ xbt_dict_free(&trace_connect_list_power);
+ xbt_dict_free(&trace_connect_list_link_avail);
+ xbt_dict_free(&trace_connect_list_bandwidth);
+ xbt_dict_free(&trace_connect_list_latency);
+ xbt_dict_free(&traces_set_list);
+ xbt_dict_free(&random_data_list);
+ xbt_dynar_free(&surfxml_bufferstack_stack);
+
+ surf_parse_close();
+
+ if (parse_status)
+ surf_parse_error("Parse error in %s", file);
+
+ }
+
+
+}
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "cpu_cas01.hpp"
-#include "vm_interface.hpp"
+#include "virtual_machine.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_vm, surf,
"Logging specific to the SURF VM module");
-VMModel *surf_vm_model = NULL;
+simgrid::surf::VMModel *surf_vm_model = NULL;
+
+namespace simgrid {
+namespace surf {
/*************
* Callbacks *
*************/
-surf_callback(void, VM*) VMCreatedCallbacks;
-surf_callback(void, VM*) VMDestructedCallbacks;
-surf_callback(void, VM*) VMStateChangedCallbacks;
+surf_callback(void, simgrid::surf::VirtualMachine*) VMCreatedCallbacks;
+surf_callback(void, simgrid::surf::VirtualMachine*) VMDestructedCallbacks;
+surf_callback(void, simgrid::surf::VirtualMachine*) VMStateChangedCallbacks;
/*********
* Model *
* Resource *
************/
-VM::VM(Model *model, const char *name, xbt_dict_t props,
+VirtualMachine::VirtualMachine(Model *model, const char *name, xbt_dict_t props,
RoutingEdge *netElm, Cpu *cpu)
: Host(model, name, props, NULL, netElm, cpu)
{
VMModel::ws_vms.push_back(*this);
- surf_callback_emit(VMCreatedCallbacks, this);
+
+ xbt_lib_set(host_lib, name, SURF_HOST_LEVEL, this);
}
/*
* A physical host does not disappear in the current SimGrid code, but a VM may
* disappear during a simulation.
*/
-VM::~VM()
+VirtualMachine::~VirtualMachine()
{
surf_callback_emit(VMDestructedCallbacks, this);
VMModel::ws_vms.erase(VMModel::vm_list_t::s_iterator_to(*this));
}
-void VM::setState(e_surf_resource_state_t state){
+void VirtualMachine::setState(e_surf_resource_state_t state){
Resource::setState(state);
surf_callback_emit(VMStateChangedCallbacks, this);
}
* A surf level object will be useless in the upper layer. Returning the
* dict_elm of the host.
**/
-surf_resource_t VM::getPm()
+surf_resource_t VirtualMachine::getPm()
{
return xbt_lib_get_elm_or_null(host_lib, p_subWs->getName());
}
//FIME:: handle action cancel
+}
+}
#define GUESTOS_NOISE 100 // This value corresponds to the cost of the global action associated to the VM
// It corresponds to the cost of a VM running no tasks.
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
class XBT_PRIVATE VMModel;
-class XBT_PRIVATE VM;
+class XBT_PRIVATE VirtualMachine;
/*************
* Callbacks *
*************/
/** @ingroup SURF_callbacks
- * @brief Callbacks fired after VM creation. Signature: `void(VM*)`
+ * @brief Callbacks fired after VM creation. Signature: `void(VirtualMachine*)`
*/
-extern XBT_PRIVATE surf_callback(void, VM*) VMCreatedCallbacks;
+extern XBT_PRIVATE surf_callback(void, simgrid::surf::VirtualMachine*) VMCreatedCallbacks;
/** @ingroup SURF_callbacks
- * @brief Callbacks fired after VM destruction. Signature: `void(VM*)`
+ * @brief Callbacks fired after VM destruction. Signature: `void(VirtualMachine*)`
*/
-extern XBT_PRIVATE surf_callback(void, VM*) VMDestructedCallbacks;
+extern XBT_PRIVATE surf_callback(void, simgrid::surf::VirtualMachine*) VMDestructedCallbacks;
/** @ingroup SURF_callbacks
- * @brief Callbacks after VM State changes. Signature: `void(VMAction*)`
+ * @brief Callbacks after VM State changes. Signature: `void(VirtualMachine*)`
*/
-extern XBT_PRIVATE surf_callback(void, VM*) VMStateChangedCallbacks;
+extern XBT_PRIVATE surf_callback(void, simgrid::surf::VirtualMachine*) VMStateChangedCallbacks;
/************
* Resource *
* @brief SURF VM interface class
* @details A VM represent a virtual machine
*/
-class VM : public Host {
+class VirtualMachine : public Host {
public:
/**
* @brief Constructor
* @param netElm The RoutingEdge associated to this VM
* @param cpu The Cpu associated to this VM
*/
- VM(Model *model, const char *name, xbt_dict_t props,
+ VirtualMachine(simgrid::surf::Model *model, const char *name, xbt_dict_t props,
RoutingEdge *netElm, Cpu *cpu);
/** @brief Destructor */
- ~VM();
+ ~VirtualMachine();
void setState(e_surf_resource_state_t state);
/* The vm object of the lower layer */
CpuAction *p_action;
- Host *p_subWs; // Pointer to the ''host'' OS
+ Host *p_subWs;
e_surf_vm_state_t p_currentState;
public:
boost::intrusive::list_member_hook<> vm_hook;
VMModel() :HostModel(){}
~VMModel(){};
- Host *createHost(const char *name){DIE_IMPOSSIBLE;}
+ Host *createHost(const char *name, RoutingEdge *netElm, Cpu *cpu){DIE_IMPOSSIBLE;}
/**
* @brief Create a new VM
* @param host_PM The real machine hosting the VM
*
*/
- virtual VM *createVM(const char *name, surf_resource_t host_PM)=0;
+ virtual VirtualMachine *createVM(const char *name, surf_resource_t host_PM)=0;
void adjustWeightOfDummyCpuActions() {};
typedef boost::intrusive::member_hook<
- VM, boost::intrusive::list_member_hook<>, &VM::vm_hook> VmOptions;
- typedef boost::intrusive::list<VM, VmOptions, boost::intrusive::constant_time_size<false> > vm_list_t;
+ VirtualMachine, boost::intrusive::list_member_hook<>, &VirtualMachine::vm_hook> VmOptions;
+ typedef boost::intrusive::list<VirtualMachine, VmOptions, boost::intrusive::constant_time_size<false> > vm_list_t;
static vm_list_t ws_vms;
};
* Action *
**********/
+}
+}
+
#endif /* VM_INTERFACE_HPP_ */
/* 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 <algorithm>
+
#include "cpu_cas01.hpp"
#include "vm_hl13.hpp"
void surf_vm_model_init_HL13(void){
if (surf_cpu_model_vm) {
- surf_vm_model = new VMHL13Model();
- Model *model = surf_vm_model;
-
- xbt_dynar_push(model_list, &model);
- xbt_dynar_push(model_list_invoke, &model);
+ surf_vm_model = new simgrid::surf::VMHL13Model();
+ simgrid::surf::Model *model = surf_vm_model;
+ xbt_dynar_push(all_existing_models, &model);
}
}
+namespace simgrid {
+namespace surf {
+
/*********
* Model *
*********/
/* ind means ''indirect'' that this is a reference on the whole dict_elm
* structure (i.e not on the surf_resource_private infos) */
-VM *VMHL13Model::createVM(const char *name, surf_resource_t host_PM)
+VirtualMachine *VMHL13Model::createVM(const char *name, surf_resource_t host_PM)
{
- VMHL13 *ws = new VMHL13(this, name, NULL, host_PM);
-
- xbt_lib_set(host_lib, name, SURF_HOST_LEVEL, ws);
-
- /* TODO:
- * - check how network requests are scheduled between distinct processes competing for the same card.
- */
- return ws;
+ VirtualMachine* vm = new VMHL13(this, name, NULL, host_PM);
+ surf_callback_emit(VMCreatedCallbacks, vm);
+ return vm;
}
static inline double get_solved_value(CpuAction *cpu_action)
double VMHL13Model::shareResources(double now)
{
- /* TODO: udpate action's cost with the total cost of processes on the VM. */
-
-
- /* 0. Make sure that we already calculated the resource share at the physical
- * machine layer. */
- {
- XBT_ATTRIB_UNUSED Model *ws_model = surf_host_model;
- XBT_ATTRIB_UNUSED Model *vm_ws_model = surf_vm_model;
- XBT_ATTRIB_UNUSED unsigned int index_of_pm_ws_model = xbt_dynar_search(model_list_invoke, &ws_model);
- XBT_ATTRIB_UNUSED unsigned int index_of_vm_ws_model = xbt_dynar_search(model_list_invoke, &vm_ws_model);
- xbt_assert((index_of_pm_ws_model < index_of_vm_ws_model), "Cannot assume surf_host_model comes before");
-
- /* Another option is that we call sub_ws->share_resource() here. The
- * share_resource() function has no side-effect. We can call it here to
- * ensure that. */
- }
-
+ /* TODO: update action's cost with the total cost of processes on the VM. */
/* 1. Now we know how many resource should be assigned to each virtual
* machine. We update constraints of the virtual machine layer.
VMModel::ws_vms.begin();
iter != VMModel::ws_vms.end(); ++iter) {
- VM *ws_vm = &*iter;
+ VirtualMachine *ws_vm = &*iter;
Cpu *cpu = ws_vm->p_cpu;
xbt_assert(cpu, "cpu-less host");
typeid(surf_network_model).name(), min_by_net,
typeid(surf_storage_model).name(), min_by_sto);
- double ret = max(max(min_by_cpu, min_by_net), min_by_sto);
+ double ret = std::max(std::max(min_by_cpu, min_by_net), min_by_sto);
if (min_by_cpu >= 0.0 && min_by_cpu < ret)
ret = min_by_cpu;
if (min_by_net >= 0.0 && min_by_net < ret)
if (min_by_sto >= 0.0 && min_by_sto < ret)
ret = min_by_sto;
- /* FIXME: 3. do we have to re-initialize our cpu_action object? */
-#if 0
- /* iterate for all virtual machines */
- for (VMModel::vm_list_t::iterator iter =
- VMModel::ws_vms.begin();
- iter != VMModel::ws_vms.end(); ++iter) {
-
- {
-#if 0
- VM2013 *ws_vm2013 = static_cast<VM2013Ptr>(&*iter);
- XBT_INFO("cost %f remains %f start %f finish %f", ws_vm2013->cpu_action->cost,
- ws_vm2013->cpu_action->remains,
- ws_vm2013->cpu_action->start,
- ws_vm2013->cpu_action->finish
- );
-#endif
-#if 0
- void *ind_sub_host = xbt_lib_get_elm_or_null(host_lib, ws_vm2013->sub_ws->generic_resource.getName);
- surf_cpu_model_pm->action_unref(ws_vm2013->cpu_action);
- /* FIXME: this means busy loop? */
- // ws_vm2013->cpu_action = surf_cpu_model_pm->extension.cpu.execute(ind_sub_host, GUESTOS_NOISE);
- ws_vm2013->cpu_action = surf_cpu_model_pm->extension.cpu.execute(ind_sub_host, 0);
-#endif
-
- }
- }
-#endif
-
-
return ret;
}
VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props,
surf_resource_t host_PM)
- : VM(model, name, props, NULL, NULL)
+ : VirtualMachine(model, name, props, NULL, NULL)
{
- Host *sub_ws = static_cast<Host*>(surf_host_resource_priv(host_PM));
+ Host *sub_ws = surf_host_resource_priv(host_PM);
/* Currently, we assume a VM has no storage. */
p_storage = NULL;
CpuCas01 *sub_cpu = static_cast<CpuCas01*>(sg_host_surfcpu(host_PM));
p_cpu = surf_cpu_model_vm->createCpu(name, // name
- sub_cpu->getPowerPeakList(), // host->power_peak,
+ sub_cpu->getSpeedPeakList(), // host->power_peak,
sub_cpu->getPState(),
1, // host->power_scale,
NULL, // host->power_trace,
/* Update vcpu's action for the new pm */
{
-#if 0
- XBT_INFO("cpu_action->remains %g", p_action->remains);
- XBT_INFO("cost %f remains %f start %f finish %f", p_action->cost,
- p_action->remains,
- p_action->start,
- p_action->finish
- );
- XBT_INFO("cpu_action state %d", surf_action_get_state(p_action));
-#endif
-
/* create a cpu action bound to the pm model at the destination. */
CpuAction *new_cpu_action = static_cast<CpuAction*>(
static_cast<Cpu*>(sg_host_surfcpu(ind_dst_pm))->execute(0));
return p_cpu->sleep(duration);
}
-/**********
- * Action *
- **********/
-
-//FIME:: handle action cancel
-
+}
+}
#include "xbt/base.h"
#include "host_clm03.hpp"
-#include "vm_interface.hpp"
+#include "virtual_machine.hpp"
#ifndef SURF_VM_HPP_
#define SURF_VM_HPP_
#define GUESTOS_NOISE 100 // This value corresponds to the cost of the global action associated to the VM
// It corresponds to the cost of a VM running no tasks.
+namespace simgrid {
+namespace surf {
+
/***********
* Classes *
***********/
VMHL13Model();
~VMHL13Model(){};
- VM *createVM(const char *name, surf_resource_t host_PM);
+ VirtualMachine *createVM(const char *name, surf_resource_t host_PM);
double shareResources(double now);
void adjustWeightOfDummyCpuActions() {};
Action *executeParallelTask(int host_nb,
* Resource *
************/
-class VMHL13 : public VM {
+class VMHL13 : public VirtualMachine {
public:
VMHL13(VMModel *model, const char* name, xbt_dict_t props, surf_resource_t host_PM);
~VMHL13();
* Action *
**********/
+}
+}
+
#endif /* SURF_VM_HPP_ */
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "xbt/ex.h"
-#include "xbt_modinter.h"
+#include "src/xbt_modinter.h"
/* Module creation/destruction */
void xbt_backtrace_preinit(void)
#include "xbt/log.h"
#include "xbt/str.h"
#include "xbt/module.h" /* xbt_binary_name */
-#include "xbt_modinter.h" /* backtrace initialization headers */
+#include "src/xbt_modinter.h" /* backtrace initialization headers */
#ifdef HAVE_MC
#define UNW_LOCAL_ONLY
#include <libunwind.h>
/* This is partially inspirated from the OSSP ts (Test Suite Library) */
-#include "portable.h"
+#include "src/portable.h"
#include "xbt/sysdep.h" /* bvprintf */
#include "xbt/cunit.h"
#include "xbt/ex.h"
#include "xbt/log.h"
#include "xbt/mallocator.h"
-#include "xbt_modinter.h"
+#include "src/xbt_modinter.h"
#include "xbt/str.h"
#include "dict_private.h"
#ifdef SIMGRID_TEST
#include "xbt.h"
#include "xbt/ex.h"
-#include "portable.h"
+#include "src/portable.h"
#define PRINTF_STR(a) (a)?:"(null)"
#include <stdio.h>
#include <stdlib.h>
-#include "portable.h" /* execinfo when available */
+#include "src/portable.h" /* execinfo when available */
#include "xbt/ex.h"
#include "xbt/str.h"
#include "xbt/synchro_core.h"
-#include "xbt_modinter.h" /* backtrace initialization headers */
+#include "src/xbt_modinter.h" /* backtrace initialization headers */
-#include "xbt/ex_interface.h"
+#include "src/xbt/ex_interface.h"
#include "simgrid/sg_config.h" /* Configuration mechanism of SimGrid */
}
#if defined(HAVE_EXECINFO_H) && defined(HAVE_POPEN) && defined(ADDR2LINE)
-# include "backtrace_linux.c"
+# include "src/xbt/backtrace_linux.c"
#elif (defined(_XBT_WIN32) && defined (_M_IX86)) && !defined(__GNUC__)
-# include "backtrace_windows.c"
+# include "src/xbt/backtrace_windows.c"
#else
-# include "backtrace_dummy.c"
+# include "src/xbt/backtrace_dummy.c"
#endif
/** @brief shows an exception content and the associated stack if available */
#define SMALLAMOUNT 10
#define TOOBIG 100000000
-#if 0 /* this contains syntax errors, actually */
-static void bad_example(void)
-{
- struct {
- char *first;
- } *globalcontext;
- ex_t ex;
-
- /* BAD_EXAMPLE */
- TRY {
- char *cp1, *cp2, *cp3;
-
- cp1 = mallocex(SMALLAMOUNT);
- globalcontext->first = cp1;
- cp2 = mallocex(TOOBIG);
- cp3 = mallocex(SMALLAMOUNT);
- strcpy(cp1, "foo");
- strcpy(cp2, "bar");
- }
- TRY_CLEANUP {
- free(cp3);
- free(cp2);
- free(cp1);
- }
- CATCH_ANONYMOUS {
- printf("cp3=%s", cp3);
- RETHROW;
- }
- /* end_of_bad_example */
-}
-#endif
typedef struct {
char *first;
} global_context_t;
#include "xbt/log.h"
#include "xbt/mallocator.h"
#include "fifo_private.h"
-#include "xbt_modinter.h"
+#include "src/xbt_modinter.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_fifo, xbt, "FIFO");
xbt_dict_foreach (lib->dict, cursor, key, elts) {
int i;
for (i = 0 ; i < lib->levels ; i++)
- if (elts[i])
+ if (elts[i] && lib->free_f[i])
lib->free_f[i](elts[i]);
}
xbt_dict_free(&lib->dict);
if (elts[level]) {
XBT_DEBUG("Replace %p by %p element under key '%s:%d'",
elts[level], obj, key, level);
- lib->free_f[level](elts[level]);
+ if (lib->free_f[level])
+ lib->free_f[level](elts[level]);
}
elts[level] = obj;
}
xbt_dict_remove(lib->dict, key);
}
- if (invoke_callback)
+ if (invoke_callback && lib->free_f[level])
lib->free_f[level](obj);
}
#include <stdio.h> /* snprintf */
#include <stdlib.h> /* snprintf */
-#include "portable.h" /* to get a working stdarg.h */
+#include "src/portable.h" /* to get a working stdarg.h */
-#include "xbt_modinter.h"
+#include "src/xbt_modinter.h"
#include "xbt/misc.h"
#include "xbt/ex.h"
#include "xbt/str.h"
#include "xbt/sysdep.h"
-#include "xbt/log_private.h"
+#include "src/xbt/log_private.h"
#include "xbt/dynar.h"
#include "xbt/xbt_os_thread.h"
XBT_LOG_CONNECT(mc_dwarf);
XBT_LOG_CONNECT(mc_hash);
XBT_LOG_CONNECT(mc_ignore);
- XBT_LOG_CONNECT(mcer_ignore);
XBT_LOG_CONNECT(mc_liveness);
XBT_LOG_CONNECT(mc_memory);
- XBT_LOG_CONNECT(mc_memory_map);
XBT_LOG_CONNECT(mc_page_snapshot);
XBT_LOG_CONNECT(mc_request);
XBT_LOG_CONNECT(mc_safety);
XBT_LOG_CONNECT(mc_process);
XBT_LOG_CONNECT(mc_protocol);
XBT_LOG_CONNECT(mc_RegionSnaphot);
- XBT_LOG_CONNECT(mc_server);
+ XBT_LOG_CONNECT(mc_ModelChecker);
XBT_LOG_CONNECT(mc_state);
#endif
XBT_LOG_CONNECT(mc_global);
#include <cstring>
#include <sys/types.h>
+#ifdef __linux__
+# include <sys/mman.h>
+#endif
+#include <xbt/sysdep.h>
#include <xbt/base.h>
+#include <xbt/file.h>
+#include <xbt/log.h>
-#include "mc_memory_map.h"
-#include "mc_private.h"
+#include "memory_map.hpp"
extern "C" {
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_memory_map, mc,
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_memory_map, xbt,
"Logging specific to algorithms for memory_map");
}
namespace simgrid {
-namespace mc {
+namespace xbt {
XBT_PRIVATE std::vector<VmMap> get_memory_map(pid_t pid)
{
+#ifdef __linux__
/* Open the actual process's proc maps file and create the memory_map_t */
/* to be returned. */
char* path = bprintf("/proc/%i/maps", (int) pid);
std::free(line);
std::fclose(fp);
return std::move(ret);
+#else
+ /* On FreeBSD, kinfo_getvmmap() could be used but mmap() support is disabled
+ anyway. */
+ xbt_die("Could not get memory map from process %lli", (long long int) pid);
+#endif
}
}
/* 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 SIMGRID_MC_MEMORY_MAP_H
-#define SIMGRID_MC_MEMORY_MAP_H
+#ifndef SIMGRID_XBT_MEMORY_MAP_HPP
+#define SIMGRID_XBT_MEMORY_MAP_HPP
#include <cstdint>
-
#include <string>
#include <vector>
-#include <sys/types.h>
-
#include <xbt/base.h>
-
-#include <simgrid_config.h>
-#include "mc_forward.hpp"
+#include <sys/types.h>
namespace simgrid {
-namespace mc {
+namespace xbt {
/** An virtual memory map entry from /proc/$pid/maps */
struct VmMap {
}
}
-extern "C" {
-
-XBT_PRIVATE void MC_find_object_address(
- std::vector<simgrid::mc::VmMap> const& maps, simgrid::mc::ObjectInformation* result);
-
-}
-
#endif
#include <dlfcn.h>
-#include "../../mc/mc_base.h"
+#include "src/mc/mc_base.h"
#include "mmprivate.h"
-#include "xbt_modinter.h"
-#include "internal_config.h"
+#include "src/xbt_modinter.h"
+#include "src/internal_config.h"
#include <math.h>
-#include "../mc/mc_protocol.h"
+#include "src/mc/mc_protocol.h"
/* ***** Whether to use `mmalloc` of the undrlying malloc ***** */
#endif
#include "mmprivate.h"
#include "xbt/ex.h"
-#include "xbt_modinter.h" /* declarations of mmalloc_preinit and friends that live here */
+#include "src/xbt_modinter.h" /* declarations of mmalloc_preinit and friends that live here */
#ifndef SEEK_SET
#define SEEK_SET 0
#include <xbt/base.h>
#include <xbt/misc.h>
-#include "portable.h"
+#include "src/portable.h"
#include "xbt/xbt_os_thread.h"
#include "xbt/mmalloc.h"
#include "xbt/ex.h"
#include <atomic>
-#include "internal_config.h"
+#include "src/internal_config.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "xbt/dynar.h"
#include "xbt/xbt_os_thread.h"
#include "xbt/sysdep.h"
-#include "simix/smx_private.h"
+#include "src/simix/smx_private.h"
+#include "src/simix/smx_private.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_parmap, xbt, "parmap: parallel map");
+++ /dev/null
-/* Copyright (c) 2010-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 <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include "setset_private.h"
-#include "xbt/sysdep.h"
-#include "internal_config.h" /*_XBT_WIN32*/
-
-/*The function ffs doesn't exist for windows*/
-#ifdef _XBT_WIN32
-int ffs(int bits)
-{
- int i;
- if (bits == 0)
- return (0);
- for (i = 1;; i++, bits >>= 1) {
- if (bits & 1)
- break;
- }
- return (i);
-}
-#endif
-
-/**
- * \brief Create a new setset data structure
- * \param size The initial size of the setset (in number of elements)
- * \return The created setset
- */
-xbt_setset_t xbt_setset_new(unsigned int size)
-{
- xbt_setset_elm_entry_t first_elm = NULL;
- xbt_setset_t setset = xbt_new0(s_xbt_setset_t, 1);
- setset->elm_array =
- xbt_dynar_new(sizeof(u_xbt_setset_elm_entry_t), NULL);
- setset->sets = xbt_fifo_new();
- /* Expand the elements dynar to the size indicated by the user, */
- /* then create the first element, get a pointer to it and add it to the */
- /* free elements list */
- xbt_dynar_shrink(setset->elm_array, size);
- first_elm =
- (xbt_setset_elm_entry_t) xbt_dynar_push_ptr(setset->elm_array);
- first_elm->free.next = 0;
- return setset;
-}
-
-/**
- * \brief Destroy a setset and free all it's resources
- * \param The setset to destroy
- */
-void xbt_setset_destroy(xbt_setset_t setset)
-{
- xbt_fifo_item_t item;
- xbt_setset_set_t set;
- xbt_dynar_free(&setset->elm_array);
- xbt_fifo_foreach(setset->sets, item, set, xbt_setset_set_t) {
- xbt_setset_destroy_set(set);
- }
- xbt_fifo_free(setset->sets);
- xbt_free(setset);
-}
-
-/* Add an object to the setset, this will calculate its ID */
-void xbt_setset_elm_add(xbt_setset_t setset, void *obj)
-{
- xbt_setset_elm_entry_t new_entry = NULL;
- xbt_setset_elm_entry_t first_elm = NULL;
- xbt_setset_elm_t e = (xbt_setset_elm_t) obj;
- xbt_assert(e->ID == 0, "Adding element with non NULL ID");
- first_elm =
- (xbt_setset_elm_entry_t) xbt_dynar_get_ptr(setset->elm_array, 0);
-
- /* Before create a new elm entry check if there is one in the free elm list. */
- /* If there is not free elm entries, then create a new one */
- if (first_elm->free.next != 0) {
- e->ID = first_elm->free.next;
- new_entry =
- (xbt_setset_elm_entry_t) xbt_dynar_get_ptr(setset->elm_array,
- first_elm->free.next);
- first_elm->free.next = new_entry->free.next;
- } else {
- new_entry =
- (xbt_setset_elm_entry_t) xbt_dynar_push_ptr(setset->elm_array);
- e->ID = xbt_dynar_length(setset->elm_array) - 1;
- }
-
- new_entry->info.obj = e;
- return;
-}
-
-/* Remove an object from the setset */
-void xbt_setset_elm_remove(xbt_setset_t setset, void *obj)
-{
- xbt_setset_elm_t e = (xbt_setset_elm_t) obj;
- xbt_setset_elm_entry_t e_entry =
- xbt_dynar_get_ptr(setset->elm_array, e->ID);
- xbt_setset_elm_entry_t first_free = NULL;
-
- /* Link the elm entry to the list of free ones */
- first_free = xbt_dynar_get_ptr(setset->elm_array, 0);
- e_entry->free.next = first_free->free.next;
- first_free->free.next = e->ID;
-}
-
-/* Get the object associated to a given index */
-/* WARNING: it must be a valid index! */
-void *_xbt_setset_idx_to_obj(xbt_setset_t setset, unsigned long idx)
-{
- xbt_setset_elm_entry_t e_entry =
- xbt_dynar_get_ptr(setset->elm_array, idx);
- return e_entry->info.obj;
-}
-
-/**
- * \brief Add a new set to the setset
- * \param setset The setset that will contain the created set
- * \returns The created set
- */
-xbt_setset_set_t xbt_setset_new_set(xbt_setset_t setset)
-{
- xbt_setset_set_t newset = xbt_new0(s_xbt_setset_set_t, 1);
- newset->setset = setset;
- newset->size = xbt_dynar_length(setset->elm_array) / BITS_INT + 1;
- newset->bitmap = xbt_new0(unsigned int, newset->size);
- xbt_fifo_unshift(setset->sets, newset);
- return newset;
-}
-
-/**
- * \brief Destroy a set in the setset
- * \param set The set to destroy
- */
-void xbt_setset_destroy_set(xbt_setset_set_t set)
-{
- xbt_free(set->bitmap);
- xbt_fifo_remove(set->setset->sets, set);
- xbt_free(set);
-
- return;
-}
-
-/**
- * \brief Insert an element into a set
- * \param set The set where the element is going to be added
- * \param obj The element to add
- */
-void xbt_setset_set_insert(xbt_setset_set_t set, void *obj)
-{
- xbt_setset_elm_t e = (xbt_setset_elm_t) obj;
-
- if (e->ID == 0)
- xbt_setset_elm_add(set->setset, e);
-
- /* Check if we need to expand the bitmap */
- if (set->size * BITS_INT - 1 < e->ID) {
- set->bitmap =
- xbt_realloc(set->bitmap, (e->ID / BITS_INT + 1) * sizeof(int));
- memset(&set->bitmap[set->size], 0,
- ((e->ID / BITS_INT + 1) - set->size) * sizeof(int));
- set->size = (e->ID / BITS_INT + 1);
- }
-
- _set_bit(e->ID, set->bitmap);
-
- return;
-}
-
-/**
- * \brief Remove an element from a set
- * \param set The set from which the element is going to be removed
- * \param obj The element to remove
- */
-void xbt_setset_set_remove(xbt_setset_set_t set, void *obj)
-{
- xbt_setset_elm_t e = (xbt_setset_elm_t) obj;
- /* If the index of the object is between the bitmap then unset it, otherwise
- do not do anything, because we already know it is not in the set */
- if (e->ID != 0 && e->ID <= set->size * BITS_INT)
- _unset_bit(e->ID, set->bitmap);
-
- return;
-}
-
-/**
- * \brief Remove all the elements of a set
- * \param set The set to empty
- */
-void xbt_setset_set_reset(xbt_setset_set_t set)
-{
- memset(set->bitmap, 0, set->size * sizeof(int));
-}
-
-/**
- * \brief Choose one element of a set (but do not remove it)
- * \param set The set
- * \return An element that belongs to set \a set
- */
-void *xbt_setset_set_choose(xbt_setset_set_t set)
-{
- unsigned int i;
- /* Traverse the set and return the first element */
- for (i = 0; i < set->size; i++)
- if (set->bitmap[i] != 0)
- return _xbt_setset_idx_to_obj(set->setset,
- i * BITS_INT + ffs(set->bitmap[i]) -
- 1);
- return NULL;
-}
-
-/**
- * \brief Extract one element of a set (it removes it)
- * \param set The set
- * \return An element that belonged to set \a set
- */
-void *xbt_setset_set_extract(xbt_setset_set_t set)
-{
- void *obj = xbt_setset_set_choose(set);
- if (obj) {
- xbt_setset_set_remove(set, obj);
- }
- return obj;
-}
-
-
-/**
- * \brief Test if an element belongs to a set
- * \param set The set
- * \param obj The element
- * \return TRUE if the element \a obj belongs to set \a set
- */
-int xbt_setset_set_belongs(xbt_setset_set_t set, void *obj)
-{
- xbt_setset_elm_t e = (xbt_setset_elm_t) obj;
- if (e->ID != 0 && e->ID <= set->size * BITS_INT) {
- return _is_bit_set(e->ID % BITS_INT, set->bitmap[e->ID / BITS_INT]);
- }
- return FALSE;
-}
-
-int xbt_setset_set_size(xbt_setset_set_t set)
-{
- unsigned int i;
- int count = 0;
-
- for (i = 0; i < set->size; i++)
- count += bitcount(set->bitmap[i]);
-
- return count;
-}
-
-
-/**
- * \brief Add two sets
- * Add two sets storing the result in the first one
- * \param set1 The first set
- * \param set2 The second set
- */
-void xbt_setset_add(xbt_setset_set_t set1, xbt_setset_set_t set2)
-{
- unsigned int i;
-
- /* Increase the size of set1 if necessary */
- if (set1->size < set2->size) {
- xbt_realloc(set1->bitmap, set2->size * sizeof(unsigned int));
- set1->size = set2->size;
- }
-
- for (i = 0; i < set1->size; i++)
- if (set2->bitmap[i] != 0)
- set1->bitmap[i] |= set2->bitmap[i];
-
- return;
-}
-
-/**
- * \brief Substract two sets
- * Substract two sets storing the result in the first one
- * \param set1 The first set
- * \param set2 The second set
- */
-void xbt_setset_substract(xbt_setset_set_t set1, xbt_setset_set_t set2)
-{
- unsigned int i;
-
- for (i = 0; i < MIN(set1->size, set2->size); i++)
- if (set2->bitmap[i] != 0)
- set1->bitmap[i] ^= set2->bitmap[i];
-
- return;
-}
-
-/**
- * \brief Intersect two sets
- * Intersect two sets storing the result in the first one
- * \param set1 The first set
- * \param set2 The second set
- */
-void xbt_setset_intersect(xbt_setset_set_t set1, xbt_setset_set_t set2)
-{
- unsigned int i;
-
- for (i = 0; i < MIN(set1->size, set2->size); i++)
- if (set1->bitmap[i] && set2->bitmap[i])
- set1->bitmap[i] &= set2->bitmap[i];
-
- return;
-}
-
-/* Get a cursor pointing to the first element of the set */
-void xbt_setset_cursor_first(xbt_setset_set_t set,
- xbt_setset_cursor_t * cursor)
-{
- unsigned int i;
- (*cursor) = xbt_new0(s_xbt_setset_cursor_t, 1);
- (*cursor)->set = set;
-
- for (i = 0; i < set->size; i++) {
- if (set->bitmap[i] != 0) {
- (*cursor)->idx = i * BITS_INT + ffs(set->bitmap[i]) - 1;
- break;
- }
- }
-}
-
-/* Get the data pointed by a cursor */
-int xbt_setset_cursor_get_data(xbt_setset_cursor_t cursor, void **data)
-{
- if (cursor->idx == 0) {
- xbt_free(cursor);
- *data = NULL;
- return FALSE;
- } else {
- *data = _xbt_setset_idx_to_obj(cursor->set->setset, cursor->idx);
- return TRUE;
- }
-}
-
-/* Advance a cursor to the next element */
-void xbt_setset_cursor_next(xbt_setset_cursor_t cursor)
-{
- unsigned int mask;
- unsigned int data;
- cursor->idx++;
- while (cursor->idx < cursor->set->size * BITS_INT) {
- if ((data = cursor->set->bitmap[cursor->idx / BITS_INT])) {
- mask = 1 << cursor->idx % BITS_INT;
- while (mask) { /* FIXME: mask will never be 0! */
- if (data & mask) {
- return;
- } else {
- cursor->idx++;
- mask <<= 1;
- }
- }
- } else {
- cursor->idx += BITS_INT;
- }
- }
- cursor->idx = 0;
-}
-
-/* Check if the nth bit of an integer is set or not*/
-unsigned int _is_bit_set(unsigned int bit, unsigned int integer)
-{
- return (0x1 << bit) & integer ? TRUE : FALSE;
-}
-
-/* Set the nth bit of an array of integers */
-void _set_bit(unsigned int bit, unsigned int *bitmap)
-{
- bitmap[bit / BITS_INT] |= 0x1 << (bit % BITS_INT);
-}
-
-/* Unset the nth bit of an array of integers */
-void _unset_bit(unsigned int bit, unsigned int *bitmap)
-{
- bitmap[bit / BITS_INT] &= ~(0x1 << (bit % BITS_INT));
-}
-
-/**
- * Bitcount function
- * taken from http://graphics.stanford.edu/~seander/bithacks.html
- * Note: it assumes 4 byte integers
- */
-int bitcount(int v)
-{
- v = v - ((v >> 1) & 0x55555555); // reuse input as temporary
- v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
- return (((v + (v >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24; // count
-}
+++ /dev/null
-/* 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. */
-
-#include "xbt/base.h"
-#include "xbt/dict.h"
-#include "xbt/dynar.h"
-#include "xbt/setset.h"
-#include "xbt/fifo.h"
-
-#define BITS_INT (8 * sizeof(int))
-
-typedef struct s_xbt_setset_elm {
- XBT_SETSET_HEADERS;
-} s_xbt_setset_elm_t, *xbt_setset_elm_t;
-
-typedef union u_xbt_setset_elm_entry {
- /* Information when the entry is being used */
- struct {
- xbt_setset_elm_t obj;
- } info;
- /* Information when the entry is free */
- struct {
- unsigned long next;
- } free;
-} u_xbt_setset_elm_entry_t, *xbt_setset_elm_entry_t;
-
-typedef struct s_xbt_setset_set {
- xbt_setset_t setset; /* setset that contains this set */
- unsigned int size; /* in integers */
- unsigned int *bitmap; /* the bit array */
-} s_xbt_setset_set_t;
-
-typedef struct s_xbt_setset {
- xbt_dynar_t elm_array; /* of s_xbt_setset_elm_entry_t, to find elements by index */
- xbt_fifo_t sets; /* of s_xbt_setset_set_t, memberships in actual sets of setset */
-} s_xbt_setset_t;
-
-typedef struct s_xbt_setset_cursor {
- int idx; /* Actual postition of the cursor (bit number) */
- xbt_setset_set_t set; /* The set associated to the cursor */
-} s_xbt_setset_cursor_t;
-
-/* Some internal functions */
-
-XBT_PRIVATE int bitcount(int);
-
-/* Get the object associated to a given index */
-XBT_PRIVATE void *_xbt_setset_idx_to_obj(xbt_setset_t setset, unsigned long idx);
-
-/* Check if the nth bit of an integer is set or not*/
-XBT_PRIVATE unsigned int _is_bit_set(unsigned int bit, unsigned int integer);
-
-/* Set the nth bit of an array of integers */
-XBT_PRIVATE void _set_bit(unsigned int bit, unsigned int *bitmap);
-
-/* Unset the nth bit of an array of integers */
-XBT_PRIVATE void _unset_bit(unsigned int bit, unsigned int *bitmap);
#define LINUX_COMPATIBLE
#endif
-#include "portable.h" /* to get a working stdarg.h */
+#include "src/portable.h" /* to get a working stdarg.h */
#include <sys/types.h>
#include <string.h>
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "xbt/sysdep.h"
-#include "xbt/log_private.h"
+#include "src/xbt/log_private.h"
#ifdef HAVE_SMPI
-#include "smpi/private.h" // to access bench_begin/end. Not ultraclean, I confess
+#include "src/smpi/private.h" // to access bench_begin/end. Not ultraclean, I confess
#endif
#include <stdio.h>
/* 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 "portable.h" /* execinfo when available */
+#include "src/portable.h" /* execinfo when available */
#include "xbt/synchro_core.h" /* xbt_thread_self_name */
-#include "xbt/ex_interface.h"
+#include "src/xbt/ex_interface.h"
#include "xbt/sysdep.h"
#include "xbt/strbuff.h"
-#include "xbt/log_private.h"
+#include "src/xbt/log_private.h"
#include "simgrid/simix.h" /* SIMIX_host_self_get_name */
#include "surf/surf.h"
#include <stdio.h>
#include "xbt/sysdep.h"
#include "xbt/strbuff.h" /* For dynamic version when the static one fails */
-#include "xbt/log_private.h"
+#include "src/xbt/log_private.h"
#include "simgrid/simix.h" /* SIMIX_host_self_get_name */
#include "surf/surf.h"
#include <stdio.h>
-#include "portable.h"
+#include "src/portable.h"
extern const char *xbt_log_priority_names[8];
extern int xbt_log_no_loc;
#include "xbt/misc.h"
#include "simgrid_config.h" /* _XBT_WIN32 */
-#include "internal_config.h" /* MMALLOC_WANT_OVERRIDE_LEGACY */
-#include "portable.h"
+#include "src/internal_config.h" /* MMALLOC_WANT_OVERRIDE_LEGACY */
+#include "src/portable.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/dynar.h"
#include "xbt/module.h" /* this module */
-#include "xbt_modinter.h" /* prototype of other module's init/exit in XBT */
+#include "src/xbt_modinter.h" /* prototype of other module's init/exit in XBT */
#include "simgrid/sg_config.h"
#include "xbt/sysdep.h"
#include "xbt/file.h" /* this module */
#include "xbt/log.h"
-#include "portable.h"
+#include "src/portable.h"
#ifndef _MSC_VER
#include "libgen.h" /* POSIX dirname */
#include <unistd.h>
#endif
-#include "internal_config.h"
+#include "src/internal_config.h"
#include "xbt/sysdep.h"
#include "xbt/ex.h"
-#include "xbt/ex_interface.h" /* We play crude games with exceptions */
-#include "portable.h"
+#include "src/xbt/ex_interface.h" /* We play crude games with exceptions */
+#include "src/portable.h"
#include "xbt/xbt_os_time.h" /* Portable time facilities */
#include "xbt/xbt_os_thread.h" /* This module */
-#include "xbt_modinter.h" /* Initialization/finalization of this module */
+#include "src/xbt_modinter.h" /* Initialization/finalization of this module */
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_sync_os, xbt,
"Synchronization mechanism (OS-level)");
#include "xbt/sysdep.h"
#include "xbt/xbt_os_time.h" /* this module */
#include "xbt/log.h"
-#include "portable.h"
+#include "src/portable.h"
#include <math.h> /* floor */
#ifdef _XBT_WIN32
/* 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 "internal_config.h"
+#include "src/internal_config.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/str.h"
/* 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_modinter.h"
+#include "src/xbt_modinter.h"
#include "xbt/sysdep.h"
#include "xbt/xbt_os_thread.h"
-#include "portable.h" /* CONTEXT_THREADS */
+#include "src/portable.h" /* CONTEXT_THREADS */
#ifndef CONTEXT_THREADS
#ifndef WIN32
/* ************* */
#ifdef SIMGRID_TEST
#include "xbt/hash.h"
-#include "portable.h" /* hexa_str */
+#include "src/portable.h" /* hexa_str */
static char *mycmp(const char *p1, const char *p2, size_t n)
{
/* 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 "portable.h"
+#include "src/portable.h"
#include "xbt/misc.h"
#include "xbt/sysdep.h"
#include "xbt/str.h" /* headers of these functions */
$ java -classpath ${classpath:=.} sleep_host_off.Main ${srcdir:=.}/../../examples/platforms/small_platform.xml ${srcdir:=.}/sleep_host_off/sleep_host_off_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [ 0.000000] (0:@) Using regular java threads. Coroutines could speed your simulation up.
+> [ 0.000000] (0:@) Using regular java threads.
> [ 0.000000] (1:sleep_host_off.SleepHostOff@Tremblay) **** **** **** ***** ***** Test Sleep ***** ***** **** **** ****
> [ 0.000000] (1:sleep_host_off.SleepHostOff@Tremblay) Test sleep: Create a process on Jupiter, the process simply make periodic sleep, turn off Jupiter
> [ 0.000000] (2:sleep@Jupiter) I'm not dead
--- /dev/null
+$ ${srcdir:=.}/../../examples/msg/masterslave/masterslave_arg ${srcdir:=.}/../../examples/platforms/small_platform.lua 4 5
+> [0.000000] [msg_test/INFO] Got 5 slaves, 4 tasks to process, and 5 hosts
+> [3.095754] [msg_test/INFO] Simulation time 3.09575
+
+$ $SG_TEST_EXENV ${bindir:=.}/../../examples/msg/token_ring/token_ring ${srcdir:=.}/../../examples/platforms/routing_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [ 0.000000] (0:@) Number of host '6'
+> [ 0.000000] (1:0@host1) Host "0" send 'Token' to Host "1"
+> [ 0.017354] (2:1@host2) Host "1" received "Token"
+> [ 0.017354] (2:1@host2) Host "1" send 'Token' to Host "2"
+> [ 0.035121] (3:2@host3) Host "2" received "Token"
+> [ 0.035121] (3:2@host3) Host "2" send 'Token' to Host "3"
+> [ 0.065898] (4:3@host4) Host "3" received "Token"
+> [ 0.065898] (4:3@host4) Host "3" send 'Token' to Host "4"
+> [ 0.083252] (5:4@host5) Host "4" received "Token"
+> [ 0.083252] (5:4@host5) Host "4" send 'Token' to Host "5"
+> [ 0.101019] (6:5@host6) Host "5" received "Token"
+> [ 0.101019] (6:5@host6) Host "5" send 'Token' to Host "0"
+> [ 0.131796] (1:0@host1) Host "0" received "Token"
+> [ 0.131796] (0:@) Simulation time 0.131796
#include <mc/mc.h>
#include "mc/datatypes.h"
-#include "mc/mc_object_info.h"
-#include "mc/mc_private.h"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_private.h"
-#include "mc/Process.hpp"
-#include "mc/Type.hpp"
-#include "mc/ObjectInformation.hpp"
-#include "mc/Variable.hpp"
+#include "src/mc/Process.hpp"
+#include "src/mc/Type.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/Variable.hpp"
int test_some_array[4][5][6];
struct some_struct { int first; int second[4][5]; } test_some_struct;
simgrid::mc::Variable* var = find_local_variable(subprogram, variable);
assert(var);
- void* frame_base = mc_find_frame_base(subprogram, info, cursor);
- s_mc_location_t location;
+ void* frame_base = subprogram->frame_base(*cursor);
+ simgrid::dwarf::Location location = simgrid::dwarf::resolve(
+ var->location_list, info, cursor, frame_base, NULL, -1);
- mc_dwarf_resolve_locations(&location,
- &var->location_list, info, cursor, frame_base, NULL, -1);
-
- xbt_assert(mc_get_location_type(&location)==MC_LOCATION_TYPE_ADDRESS,
- "Unexpected location type for variable %s of %s", variable, function);
-
- xbt_assert(location.memory_location == address,
+ xbt_assert(location.in_memory(),
+ "Expected the variable %s of function %s to be in memory",
+ variable, function);
+ xbt_assert(location.address() == address,
"Bad resolution of local variable %s of %s", variable, function);
}
#include <assert.h>
#include <stdlib.h>
-#include "mc/mc_private.h"
-#include "mc/mc_object_info.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_object_info.h"
-#include "mc/Process.hpp"
-#include "mc/Type.hpp"
-#include "mc/ObjectInformation.hpp"
-#include "mc/Variable.hpp"
+#include "src/mc/Process.hpp"
+#include "src/mc/Type.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/Variable.hpp"
static simgrid::mc::Process* process;
static
-uintptr_t eval_binary_operation(mc_expression_state_t state, int op, uintptr_t a, uintptr_t b) {
- state->stack_size = 0;
+uintptr_t eval_binary_operation(
+ simgrid::dwarf::ExpressionContext& state, int op, uintptr_t a, uintptr_t b) {
Dwarf_Op ops[15];
ops[0].atom = DW_OP_const8u;
ops[1].number = b;
ops[2].atom = op;
- assert(mc_dwarf_execute_expression(3, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size==1);
- return state->stack[state->stack_size - 1];
+ simgrid::dwarf::ExpressionStack stack;
+
+ try {
+ simgrid::dwarf::execute(ops, 3, state, stack);
+ }
+ catch(std::runtime_error& e) {
+ fprintf(stderr,"Expression evaluation error");
+ }
+
+ assert(stack.size() == 1);
+ return stack.top();
}
static
-void basic_test(mc_expression_state_t state) {
+void basic_test(simgrid::dwarf::ExpressionContext const& state) {
+ try {
+
Dwarf_Op ops[60];
uintptr_t a = rand();
uintptr_t b = rand();
- ops[0].atom = DW_OP_drop;
- assert(mc_dwarf_execute_expression(1, ops, state) == MC_EXPRESSION_E_STACK_UNDERFLOW);
+ simgrid::dwarf::ExpressionStack stack;
+
+ try {
+ ops[0].atom = DW_OP_drop;
+ simgrid::dwarf::execute(ops, 1, state, stack);
+ fprintf(stderr,"Exception expected");
+ }
+ catch(simgrid::dwarf::evaluation_error& e) {}
ops[0].atom = DW_OP_lit21;
- assert(mc_dwarf_execute_expression(1, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size==1);
- assert(state->stack[state->stack_size-1]==21);
+ simgrid::dwarf::execute(ops, 1, state, stack);
+ assert(stack.size() == 1);
+ assert(stack.top() == 21);
ops[0].atom = DW_OP_const8u;
ops[0].number = a;
- assert(mc_dwarf_execute_expression(1, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size==2);
- assert(state->stack[state->stack_size-1] == a);
+ simgrid::dwarf::execute(ops, 1, state, stack);
+ assert(stack.size() == 2);
+ assert(stack.top() == a);
ops[0].atom = DW_OP_drop;
ops[1].atom = DW_OP_drop;
- assert(mc_dwarf_execute_expression(2, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size==0);
+ simgrid::dwarf::execute(ops, 2, state, stack);
+ assert(stack.empty());
+ stack.clear();
ops[0].atom = DW_OP_lit21;
ops[1].atom = DW_OP_plus_uconst;
ops[1].number = a;
- assert(mc_dwarf_execute_expression(2, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size==1);
- assert(state->stack[state->stack_size-1]== a + 21);
+ simgrid::dwarf::execute(ops, 2, state, stack);
+ assert(stack.size() == 1);
+ assert(stack.top() == a + 21);
- state->stack_size = 0;
+ stack.clear();
ops[0].atom = DW_OP_const8u;
ops[0].number = a;
ops[1].atom = DW_OP_dup;
ops[2].atom = DW_OP_plus;
- assert(mc_dwarf_execute_expression(3, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size==1);
- assert(state->stack[state->stack_size-1]== a + a);
+ simgrid::dwarf::execute(ops, 3, state, stack);
+ assert(stack.size() == 1);
+ assert(stack.top() == a + a);
- state->stack_size = 0;
+ stack.clear();
ops[0].atom = DW_OP_const8u;
ops[0].number = a;
ops[1].atom = DW_OP_const8u;
ops[1].number = b;
ops[2].atom = DW_OP_over;
- assert(mc_dwarf_execute_expression(3, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size==3);
- assert(state->stack[state->stack_size-1]== a);
- assert(state->stack[state->stack_size-2]== b);
- assert(state->stack[state->stack_size-3]== a);
+ simgrid::dwarf::execute(ops, 3, state, stack);
+ assert(stack.size() == 3);
+ assert(stack.top() == a);
+ assert(stack.top(1) == b);
+ assert(stack.top(2) == a);
- state->stack_size = 0;
+ stack.clear();
ops[0].atom = DW_OP_const8u;
ops[0].number = a;
ops[1].atom = DW_OP_const8u;
ops[1].number = b;
ops[2].atom = DW_OP_swap;
- assert(mc_dwarf_execute_expression(3, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size=2);
- assert(state->stack[state->stack_size-1]== a);
- assert(state->stack[state->stack_size-2]== b);
+ simgrid::dwarf::execute(ops, 3, state, stack);
+ assert(stack.size() == 2);
+ assert(stack.top() == a);
+ assert(stack.top(1) == b);
+
+ }
+ catch(std::runtime_error& e) {
+ fprintf(stderr,"Expression evaluation error");
+ }
}
static
-void test_deref(mc_expression_state_t state) {
+void test_deref(simgrid::dwarf::ExpressionContext const& state) {
+ try {
+
uintptr_t foo = 42;
Dwarf_Op ops[60];
ops[0].atom = DW_OP_const8u;
ops[0].number = (uintptr_t) &foo;
ops[1].atom = DW_OP_deref;
- state->stack_size = 0;
- assert(mc_dwarf_execute_expression(2, ops, state) == MC_EXPRESSION_OK);
- assert(state->stack_size==1);
- assert(state->stack[state->stack_size-1] == foo);
+ simgrid::dwarf::ExpressionStack stack;
+
+ simgrid::dwarf::execute(ops, 2, state, stack);
+ assert(stack.size() == 1);
+ assert(stack.top() == foo);
+
+ }
+ catch(std::runtime_error& e) {
+ fprintf(stderr,"Expression evaluation error");
+ }
}
int main(int argc, char** argv) {
process = new simgrid::mc::Process(getpid(), -1);
- s_mc_expression_state_t state;
- memset(&state, 0, sizeof(s_mc_expression_state_t));
+ simgrid::dwarf::ExpressionContext state;
state.address_space = (simgrid::mc::AddressSpace*) process;
- basic_test(&state);
+ basic_test(state);
for(int i=0; i!=100; ++i) {
uintptr_t a = rand();
uintptr_t b = rand();
- assert(eval_binary_operation(&state, DW_OP_plus, a, b) == (a + b));
+ assert(eval_binary_operation(state, DW_OP_plus, a, b) == (a + b));
}
for(int i=0; i!=100; ++i) {
uintptr_t a = rand();
uintptr_t b = rand();
- assert(eval_binary_operation(&state, DW_OP_or, a, b) == (a | b));
+ assert(eval_binary_operation(state, DW_OP_or, a, b) == (a | b));
}
for(int i=0; i!=100; ++i) {
uintptr_t a = rand();
uintptr_t b = rand();
- assert(eval_binary_operation(&state, DW_OP_and, a, b) == (a & b));
+ assert(eval_binary_operation(state, DW_OP_and, a, b) == (a & b));
}
for(int i=0; i!=100; ++i) {
uintptr_t a = rand();
uintptr_t b = rand();
- assert(eval_binary_operation(&state, DW_OP_xor, a, b) == (a ^ b));
+ assert(eval_binary_operation(state, DW_OP_xor, a, b) == (a ^ b));
}
- test_deref(&state);
+ test_deref(state);
return 0;
}
int commTX(int argc, char *argv[]);
xbt_dynar_t tests;
+int tasks_done = 0;
int test_launcher(int argc, char *argv[])
{
XBT_INFO(" Turn off Jupiter");
MSG_host_off(jupiter);
MSG_process_sleep(10);
- XBT_INFO("Test 1 seems ok, cool !(number of Process : %d, it should be 1 (i.e. the Test one))", MSG_process_get_number());
+ XBT_INFO("Test 1 seems ok, cool !(#Processes: %d, it should be 1; #tasks: %d)", MSG_process_get_number(), tasks_done);
}
test = 2;
return 0;
}
-// adsein: Is this really a daemon ? it ran only one task ? I just added a stupid loop
int process_daemon(int argc, char *argv[])
{
msg_task_t task = NULL;
XBT_INFO(" Start daemon on %s (%f)", MSG_host_get_name(MSG_host_self()), MSG_get_host_speed(MSG_host_self()));
for(;;){
- task = MSG_task_create("deamon", MSG_get_host_speed(MSG_host_self()), 0, NULL);
- XBT_INFO(" Execute deamon");
+ task = MSG_task_create("daemon", MSG_get_host_speed(MSG_host_self()), 0, NULL);
+ XBT_INFO(" Execute daemon");
MSG_task_execute(task);
MSG_task_destroy(task);
+ tasks_done ++;
}
- XBT_INFO(" Deamon done. See you!");
+ XBT_INFO(" daemon done. See you!");
return 0;
}
> [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 1:
> [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Create a process on Jupiter
> [Jupiter:process_daemon:(2) 0.000000] [msg_test/INFO] Start daemon on Jupiter (76296000.000000)
-> [Jupiter:process_daemon:(2) 0.000000] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemon:(2) 1.000000] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemon:(2) 2.000000] [msg_test/INFO] Execute deamon
+> [Jupiter:process_daemon:(2) 0.000000] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemon:(2) 1.000000] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemon:(2) 2.000000] [msg_test/INFO] Execute daemon
> [Tremblay:test_launcher:(1) 3.000000] [msg_test/INFO] Turn off Jupiter
-> [Tremblay:test_launcher:(1) 13.000000] [msg_test/INFO] Test 1 seems ok, cool !(number of Process : 1, it should be 1 (i.e. the Test one))
+> [Jupiter:process_daemon:(2) 3.000000] [msg_test/INFO] Execute daemon
+> [Tremblay:test_launcher:(1) 13.000000] [msg_test/INFO] Test 1 seems ok, cool !(#Processes: 1, it should be 1; #tasks: 3)
> [Tremblay:test_launcher:(1) 13.000000] [msg_test/INFO] Test done. See you!
> [13.000000] [msg_test/INFO] Simulation time 13
> [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 6: Turn on Jupiter, assign a VM on Jupiter, launch a process inside the VM, and turn off the node
> [0.000000] [surf_vm/INFO] Create VM(vm0)@PM(Jupiter) with 0 mounted disks
> [vm0:process_daemon:(2) 0.000000] [msg_test/INFO] Start daemon on vm0 (76296000.000000)
-> [vm0:process_daemon:(2) 0.000000] [msg_test/INFO] Execute deamon
+> [vm0:process_daemon:(2) 0.000000] [msg_test/INFO] Execute daemon
> [Jupiter:process_daemonJUPI:(3) 0.000000] [msg_test/INFO] Start daemon on Jupiter (76296000.000000)
-> [Jupiter:process_daemonJUPI:(3) 0.000000] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 1.000001] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 2.000002] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 3.000004] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 4.000005] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 5.000006] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 6.000007] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 7.000008] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 8.000009] [msg_test/INFO] Execute deamon
-> [Jupiter:process_daemonJUPI:(3) 9.000011] [msg_test/INFO] Execute deamon
+> [Jupiter:process_daemonJUPI:(3) 0.000000] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 1.000001] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 2.000002] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 3.000004] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 4.000005] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 5.000006] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 6.000007] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 7.000008] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 8.000009] [msg_test/INFO] Execute daemon
+> [Jupiter:process_daemonJUPI:(3) 9.000011] [msg_test/INFO] Execute daemon
> [Tremblay:test_launcher:(1) 10.000000] [msg_test/INFO] Turn Jupiter off
> [Tremblay:test_launcher:(1) 10.000000] [msg_test/INFO] Shutdown vm0
> [Tremblay:test_launcher:(1) 10.000000] [msg_test/INFO] Destroy vm0
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/simdag.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
#include "xbt/xbt_os_time.h"
#define BILLION 1000000000L;
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/simdag.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
#include "xbt/xbt_os_time.h"
extern routing_platf_t routing_platf;
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/simdag.h"
-#include "surf/surf_private.h"
#include "xbt/log.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(basic_link_test, sd,
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/simdag.h"
-#include "surf/surf_private.h"
int main(int argc, char **argv)
{
#include <stdio.h>
#include <stdlib.h>
#include "simgrid/msg.h"
-#include "surf/surf_private.h"
int host(int argc, char *argv[]);
#include "xbt/ex.h"
#include "xbt/xbt_os_time.h"
#include "surf/surf.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
static const char link_ctn_v2[] = "link:ctn";
static const char link_ctn_v3[] = "link_ctn";
#include <stdio.h>
#include <stdlib.h>
-#include "simgrid/simdag.h"
-#include "surf/surf_private.h"
+#include "src/surf/surf_private.h"
extern routing_platf_t routing_platf;
{
SIMIX_global_init(&argc, argv);
- if (argc != 2) {
- printf("Usage: %s platform_and_deployment.xml\n", argv[0]);
+ if (argc != 3) {
+ printf("Usage: %s platform.xml deployment.xml\n", argv[0]);
exit(EXIT_FAILURE);
}
SIMIX_function_register("master", master);
SIMIX_create_environment(argv[1]);
- SIMIX_launch_application(argv[1]);
+ SIMIX_launch_application(argv[2]);
SIMIX_run();
return 0;
! expect signal SIGSEGV
-$ ${bindir:=.}/stack_overflow --cfg=contexts/stack_size:96 stack_overflow.xml
+$ ${bindir:=.}/stack_overflow --cfg=contexts/stack_size:96 stack_overflow_platform.xml stack_overflow.xml
> [Tremblay:master:(0) 0.000000] [test/INFO] Launching our nice bugged recursive function...
> Access violation detected.
> This can result from a programming error in your code or, although less likely,
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
- <!-- The hosts -->
- <AS id="AS0" routing="Full">
- <host id="Tremblay" power="98.095Mf"/>
- </AS>
-
<!-- The master process (with some arguments) -->
<process host="Tremblay" function="master">
</process>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+ <!-- The hosts -->
+ <AS id="AS0" routing="Full">
+ <host id="Tremblay" power="98.095Mf"/>
+ </AS>
+
+</platform>
# Build the tests
#################
-if(enable_smpi AND enable_smpi_ISP_testsuite)
+if(enable_smpi AND enable_model-checking AND enable_smpi_ISP_testsuite)
set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
# Erase all tesh files on cleanup: they are generated anyway
set_directory_properties ( PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${files_to_clean}" )
-if(enable_smpi AND enable_smpi_ISP_testsuite)
+if(enable_smpi AND enable_model-checking AND enable_smpi_ISP_testsuite)
foreach (tesh ${umpire_tesh})
ADD_TESH(mc-umpire-${tesh}
--setenv srcdir=${CMAKE_CURRENT_SOURCE_DIR}
C (C) 2003 by Argonne National Laboratory.
C See COPYRIGHT in top-level directory.
C
- integer*@MPI_ADDRESS_SIZE@ aint, aintv(max_asizev)
+ integer*@CMAKE_SIZEOF_VOID_P@ aint, aintv(max_asizev)
elsif (/--?maxnp=(.*)/) { $np_max = $1; }
elsif (/--?tests=(.*)/) { $listfiles = $1; }
elsif (/--?srcdir=(.*)/) { $srcdir = $1;
- $mpiexec="$mpiexec -platform ${srcdir}/../../../../examples/platforms/small_platform_with_routers.xml -hostfile ${srcdir}/../../hostfile_coll --log=root.thr:critical --cfg=smpi/running_power:1e9 --cfg=smpi/async_small_thres:65536"; }
+ $mpiexec="$mpiexec -platform ${srcdir}/../../../../examples/platforms/small_platform_with_routers.xml -hostfile ${srcdir}/../../hostfile_coll --log=root.thr:critical --cfg=smpi/running_power:1e9 --cfg=smpi/async_small_thresh:65536"; }
elsif (/--?verbose/) { $verbose = 1; }
elsif (/--?showprogress/) { $showProgress = 1; }
elsif (/--?debug/) { $debug = 1; }
now = surf_get_clock();
XBT_DEBUG("Next Event : %g", now);
- xbt_dynar_foreach(model_list, iter, model) {
- XBT_DEBUG("\t %s actions", surf_model_name(model));
+ xbt_dynar_foreach(all_existing_models, iter, model) {
+ XBT_DEBUG("\t Actions");
while ((action = surf_model_extract_failed_action_set((surf_model_t)model))) {
XBT_DEBUG("\t * Failed : %p", action);
surf_action_unref(action);
surf_action_unref(action);
}
if (surf_model_running_action_set_size((surf_model_t)model)) {
- XBT_DEBUG("running %s", surf_model_name(model));
+ XBT_DEBUG("running that model");
running = 1;
}
}
#include <xbt/dynar.h>
#include <xbt/parmap.h>
#include <xbt/sysdep.h>
-#include <internal_config.h> /* HAVE_FUTEX_H */
+#include "src/internal_config.h" /* HAVE_FUTEX_H */
#include "simgrid/simix.h"
#include "xbt/xbt_os_time.h"
#include "xbt.h"
#include "xbt/ex.h"
#include "xbt/xbt_os_time.h"
-#include "internal_config.h"
+#include "src/internal_config.h"
XBT_LOG_NEW_DEFAULT_CATEGORY(parmap_test, "Test for parmap");
+++ /dev/null
-set(CMAKE_MODULE_PATH
- ${CMAKE_MODULE_PATH}
- ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules
- )
-
-# x86_64
-# x86
-# i.86
-
-### Determine the assembly flavor that we need today
-include(CMakeDetermineSystem)
-IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
- IF(${ARCH_32_BITS})
- message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
- set(PROCESSOR_i686 1)
- ELSE()
- message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
- set(PROCESSOR_x86_64 1)
- ENDIF()
- if (MSVC)
- message(STATUS "Disable fast raw contextes on Microsoft Visual.")
- else()
- set(HAVE_RAWCTX 1)
- endif()
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha")
- message(STATUS "System processor: alpha")
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
- # Subdir is "arm" for both big-endian (arm) and little-endian (armel).
- message(STATUS "System processor: arm")
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
- # mips* machines are bi-endian mostly so processor does not tell
- # endianess of the underlying system.
- message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "mips" "mipsel" "mipseb")
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
- message(STATUS "System processor: ppc64")
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
- message(STATUS "System processor: ppc")
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc")
- # Both flavours can run on the same processor
- message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "sparc" "sparcv9")
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)")
- message(STATUS "System processor: parisc" "parisc64")
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390")
- # s390 binaries can run on s390x machines
- message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "s390" "s390x")
-
-ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh")
- message(STATUS "System processor: sh")
-
-ELSE() #PROCESSOR NOT FOUND
- message(STATUS "PROCESSOR NOT FOUND: ${CMAKE_SYSTEM_PROCESSOR}")
-
-ENDIF()
-
-if(ARCH_32_BITS)
- set(MPI_ADDRESS_SIZE 4)
-else()
- set(MPI_ADDRESS_SIZE 8)
-endif()
-
-include(CheckFunctionExists)
-include(CheckTypeSize)
-include(CheckIncludeFile)
-include(CheckIncludeFiles)
-include(CheckLibraryExists)
-include(CheckSymbolExists)
-include(TestBigEndian)
-TEST_BIG_ENDIAN(BIGENDIAN)
-
-include(FindGraphviz)
-include(FindLibSigc++)
-
-if(enable_java)
- find_package(Java REQUIRED COMPONENTS Runtime Development)
- find_package(JNI REQUIRED)
- message("-- [Java] JNI found: ${JNI_FOUND}")
- message("-- [Java] JNI include dirs: ${JNI_INCLUDE_DIRS}")
- if(enable_maintainer_mode)
- find_package(SWIG REQUIRED)
- include(UseSWIG)
- message("-- [Java] Swig found: ${SWIG_FOUND} (version ${SWIG_VERSION})")
- endif()
- set(HAVE_Java 1)
-endif()
-if(enable_scala)
- find_package(Scala REQUIRED)
- message("-- [Scala] scalac found: ${SCALA_COMPILE}")
- set(HAVE_Scala 1)
-endif()
-if(enable_lua)
- include(FindLua51Simgrid)
-endif()
-
-set(HAVE_NS3 0)
-if(enable_ns3)
- include(FindNS3)
- if (NOT HAVE_NS3)
- message(FATAL_ERROR "Cannot find NS3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
- endif()
-endif()
-
-find_package(Boost 1.48)
-if(Boost_FOUND)
- include_directories(${Boost_INCLUDE_DIRS})
-else()
- if(APPLE)
- 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."
- "Did you install libboost-dev and libboost-context-dev?"
- "(libboost-context-dev is optional)")
- endif()
-endif()
-
-# Try again to see if we have libboost-context
-find_package(Boost 1.42 COMPONENTS context)
-set(Boost_FOUND 1) # We don't care of whether this component is missing
-
-if(Boost_FOUND AND Boost_CONTEXT_FOUND)
- # We should use feature detection for this instead:
- if (Boost_VERSION LESS 105600)
- message("Found Boost.Context API v1")
- set(HAVE_BOOST_CONTEXT 1)
- else()
- message("Found Boost.Context API v2")
- set(HAVE_BOOST_CONTEXT 2)
- endif()
-else()
- message (" boost : found.")
- message (" boost-context: missing. Install libboost-context-dev for this optional feature.")
- set(HAVE_BOOST_CONTEXT 0)
-endif()
-
-# Checks for header libraries functions.
-CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_DLOPEN_IN_LIBDL)
-CHECK_LIBRARY_EXISTS(execinfo backtrace "" HAVE_BACKTRACE_IN_LIBEXECINFO)
-CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_PTHREAD)
-CHECK_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB)
-CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB)
-CHECK_LIBRARY_EXISTS(pthread sem_timedwait "" HAVE_SEM_TIMEDWAIT_LIB)
-CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB)
-CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
-
-if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
- set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
-elseif(MINGW)
- add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
- set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
-else()
- set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
-endif()
-
-CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
-CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_VALGRIND_H)
-CHECK_INCLUDE_FILE("socket.h" HAVE_SOCKET_H)
-CHECK_INCLUDE_FILE("stat.h" HAVE_STAT_H)
-CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H)
-CHECK_INCLUDE_FILE("windows.h" HAVE_WINDOWS_H)
-CHECK_INCLUDE_FILE("errno.h" HAVE_ERRNO_H)
-CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
-CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFO_H)
-CHECK_INCLUDE_FILE("signal.h" HAVE_SIGNAL_H)
-CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H)
-CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
-CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H)
-CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
-CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H)
-CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
-CHECK_INCLUDE_FILE("stdio.h" HAVE_STDIO_H)
-CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
-
-CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
-CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
-CHECK_FUNCTION_EXISTS(getdtablesize HAVE_GETDTABLESIZE)
-CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
-CHECK_FUNCTION_EXISTS(readv HAVE_READV)
-CHECK_FUNCTION_EXISTS(popen HAVE_POPEN)
-CHECK_FUNCTION_EXISTS(signal HAVE_SIGNAL)
-
-CHECK_SYMBOL_EXISTS(snprintf stdio.h HAVE_SNPRINTF)
-CHECK_SYMBOL_EXISTS(vsnprintf stdio.h HAVE_VSNPRINTF)
-CHECK_SYMBOL_EXISTS(asprintf stdio.h HAVE_ASPRINTF)
-CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
-
-if(MINGW)
- # The detection of asprintf fails on MinGW, assumingly because it's
- # defined as an inline function in stdio.h instead of a regular
- # function. So force the result to be 1 despite of the test.
- set(HAVE_ASPRINTF 1)
- set(HAVE_VASPRINTF 1)
-endif()
-
-CHECK_FUNCTION_EXISTS(makecontext HAVE_MAKECONTEXT)
-CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
-
-CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
-
-#Check if __thread is defined
-execute_process(
- COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_thread_storage.c"
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_thread_storage_run
- )
-
-if(HAVE_thread_storage_run)
- set(HAVE_THREAD_LOCAL_STORAGE 1)
-else()
- set(HAVE_THREAD_LOCAL_STORAGE 0)
-endif()
-
-# Our usage of mmap is Linux-specific (flag MAP_ANONYMOUS), but kFreeBSD uses a GNU libc
-IF(HAVE_MMAP AND
- NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND
- NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND
- NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND
- NOT "${CMAKE_SYSTEM}" MATCHES "Darwin")
- SET(HAVE_MMAP 0)
- message(STATUS "Warning: MMAP is thought as non functional on this architecture (${CMAKE_SYSTEM})")
-ENDIF()
-
-if(HAVE_MMAP AND HAVE_THREAD_LOCAL_STORAGE)
- SET(HAVE_MMALLOC 1)
-else()
- SET(HAVE_MMALLOC 0)
-endif()
-
-
-if(WIN32) # Those files are not detected despite being present
- set(HAVE_UCONTEXT_H 1)
- set(HAVE_MAKECONTEXT 1)
- set(HAVE_SNPRINTF 1)
- set(HAVE_VSNPRINTF 1)
-endif()
-
-set(CONTEXT_UCONTEXT 0)
-SET(CONTEXT_THREADS 0)
-
-if(enable_jedule)
- SET(HAVE_JEDULE 1)
-endif()
-
-if(enable_latency_bound_tracking)
- SET(HAVE_LATENCY_BOUND_TRACKING 1)
-else()
- SET(HAVE_LATENCY_BOUND_TRACKING 0)
-endif()
-
-if(enable_mallocators)
- SET(MALLOCATOR_IS_WANTED 1)
-else()
- SET(MALLOCATOR_IS_WANTED 0)
-endif()
-
-if(enable_model-checking AND HAVE_MMALLOC)
- SET(HAVE_MC 1)
- SET(MMALLOC_WANT_OVERRIDE_LEGACY 1)
- include(FindLibunwind)
- include(FindLibdw)
-else()
- if(enable_model-checking)
- message(STATUS "Warning: support for model-checking has been disabled because HAVE_MMALLOC is false")
- endif()
- SET(HAVE_MC 0)
- SET(HAVE_MMALLOC 0)
- SET(MMALLOC_WANT_OVERRIDE_LEGACY 0)
-endif()
-
-if(enable_smpi)
- include(FindGFortran)
- #really checks for objdump for privatization
- find_package(BinUtils QUIET)
- SET(HAVE_SMPI 1)
-
- if( NOT "${CMAKE_OBJDUMP}" MATCHES "CMAKE_OBJDUMP-NOTFOUND" AND HAVE_MMAP)
- SET(HAVE_PRIVATIZATION 1)
- else()
- SET(HAVE_PRIVATIZATION 0)
- endif()
-endif()
-
-#--------------------------------------------------------------------------------------------------
-### Check for GNU dynamic linker
-CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
-if (HAVE_DLFCN_H)
- if(HAVE_DLOPEN_IN_LIBDL)
- set(DL_LIBRARY "-ldl")
- endif(HAVE_DLOPEN_IN_LIBDL)
- execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_gnu_dynlinker.c ${DL_LIBRARY} -o test_gnu_ld
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- OUTPUT_VARIABLE HAVE_GNU_LD_compil
- )
- if(HAVE_GNU_LD_compil)
- set(HAVE_GNU_LD 0)
- message(STATUS "Warning: test program toward GNU ld failed to compile:")
- message(STATUS "${HAVE_GNU_LD_comp_output}")
- else()
-
- execute_process(COMMAND ./test_gnu_ld
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_GNU_LD_run
- OUTPUT_VARIABLE var_exec
- )
-
- if(NOT HAVE_GNU_LD_run)
- set(HAVE_GNU_LD 1)
- message(STATUS "We are using GNU dynamic linker")
- else()
- set(HAVE_GNU_LD 0)
- message(STATUS "Warning: error while checking for GNU ld:")
- message(STATUS "Test output: '${var_exec}'")
- message(STATUS "Exit status: ${HAVE_GNU_LD_run}")
- endif()
- file(REMOVE test_gnu_ld)
- endif()
-endif()
-
-
-#--------------------------------------------------------------------------------------------------
-### Initialize of CONTEXT THREADS
-
-if(HAVE_PTHREAD)
- ### Test that we have a way to create semaphores
-
- if(HAVE_SEM_OPEN_LIB)
- execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_open.c -lpthread -o sem_open
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- OUTPUT_VARIABLE HAVE_SEM_OPEN_compil
- )
-
- # Test sem_open by compiling:
- if(HAVE_SEM_OPEN_compil)
- set(HAVE_SEM_OPEN 0)
- message(STATUS "Warning: sem_open not compilable")
- message(STATUS "HAVE_SEM_OPEN_comp_output: ${HAVE_SEM_OPEN_comp_output}")
- else()
- set(HAVE_SEM_OPEN 1)
- message(STATUS "sem_open is compilable")
- endif()
-
- # If we're not crosscompiling, we check by executing the program:
- if (HAVE_SEM_OPEN AND NOT CMAKE_CROSSCOMPILING)
- execute_process(COMMAND ./sem_open
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_SEM_OPEN_run
- OUTPUT_VARIABLE var_compil
- )
- if (NOT HAVE_SEM_OPEN_run)
- set(HAVE_SEM_OPEN 1)
- message(STATUS "sem_open is executable")
- else()
- set(HAVE_SEM_OPEN 0)
- if(EXISTS "${CMAKE_BINARY_DIR}/sem_open")
- message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_open exists!")
- else()
- message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_open not exists!")
- endif()
- message(STATUS "Warning: sem_open not executable")
- message(STATUS "Compilation output: '${var_compil}'")
- message(STATUS "Exit result of sem_open: ${HAVE_SEM_OPEN_run}")
- endif()
- endif()
- file(REMOVE sem_open)
-
- else()
- set(HAVE_SEM_OPEN 0)
- endif()
-
- if(HAVE_SEM_INIT_LIB)
- execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_init.c -lpthread -o sem_init
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_SEM_INIT_run OUTPUT_VARIABLE HAVE_SEM_INIT_compil)
-
- # Test sem_init by compiling:
- if(HAVE_SEM_INIT_compil)
- set(HAVE_SEM_INIT 0)
- message(STATUS "Warning: sem_init not compilable")
- message(STATUS "HAVE_SEM_INIT_comp_output: ${HAVE_SEM_OPEN_comp_output}")
- else()
- set(HAVE_SEM_INIT 1)
- message(STATUS "sem_init is compilable")
- endif()
-
- # If we're not crosscompiling, we check by executing the program:
- if (HAVE_SEM_INIT AND NOT CMAKE_CROSSCOMPILING)
- execute_process(COMMAND ./sem_init
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_SEM_INIT_run
- OUTPUT_VARIABLE var_compil
- )
- if (NOT HAVE_SEM_INIT_run)
- set(HAVE_SEM_INIT 1)
- message(STATUS "sem_init is executable")
- else()
- set(HAVE_SEM_INIT 0)
- if(EXISTS "${CMAKE_BINARY_DIR}/sem_init")
- message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_init exists!")
- else()
- message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_init not exists!")
- endif()
- message(STATUS "Warning: sem_init not executable")
- message(STATUS "Compilation output: '${var_compil}'")
- message(STATUS "Exit result of sem_init: ${HAVE_SEM_INIT_run}")
- endif()
- endif()
- file(REMOVE sem_init)
- endif()
-
- if(NOT HAVE_SEM_OPEN AND NOT HAVE_SEM_INIT)
- message(FATAL_ERROR "Semaphores are not usable (neither sem_open nor sem_init is both compilable and executable), but they are mandatory to threads (you may need to mount /dev).")
- endif()
-
- ### Test that we have a way to timewait for semaphores
-
- if(HAVE_SEM_TIMEDWAIT_LIB)
-
- execute_process(
- COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_timedwait.c -lpthread"
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- OUTPUT_VARIABLE HAVE_SEM_TIMEDWAIT_run
- )
-
- if(HAVE_SEM_TIMEDWAIT_run)
- set(HAVE_SEM_TIMEDWAIT 0)
- message(STATUS "timedwait not compilable")
- else()
- set(HAVE_SEM_TIMEDWAIT 1)
- message(STATUS "timedwait is compilable")
- endif()
- endif()
-
- ### HAVE_MUTEX_TIMEDLOCK
-
- if(HAVE_MUTEX_TIMEDLOCK_LIB)
-
- execute_process(
- COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_mutex_timedlock.c -lpthread"
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- OUTPUT_VARIABLE HAVE_MUTEX_TIMEDLOCK_run
- )
-
- if(HAVE_MUTEX_TIMEDLOCK_run)
- set(HAVE_MUTEX_TIMEDLOCK 0)
- message(STATUS "timedlock not compilable")
- else()
- message(STATUS "timedlock is compilable")
- set(HAVE_MUTEX_TIMEDLOCK 1)
- endif()
- endif()
-endif()
-
-# This is needed for ucontext on MacOS X:
-if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
- add_definitions(-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE)
-endif()
-
-if(WIN32)
- # We always provide our own implementation of ucontext on Windows.
- try_compile(HAVE_UCONTEXT
- ${CMAKE_BINARY_DIR}
- ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_AC_CHECK_MCSC.c
- COMPILE_DEFINITIONS _XBT_WIN32
- INCLUDE_DIRECTORIES
- ${CMAKE_HOME_DIRECTORY}/src/include
- ${CMAKE_HOME_DIRECTORY}/src/xbt
- )
-else()
- # We always provide our own implementation of ucontext on Windows.
- try_compile(HAVE_UCONTEXT
- ${CMAKE_BINARY_DIR}
- ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_AC_CHECK_MCSC.c)
-endif()
-
-#If can have both context
-
-if(HAVE_UCONTEXT)
- set(CONTEXT_UCONTEXT 1)
- message("-- Support for ucontext factory")
-endif()
-
-if(HAVE_PTHREAD)
- set(CONTEXT_THREADS 1)
- message("-- Support for thread context factory")
-endif()
-
-###############
-## GIT version check
-##
-if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
- execute_process(COMMAND git remote
- COMMAND head -n 1
- WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
- OUTPUT_VARIABLE remote
- RESULT_VARIABLE ret
- )
- string(REPLACE "\n" "" remote "${remote}")
- #message(STATUS "Git remote: ${remote}")
- execute_process(COMMAND git config --get remote.${remote}.url
- WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
- OUTPUT_VARIABLE url
- RESULT_VARIABLE ret
- )
- string(REPLACE "\n" "" url "${url}")
- #message(STATUS "Git url: ${url}")
- if(url)
- execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --pretty=oneline --abbrev-commit -1
- WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
- OUTPUT_VARIABLE GIT_VERSION
- RESULT_VARIABLE ret
- )
- string(REPLACE "\n" "" GIT_VERSION "${GIT_VERSION}")
- message(STATUS "Git version: ${GIT_VERSION}")
- execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log -n 1 --pretty=format:%ai .
- WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
- OUTPUT_VARIABLE GIT_DATE
- RESULT_VARIABLE ret
- )
- string(REPLACE "\n" "" GIT_DATE "${GIT_DATE}")
- message(STATUS "Git date: ${GIT_DATE}")
- string(REGEX REPLACE " .*" "" GIT_VERSION "${GIT_VERSION}")
-
- execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --pretty=format:%H -1
- WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
- OUTPUT_VARIABLE SIMGRID_GITHASH
- RESULT_VARIABLE ret
- )
- string(REPLACE "\n" "" SIMGRID_GITHASH "${SIMGRID_GITHASH}")
-
- endif()
-elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
- FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
-endif()
-
-if(release)
- set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER}\\nRelease build")
-else()
- set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER}\\nDevelopment build")
-endif()
-if(GIT_VERSION)
- set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER} at commit ${GIT_VERSION}")
-endif()
-if(GIT_DATE)
- set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER} (${GIT_DATE})")
-endif()
-#--------------------------------------------------------------------------------------------------
-
-set(makecontext_CPPFLAGS_2 "")
-if(HAVE_MAKECONTEXT OR WIN32)
- set(makecontext_CPPFLAGS "-DTEST_makecontext")
- if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
- set(makecontext_CPPFLAGS_2 "-D_XOPEN_SOURCE=700")
- endif()
-
- if(WIN32)
- if(ARCH_32_BITS)
- set(makecontext_CPPFLAGS "-DTEST_makecontext -D_I_X86_")
- else()
- set(makecontext_CPPFLAGS "-DTEST_makecontext -D_AMD64_")
- endif()
- set(makecontext_CPPFLAGS_2 "-D_XBT_WIN32 -I${CMAKE_HOME_DIRECTORY}/src/include -I${CMAKE_HOME_DIRECTORY}/src/xbt")
- endif()
-
- file(REMOVE ${CMAKE_BINARY_DIR}/conftestval)
-
- if(CMAKE_CROSSCOMPILING)
- set(RUN_makecontext_VAR "cross")
- set(COMPILE_makecontext_VAR "cross")
- else()
- try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
- ${CMAKE_BINARY_DIR}
- ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
- COMPILE_DEFINITIONS "${makecontext_CPPFLAGS} ${makecontext_CPPFLAGS_2}"
- )
- endif()
-
- if(EXISTS ${CMAKE_BINARY_DIR}/conftestval)
- file(READ ${CMAKE_BINARY_DIR}/conftestval MAKECONTEXT_ADDR_SIZE)
- string(REPLACE "\n" "" MAKECONTEXT_ADDR_SIZE "${MAKECONTEXT_ADDR_SIZE}")
- string(REGEX MATCH ;^.*,;MAKECONTEXT_ADDR "${MAKECONTEXT_ADDR_SIZE}")
- string(REGEX MATCH ;,.*$; MAKECONTEXT_SIZE "${MAKECONTEXT_ADDR_SIZE}")
- string(REPLACE "," "" makecontext_addr "${MAKECONTEXT_ADDR}")
- string(REPLACE "," "" makecontext_size "${MAKECONTEXT_SIZE}")
- set(pth_skaddr_makecontext "#define pth_skaddr_makecontext(skaddr,sksize) (${makecontext_addr})")
- set(pth_sksize_makecontext "#define pth_sksize_makecontext(skaddr,sksize) (${makecontext_size})")
- message(STATUS "${pth_skaddr_makecontext}")
- message(STATUS "${pth_sksize_makecontext}")
- else()
- # message(FATAL_ERROR "makecontext is not compilable")
- endif()
-endif()
-
-#--------------------------------------------------------------------------------------------------
-
-### check for stackgrowth
-if (NOT CMAKE_CROSSCOMPILING)
- try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
- ${CMAKE_BINARY_DIR}
- ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
- RUN_OUTPUT_VARIABLE stack
- )
-endif()
-if("${stack}" STREQUAL "down")
- set(PTH_STACKGROWTH "-1")
-elseif("${stack}" STREQUAL "up")
- set(PTH_STACKGROWTH "1")
-else()
- if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
- set(PTH_STACKGROWTH "-1")
- elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
- set(PTH_STACKGROWTH "-1")
- else()
- message(ERROR "Could not figure the stack direction.")
- endif()
-endif()
-
-###############
-## System checks
-##
-
-#SG_CONFIGURE_PART([System checks...])
-#AC_PROG_CC(xlC gcc cc) -auto
-#AM_SANITY_CHECK -auto
-
-#AC_PROG_MAKE_SET
-
-#AC_CHECK_VA_COPY
-
-set(diff_va "va_copy((d),(s))"
- "VA_COPY((d),(s))"
- "__va_copy((d),(s))"
- "__builtin_va_copy((d),(s))"
- "do { (d) = (s)\; } while (0)"
- "do { *(d) = *(s)\; } while (0)"
- "memcpy((void *)&(d), (void *)&(s), sizeof(s))"
- "memcpy((void *)(d), (void *)(s), sizeof(*(s)))"
- )
-
-foreach(fct ${diff_va})
- write_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_va_copy.c" "#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#define DO_VA_COPY(d,s) ${fct}
-void test(char *str, ...)
-{
- va_list ap, ap2;
- int i;
- va_start(ap, str);
- DO_VA_COPY(ap2, ap);
- for (i = 1; i <= 9; i++) {
- int k = (int)va_arg(ap, int);
- if (k != i)
- abort();
- }
- DO_VA_COPY(ap, ap2);
- for (i = 1; i <= 9; i++) {
- int k = (int)va_arg(ap, int);
- if (k != i)
- abort();
- }
- va_end(ap);
-}
-int main(void)
-{
- test(\"test\", 1, 2, 3, 4, 5, 6, 7, 8, 9);
- exit(0);
-}"
- )
-
- execute_process(
- COMMAND ${CMAKE_C_COMPILER} "${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_va_copy.c"
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE COMPILE_VA_NULL_VAR
- OUTPUT_QUIET
- ERROR_QUIET
- )
-
- if(NOT COMPILE_VA_NULL_VAR)
- string(REGEX REPLACE "\;" "" fctbis ${fct})
- if(${fctbis} STREQUAL "va_copy((d),(s))")
- set(HAVE_VA_COPY 1)
- set(ac_cv_va_copy "C99")
- set(__VA_COPY_USE_C99 "va_copy((d),(s))")
- endif()
-
- if(${fctbis} STREQUAL "VA_COPY((d),(s))")
- set(ac_cv_va_copy "GCM")
- set(__VA_COPY_USE_GCM "VA_COPY((d),(s))")
- endif()
-
- if(${fctbis} STREQUAL "__va_copy((d),(s))")
- set(ac_cv_va_copy "GCH")
- set(__VA_COPY_USE_GCH "__va_copy((d),(s))")
- endif()
-
- if(${fctbis} STREQUAL "__builtin_va_copy((d),(s))")
- set(ac_cv_va_copy "GCB")
- set(__VA_COPY_USE_GCB "__builtin_va_copy((d),(s))")
- endif()
-
- if(${fctbis} STREQUAL "do { (d) = (s) } while (0)")
- set(ac_cv_va_copy "ASS")
- set(__VA_COPY_USE_ASS "do { (d) = (s); } while (0)")
- endif()
-
- if(${fctbis} STREQUAL "do { *(d) = *(s) } while (0)")
- set(ac_cv_va_copy "ASP")
- set(__VA_COPY_USE_ASP "do { *(d) = *(s); } while (0)")
- endif()
-
- if(${fctbis} STREQUAL "memcpy((void *)&(d), (void *)&(s), sizeof(s))")
- set(ac_cv_va_copy "CPS")
- set(__VA_COPY_USE_CPS "memcpy((void *)&(d), (void *)&(s), sizeof(s))")
- endif()
-
- if(${fctbis} STREQUAL "memcpy((void *)(d), (void *)(s), sizeof(*(s)))")
- set(ac_cv_va_copy "CPP")
- set(__VA_COPY_USE_CPP "memcpy((void *)(d), (void *)(s), sizeof(*(s)))")
- endif()
-
- if(NOT STATUS_OK)
- set(__VA_COPY_USE "__VA_COPY_USE_${ac_cv_va_copy}(d, s)")
- endif()
- set(STATUS_OK "1")
-
- endif()
-
-endforeach(fct ${diff_va})
-
-#--------------------------------------------------------------------------------------------------
-### check for a working snprintf
-if(HAVE_SNPRINTF AND HAVE_VSNPRINTF OR WIN32)
- if(WIN32)
- #set(HAVE_SNPRINTF 1)
- #set(HAVE_VSNPRINTF 1)
- endif()
-
- if(CMAKE_CROSSCOMPILING)
- set(RUN_SNPRINTF_FUNC "cross")
- #set(PREFER_PORTABLE_SNPRINTF 1)
- else()
- try_run(RUN_SNPRINTF_FUNC_VAR COMPILE_SNPRINTF_FUNC_VAR
- ${CMAKE_BINARY_DIR}
- ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_snprintf.c
- )
- endif()
-
- if(CMAKE_CROSSCOMPILING)
- set(RUN_VSNPRINTF_FUNC "cross")
- set(PREFER_PORTABLE_VSNPRINTF 1)
- else()
- try_run(RUN_VSNPRINTF_FUNC_VAR COMPILE_VSNPRINTF_FUNC_VAR
- ${CMAKE_BINARY_DIR}
- ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_vsnprintf.c
- )
- endif()
-
- set(PREFER_PORTABLE_SNPRINTF 0)
- if(RUN_VSNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
- set(PREFER_PORTABLE_SNPRINTF 1)
- endif()
- if(RUN_SNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
- set(PREFER_PORTABLE_SNPRINTF 1)
- endif()
-endif()
-
-### check for asprintf function familly
-if(HAVE_ASPRINTF)
- SET(simgrid_need_asprintf "")
- SET(NEED_ASPRINTF 0)
-else()
- SET(simgrid_need_asprintf "#define SIMGRID_NEED_ASPRINTF 1")
- SET(NEED_ASPRINTF 1)
-endif()
-
-if(HAVE_VASPRINTF)
- SET(simgrid_need_vasprintf "")
- SET(NEED_VASPRINTF 0)
-else()
- SET(simgrid_need_vasprintf "#define SIMGRID_NEED_VASPRINTF 1")
- SET(NEED_VASPRINTF 1)
-endif()
-
-### check for addr2line
-
-find_path(ADDR2LINE NAMES addr2line PATHS NO_DEFAULT_PATHS )
-if(ADDR2LINE)
- set(ADDR2LINE "${ADDR2LINE}/addr2line")
-endif()
-
-### File to create
-
-configure_file("${CMAKE_HOME_DIRECTORY}/src/context_sysv_config.h.in"
- "${CMAKE_BINARY_DIR}/src/context_sysv_config.h" @ONLY IMMEDIATE)
-
-SET( CMAKEDEFINE "#cmakedefine" )
-configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE)
-configure_file("${CMAKE_BINARY_DIR}/src/internal_config.h" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE)
-configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid_config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid_config.h" @ONLY IMMEDIATE)
-
-set(top_srcdir "${CMAKE_HOME_DIRECTORY}")
-set(srcdir "${CMAKE_HOME_DIRECTORY}/src")
-set(bindir "${CMAKE_BINARY_DIR}")
-
-### Script used when simgrid is installed
-set(exec_prefix ${CMAKE_INSTALL_PREFIX})
-set(includeflag "-I${CMAKE_INSTALL_PREFIX}/include -I${CMAKE_INSTALL_PREFIX}/include/smpi")
-set(includedir "${CMAKE_INSTALL_PREFIX}/include")
-set(libdir ${exec_prefix}/lib)
-set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_INSTALL_PREFIX}/lib")
-if(NS3_LIBRARY_PATH)
- set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
-endif()
-set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
-
-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}/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/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)
-
-### Script used when simgrid is compiling
-set(includeflag "-I${CMAKE_HOME_DIRECTORY}/include -I${CMAKE_HOME_DIRECTORY}/include/smpi")
-set(includeflag "${includeflag} -I${CMAKE_BINARY_DIR}/include -I${CMAKE_BINARY_DIR}/include/smpi")
-set(includedir "${CMAKE_HOME_DIRECTORY}/include")
-set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
-set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_BINARY_DIR}/lib")
-if(NS3_LIBRARY_PATH)
- set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
-endif()
-set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
-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/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)
-
-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/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/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)
-endif()
-
-set(generated_headers_to_install
- ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
- ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid_config.h
- )
-
-set(generated_headers
- ${CMAKE_CURRENT_BINARY_DIR}/src/context_sysv_config.h
- ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h
- )
-
-set(generated_files_to_clean
- ${generated_headers}
- ${generated_headers_to_install}
- ${CMAKE_BINARY_DIR}/bin/smpicc
- ${CMAKE_BINARY_DIR}/bin/smpicxx
- ${CMAKE_BINARY_DIR}/bin/smpiff
- ${CMAKE_BINARY_DIR}/bin/smpif90
- ${CMAKE_BINARY_DIR}/bin/smpirun
- ${CMAKE_BINARY_DIR}/bin/colorize
- ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
- ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
- )
-
-if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allReduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
-
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt COPYONLY)
- configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt COPYONLY)
-
- set(generated_files_to_clean
- ${generated_files_to_clean}
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
- ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
- ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
- )
-endif()
-
-SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
- "${generated_files_to_clean}")
-
-IF(${ARCH_32_BITS})
- set(WIN_ARCH "32")
-ELSE()
- set(WIN_ARCH "64")
-ENDIF()
-configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/simgrid.nsi.in" "${CMAKE_BINARY_DIR}/simgrid.nsi" @ONLY IMMEDIATE)
src/simix/simcalls.in
src/simix/simcalls.py
src/simix/popping_private.h
- src/simix/popping_bodies.c
- src/simix/popping_generated.c
+ src/simix/popping_bodies.cpp
+ src/simix/popping_generated.cpp
src/simix/popping_enum.h
src/simix/popping_accessors.h
src/simix/smx_host_private.h
src/simix/smx_io_private.h
src/simix/smx_network_private.h
src/simix/smx_private.h
+ src/simix/smx_private.hpp
src/simix/smx_process_private.h
src/simix/smx_synchro_private.h
src/smpi/README
src/surf/surfxml_parse.c
src/surf/trace_mgr_private.h
src/surf/vm_hl13.hpp
- src/surf/vm_interface.hpp
+ src/surf/virtual_machine.hpp
src/surf/host_clm03.hpp
src/surf/host_interface.hpp
src/surf/host_ptask_L07.hpp
src/xbt/heap_private.h
src/xbt/log_private.h
src/xbt/mallocator_private.h
+
src/xbt/mmalloc/mfree.c
src/xbt/mmalloc/mm.c
src/xbt/mmalloc/mm_legacy.c
src/xbt/mmalloc/mmtrace.awk
src/xbt/mmalloc/mrealloc.c
src/xbt/probes.h
- src/xbt/setset_private.h
src/xbt/win32_ucontext.c
tools/tesh/generate_tesh
examples/smpi/mc/only_send_deterministic.tesh
src/smpi/instr_smpi.c
src/smpi/smpi_base.c
src/smpi/smpi_bench.c
+ src/smpi/smpi_memory.cpp
src/smpi/smpi_c99.c
src/smpi/smpi_coll.c
src/smpi/smpi_comm.c
src/xbt/lib.c
src/xbt/log.c
src/xbt/mallocator.c
+ src/xbt/memory_map.cpp
+ src/xbt/memory_map.hpp
src/xbt/parmap.cpp
src/xbt/set.c
- src/xbt/setset.c
src/xbt/snprintf.c
src/xbt/swag.c
src/xbt/xbt_log_appender_file.c
src/xbt/xbt_strbuff.c
src/xbt/xbt_virtu.c
src/xbt_modinter.h
+
)
if(HAVE_MMALLOC)
)
set(SURF_SRC
+ src/surf/callbacks.h
+ src/surf/callbacks.cpp
src/surf/cpu_cas01.cpp
src/surf/cpu_interface.cpp
src/surf/cpu_ti.cpp
src/surf/fair_bottleneck.cpp
- src/surf/instr_routing.c
+ src/surf/instr_routing.cpp
src/surf/instr_surf.c
src/surf/lagrange.cpp
src/surf/maxmin.cpp
src/surf/platf_generator.c
src/surf/plugins/energy.cpp
src/surf/random_mgr.c
- src/surf/sg_platf.c
+ src/surf/sg_platf.cpp
src/surf/storage_interface.cpp
src/surf/storage_n11.cpp
src/surf/surf_c_bindings.cpp
src/surf/surfxml_parseplatf.c
src/surf/trace_mgr.c
src/surf/vm_hl13.cpp
- src/surf/vm_interface.cpp
+ src/surf/virtual_machine.cpp
src/surf/host_clm03.cpp
src/surf/host_interface.cpp
src/surf/host_ptask_L07.cpp
)
set(SIMIX_GENERATED_SRC
- src/simix/popping_generated.c
+ src/simix/popping_generated.cpp
)
set(SIMIX_SRC
- src/simix/libsmx.c
- src/simix/smx_context.c
- src/simix/smx_context_base.c
- src/simix/smx_deployment.c
- src/simix/smx_environment.c
- src/simix/smx_global.c
- src/simix/smx_host.c
- src/simix/smx_io.c
- src/simix/smx_network.c
- src/simix/smx_process.c
- src/simix/smx_synchro.c
- src/simix/smx_vm.c
- src/simix/popping.c
+ src/simix/libsmx.cpp
+ src/simix/smx_context.cpp
+ src/simix/Context.cpp
+ src/simix/smx_deployment.cpp
+ src/simix/smx_environment.cpp
+ src/simix/smx_global.cpp
+ src/simix/smx_host.cpp
+ src/simix/smx_io.cpp
+ src/simix/smx_network.cpp
+ src/simix/smx_process.cpp
+ src/simix/smx_synchro.cpp
+ src/simix/smx_vm.cpp
+ src/simix/popping.cpp
${SIMIX_GENERATED_SRC}
)
if (MSVC)
set(EXTRA_DIST
${EXTRA_DIST}
- src/simix/smx_context_raw.c)
+ src/simix/RawContext.cpp)
else()
set(SIMIX_SRC
${SIMIX_SRC}
- src/simix/smx_context_raw.c)
+ src/simix/RawContext.cpp)
endif()
# Boost context may not be available
if (HAVE_BOOST_CONTEXT)
set(SIMIX_SRC
${SIMIX_SRC}
- src/simix/smx_context_boost.cpp)
+ src/simix/BoostContext.hpp
+ src/simix/BoostContext.cpp)
else()
set(EXTRA_DIST
${EXTRA_DIST}
- src/simix/smx_context_boost.cpp)
+ src/simix/BoostContext.hpp
+ src/simix/BoostContext.cpp)
endif()
+set(S4U_SRC
+ src/s4u/s4u_actor.cpp
+ src/s4u/s4u_async.cpp
+ src/s4u/s4u_comm.cpp
+ src/s4u/s4u_engine.cpp
+ src/s4u/s4u_file.cpp
+ src/s4u/s4u_host.cpp
+ src/s4u/s4u_mailbox.cpp
+ src/s4u/s4u_storage.cpp
+)
+
set(SIMGRID_SRC
src/simgrid/sg_config.c
src/simgrid/host.cpp
)
set(MSG_SRC
- src/msg/instr_msg_process.c
- src/msg/instr_msg_task.c
- src/msg/instr_msg_vm.c
- src/msg/msg_actions.c
- src/msg/msg_deployment.c
- src/msg/msg_environment.c
- src/msg/msg_global.c
- src/msg/msg_gos.c
- src/msg/msg_host.c
- src/msg/msg_io.c
- src/msg/msg_mailbox.c
- src/msg/msg_process.c
- src/msg/msg_synchro.c
- src/msg/msg_task.c
- src/msg/msg_vm.c
+ src/msg/instr_msg_process.cpp
+ src/msg/instr_msg_task.cpp
+ src/msg/instr_msg_vm.cpp
+ src/msg/msg_actions.cpp
+ src/msg/msg_deployment.cpp
+ src/msg/msg_environment.cpp
+ src/msg/msg_global.cpp
+ src/msg/msg_gos.cpp
+ src/msg/msg_host.cpp
+ src/msg/msg_io.cpp
+ src/msg/msg_mailbox.cpp
+ src/msg/msg_process.cpp
+ src/msg/msg_synchro.cpp
+ src/msg/msg_task.cpp
+ src/msg/msg_vm.cpp
)
set(SIMDAG_SRC
)
set(JMSG_C_SRC
- src/bindings/java/jmsg.c
+ src/bindings/java/jmsg.cpp
src/bindings/java/jmsg.h
- src/bindings/java/jmsg_as.c
+ src/bindings/java/jmsg_as.cpp
src/bindings/java/jmsg_as.h
- src/bindings/java/jmsg_comm.c
+ src/bindings/java/jmsg_comm.cpp
src/bindings/java/jmsg_comm.h
- src/bindings/java/jmsg_file.c
+ src/bindings/java/jmsg_file.cpp
src/bindings/java/jmsg_file.h
- src/bindings/java/jmsg_host.c
+ src/bindings/java/jmsg_host.cpp
src/bindings/java/jmsg_host.h
- src/bindings/java/jmsg_process.c
+ src/bindings/java/jmsg_process.cpp
src/bindings/java/jmsg_process.h
- src/bindings/java/jmsg_rngstream.c
+ src/bindings/java/jmsg_rngstream.cpp
src/bindings/java/jmsg_rngstream.h
- src/bindings/java/jmsg_synchro.c
+ src/bindings/java/jmsg_synchro.cpp
src/bindings/java/jmsg_synchro.h
- src/bindings/java/jmsg_task.c
+ src/bindings/java/jmsg_task.cpp
src/bindings/java/jmsg_task.h
- src/bindings/java/jmsg_vm.c
+ src/bindings/java/jmsg_vm.cpp
src/bindings/java/jmsg_vm.h
- src/bindings/java/jxbt_utilities.c
+ src/bindings/java/jxbt_utilities.cpp
src/bindings/java/jxbt_utilities.h
- src/bindings/java/smx_context_cojava.c
- 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/JavaContext.cpp
+ src/bindings/java/JavaContext.hpp
+ src/bindings/java/jmsg_storage.cpp
src/bindings/java/jmsg_storage.h
)
)
set(JTRACE_C_SRC
- src/bindings/java/jtrace.c
+ src/bindings/java/jtrace.cpp
src/bindings/java/jtrace.h
)
list(APPEND JMSG_JAVA_SRC ${JTRACE_JAVA_SRC})
set(LUA_SRC
+ src/bindings/lua/factories/host.lua
src/bindings/lua/lua_comm.c
src/bindings/lua/lua_host.c
src/bindings/lua/lua_platf.c
src/mc/AddressSpace.hpp
src/mc/AddressSpace.cpp
src/mc/Frame.hpp
+ src/mc/Frame.cpp
src/mc/ModelChecker.hpp
src/mc/ModelChecker.cpp
src/mc/ObjectInformation.hpp
src/mc/ObjectInformation.cpp
src/mc/PageStore.hpp
src/mc/PageStore.cpp
+ src/mc/ChunkedData.hpp
+ src/mc/ChunkedData.cpp
src/mc/RegionSnapshot.cpp
src/mc/RegionSnapshot.hpp
src/mc/Type.hpp
src/mc/mc_dwarf.hpp
src/mc/mc_dwarf.cpp
src/mc/mc_dwarf_attrnames.cpp
- src/mc/mc_dwarf_expression.cpp
+ src/mc/DwarfExpression.hpp
+ src/mc/DwarfExpression.cpp
src/mc/mc_dwarf_tagnames.cpp
src/mc/mc_hash.hpp
src/mc/mc_hash.cpp
src/mc/mc_ignore.cpp
- src/mc/mcer_ignore.cpp
- src/mc/mcer_ignore.h
src/mc/mc_ignore.h
src/mc/mc_liveness.h
- src/mc/mc_location.h
+ src/mc/LocationList.hpp
+ src/mc/LocationList.cpp
src/mc/mc_liveness.cpp
src/mc/mc_record.cpp
src/mc/mc_member.cpp
src/mc/mc_state.h
src/mc/mc_state.cpp
src/mc/mc_visited.cpp
- src/mc/mc_memory_map.h
- src/mc/memory_map.cpp
src/mc/mc_client.cpp
src/mc/mc_client_api.cpp
src/mc/mc_client.h
src/mc/mc_protocol.h
src/mc/mc_protocol.cpp
- src/mc/mc_server.cpp
- src/mc/mc_server.h
src/mc/mc_smx.h
src/mc/mc_smx.cpp
src/mc/mc_xbt.hpp
include/simgrid.h
include/simgrid/datatypes.h
include/simgrid/modelchecker.h
+ include/simgrid/forward.h
include/simgrid/platf.h
include/simgrid/platf_generator.h
include/simgrid/plugins.h
include/simgrid/simix.h
+ include/simgrid/simix.hpp
include/simgrid/host.h
include/simgrid/link.h
+ include/simgrid/s4u/actor.hpp
+ include/simgrid/s4u/async.hpp
+ include/simgrid/s4u/comm.hpp
+ include/simgrid/s4u/engine.hpp
+ include/simgrid/s4u/file.hpp
+ include/simgrid/s4u/host.hpp
+ include/simgrid/s4u/mailbox.hpp
+ include/simgrid/s4u/storage.hpp
+ include/simgrid/s4u.h
include/smpi/mpi.h
include/smpi/smpi.h
include/smpi/smpi_cocci.h
include/xbt/queue.h
include/xbt/replay.h
include/xbt/set.h
- include/xbt/setset.h
include/xbt/str.h
include/xbt/strbuff.h
include/xbt/swag.h
if(${CONTEXT_THREADS}) #pthread
set(SURF_SRC
${SURF_SRC}
- src/simix/smx_context_thread.c
+ src/simix/ThreadContext.cpp
+ src/simix/ThreadContext.hpp
+ )
+else() # NOT pthread
+ set(EXTRA_DIST
+ ${EXTRA_DIST}
+ src/simix/ThreadContext.cpp
+ src/simix/ThreadContext.hpp
+ )
+endif()
+
+if(${CONTEXT_THREADS}) #pthread
+ set(SURF_SRC
+ ${SURF_SRC}
src/xbt/xbt_os_thread.c
)
else() # NOT pthread
set(EXTRA_DIST
${EXTRA_DIST}
- src/simix/smx_context_thread.c
src/xbt/xbt_os_thread.c
)
endif()
if(${CONTEXT_UCONTEXT}) #ucontext
set(SURF_SRC
${SURF_SRC}
- src/simix/smx_context_sysv.c
+ src/simix/UContext.cpp
)
else() # NOT ucontext
set(EXTRA_DIST
${EXTRA_DIST}
- src/simix/smx_context_sysv.c
+ src/simix/UContext.cpp
)
endif()
### Simgrid Lib sources
set(simgrid_sources
${BINDINGS_SRC}
+ ${S4U_SRC}
${MSG_SRC}
${SIMDAG_SRC}
${SIMGRID_SRC}
if(WIN32)
set(simgrid_sources
${simgrid_sources}
- src/simix/smx_context_thread.c
+ src/simix/src/simix/ThreadContext.cpp
+ src/simix/src/simix/ThreadContext.hpp
src/xbt/win32_ucontext.c
src/xbt/xbt_os_thread.c
)
${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.icns
${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.ico
${CMAKE_HOME_DIRECTORY}/doc/webcruft/awstats_logo3.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/DiscoveringSimgrid.gif
${CMAKE_HOME_DIRECTORY}/doc/webcruft/output.goal.pdf
${CMAKE_HOME_DIRECTORY}/doc/webcruft/poster_thumbnail.png
${CMAKE_HOME_DIRECTORY}/doc/webcruft/storage_sample_scenario.png
COPYING
README
README.java
+ README.lua
ChangeLog
ChangeLog.SimGrid-java
INSTALL
examples/msg/energy/consumption/CMakeLists.txt
examples/msg/energy/onoff/CMakeLists.txt
examples/msg/energy/pstate/CMakeLists.txt
+ examples/msg/energy/vm/CMakeLists.txt
examples/msg/exception/CMakeLists.txt
examples/msg/gpu/CMakeLists.txt
examples/msg/gtnets/CMakeLists.txt
examples/msg/suspend/CMakeLists.txt
examples/msg/token_ring/CMakeLists.txt
examples/msg/tracing/CMakeLists.txt
+ examples/s4u/CMakeLists.txt
+ examples/s4u/basic/CMakeLists.txt
+ examples/s4u/io/CMakeLists.txt
examples/scala/CMakeLists.txt
examples/scala/master_slave_bypass/CMakeLists.txt
examples/scala/master_slave_kill/CMakeLists.txt
teshsuite/bug-17132/CMakeLists.txt
teshsuite/java/CMakeLists.txt
teshsuite/java/sleep_host_off/CMakeLists.txt
+ teshsuite/lua/lua_platforms.tesh
teshsuite/mc/CMakeLists.txt
teshsuite/mc/dwarf/CMakeLists.txt
teshsuite/mc/dwarf_expression/CMakeLists.txt
tools/cmake/Tests.cmake
tools/cmake/CTestConfig.cmake
tools/cmake/CTestCustom.cmake
- tools/cmake/CompleteInFiles.cmake
tools/cmake/DefinePackages.cmake
tools/cmake/Distrib.cmake
tools/cmake/GCCFlags.cmake
tools/cmake/Modules/FindLibSigc++.cmake
tools/cmake/Modules/FindLibdw.cmake
tools/cmake/Modules/FindLibunwind.cmake
- tools/cmake/Modules/FindLua51Simgrid.cmake
+ tools/cmake/Modules/FindLuaSimgrid.cmake
tools/cmake/Modules/FindNS3.cmake
tools/cmake/Modules/FindRngStream.cmake
tools/cmake/Modules/FindRubySimgrid.cmake
examples/platforms/cloud.xml
examples/platforms/cluster.xml
examples/platforms/cluster_and_one_host.xml
+ examples/platforms/cluster_prototype.lua
examples/platforms/cluster_no_backbone.xml
examples/platforms/clusters_routing_full.xml
examples/platforms/crosstraffic.xml
examples/platforms/griffon.xml
examples/platforms/meta_cluster.xml
examples/platforms/multicore_machine.xml
+ examples/platforms/platform.lua
examples/platforms/platform.xml
examples/platforms/prop.xml
examples/platforms/routing_cluster.xml
+ examples/platforms/routing_cluster.lua
examples/platforms/routing_none.xml
examples/platforms/storage/content/small_content.txt
examples/platforms/storage/content/storage_content.txt
examples/platforms/storage/remote_io.xml
examples/platforms/storage/storage.xml
examples/platforms/small_platform.xml
+ examples/platforms/small_platform.lua
examples/platforms/small_platform_fatpipe.xml
examples/platforms/small_platform_one_link_routes.xml
examples/platforms/small_platform_with_failures.xml
install(TARGETS simgrid
DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/)
-if(enable_lib_static AND NOT WIN32)
- install(TARGETS simgrid_static
- DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/)
-endif()
-
if(enable_java)
set(SIMGRID_JAR_TO_INSTALL "${SIMGRID_JAR}")
install(TARGETS simgrid-java
${MC_SRC}
${MC_SIMGRID_MC_SRC}
${MSG_SRC}
+ ${S4U_SRC}
${NS3_SRC}
${RNGSTREAM_SRC}
${SIMDAG_SRC}
)
if(WIN32)
- find_program(NSIS_PROGRAM NAMES makensi)
- message(STATUS "nsis: ${NSIS_PROGRAM}")
-
if(NSIS_PROGRAM)
ADD_CUSTOM_TARGET(nsis
COMMENT "Generating the SimGrid installer for Windows..."
if (enable_documentation)
find_package(Doxygen REQUIRED)
- set(DocAll "ALL")
else()
find_package(Doxygen)
endif()
if(DOXYGEN_FOUND)
- ADD_CUSTOM_TARGET(doc ${DocAll}
+ ADD_CUSTOM_TARGET(documentation
COMMENT "Generating the SimGrid documentation..."
DEPENDS ${DOC_SOURCES} ${DOC_FIGS} ${source_doxygen}
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_HOME_DIRECTORY}/doc/html
COMMAND false
)
- add_dependencies(doc error_doxygen)
+ add_dependencies(documentation error_doxygen)
endif()
configure_file(${CMAKE_HOME_DIRECTORY}/doc/Doxyfile.in ${CMAKE_HOME_DIRECTORY}/doc/Doxyfile @ONLY)
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 doc
+ ADD_CUSTOM_COMMAND(TARGET documentation
COMMAND ${FIG2DEV_PATH}/fig2dev -Lpng -S 4 ${file} ${tmp_file}
)
endforeach()
foreach(file ${DOC_IMG})
ADD_CUSTOM_COMMAND(
- TARGET doc
+ TARGET documentation
COMMAND ${CMAKE_COMMAND} -E copy ${file} ${CMAKE_HOME_DIRECTORY}/doc/html/
)
endforeach()
- ADD_CUSTOM_COMMAND(TARGET doc
+ ADD_CUSTOM_COMMAND(TARGET documentation
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 echo "XX Run doxygen"
WORKING_DIRECTORY "${CMAKE_HOME_DIRECTORY}"
)
-add_dependencies(sync-gforge-doc doc)
+add_dependencies(sync-gforge-doc documentation)
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
endif() # Doxygen found
-if (HAVE_Java)
+if (Java_FOUND)
find_path(JAVADOC_PATH NAMES javadoc PATHS NO_DEFAULT_PATHS)
mark_as_advanced(JAVADOC_PATH)
- ADD_CUSTOM_COMMAND(TARGET doc
+ ADD_CUSTOM_COMMAND(TARGET documentation
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
WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc
AND CMAKE_COMPILER_IS_GNUCC
AND (NOT enable_model-checking))
if(WIN32)
- if (COMPILER_C_VERSION_MAJOR_MINOR STRGREATER "4.8")
+ if (CMAKE_C_COMPILER_VERSION VERSION_GREATER "4.8")
# On windows, we need 4.8 or higher to enable lto because of http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50293
#
# We are experiencing assertion failures even with 4.8 on MinGW.
# these objects you have to use the gcc wrappers:
# gcc-ar, gcc-nm and gcc-ranlib."
if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU"
- AND COMPILER_C_VERSION_MAJOR_MINOR STRGREATER "4.8")
+ AND CMAKE_C_COMPILER_VERSION VERSION_GREATER "4.8")
set (CMAKE_AR gcc-ar)
set (CMAKE_RANLIB gcc-ranlib)
endif()
src/xbt/log.c src/xbt/xbt_log_appender_file.c
src/xbt/xbt_log_layout_format.c src/xbt/xbt_log_layout_simple.c
src/xbt/dict.c src/xbt/dict_elm.c src/xbt/dict_multi.c src/xbt/dict_cursor.c
- src/xbt/set.c src/xbt/setset.c
+ src/xbt/set.c
src/xbt/dynar.c src/xbt/fifo.c src/xbt/heap.c src/xbt/swag.c
src/xbt/str.c src/xbt/strbuff.c src/xbt/snprintf.c
src/xbt/queue.c
## This file is loaded only if the Java option is activated
##
-cmake_minimum_required(VERSION 2.8.6)
-
-find_package(Java 1.7 REQUIRED)
+find_package(Java 1.7 COMPONENTS Runtime Development)
+if (NOT ${Java_FOUND})
+ message(FATAL_ERROR "Java not found (need at least Java7). Please install the JDK or disable that option")
+endif()
+set(Java_FOUND 1)
include(UseJava)
+find_package(JNI REQUIRED)
+message("-- [Java] JNI found: ${JNI_FOUND}")
+message("-- [Java] JNI include dirs: ${JNI_INCLUDE_DIRS}")
+
+find_package(SWIG)
+if(${SWIG_FOUND})
+ include(UseSWIG)
+ message("-- [Java] Swig found: version ${SWIG_VERSION}")
+else()
+ message("-- [Java] Swig NOT FOUND. Surf java bindings won't get refreshed. That's fine unless you work on this part yourself.")
+endif()
+mark_as_advanced(SWIG_EXECUTABLE)
+
+
# Rules to build libsimgrid-java
#
add_library(simgrid-java SHARED ${JMSG_C_SRC})
set_target_properties(simgrid-java PROPERTIES VERSION ${libsimgrid-java_version})
-if (CMAKE_VERSION VERSION_LESS "2.8.8")
- include_directories(${JNI_INCLUDE_DIRS})
- message("[Java] Try to workaround missing feature in older CMake. You should better update CMake to version 2.8.8 or above.")
- get_directory_property(CHECK_INCLUDES INCLUDE_DIRECTORIES)
+get_target_property(COMMON_INCLUDES simgrid-java INCLUDE_DIRECTORIES)
+if (COMMON_INCLUDES)
+ set_target_properties(simgrid-java PROPERTIES
+ INCLUDE_DIRECTORIES "${COMMON_INCLUDES};${JNI_INCLUDE_DIRS}")
else()
- get_target_property(COMMON_INCLUDES simgrid-java INCLUDE_DIRECTORIES)
- if (COMMON_INCLUDES)
- set_target_properties(simgrid-java PROPERTIES
- INCLUDE_DIRECTORIES "${COMMON_INCLUDES};${JNI_INCLUDE_DIRS}")
- else()
- set_target_properties(simgrid-java PROPERTIES
- INCLUDE_DIRECTORIES "${JNI_INCLUDE_DIRS}")
- endif()
-
- get_target_property(CHECK_INCLUDES simgrid-java INCLUDE_DIRECTORIES)
+ set_target_properties(simgrid-java PROPERTIES
+ INCLUDE_DIRECTORIES "${JNI_INCLUDE_DIRS}")
endif()
+
+get_target_property(CHECK_INCLUDES simgrid-java INCLUDE_DIRECTORIES)
message("-- [Java] simgrid-java includes: ${CHECK_INCLUDES}")
target_link_libraries(simgrid-java simgrid)
###
if(enable_lib_in_jar)
- find_program(STRIP_COMMAND strip)
- if(NOT STRIP_COMMAND)
- set(STRIP_COMMAND "cmake -E echo (strip not found)")
- endif()
+
+ # Stripping disabled for the time being to make Java debuggable. We should introduce a proper option for that.
+ #find_program(STRIP_COMMAND strip)
+ #mark_as_advanced(STRIP_COMMAND)
+ #if(NOT STRIP_COMMAND)
+ # set(STRIP_COMMAND "cmake -E echo (strip not found)")
+ #endif()
+
set(SG_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
if(${SG_SYSTEM_NAME} MATCHES "kFreeBSD")
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_JAVA_SO} ${JAVA_NATIVE_PATH}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/lib/${LIBSURF_JAVA_SO} ${JAVA_NATIVE_PATH}
- # strip seems to fail on Mac on binaries that are already stripped.
- # It then spits: "symbols referenced by indirect symbol table entries that can't be stripped"
- COMMAND ${STRIP_COMMAND} ${JAVA_NATIVE_PATH}/${LIBSIMGRID_SO} || true
- COMMAND ${STRIP_COMMAND} ${JAVA_NATIVE_PATH}/${LIBSIMGRID_JAVA_SO} || true
- COMMAND ${STRIP_COMMAND} ${JAVA_NATIVE_PATH}/${LIBSURF_JAVA_SO} || true
+ ## strip seems to fail on Mac on binaries that are already stripped.
+ ## It then spits: "symbols referenced by indirect symbol table entries that can't be stripped"
+ #COMMAND ${STRIP_COMMAND} ${JAVA_NATIVE_PATH}/${LIBSIMGRID_SO} || true
+ #COMMAND ${STRIP_COMMAND} ${JAVA_NATIVE_PATH}/${LIBSIMGRID_JAVA_SO} || true
+ #COMMAND ${STRIP_COMMAND} ${JAVA_NATIVE_PATH}/${LIBSURF_JAVA_SO} || true
COMMAND ${JAVA_ARCHIVE} -uvf ${SIMGRID_JAR} NATIVE
- COMMAND ${CMAKE_COMMAND} -E remove_directory NATIVE
COMMAND ${CMAKE_COMMAND} -E echo "-- Cmake put the native code in ${JAVA_NATIVE_PATH}"
COMMAND "${Java_JAVA_EXECUTABLE}" -classpath "${SIMGRID_JAR}" org.simgrid.NativeLib
)
+
+ if (HAVE_BOOST_CONTEXT)
+ add_custom_command(
+ TARGET simgrid-java_jar POST_BUILD
+ COMMENT "Add the boost_context lib into simgrid.jar..."
+ COMMAND ${CMAKE_COMMAND} -E copy ${Boost_CONTEXT_LIBRARY_RELEASE} ${JAVA_NATIVE_PATH}
+ COMMAND ${JAVA_ARCHIVE} -uvf ${SIMGRID_JAR} NATIVE
+ )
+ endif()
+
if(MINGW)
find_library(WINPTHREAD_DLL
NAME winpthread winpthread-1
include_directories(${JNI_INCLUDE_DIRS} ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
-if(enable_maintainer_mode)
+if(${SWIG_FOUND})
set(CMAKE_SWIG_FLAGS "-package" "org.simgrid.surf")
set(CMAKE_SWIG_OUTDIR "${CMAKE_HOME_DIRECTORY}/src/bindings/java/org/simgrid/surf")
if (PYTHON_EXE)
add_custom_command(
OUTPUT
- ${CMAKE_HOME_DIRECTORY}/src/simix/popping_generated.c
- ${CMAKE_HOME_DIRECTORY}/src/simix/popping_bodies.c
+ ${CMAKE_HOME_DIRECTORY}/src/simix/popping_generated.cpp
+ ${CMAKE_HOME_DIRECTORY}/src/simix/popping_bodies.cpp
${CMAKE_HOME_DIRECTORY}/src/simix/popping_enum.h
${CMAKE_HOME_DIRECTORY}/src/simix/popping_accessors.h
add_custom_target(simcalls_generated_src
DEPENDS
- ${CMAKE_HOME_DIRECTORY}/src/simix/popping_generated.c
- ${CMAKE_HOME_DIRECTORY}/src/simix/popping_bodies.c
+ ${CMAKE_HOME_DIRECTORY}/src/simix/popping_generated.cpp
+ ${CMAKE_HOME_DIRECTORY}/src/simix/popping_bodies.cpp
${CMAKE_HOME_DIRECTORY}/src/simix/popping_enum.h
${CMAKE_HOME_DIRECTORY}/src/simix/popping_accessors.h
)
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
- "${CMAKE_HOME_DIRECTORY}/src/simix/popping_enum.h;${CMAKE_HOME_DIRECTORY}/src/simix/popping_generated.c;${CMAKE_HOME_DIRECTORY}/src/simix/popping_bodies.c;${CMAKE_HOME_DIRECTORY}/src/simix/popping_accessors.h"
+ "${CMAKE_HOME_DIRECTORY}/src/simix/popping_enum.h;${CMAKE_HOME_DIRECTORY}/src/simix/popping_generated.cpp;${CMAKE_HOME_DIRECTORY}/src/simix/popping_bodies.cpp;${CMAKE_HOME_DIRECTORY}/src/simix/popping_accessors.h"
)
endif()
endif()
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/consumption)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/onoff)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/pstate)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/vm)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/exception)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gpu)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/tracing)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/s4u)
+
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala/master_slave_bypass)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala/master_slave_kill)
add_library(simgrid SHARED ${simgrid_sources})
set_target_properties(simgrid PROPERTIES VERSION ${libsimgrid_version})
-if(enable_lib_static)
- add_library(simgrid_static STATIC ${simgrid_sources})
-endif()
-
if(enable_ust)
ADD_DEPENDENCIES(simgrid simgrid_ust)
endif()
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/examples/simdag/
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_BINARY_DIR}/lib/libsimgrid.${LIB_EXE} ${CMAKE_BINARY_DIR}/examples/simdag/simgrid.${LIB_EXE} #for test
)
- SET(SIMGRID_DEP "${SIMGRID_DEP} -l${LIB_LUA_NAME}")
+ SET(SIMGRID_DEP "${SIMGRID_DEP} ${LUA_LIBRARY} -ldl")
endif()
if(HAVE_GRAPHVIZ)
if(HAVE_LIBSIGC++)
SET(SIMGRID_DEP "${SIMGRID_DEP} -lsigc-2.0")
+ add_definitions(-DLIBSIGC)
endif()
if(HAVE_MC)
target_link_libraries(simgrid ${SIMGRID_DEP})
-# Pass dependencies to static libs
-##################################
-if(enable_lib_static)
- target_link_libraries(simgrid_static ${SIMGRID_DEP})
- add_dependencies(simgrid_static maintainer_files)
- set_target_properties(simgrid_static PROPERTIES OUTPUT_NAME simgrid)
-endif()
-
# Dependencies from maintainer mode
###################################
if(enable_maintainer_mode AND PYTHON_EXE)
mark_as_advanced(PATH_LIBDW_H)
mark_as_advanced(PATH_LIBDW_LIB)
+mark_as_advanced(PATH_LIBUNWIND_LIB)
+mark_as_advanced(PATH_LIBUNWIND_H)
+++ /dev/null
-include(FindLua51)
-find_program(HAVE_LUA_BIN NAMES lua)
-mark_as_advanced(HAVE_LUA_BIN)
-
-message(STATUS "Looking for lua.h")
-if(LUA_INCLUDE_DIR)
- message(STATUS "Looking for lua.h - found")
-else()
- message(STATUS "Looking for lua.h - not found")
-endif()
-
-if(HAVE_LUA_BIN)
- message(STATUS "Found Lua: ${HAVE_LUA_BIN}")
-endif()
-
-set(LIB_LUA_NAME "")
-
-foreach(lib_path ${LUA_LIBRARIES})
- if(NOT LIB_LUA_NAME)
- string(REGEX MATCH "liblua.*$" LIB_LUA_NAME "${lib_path}")
- string(REPLACE ".${LIB_EXE}" "" LIB_LUA_NAME "${LIB_LUA_NAME}")
- string(REPLACE "lib" "" LIB_LUA_NAME "${LIB_LUA_NAME}")
- if(LIB_LUA_NAME)
- string(REPLACE "/lib${LIB_LUA_NAME}.${LIB_EXE}" "" LUA_LIBRARY_DIR ${lib_path})
- endif()
- endif()
-endforeach(lib_path ${LUA_LIBRARIES})
-
-message(STATUS "Looking for lib lua")
-if(LUA_LIBRARY_DIR)
- message(STATUS "Looking for lib lua - found")
- message(STATUS "Lua version: ${LIB_LUA_NAME}")
- message(STATUS "Lib path : ${LUA_LIBRARY_DIR}")
-else()
- message(STATUS "Looking for lib lua - not found")
-endif()
-
-if(LUA51_FOUND)
- set(HAVE_LUA 1)
- include_directories(${LUA_INCLUDE_DIR})
- link_directories(${LUA_LIBRARY_DIR})
-else()
- message(STATUS "Warning : Lua need version 5.1")
-endif()
--- /dev/null
+# Search for the Lua 5.3 include files and libraries
+#
+# Input variable:
+# LUA_HINT: path to Lua installation -- only needed for non-standard installs
+# Output variable:
+# HAVE_LUA : if Lua was found
+# LUA_LIBRARY : the path to the dynamic library
+# LUA_INCLUDE_DIR : where to find lua.h
+# LUA_VERSION_MAJOR: First part of the version (often, 5)
+# LUA_VERSION_MINOR: Second part of the version (3 when we have 5.3)
+
+find_path(LUA_INCLUDE_DIR lua.h
+ HINTS
+ ENV LUA_HINT
+ PATH_SUFFIXES include/lua53 include/lua5.3 include/lua-5.3 include/lua include
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /sw # Fink
+ /opt/local # DarwinPorts
+ /opt/csw # Blastwave
+ /opt
+)
+
+find_library(LUA_LIBRARY
+ NAMES # I don't want a lua.a
+ lua53.so lua5.3.so lua-5.3.so
+ lua53.dynlib lua5.3.dynlib lua-5.3.dynlib
+ lua53.dll lua5.3.dll lua-5.3.dll
+ lua.so lua.dynlib lua.dll
+ lua53 lua5.3 lua-5.3 lua
+ HINTS
+ ENV LUA_HINT
+ PATH_SUFFIXES lib
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /sw
+ /opt/local
+ /opt/csw
+ /opt
+)
+if (NOT LUA_LIBRARY)
+ message(FATAL_ERROR "Error: Lua library not found. Please install that package (and set LUA_HINT) or disable Lua.")
+endif()
+if (NOT LUA_INCLUDE_DIR OR NOT EXISTS "${LUA_INCLUDE_DIR}/lua.h")
+ message(FATAL_ERROR "Error: Lua header file not found. Please install that package (and set LUA_HINT) or disable Lua.")
+endif()
+
+# Extract the version info out of the header file
+file(STRINGS "${LUA_INCLUDE_DIR}/lua.h" lua_version_str REGEX "^#define[ \t]+LUA_VERSION_MAJOR[ \t]+\"[456]+\"")
+ string(REGEX REPLACE "^#define[ \t]+LUA_VERSION_MAJOR[ \t]+\"([^\"]+)\"" "\\1" LUA_VERSION_MAJOR "${lua_version_str}")
+file(STRINGS "${LUA_INCLUDE_DIR}/lua.h" lua_version_str REGEX "^#define[ \t]+LUA_VERSION_MINOR[ \t]+\"[0123456789]+\"")
+ string(REGEX REPLACE "^#define[ \t]+LUA_VERSION_MINOR[ \t]+\"([^\"]+)\"" "\\1" LUA_VERSION_MINOR "${lua_version_str}")
+unset(lua_version_str)
+
+# Check that we have a sufficient version of Lua
+if(LUA_VERSION_MAJOR EQUAL 5 AND LUA_VERSION_MINOR EQUAL 3)
+ set(HAVE_LUA 1)
+
+ include_directories(${LUA_INCLUDE_DIR})
+else()
+ message(FATAL_ERROR "Error: Lua version 5.3 is required, but version ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR} found instead.")
+endif()
+
+message(STATUS "Lua version: ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
+message(STATUS "Lua library: ${LUA_LIBRARY}")
mark_as_advanced(enable_print_message)
option(enable_model-checking "Turn this on to experiment with our prototype of model-checker (hinders the simulation's performance even if turned off at runtime)" off)
-option(enable_lib_static "" off)
option(enable_lib_in_jar "Whether the native libraries are bundled in a Java jar file" on)
option(enable_lto "Whether we should try to activate the LTO (link time optimisation)" on)
option(enable_jedule "Jedule output of SimDAG." off)
mark_as_advanced(FIG2DEV_PATH)
mark_as_advanced(FLEXML_EXE)
mark_as_advanced(FLEX_EXE)
-mark_as_advanced(PERL_EXECUTABLE)
mark_as_advanced(GCOV_PATH)
mark_as_advanced(ICONV_PATH)
mark_as_advanced(MAKE_PATH)
endif()
message("")
message(" Compiler: C .................: ${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID})")
-message(" version .............: ${COMPILER_C_VERSION}")
+message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
if(CMAKE_CXX_COMPILER)
message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (${CMAKE_CXX_COMPILER_ID})")
- message(" version .............: ${COMPILER_CXX_VERSION}")
+ message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
endif()
-if(HAVE_Java)
+if(${Java_FOUND})
message(" Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
message(" version .............: ${Java_VERSION_STRING}")
+if(${SWIG_FOUND})
+ message(" SWIG ................: Version ${SWIG_VERSION} found.")
+else()
+ message(" SWIG ................: Missing.")
+endif()
endif()
if(CMAKE_Fortran_COMPILER)
message(" Compiler: Fortran ...........: ${CMAKE_Fortran_COMPILER} (${CMAKE_Fortran_COMPILER_ID})")
- message(" version .............: ${COMPILER_Fortran_VERSION}")
+ message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
endif()
message(" Linker: .....................: ${CMAKE_LINKER}")
message(" version .............: ${LINKER_VERSION}")
message(" Compile NS-3 ................: NO (hint: ${NS3_HINT})")
endif()
-if (HAVE_Java)
+if (${Java_FOUND})
message(" Compile Java ................: yes")
message(" Native lib in jar .........: ${enable_lib_in_jar}")
else()
message(" Compile Smpi f77 ............: ${SMPI_FORTRAN}")
message(" Compile Smpi f90 ............: ${SMPI_FORTRAN}")
message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXT}")
-message(" Compile Static ..............: ${enable_lib_static}")
message("")
message(" Maintainer mode .............: ${enable_maintainer_mode}")
message(" Documentation................: ${enable_documentation}")
exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun" OUTPUT_VARIABLE "OKITOKI")
ENDIF()
-### For code coverage
-### Set some variables
-SET(UPDATE_TYPE "svn")
-SET(DROP_METHOD "http")
-SET(DROP_SITE "cdash.inria.fr/CDash")
-SET(DROP_LOCATION "/submit.php?project=${PROJECT_NAME}")
-SET(DROP_SITE_CDASH TRUE)
-SET(TRIGGER_SITE "http://cdash.inria.fr/CDash/cgi-bin/Submit-Random-TestingResults.cgi")
-#If you use the --read-var-info option Memcheck will run more slowly but may give a more detailed description of any illegal address.
-
-find_program(PERL_PROGRAM NAMES perl)
-mark_as_advanced(PERL_PROGRAM)
-SET(TESH_COMMAND ${PERL_PROGRAM} ${CMAKE_BINARY_DIR}/bin/tesh)
+SET(TESH_COMMAND ${PERL_EXECUTABLE} ${CMAKE_BINARY_DIR}/bin/tesh)
IF(CMAKE_HOST_WIN32)
SET(TESH_OPTION $TESH_OPTION --timeout 50)
ENDIF()
ADD_TESH_FACTORIES(msg-energy-pstates "thread;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/pstate/pstate.tesh)
ADD_TESH_FACTORIES(msg-energy-consumption "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/consumption/energy_consumption.tesh)
ADD_TESH_FACTORIES(msg-energy-onoff "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/onoff/onoff.tesh)
+ ADD_TESH_FACTORIES(msg-energy-vm "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/vm/energy_vm.tesh)
ADD_TESH_FACTORIES(msg-token-ring "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_BINARY_DIR}/examples/msg/token_ring ${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring/token_ring.tesh)
ADD_TESH_FACTORIES(msg-migration "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/migration/migration.tesh)
ADD_TESH_FACTORIES(msg-ptask "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task/parallel_task.tesh)
ADD_TEST(msg-icomms-waitany ${CMAKE_BINARY_DIR}/examples/msg/icomms/peer3 ${CMAKE_HOME_DIRECTORY}/examples/platforms/small_platform.xml ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/deployment_peer05.xml)
# END TESH TESTS
+ ### S4U ###
+ ADD_TESH_FACTORIES(s4u-basic "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/s4u/basic --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/basic s4u_basic.tesh)
+ ADD_TESH_FACTORIES(s4u-io "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/s4u/io --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/io s4u_io.tesh)
+
### SIMDAG ###
# BEGIN TESH TESTS
ENDFOREACH()
# END TESH TESTS
IF(enable_smpi_MPICH3_testsuite)
- ADD_TEST(test-smpi-mpich3-coll-thread ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll 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/coll -tests=testlist -execarg=--cfg=contexts/factory:thread -execarg=--cfg=smpi/privatize_global_variables:yes)
+ ADD_TEST(test-smpi-mpich3-coll-thread ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:thread -execarg=--cfg=smpi/privatize_global_variables:yes)
SET_TESTS_PROPERTIES(test-smpi-mpich3-coll-thread PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!")
IF(CONTEXT_UCONTEXT)
- ADD_TEST(test-smpi-mpich3-coll-ompi-ucontext ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll 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/coll -tests=testlist -execarg=--cfg=contexts/factory:ucontext -execarg=--cfg=smpi/coll_selector:ompi -execarg=--cfg=smpi/privatize_global_variables:yes -execarg=--cfg=smpi/bcast:binomial_tree)
+ ADD_TEST(test-smpi-mpich3-coll-ompi-ucontext ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:ucontext -execarg=--cfg=smpi/coll_selector:ompi -execarg=--cfg=smpi/privatize_global_variables:yes -execarg=--cfg=smpi/bcast:binomial_tree)
SET_TESTS_PROPERTIES(test-smpi-mpich3-coll-ompi-ucontext PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!")
ENDIF()
IF(HAVE_RAWCTX)
- ADD_TEST(test-smpi-mpich3-coll-mpich-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll 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/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:mpich -execarg=--cfg=smpi/privatize_global_variables:yes)
- ADD_TEST(test-smpi-mpich3-coll-ompi-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll 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/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:ompi -execarg=--cfg=smpi/privatize_global_variables:yes -execarg=--cfg=smpi/bcast:binomial_tree)
- ADD_TEST(test-smpi-mpich3-coll-mpich-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll 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/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:mpich -execarg=--cfg=smpi/privatize_global_variables:yes)
- ADD_TEST(test-smpi-mpich3-coll-mvapich2-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll 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/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:mvapich2 -execarg=--cfg=smpi/privatize_global_variables:yes)
- ADD_TEST(test-smpi-mpich3-coll-impi-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll 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/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:impi -execarg=--cfg=smpi/privatize_global_variables:yes)
+ ADD_TEST(test-smpi-mpich3-coll-mpich-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:mpich -execarg=--cfg=smpi/privatize_global_variables:yes)
+ ADD_TEST(test-smpi-mpich3-coll-ompi-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:ompi -execarg=--cfg=smpi/privatize_global_variables:yes -execarg=--cfg=smpi/bcast:binomial_tree)
+ ADD_TEST(test-smpi-mpich3-coll-mpich-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:mpich -execarg=--cfg=smpi/privatize_global_variables:yes)
+ ADD_TEST(test-smpi-mpich3-coll-mvapich2-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:mvapich2 -execarg=--cfg=smpi/privatize_global_variables:yes)
+ ADD_TEST(test-smpi-mpich3-coll-impi-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:impi -execarg=--cfg=smpi/privatize_global_variables:yes)
SET_TESTS_PROPERTIES(test-smpi-mpich3-coll-mpich-raw test-smpi-mpich3-coll-ompi-raw test-smpi-mpich3-coll-mpich-raw test-smpi-mpich3-coll-mvapich2-raw test-smpi-mpich3-coll-impi-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!")
ENDIF()
IF(HAVE_RAWCTX)
- ADD_TEST(test-smpi-mpich3-attr-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/attr 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/attr -tests=testlist -execarg=--cfg=contexts/factory:raw)
- ADD_TEST(test-smpi-mpich3-comm-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/comm 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/comm -tests=testlist -execarg=--cfg=contexts/factory:raw)
- ADD_TEST(test-smpi-mpich3-init-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/init 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/init -tests=testlist -execarg=--cfg=contexts/factory:raw)
- ADD_TEST(test-smpi-mpich3-datatype-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/datatype 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/datatype -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/privatize_global_variables:yes)
- 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 -execarg=--cfg=smpi/privatize_global_variables:yes)
- 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)
- 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)
- ADD_TEST(test-smpi-mpich3-info-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/info 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/info -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/privatize_global_variables:yes)
- ADD_TEST(test-smpi-mpich3-perf-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/perf 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/perf -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/running_power:-1)
+ ADD_TEST(test-smpi-mpich3-attr-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/attr ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/attr -tests=testlist -execarg=--cfg=contexts/factory:raw)
+ ADD_TEST(test-smpi-mpich3-comm-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/comm ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/comm -tests=testlist -execarg=--cfg=contexts/factory:raw)
+ ADD_TEST(test-smpi-mpich3-init-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/init ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/init -tests=testlist -execarg=--cfg=contexts/factory:raw)
+ ADD_TEST(test-smpi-mpich3-datatype-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/datatype ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/datatype -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/privatize_global_variables:yes)
+ ADD_TEST(test-smpi-mpich3-group-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/group ${PERL_EXECUTABLE} ${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_EXECUTABLE} ${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 -execarg=--cfg=smpi/privatize_global_variables:yes)
+ ADD_TEST(test-smpi-mpich3-topo-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/topo ${PERL_EXECUTABLE} ${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)
+ ADD_TEST(test-smpi-mpich3-rma-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/rma ${PERL_EXECUTABLE} ${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)
+ ADD_TEST(test-smpi-mpich3-info-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/info ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/info -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/privatize_global_variables:yes)
+ ADD_TEST(test-smpi-mpich3-perf-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/perf ${PERL_EXECUTABLE} ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/perf -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/running_power:-1)
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 test-smpi-mpich3-info-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!")
ENDIF()
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)
+ ADD_TEST(test-smpi-mpich3-thread-f77 ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/f77/ ${PERL_EXECUTABLE} ${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!")
- 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)
+ ADD_TEST(test-smpi-mpich3-thread-f90 ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/f90/ ${PERL_EXECUTABLE} ${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()
ENDIF()
### LUA ###
# BEGIN TESH TESTS
IF(HAVE_LUA)
+ # Tests testing simulation from lua, i.e., you execute the simulation
+ # by calling something similar to
+ #
+ # ~$ lua masterslave.lua platform.xml deploy.xml
ADD_TESH(lua-duplicated-globals --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/state_cloner duplicated_globals.tesh)
ADD_TESH(lua-masterslave --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/masterslave master_slave.tesh)
ADD_TESH(lua-mult-matrix --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/multi_matrix mult_matrix.tesh)
ADD_TESH(lua-masterslave-bypass --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/console master_slave_bypass.tesh)
- ADD_TESH(lua-chord --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/chord chord.tesh)
+ #Chord is severly broken and requires rewriting.
+ #ADD_TESH(lua-chord --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/chord chord.tesh)
ADD_TESH(lua-bittorrent --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/bittorrent bittorrent.tesh)
ADD_TESH(lua-kademlia --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/kademlia kademlia.tesh)
SET_TESTS_PROPERTIES(lua-duplicated-globals PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
SET_TESTS_PROPERTIES(lua-masterslave PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
SET_TESTS_PROPERTIES(lua-mult-matrix PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
SET_TESTS_PROPERTIES(lua-masterslave-bypass PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
- SET_TESTS_PROPERTIES(lua-chord PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
+ #SET_TESTS_PROPERTIES(lua-chord PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
SET_TESTS_PROPERTIES(lua-bittorrent PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
SET_TESTS_PROPERTIES(lua-kademlia PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
+
+ # Tests testing simulation from C but using lua for platform files. Executed
+ # like this
+ #
+ # ~$ ./masterslave platform.lua deploy.lua
+ ADD_TESH(lua-platform-masterslave --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/lua lua_platforms.tesh)
+ SET_TESTS_PROPERTIES(lua-platform-masterslave PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
ENDIF()
# END TESH TESTS
/* Define to 1 if you have the <sys/stat.h> header file. */
#cmakedefine HAVE_SYS_STAT_H @HAVE_SYS_STAT_H@
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+#cmakedefine HAVE_SYS_PTRACE_H @HAVE_SYS_PTRACE_H@
+
/* Define to 1 if you have the <sys/time.h> header file. */
#cmakedefine HAVE_SYS_TIME_H @HAVE_SYS_TIME_H@
/* Tracking of latency bound */
#cmakedefine HAVE_LATENCY_BOUND_TRACKING @HAVE_LATENCY_BOUND_TRACKING@
-/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
- significant byte first (like Motorola and SPARC, unlike Intel). */
-#if defined AC_APPLE_UNIVERSAL_BUILD
-# if defined __BIG_ENDIAN__
-# define WORDS_BIGENDIAN 1
-# endif
-#else
-# ifndef WORDS_BIGENDIAN
-/* # undef WORDS_BIGENDIAN */
-# endif
-#endif
-
/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
`char[]'. */
#cmakedefine YYTEXT_POINTER
file @CMAKE_HOME_DIRECTORY@\include\xbt\graphxml.h\r
file @CMAKE_HOME_DIRECTORY@\include\xbt\synchro_core.h\r
file @CMAKE_HOME_DIRECTORY@\include\xbt\queue.h\r
- file @CMAKE_HOME_DIRECTORY@\include\xbt\setset.h\r
file @CMAKE_HOME_DIRECTORY@\include\xbt\mmalloc.h\r
file @CMAKE_HOME_DIRECTORY@\include\xbt\parmap.h\r
file @CMAKE_HOME_DIRECTORY@\include\xbt\automaton.h\r
delete $INSTDIR\include\xbt\synchro.h\r
delete $INSTDIR\include\xbt\synchro_core.h\r
delete $INSTDIR\include\xbt\queue.h\r
- delete $INSTDIR\include\xbt\setset.h\r
delete $INSTDIR\include\xbt\mmalloc.h\r
delete $INSTDIR\include\xbt\replay_trace_reader.h\r
delete $INSTDIR\include\xbt\parmap.h\r
# Usage: tools/generate-dwarf-functions /usr/include/dwarf.h
cat - > src/mc/mc_dwarf_tagnames.cpp <<EOF
-/* Copyright (c) 2014. The SimGrid Team.
+/* Copyright (c) 2014-2015. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#include <elfutils/libdw.h>
#include <xbt/base.h>
-#include "mc_object_info.h"
+
+namespace simgrid {
+namespace dwarf {
/** \brief Get the name of a dwarf tag (DW_TAG_*) from its code
*
* \return name of the tag
*/
XBT_PRIVATE
-const char *MC_dwarf_tagname(int tag)
+const char *tagname(int tag)
{
switch (tag) {
$(cat "$1" | grep DW_TAG_ | sed 's/.*\(DW_TAG_[^ ]*\) = \(0x[0-9a-f]*\).*/ case \2: return "\1";/')
return "DW_TAG_unknown";
}
}
+
+}
+}
EOF
cat - > src/mc/mc_dwarf_attrnames.cpp << EOF
-/* Copyright (c) 2014. The SimGrid Team.
+/* Copyright (c) 2014-2015. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
/* Warning: autogenerated, do not edit! */
-#include <xbt/base.h>
#include <dwarf.h>
-#include "mc_object_info.h"
+#include <xbt/base.h>
+
+namespace simgrid {
+namespace dwarf {
/** \brief Get the name of an attribute (DW_AT_*) from its code
*
* \param attr attribute code (see the DWARF specification)
* \return name of the attribute
*/
-const char *MC_dwarf_attrname(int attr)
+XBT_PRIVATE
+const char *attrname(int attr)
{
switch (attr) {
$(cat "$1" | grep DW_AT_ | sed 's/.*\(DW_AT_[^ ]*\) = \(0x[0-9a-f]*\).*/ case \2: return "\1";/')
return "DW_AT_unknown";
}
}
+
+}
+}
EOF
### Proceed with the tests
cmake -Denable_documentation=OFF -Denable_lua=OFF -Denable_tracing=ON \
- -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON -Denable_lib_static=OFF \
+ -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON \
-Denable_latency_bound_tracking=OFF -Denable_jedule=OFF -Denable_mallocators=OFF \
-Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=OFF -Denable_model-checking=OFF \
-Denable_memcheck_xml=ON $WORKSPACE
make clean
cmake -Denable_documentation=OFF -Denable_lua=OFF -Denable_tracing=ON \
- -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON -Denable_lib_static=OFF \
+ -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON \
-Denable_latency_bound_tracking=OFF -Denable_jedule=OFF -Denable_mallocators=OFF \
-Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=OFF -Denable_model-checking=OFF \
-Denable_memcheck=OFF -Denable_memcheck_xml=OFF -Denable_coverage=ON $WORKSPACE
-Denable_smpi_ISP_testsuite=$(onoff test "$build_mode" = "ModelChecker") \
-Denable_compile_optimizations=$(onoff test "$build_mode" = "Debug") \
-Denable_smpi_MPICH3_testsuite=$(onoff test "$build_mode" != "DynamicAnalysis") \
- -Denable_lua=$(onoff test "$build_mode" != "DynamicAnalysis") \
-Denable_mallocators=$(onoff test "$build_mode" != "DynamicAnalysis") \
-Denable_memcheck=$(onoff test "$build_mode" = "DynamicAnalysis") \
- -Denable_compile_warnings=ON -Denable_smpi=ON -Denable_lib_static=OFF \
+ -Denable_compile_warnings=ON -Denable_smpi=ON \
-Denable_latency_bound_tracking=OFF -Denable_jedule=OFF \
- -Denable_tracing=ON -Denable_java=ON
+ -Denable_tracing=ON -Denable_java=ON -Denable_lua=OFF
+# -Denable_lua=$(onoff test "$build_mode" != "DynamicAnalysis") \
+
+
make -j$NUMBER_OF_PROCESSORS VERBOSE=1
if test "$(uname -o)" != "Msys"; then
}
# substitute remaining variables, if any
- while ( $cmd{'cmd'} =~ /\${(\w+)(?::[=-][^}]*)?}/ ) {
+ while ( $cmd{'cmd'} =~ /\$\{(\w+)(?::[=-][^}]*)?\}/ ) {
$cmd{'cmd'} = var_subst( $cmd{'cmd'}, $1, "" );
}
while ( $cmd{'cmd'} =~ /\$(\w+)/ ) {
sub var_subst {
my ( $text, $name, $value ) = @_;
if ($value) {
- $text =~ s/\${$name(?::[=-][^}]*)?}/$value/g;
+ $text =~ s/\$\{$name(?::[=-][^}]*)?\}/$value/g;
$text =~ s/\$$name(\W|$)/$value$1/g;
} else {
- $text =~ s/\${$name:=([^}]*)}/$1/g;
- $text =~ s/\${$name}//g;
+ $text =~ s/\$\{$name:=([^}]*)\}/$1/g;
+ $text =~ s/\$\{$name\}//g;
$text =~ s/\$$name(\W|$)/$1/g;
}
return $text;