--- /dev/null
+.. _simdag:
+
+Simulating DAG
+==============
+
+This tutorial presents the basics to understand how DAG are represented in Simgrid and how to simulate their workflow.
+
+Definition of a DAG
+-------------------
+
+Directed Acyclic Graph:
+
+.. math::
+
+ \mathcal{G} = (\mathcal{V},\mathcal{E})
+
+Set of vertices representing :ref:`Activities <API_s4u_Activity>`:
+
+.. math::
+
+ \mathcal{V} = {v_i | i = 1, ..., V}
+
+Set of edges representing precedence constraints between :ref:`Activities <API_s4u_Activity>`:
+
+.. math::
+
+ \mathcal{E} = {e_i,j | (i,j) \in {1, ..., V} x {1, ..., V}}
+
+.. image:: /tuto_dag/img/dag.svg
+ :align: center
+
+Representing Vertices/Activities
+................................
+
+There is two types of :ref:`Activities <API_s4u_Activity>` that can represent Vertices: :ref:`Exec <API_s4u_Exec>` and :ref:`Comm <API_s4u_Comm>`.
+Thoses activities must be initiated and configured to properly describe your worflow.
+
+An Exec represents the execution of an amount of flop on a :ref:`Host <API_s4u_Host>` of your platform.
+
+.. code-block:: cpp
+
+ ExecPtr exec = Exec::init();
+ exec->set_flops_amount(int);
+ exec->set_host(Host*);
+ exec->start();
+
+A Comm represents a data transfer between two :ref:`Hosts <API_s4u_Host>` of your platform.
+
+.. code-block:: cpp
+
+ CommPtr comm = Comm::sendto_init();
+ comm->set_source(Host*);
+ comm->set_destination(Host*);
+ comm->start();
+
+Representing Edges/Dependencies
+...............................
+
+An activity will not start until all of its dependencies have been completed.
+Activities may have any number of successors.
+Dependencies between Activities are created using :cpp:func:`Activity::add_successor(ActivityPtr)`.
+
+.. code-block:: cpp
+
+ exec->add_successor(comm);
+
+The Activity ``comm`` will not start until ``exec`` has been completed.
+
+Lab 1: Basics
+---------------
+
+The goal of this lab is to describe the following DAG:
+
+.. image:: /tuto_dag/img/dag1.svg
+ :align: center
+
+In this DAG we want ``c1`` to compute 1e9 flops, ``c2`` to compute 5e9 flops and ``c3`` to compute 2e9 flops.
+There is also a data transfer of 5e8 bytes between ``c1`` and ``c3``.
+
+First of all, include the Simgrid library and define the log category.
+
+.. code-block:: cpp
+
+ #include "simgrid/s4u.hpp"
+
+ XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u tutorial");
+
+Inside the ``main`` function create an instance of :ref:`Engine <API_s4u_Engine>` and load the platform.
+
+.. code-block:: cpp
+
+ simgrid::s4u::Engine e(&argc, argv);
+ e.load_platform(argv[1]);
+
+Retrieve pointers to some hosts.
+
+.. code-block:: cpp
+
+ simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+ simgrid::s4u::Host* jupiter = e.host_by_name("Jupiter");
+
+Initiate the activities.
+
+.. code-block:: cpp
+
+ simgrid::s4u::ExecPtr c1 = simgrid::s4u::Exec::init();
+ simgrid::s4u::ExecPtr c2 = simgrid::s4u::Exec::init();
+ simgrid::s4u::ExecPtr c3 = simgrid::s4u::Exec::init();
+ simgrid::s4u::CommPtr t1 = simgrid::s4u::Comm::sendto_init();
+
+Give names to thoses activities.
+
+.. code-block:: cpp
+
+ c1->set_name("c1");
+ c2->set_name("c2");
+ c3->set_name("c3");
+ t1->set_name("t1");
+
+Set the amount of work for each activity.
+
+.. code-block:: cpp
+
+ c1->set_flops_amount(1e9);
+ c2->set_flops_amount(5e9);
+ c3->set_flops_amount(2e9);
+ t1->set_payload_size(5e8);
+
+Define the dependencies between the activities.
+
+.. code-block:: cpp
+
+ c1->add_successor(t1);
+ t1->add_successor(c3);
+ c2->add_successor(c3);
+
+Set the location of each Exec activity and source and destination for the Comm activity.
+
+.. code-block:: cpp
+
+ c1->set_host(tremblay);
+ c2->set_host(jupiter);
+ c3->set_host(jupiter);
+ t1->set_source(tremblay);
+ t1->set_destination(jupiter);
+
+Start the executions of Activities without dependencies.
+
+.. code-block:: cpp
+
+ c1->start();
+ c2->start();
+
+Add a callback to monitor the activities.
+
+.. code-block:: cpp
+
+ Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+ XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+ activity.get_finish_time());
+ });
+
+Finally, run the simulation.
+
+.. code-block:: cpp
+
+ e.run();
+
+The execution of this code should give you the following output:
+
+.. code-block:: bash
+
+ [10.194200] [main/INFO] Activity 'c1' is complete (start time: 0.000000, finish time: 10.194200)
+ [65.534235] [main/INFO] Activity 'c2' is complete (start time: 0.000000, finish time: 65.534235)
+ [85.283378] [main/INFO] Activity 't1' is complete (start time: 10.194200, finish time: 85.283378)
+ [111.497072] [main/INFO] Activity 'c3' is complete (start time: 85.283378, finish time: 111.497072)
+
+Lab 2: Import a DAG from a file
+---------------
+
+In this lab we present how to import a DAG into you Simgrid simulation, either using a DOT file, a JSON file, or a DAX file.
+
+The files presented in this lab describe the following DAG:
+
+.. image:: /tuto_dag/img/dag2.svg
+ :align: center
+
+From a DOT file
+...............
+
+A DOT file describes a workflow in accordance with the graphviz format.
+
+The following DOT file describes the workflow presented at the beginning of this lab:
+
+.. code-block:: xml
+
+ digraph G {
+ c1 [size="1e9"];
+ c2 [size="5e9"];
+ c3 [size="2e9"];
+
+ root->c1 [size="2e8"];
+ root->c2 [size="1e8"];
+ c1->c3 [size="5e8"];
+ c2->c3 [size="-1"];
+ c3->end [size="2e8"];
+ }
+
+It can be imported as a vector of Activities into Simgrid using :cpp:func:`create_DAG_from_DOT(const std::string& filename)`. Then, you have to assign hosts to your Activities.
+
+.. code-block:: cpp
+
+ #include "simgrid/s4u.hpp"
+
+ XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+ int main(int argc, char* argv[]) {
+ simgrid::s4u::Engine e(&argc, argv);
+ e.load_platform(argv[1]);
+
+ std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_dot(argv[2]);
+
+ simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+ simgrid::s4u::Host* jupiter = e.host_by_name("Jupiter");
+ simgrid::s4u::Host* fafard = e.host_by_name("Fafard");
+
+ dynamic_cast<simgrid::s4u::Exec*>(dag[0].get())->set_host(fafard);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[1].get())->set_host(tremblay);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[2].get())->set_host(jupiter);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[3].get())->set_host(jupiter);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[8].get())->set_host(jupiter);
+
+ for (const auto& a : dag) {
+ if (auto* comm = dynamic_cast<simgrid::s4u::Comm*>(a.get())) {
+ auto pred = dynamic_cast<simgrid::s4u::Exec*>((*comm->get_dependencies().begin()).get());
+ auto succ = dynamic_cast<simgrid::s4u::Exec*>(comm->get_successors().front().get());
+ comm->set_source(pred->get_host())->set_destination(succ->get_host());
+ }
+ }
+
+ simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+ XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+ activity.get_finish_time());
+ });
+
+ e.run();
+ return 0;
+ }
+
+The execution of this code should give you the following output:
+
+.. code-block:: bash
+
+ [0.000000] [main/INFO] Activity 'root' is complete (start time: 0.000000, finish time: 0.000000)
+ [33.394394] [main/INFO] Activity 'root->c2' is complete (start time: 0.000000, finish time: 33.394394)
+ [39.832311] [main/INFO] Activity 'root->c1' is complete (start time: 0.000000, finish time: 39.832311)
+ [50.026511] [main/INFO] Activity 'c1' is complete (start time: 39.832311, finish time: 50.026511)
+ [98.928629] [main/INFO] Activity 'c2' is complete (start time: 33.394394, finish time: 98.928629)
+ [125.115689] [main/INFO] Activity 'c1->c3' is complete (start time: 50.026511, finish time: 125.115689)
+ [151.329383] [main/INFO] Activity 'c3' is complete (start time: 125.115689, finish time: 151.329383)
+ [151.743605] [main/INFO] Activity 'c3->end' is complete (start time: 151.329383, finish time: 151.743605)
+ [151.743605] [main/INFO] Activity 'end' is complete (start time: 151.743605, finish time: 151.743605)
+
+From a JSON file
+................
+
+A JSON file describes a workflow in accordance with the `wfformat <https://github.com/wfcommons/wfformat>`_ .
+
+The following JSON file describes the workflow presented at the beginning of this lab:
+
+.. code-block:: JSON
+
+ {
+ "name": "simple_json",
+ "schemaVersion": "1.0",
+ "workflow": {
+ "makespan": 0,
+ "executedAt": "2023-03-09T00:00:00-00:00",
+ "tasks": [
+ {
+ "name": "c1",
+ "type": "compute",
+ "parents": [],
+ "runtime": 1e9,
+ "machine": "Tremblay"
+ },
+ {
+ "name": "t1",
+ "type": "transfer",
+ "parents": ["c1"],
+ "bytesWritten": 5e8,
+ "machine": "Jupiter"
+ },
+ {
+ "name": "c2",
+ "type": "compute",
+ "parents": [],
+ "runtime": 5e9,
+ "machine": "Jupiter"
+ },
+ {
+ "name": "c3",
+ "type": "compute",
+ "parents": ["t1","c2"],
+ "runtime": 2e9,
+ "machine": "Jupiter"
+ }
+ ],
+ "machines": [
+ {"nodeName": "Tremblay"},
+ {"nodeName": "Jupiter"}
+ ]
+ }
+ }
+
+It can be imported as a vector of Activities into Simgrid using :cpp:func:`create_DAG_from_json(const std::string& filename)`.
+
+.. code-block:: cpp
+
+ #include "simgrid/s4u.hpp"
+
+ XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+ int main(int argc, char* argv[]) {
+ simgrid::s4u::Engine e(&argc, argv);
+ e.load_platform(argv[1]);
+
+ std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_json(argv[2]);
+
+ simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+ XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+ activity.get_finish_time());
+ });
+
+ e.run();
+ return 0;
+ }
+
+The execution of this code should give you the following output:
+
+.. code-block:: bash
+
+ [10.194200] [main/INFO] Activity 'c1' is complete (start time: 0.000000, finish time: 10.194200)
+ [65.534235] [main/INFO] Activity 'c2' is complete (start time: 0.000000, finish time: 65.534235)
+ [85.283378] [main/INFO] Activity 't1' is complete (start time: 10.194200, finish time: 85.283378)
+ [111.497072] [main/INFO] Activity 'c3' is complete (start time: 85.283378, finish time: 111.497072)
+
+From a DAX file [deprecated]
+............................
+
+A DAX file describes a workflow in accordance with the `Pegasus <http://pegasus.isi.edu/>`_ format.
+
+The following DAX file describes the workflow presented at the beginning of this lab:
+
+.. code-block:: xml
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <adag xmlns="http://pegasus.isi.edu/schema/DAX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://pegasus.isi.edu/schema/DAX http://pegasus.isi.edu/schema/dax-2.1.xsd"
+ version="2.1">
+ <job id="1" name="c1" runtime="10">
+ <uses file="i1" link="input" register="true" transfer="true" optional="false" type="data" size="2e8"/>
+ <uses file="o1" link="output" register="true" transfer="true" optional="false" type="data" size="5e8"/>
+ </job>
+ <job id="2" name="c2" runtime="50">
+ <uses file="i2" link="input" register="true" transfer="true" optional="false" type="data" size="1e8"/>
+ </job>
+ <job id="3" name="c3" runtime="20">
+ <uses file="o1" link="input" register="true" transfer="true" optional="false" type="data" size="5e8"/>
+ <uses file="o3" link="output" register="true" transfer="true" optional="false" type="data" size="2e8"/>
+ </job>
+ <child ref="3">
+ <parent ref="1"/>
+ <parent ref="2"/>
+ </child>
+ </adag>
+
+It can be imported as a vector of Activities into Simgrid using :cpp:func:`create_DAG_from_DAX(std::string)`.
+
+.. code-block:: cpp
+
+ #include "simgrid/s4u.hpp"
+
+ XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+ int main(int argc, char* argv[]) {
+ simgrid::s4u::Engine e(&argc, argv);
+ e.load_platform(argv[1]);
+
+ std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_DAX(argv[2]);
+
+ simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+ simgrid::s4u::Host* jupiter = e.host_by_name("Jupiter");
+ simgrid::s4u::Host* fafard = e.host_by_name("Fafard");
+
+ dynamic_cast<simgrid::s4u::Exec*>(dag[0].get())->set_host(fafard);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[1].get())->set_host(tremblay);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[2].get())->set_host(jupiter);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[3].get())->set_host(jupiter);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[8].get())->set_host(jupiter);
+
+ for (const auto& a : dag) {
+ if (auto* comm = dynamic_cast<simgrid::s4u::Comm*>(a.get())) {
+ auto pred = dynamic_cast<simgrid::s4u::Exec*>((*comm->get_dependencies().begin()).get());
+ auto succ = dynamic_cast<simgrid::s4u::Exec*>(comm->get_successors().front().get());
+ comm->set_source(pred->get_host())->set_destination(succ->get_host());
+ }
+ }
+
+ simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+ XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+ activity.get_finish_time());
+ });
+
+ e.run();
+ return 0;
+ }
+
Simulating distributed algorithms <Tutorial_Algorithms.rst>
Simulating MPI applications <Tutorial_MPI_Applications.rst>
Model-checking algorithms <Tutorial_Model-checking.rst>
+ Simulating DAG <Tutorial_DAG.rst>
.. toctree::
:hidden:
--- /dev/null
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u tutorial");
+
+int main(int argc, char* argv[]) {
+ simgrid::s4u::Engine e(&argc, argv);
+ e.load_platform(argv[1]);
+
+ simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+ simgrid::s4u::Host* jupiter = e.host_by_name("Jupiter");
+
+ simgrid::s4u::ExecPtr c1 = simgrid::s4u::Exec::init();
+ simgrid::s4u::ExecPtr c2 = simgrid::s4u::Exec::init();
+ simgrid::s4u::ExecPtr c3 = simgrid::s4u::Exec::init();
+ simgrid::s4u::CommPtr t1 = simgrid::s4u::Comm::sendto_init();
+
+ c1->set_name("c1");
+ c2->set_name("c2");
+ c3->set_name("c3");
+ t1->set_name("t1");
+
+ c1->set_flops_amount(1e9);
+ c2->set_flops_amount(5e9);
+ c3->set_flops_amount(2e9);
+ t1->set_payload_size(5e8);
+
+ c1->add_successor(t1);
+ t1->add_successor(c3);
+ c2->add_successor(c3);
+
+ c1->set_host(tremblay);
+ c2->set_host(jupiter);
+ c3->set_host(jupiter);
+ t1->set_source(tremblay);
+ t1->set_destination(jupiter);
+
+ c1->start();
+ c2->start();
+
+ simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+ XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+ activity.get_finish_time());
+ });
+
+ e.run();
+ return 0;
+}
+
--- /dev/null
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+int main(int argc, char* argv[]) {
+ simgrid::s4u::Engine e(&argc, argv);
+ e.load_platform(argv[1]);
+
+ std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_dot(argv[2]);
+
+ simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+ simgrid::s4u::Host* jupiter = e.host_by_name("Jupiter");
+ simgrid::s4u::Host* fafard = e.host_by_name("Fafard");
+
+ dynamic_cast<simgrid::s4u::Exec*>(dag[0].get())->set_host(fafard);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[1].get())->set_host(tremblay);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[2].get())->set_host(jupiter);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[3].get())->set_host(jupiter);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[8].get())->set_host(jupiter);
+
+ for (const auto& a : dag) {
+ if (auto* comm = dynamic_cast<simgrid::s4u::Comm*>(a.get())) {
+ auto pred = dynamic_cast<simgrid::s4u::Exec*>((*comm->get_dependencies().begin()).get());
+ auto succ = dynamic_cast<simgrid::s4u::Exec*>(comm->get_successors().front().get());
+ comm->set_source(pred->get_host())->set_destination(succ->get_host());
+ }
+ }
+
+ simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+ XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+ activity.get_finish_time());
+ });
+
+ e.run();
+ return 0;
+}
+
--- /dev/null
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+int main(int argc, char* argv[]) {
+ simgrid::s4u::Engine e(&argc, argv);
+ e.load_platform(argv[1]);
+
+ std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_json(argv[2]);
+
+ simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+ XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+ activity.get_finish_time());
+ });
+
+ e.run();
+ return 0;
+}
+
--- /dev/null
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+int main(int argc, char* argv[]) {
+ simgrid::s4u::Engine e(&argc, argv);
+ e.load_platform(argv[1]);
+
+ std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_DAX(argv[2]);
+
+ simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+ simgrid::s4u::Host* jupiter = e.host_by_name("Jupiter");
+ simgrid::s4u::Host* fafard = e.host_by_name("Fafard");
+
+ dynamic_cast<simgrid::s4u::Exec*>(dag[0].get())->set_host(fafard);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[1].get())->set_host(tremblay);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[2].get())->set_host(jupiter);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[3].get())->set_host(jupiter);
+ dynamic_cast<simgrid::s4u::Exec*>(dag[8].get())->set_host(jupiter);
+
+ for (const auto& a : dag) {
+ if (auto* comm = dynamic_cast<simgrid::s4u::Comm*>(a.get())) {
+ auto pred = dynamic_cast<simgrid::s4u::Exec*>((*comm->get_dependencies().begin()).get());
+ auto succ = dynamic_cast<simgrid::s4u::Exec*>(comm->get_successors().front().get());
+ comm->set_source(pred->get_host())->set_destination(succ->get_host());
+ }
+ }
+
+ simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+ XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+ activity.get_finish_time());
+ });
+
+ e.run();
+ return 0;
+}
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ version="1.1"
+ id="svg2"
+ width="275.83713"
+ height="134.41872"
+ viewBox="0 0 275.83713 134.41872"
+ sodipodi:docname="simdag-101.svg"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs6">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath232">
+ <path
+ d="M 0,0 H 305 V 149 H 0 Z"
+ id="path230" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath320">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 2228.77,-1230.227 -84.41,-42.203 17.01,-34.015 84.4,42.203 v 0 l -75.58,-17.004 z"
+ clip-rule="evenodd"
+ id="path318" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath334">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 2101.53,-1281.879 91.96,-23.933 10.08,36.531 -92.59,23.937 v 0 l 68.66,-37.793 z"
+ clip-rule="evenodd"
+ id="path332" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath348">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 963.93,-1245.344 -92.598,-23.937 10.078,-36.531 91.965,23.933 v 0 l -77.477,-1.258 z"
+ clip-rule="evenodd"
+ id="path346" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath362">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 829.129,-1264.242 85.035,-42.203 16.379,34.015 -84.406,42.203 v 0 l 59.211,-51.019 z"
+ clip-rule="evenodd"
+ id="path360" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath376">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 221.277,-411.98 31.493,-42.21 30.234,22.68 -31.492,42.2 v 0 l 7.558,-41.57 z"
+ clip-rule="evenodd"
+ id="path374" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath390">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 269.148,-388.68 -28.347,-44.09 32.125,-20.16 28.347,44.09 v 0 l -35.906,-22.04 z"
+ clip-rule="evenodd"
+ id="path388" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath404">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 668.504,-391.83 v -52.91 h 37.793 v 52.91 0 l -18.895,-37.79 z"
+ clip-rule="evenodd"
+ id="path402" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath418">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 1093.69,-391.83 v -52.91 h 37.79 v 52.91 0 l -18.89,-37.79 z"
+ clip-rule="evenodd"
+ id="path416" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath432">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 1498.08,-408.84 28.35,-44.09 32.12,20.16 -28.34,44.09 v 0 l 4.41,-42.2 z"
+ clip-rule="evenodd"
+ id="path430" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath446">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 1544.7,-388.68 -28.35,-44.09 32.13,-20.16 28.34,44.09 v 0 l -35.9,-22.04 z"
+ clip-rule="evenodd"
+ id="path444" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath460">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 1944.05,-391.83 v -52.91 h 37.8 v 52.91 0 l -18.9,-37.79 z"
+ clip-rule="evenodd"
+ id="path458" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath474">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 2369.23,-391.83 v -52.91 h 37.8 v 52.91 0 l -18.9,-37.79 z"
+ clip-rule="evenodd"
+ id="path472" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath488">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 2772.37,-411.98 31.5,-42.21 30.23,22.68 -31.49,42.2 v 0 l 7.55,-41.57 z"
+ clip-rule="evenodd"
+ id="path486" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath502">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 2820.24,-388.68 -28.34,-44.09 32.12,-20.16 28.35,44.09 v 0 l -35.91,-22.04 z"
+ clip-rule="evenodd"
+ id="path500" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath516">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 444.891,647.164 482.055,610 l 26.457,26.453 -37.164,37.164 v 0 l 13.855,-40.312 z"
+ clip-rule="evenodd"
+ id="path514" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath530">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 477.645,673.617 440.48,636.453 466.938,610 l 37.164,37.164 v 0 l -39.684,-13.859 z"
+ clip-rule="evenodd"
+ id="path528" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath544">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 870.074,647.164 907.238,610 l 26.453,26.453 -37.164,37.164 v 0 l 13.86,-40.312 z"
+ clip-rule="evenodd"
+ id="path542" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath558">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 902.828,673.617 865.664,636.453 892.117,610 l 37.168,37.164 v 0 l -39.687,-13.859 z"
+ clip-rule="evenodd"
+ id="path556" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath572">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 1295.25,647.164 1332.42,610 l 26.46,26.453 -37.17,37.164 v 0 l 13.86,-40.312 z"
+ clip-rule="evenodd"
+ id="path570" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath586">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 1328.01,673.617 1290.85,636.453 1317.3,610 l 37.16,37.164 v 0 l -39.68,-13.859 z"
+ clip-rule="evenodd"
+ id="path584" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath600">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 1720.44,647.164 1757.6,610 l 26.46,26.453 -37.17,37.164 v 0 l 13.86,-40.312 z"
+ clip-rule="evenodd"
+ id="path598" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath614">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 1753.19,-816.383 -37.16,-37.164 26.45,-26.453 37.17,37.164 v 0 l -39.69,-13.859 z"
+ clip-rule="evenodd"
+ id="path612" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath628">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 2145.62,647.164 2182.79,610 l 26.45,26.453 -37.17,37.164 v 0 l 13.86,-40.312 z"
+ clip-rule="evenodd"
+ id="path626" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath642">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 2178.38,-816.383 -37.17,-37.164 26.46,-26.453 37.16,37.164 v 0 l -39.68,-13.859 z"
+ clip-rule="evenodd"
+ id="path640" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath656">
+ <path
+ d="M 0,1490 V 0 H 3050 V 1490 Z M 2570.8,647.164 2607.97,610 l 26.45,26.453 -37.16,37.164 v 0 l 13.86,-40.312 z"
+ clip-rule="evenodd"
+ id="path654" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath670">
+ <path
+ d="M 0,1490 V 0 h 3050 v 1490 z m 2603.56,-816.383 -37.17,-37.164 26.46,-26.453 37.16,37.164 v 0 l -39.68,-13.859 z"
+ clip-rule="evenodd"
+ id="path668" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="namedview4"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="2.4005425"
+ inkscape:cx="138.30207"
+ inkscape:cy="0.83314502"
+ inkscape:window-width="1920"
+ inkscape:window-height="1127"
+ inkscape:window-x="1920"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g8" />
+ <g
+ id="g8"
+ inkscape:groupmode="layer"
+ inkscape:label="simdag-101"
+ transform="matrix(1.3333333,0,0,-1.3333333,-103.81647,182.3422)">
+ <g
+ id="g220"
+ transform="matrix(0.68033,0,0,0.68033,77.66801,35.78601)">
+ <g
+ id="g222">
+ <g
+ id="g224">
+ <g
+ id="g226">
+ <g
+ id="g228"
+ clip-path="url(#clipPath232)">
+ <g
+ id="g234"
+ transform="scale(0.1)">
+ <path
+ d="m 348.516,955.812 c 0,-55.66 -45.125,-100.781 -100.786,-100.781 -55.66,0 -100.781,45.121 -100.781,100.781 0,55.658 45.121,100.788 100.781,100.788 55.661,0 100.786,-45.13 100.786,-100.788 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path236" />
+ <path
+ d="m 1624.06,955.812 c 0,-55.66 -45.12,-100.781 -100.78,-100.781 -55.66,0 -100.78,45.121 -100.78,100.781 0,55.658 45.12,100.788 100.78,100.788 55.66,0 100.78,-45.13 100.78,-100.788 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path238" />
+ <path
+ d="m 2049.25,955.812 c 0,-55.66 -45.13,-100.781 -100.79,-100.781 -55.66,0 -100.78,45.121 -100.78,100.781 0,55.658 45.12,100.788 100.78,100.788 55.66,0 100.79,-45.13 100.79,-100.788 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path240" />
+ <path
+ d="m 2474.43,955.812 c 0,-55.66 -45.13,-100.781 -100.79,-100.781 -55.66,0 -100.78,45.121 -100.78,100.781 0,55.658 45.12,100.788 100.78,100.788 55.66,0 100.79,-45.13 100.79,-100.788 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path242" />
+ <path
+ d="m 2899.61,955.812 c 0,-55.66 -45.12,-100.781 -100.78,-100.781 -55.66,0 -100.79,45.121 -100.79,100.781 0,55.658 45.13,100.788 100.79,100.788 55.66,0 100.78,-45.13 100.78,-100.788 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path244" />
+ <path
+ d="m 774.328,955.812 c 0,-55.66 -45.125,-100.781 -100.785,-100.781 -55.66,0 -100.781,45.121 -100.781,100.781 0,55.658 45.121,100.788 100.781,100.788 55.66,0 100.785,-45.13 100.785,-100.788 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path246" />
+ <path
+ d="m 1200.77,954.555 c 0,-55.66 -45.13,-100.785 -100.79,-100.785 -55.66,0 -100.777,45.125 -100.777,100.785 0,55.655 45.117,100.785 100.777,100.785 55.66,0 100.79,-45.13 100.79,-100.785 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path248" />
+ <path
+ d="m 575.281,530.633 c 0,-55.66 -45.125,-100.785 -100.785,-100.785 -55.66,0 -100.785,45.125 -100.785,100.785 0,55.66 45.125,100.781 100.785,100.781 55.66,0 100.785,-45.121 100.785,-100.781 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path250" />
+ <path
+ d="m 1425.64,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.78,45.125 -100.78,100.785 0,55.66 45.12,100.781 100.78,100.781 55.66,0 100.78,-45.121 100.78,-100.781 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path252" />
+ <path
+ d="m 1850.83,530.633 c 0,-55.66 -45.13,-100.785 -100.79,-100.785 -55.66,0 -100.78,45.125 -100.78,100.785 0,55.66 45.12,100.781 100.78,100.781 55.66,0 100.79,-45.121 100.79,-100.781 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path254" />
+ <path
+ d="m 2701.19,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.79,45.125 -100.79,100.785 0,55.66 45.13,100.781 100.79,100.781 55.66,0 100.78,-45.121 100.78,-100.781 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path256" />
+ <path
+ d="m 1000.46,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.785,45.125 -100.785,100.785 0,55.66 45.125,100.781 100.785,100.781 55.66,0 100.78,-45.121 100.78,-100.781"
+ style="fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path258" />
+ <path
+ d="m 1000.46,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.785,45.125 -100.785,100.785 0,55.66 45.125,100.781 100.785,100.781 55.66,0 100.78,-45.121 100.78,-100.781 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path260" />
+ <path
+ d="m 1000.46,105.449 c 0,-55.6599 -45.12,-100.78494 -100.78,-100.78494 -55.66,0 -100.785,45.12504 -100.785,100.78494 0,55.66 45.125,100.785 100.785,100.785 55.66,0 100.78,-45.125 100.78,-100.785"
+ style="fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path262" />
+ <path
+ d="m 1000.46,105.449 c 0,-55.6599 -45.12,-100.78494 -100.78,-100.78494 -55.66,0 -100.785,45.12504 -100.785,100.78494 0,55.66 45.125,100.785 100.785,100.785 55.66,0 100.78,-45.125 100.78,-100.785 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path264" />
+ <path
+ d="m 2276.01,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.79,45.125 -100.79,100.785 0,55.66 45.13,100.781 100.79,100.781 55.66,0 100.78,-45.121 100.78,-100.781"
+ style="fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path266" />
+ <path
+ d="m 2276.01,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.79,45.125 -100.79,100.785 0,55.66 45.13,100.781 100.79,100.781 55.66,0 100.78,-45.121 100.78,-100.781 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path268" />
+ <path
+ d="m 2276.01,105.449 c 0,-55.6599 -45.12,-100.78494 -100.78,-100.78494 -55.66,0 -100.79,45.12504 -100.79,100.78494 0,55.66 45.13,100.785 100.79,100.785 55.66,0 100.78,-45.125 100.78,-100.785"
+ style="fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path270" />
+ <path
+ d="m 2276.01,105.449 c 0,-55.6599 -45.12,-100.78494 -100.78,-100.78494 -55.66,0 -100.79,45.12504 -100.79,100.78494 0,55.66 45.13,100.785 100.79,100.785 55.66,0 100.78,-45.125 100.78,-100.785 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path272" />
+ <path
+ d="m 206.789,1381 c 0,-55.66 -45.125,-100.79 -100.785,-100.79 -55.6602,0 -100.78525,45.13 -100.78525,100.79 0,55.66 45.12505,100.78 100.78525,100.78 55.66,0 100.785,-45.12 100.785,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path274" />
+ <path
+ d="m 206.789,1381 c 0,-55.66 -45.125,-100.79 -100.785,-100.79 -55.6602,0 -100.78525,45.13 -100.78525,100.79 0,55.66 45.12505,100.78 100.78525,100.78 55.66,0 100.785,-45.12 100.785,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path276" />
+ <path
+ d="m 490.242,1381 c 0,-55.66 -45.125,-100.79 -100.785,-100.79 -55.66,0 -100.781,45.13 -100.781,100.79 0,55.66 45.121,100.78 100.781,100.78 55.66,0 100.785,-45.12 100.785,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path278" />
+ <path
+ d="m 490.242,1381 c 0,-55.66 -45.125,-100.79 -100.785,-100.79 -55.66,0 -100.781,45.13 -100.781,100.79 0,55.66 45.121,100.78 100.781,100.78 55.66,0 100.785,-45.12 100.785,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path280" />
+ <path
+ d="m 775.586,1379.74 c 0,-55.66 -45.121,-100.79 -100.781,-100.79 -55.66,0 -100.785,45.13 -100.785,100.79 0,55.66 45.125,100.78 100.785,100.78 55.66,0 100.781,-45.12 100.781,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path282" />
+ <path
+ d="m 775.586,1379.74 c 0,-55.66 -45.121,-100.79 -100.781,-100.79 -55.66,0 -100.785,45.13 -100.785,100.79 0,55.66 45.125,100.78 100.785,100.78 55.66,0 100.781,-45.12 100.781,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path284" />
+ <path
+ d="m 1198.88,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.788,45.13 -100.788,100.79 0,55.66 45.128,100.78 100.788,100.78 55.66,0 100.78,-45.12 100.78,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path286" />
+ <path
+ d="m 1198.88,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.788,45.13 -100.788,100.79 0,55.66 45.128,100.78 100.788,100.78 55.66,0 100.78,-45.12 100.78,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path288" />
+ <path
+ d="m 1482.34,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path290" />
+ <path
+ d="m 1482.34,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path292" />
+ <path
+ d="m 1765.79,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.79,45.13 -100.79,100.79 0,55.66 45.13,100.78 100.79,100.78 55.66,0 100.78,-45.12 100.78,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path294" />
+ <path
+ d="m 1765.79,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.79,45.13 -100.79,100.79 0,55.66 45.13,100.78 100.79,100.78 55.66,0 100.78,-45.12 100.78,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path296" />
+ <path
+ d="m 2049.25,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path298" />
+ <path
+ d="m 2049.25,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path300" />
+ <path
+ d="m 2474.43,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path302" />
+ <path
+ d="m 2474.43,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path304" />
+ <path
+ d="m 2757.88,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.78,-45.12 100.78,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path306" />
+ <path
+ d="m 2757.88,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.78,-45.12 100.78,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path308" />
+ <path
+ d="m 3041.34,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path310" />
+ <path
+ d="m 3041.34,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path312" />
+ <g
+ id="g314">
+ <g
+ id="g316"
+ clip-path="url(#clipPath320)">
+ <path
+ d="M 2614.89,431.105 2161.37,204.344"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path322" />
+ </g>
+ </g>
+ <path
+ d="m 2228.77,259.773 -58.58,-51.019 75.58,17.004 -17,34.015"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path324" />
+ <path
+ d="m 2228.77,259.773 -58.58,-51.019 75.58,17.004 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path326" />
+ <g
+ id="g328">
+ <g
+ id="g330"
+ clip-path="url(#clipPath334)">
+ <path
+ d="M 1339.35,431.105 2189.71,204.344"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path336" />
+ </g>
+ </g>
+ <path
+ d="m 2101.53,208.121 78.11,-1.258 -68.66,37.793 -9.45,-36.535"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path338" />
+ <path
+ d="m 2101.53,208.121 78.11,-1.258 -68.66,37.793 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path340" />
+ <g
+ id="g342">
+ <g
+ id="g344"
+ clip-path="url(#clipPath348)">
+ <path
+ d="M 1736.18,431.105 885.82,204.344"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path350" />
+ </g>
+ </g>
+ <path
+ d="m 963.93,244.656 -68.032,-37.793 77.477,1.258 -9.445,36.535"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path352" />
+ <path
+ d="m 963.93,244.656 -68.032,-37.793 77.477,1.258 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path354" />
+ <g
+ id="g356">
+ <g
+ id="g358"
+ clip-path="url(#clipPath362)">
+ <path
+ d="M 460.637,431.105 914.164,204.344"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path364" />
+ </g>
+ </g>
+ <path
+ d="m 829.129,225.758 76.219,-17.004 -59.211,51.019 -17.008,-34.015"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path366" />
+ <path
+ d="m 829.129,225.758 76.219,-17.004 -59.211,51.019 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path368" />
+ <g
+ id="g370">
+ <g
+ id="g372"
+ clip-path="url(#clipPath376)">
+ <path
+ d="M 92.1445,1281.47 262.219,1054.71"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path378" />
+ </g>
+ </g>
+ <path
+ d="m 221.277,1078.02 37.793,-18.9 -7.558,41.57 -30.235,-22.67"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path380" />
+ <path
+ d="m 221.277,1078.02 37.793,-18.9 -7.558,41.57 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path382" />
+ <g
+ id="g384">
+ <g
+ id="g386"
+ clip-path="url(#clipPath390)">
+ <path
+ d="M 403.945,1281.47 262.219,1054.71"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path392" />
+ </g>
+ </g>
+ <path
+ d="m 269.148,1101.32 -3.781,-42.2 35.906,22.04 -32.125,20.16"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path394" />
+ <path
+ d="m 269.148,1101.32 -3.781,-42.2 35.906,22.04 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path396" />
+ <g
+ id="g398">
+ <g
+ id="g400"
+ clip-path="url(#clipPath404)">
+ <path
+ d="M 687.402,1281.47 V 1054.71"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path406" />
+ </g>
+ </g>
+ <path
+ d="m 668.504,1098.17 18.898,-37.79 18.895,37.79 h -37.793"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path408" />
+ <path
+ d="m 668.504,1098.17 18.898,-37.79 18.895,37.79 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path410" />
+ <g
+ id="g412">
+ <g
+ id="g414"
+ clip-path="url(#clipPath418)">
+ <path
+ d="M 1112.59,1281.47 V 1054.71"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path420" />
+ </g>
+ </g>
+ <path
+ d="m 1093.69,1098.17 18.9,-37.79 18.89,37.79 h -37.79"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path422" />
+ <path
+ d="m 1093.69,1098.17 18.9,-37.79 18.89,37.79 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path424" />
+ <g
+ id="g426">
+ <g
+ id="g428"
+ clip-path="url(#clipPath432)">
+ <path
+ d="m 1396.04,1281.47 141.73,-226.76"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path434" />
+ </g>
+ </g>
+ <path
+ d="m 1498.08,1081.16 36.54,-22.04 -4.41,42.2 -32.13,-20.16"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path436" />
+ <path
+ d="m 1498.08,1081.16 36.54,-22.04 -4.41,42.2 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path438" />
+ <g
+ id="g440">
+ <g
+ id="g442"
+ clip-path="url(#clipPath446)">
+ <path
+ d="M 1679.5,1281.47 1537.77,1054.71"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path448" />
+ </g>
+ </g>
+ <path
+ d="m 1544.7,1101.32 -3.78,-42.2 35.9,22.04 -32.12,20.16"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path450" />
+ <path
+ d="m 1544.7,1101.32 -3.78,-42.2 35.9,22.04 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path452" />
+ <g
+ id="g454">
+ <g
+ id="g456"
+ clip-path="url(#clipPath460)">
+ <path
+ d="M 1962.95,1281.47 V 1054.71"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path462" />
+ </g>
+ </g>
+ <path
+ d="m 1944.05,1098.17 18.9,-37.79 18.9,37.79 h -37.8"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path464" />
+ <path
+ d="m 1944.05,1098.17 18.9,-37.79 18.9,37.79 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path466" />
+ <g
+ id="g468">
+ <g
+ id="g470"
+ clip-path="url(#clipPath474)">
+ <path
+ d="M 2388.13,1281.47 V 1054.71"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path476" />
+ </g>
+ </g>
+ <path
+ d="m 2369.23,1098.17 18.9,-37.79 18.9,37.79 h -37.8"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path478" />
+ <path
+ d="m 2369.23,1098.17 18.9,-37.79 18.9,37.79 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path480" />
+ <g
+ id="g482">
+ <g
+ id="g484"
+ clip-path="url(#clipPath488)">
+ <path
+ d="m 2643.24,1281.47 170.07,-226.76"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path490" />
+ </g>
+ </g>
+ <path
+ d="m 2772.37,1078.02 37.79,-18.9 -7.55,41.57 -30.24,-22.67"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path492" />
+ <path
+ d="m 2772.37,1078.02 37.79,-18.9 -7.55,41.57 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path494" />
+ <g
+ id="g496">
+ <g
+ id="g498"
+ clip-path="url(#clipPath502)">
+ <path
+ d="M 2955.04,1281.47 2813.31,1054.71"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path504" />
+ </g>
+ </g>
+ <path
+ d="m 2820.24,1101.32 -3.78,-42.2 35.91,22.04 -32.13,20.16"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path506" />
+ <path
+ d="m 2820.24,1101.32 -3.78,-42.2 35.91,22.04 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path508" />
+ <g
+ id="g510">
+ <g
+ id="g512"
+ clip-path="url(#clipPath516)">
+ <path
+ d="M 262.219,856.289 488.984,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path518" />
+ </g>
+ </g>
+ <path
+ d="m 444.891,647.164 40.312,-13.859 -13.855,40.312 -26.457,-26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path520" />
+ <path
+ d="m 444.891,647.164 40.312,-13.859 -13.855,40.312 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path522" />
+ <g
+ id="g524">
+ <g
+ id="g526"
+ clip-path="url(#clipPath530)">
+ <path
+ d="M 687.402,856.289 460.637,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path532" />
+ </g>
+ </g>
+ <path
+ d="m 477.645,673.617 -13.227,-40.312 39.684,13.859 -26.457,26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path534" />
+ <path
+ d="m 477.645,673.617 -13.227,-40.312 39.684,13.859 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path536" />
+ <g
+ id="g538">
+ <g
+ id="g540"
+ clip-path="url(#clipPath544)">
+ <path
+ d="M 687.402,856.289 914.164,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path546" />
+ </g>
+ </g>
+ <path
+ d="m 870.074,647.164 40.313,-13.859 -13.86,40.312 -26.453,-26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path548" />
+ <path
+ d="m 870.074,647.164 40.313,-13.859 -13.86,40.312 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path550" />
+ <g
+ id="g552">
+ <g
+ id="g554"
+ clip-path="url(#clipPath558)">
+ <path
+ d="M 1112.59,856.289 885.82,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path560" />
+ </g>
+ </g>
+ <path
+ d="m 902.828,673.617 -13.23,-40.312 39.687,13.859 -26.457,26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path562" />
+ <path
+ d="m 902.828,673.617 -13.23,-40.312 39.687,13.859 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path564" />
+ <g
+ id="g566">
+ <g
+ id="g568"
+ clip-path="url(#clipPath572)">
+ <path
+ d="M 1112.59,856.289 1339.35,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path574" />
+ </g>
+ </g>
+ <path
+ d="m 1295.25,647.164 40.32,-13.859 -13.86,40.312 -26.46,-26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path576" />
+ <path
+ d="m 1295.25,647.164 40.32,-13.859 -13.86,40.312 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path578" />
+ <g
+ id="g580">
+ <g
+ id="g582"
+ clip-path="url(#clipPath586)">
+ <path
+ d="M 1537.77,856.289 1311,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path588" />
+ </g>
+ </g>
+ <path
+ d="m 1328.01,673.617 -13.23,-40.312 39.68,13.859 -26.45,26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path590" />
+ <path
+ d="m 1328.01,673.617 -13.23,-40.312 39.68,13.859 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path592" />
+ <g
+ id="g594">
+ <g
+ id="g596"
+ clip-path="url(#clipPath600)">
+ <path
+ d="M 1537.77,856.289 1764.53,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path602" />
+ </g>
+ </g>
+ <path
+ d="m 1720.44,647.164 40.31,-13.859 -13.86,40.312 -26.45,-26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path604" />
+ <path
+ d="m 1720.44,647.164 40.31,-13.859 -13.86,40.312 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path606" />
+ <g
+ id="g608">
+ <g
+ id="g610"
+ clip-path="url(#clipPath614)">
+ <path
+ d="M 1962.95,856.289 1736.18,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path616" />
+ </g>
+ </g>
+ <path
+ d="m 1753.19,673.617 -13.23,-40.312 39.69,13.859 -26.46,26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path618" />
+ <path
+ d="m 1753.19,673.617 -13.23,-40.312 39.69,13.859 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path620" />
+ <g
+ id="g622">
+ <g
+ id="g624"
+ clip-path="url(#clipPath628)">
+ <path
+ d="M 1962.95,856.289 2189.71,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path630" />
+ </g>
+ </g>
+ <path
+ d="m 2145.62,647.164 40.31,-13.859 -13.86,40.312 -26.45,-26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path632" />
+ <path
+ d="m 2145.62,647.164 40.31,-13.859 -13.86,40.312 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path634" />
+ <g
+ id="g636">
+ <g
+ id="g638"
+ clip-path="url(#clipPath642)">
+ <path
+ d="M 2388.13,856.289 2161.37,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path644" />
+ </g>
+ </g>
+ <path
+ d="m 2178.38,673.617 -13.23,-40.312 39.68,13.859 -26.45,26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path646" />
+ <path
+ d="m 2178.38,673.617 -13.23,-40.312 39.68,13.859 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path648" />
+ <g
+ id="g650">
+ <g
+ id="g652"
+ clip-path="url(#clipPath656)">
+ <path
+ d="M 2388.13,856.289 2614.89,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path658" />
+ </g>
+ </g>
+ <path
+ d="m 2570.8,647.164 40.32,-13.859 -13.86,40.312 -26.46,-26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path660" />
+ <path
+ d="m 2570.8,647.164 40.32,-13.859 -13.86,40.312 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path662" />
+ <g
+ id="g664">
+ <g
+ id="g666"
+ clip-path="url(#clipPath670)">
+ <path
+ d="M 2813.31,856.289 2586.55,629.527"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path672" />
+ </g>
+ </g>
+ <path
+ d="m 2603.56,673.617 -13.23,-40.312 39.68,13.859 -26.45,26.453"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path674" />
+ <path
+ d="m 2603.56,673.617 -13.23,-40.312 39.68,13.859 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path676" />
+ <g
+ id="g678"
+ transform="scale(10)">
+ <text
+ xml:space="preserve"
+ transform="matrix(1,0,0,-1,9.21445,133.816)"
+ style="font-variant:normal;font-weight:normal;font-size:11.3382px;font-family:Times;-inkscape-font-specification:Times-Roman;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="text688"><tspan
+ x="0 28.345726 56.691002 99.209366 127.55509 155.90036 184.24609 226.76401 255.10973 277.78589 283.45499"
+ y="0"
+ sodipodi:role="line"
+ id="tspan680">12345678910</tspan><tspan
+ x="8.5039101 14.17301 51.02182 56.690918 93.540184 99.209282 136.05855 141.72765 178.5769 184.24602 221.09494 226.76404 263.61331 269.28241"
+ y="42.518398"
+ sodipodi:role="line"
+ id="tspan682">11121314151617</tspan><tspan
+ x="31.180111 36.849209 73.698471 79.367577 119.05116 124.72026 161.56952 167.23862 204.08789 209.75699 246.60579 252.2749"
+ y="85.036797"
+ sodipodi:role="line"
+ id="tspan684">181920212223</tspan><tspan
+ x="201.25311 206.92221 73.698112 79.36721"
+ y="127.5548"
+ sodipodi:role="line"
+ id="tspan686">2524</tspan></text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ version="1.1"
+ id="svg2"
+ width="63.57653"
+ height="70.614357"
+ viewBox="0 0 63.576531 70.614358"
+ sodipodi:docname="simdag-101.pdf"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs6">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath162">
+ <path
+ d="M 0,0 H 130 V 144 H 0 Z"
+ id="path160" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath176">
+ <path
+ d="M 0,1440 V 0 h 1300 v 1440 z m 307.016,-526.48 59.211,-74.329 29.605,23.934 -59.211,74.328 v 0 l 32.754,-71.176 z"
+ clip-rule="evenodd"
+ id="path174" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath190">
+ <path
+ d="M 0,1440 V 0 h 1300 v 1440 z m 558.977,-1097.172 63.617,-71.176 28.347,25.196 -63.621,71.175 v 0 l 36.535,-69.289 z"
+ clip-rule="evenodd"
+ id="path188" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath204">
+ <path
+ d="M 0,1440 V 0 h 1300 v 1440 z m 658.5,-1065.047 -49.133,-81.887 32.754,-19.527 48.504,81.887 v 0 l -54.801,-55.43 z"
+ clip-rule="evenodd"
+ id="path202" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="namedview4"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false" />
+ <g
+ id="g8"
+ inkscape:groupmode="layer"
+ inkscape:label="simdag-101"
+ transform="matrix(1.3333333,0,0,-1.3333333,-355.80477,212.98189)">
+ <g
+ id="g150"
+ transform="matrix(0.37244,0,0,0.37244,266.67401,106.57601)">
+ <g
+ id="g152">
+ <g
+ id="g154">
+ <g
+ id="g156">
+ <g
+ id="g158"
+ clip-path="url(#clipPath162)">
+ <g
+ id="g164"
+ transform="scale(0.1)">
+ <path
+ d="m 517.402,716.359 c 0,-78.273 -63.453,-141.726 -141.726,-141.726 -78.274,0 -141.731,63.453 -141.731,141.726 0,78.274 63.457,141.727 141.731,141.727 78.273,0 141.726,-63.453 141.726,-141.727"
+ style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path166" />
+ <path
+ d="m 517.402,716.359 c 0,-78.273 -63.453,-141.726 -141.726,-141.726 -78.274,0 -141.731,63.453 -141.731,141.726 0,78.274 63.457,141.727 141.731,141.727 78.273,0 141.726,-63.453 141.726,-141.727 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path168" />
+ <g
+ id="g170">
+ <g
+ id="g172"
+ clip-path="url(#clipPath176)">
+ <path
+ d="M 148.91,1141.54 375.676,858.086"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path178" />
+ </g>
+ </g>
+ <path
+ d="m 307.016,913.52 62.359,-47.243 -32.754,71.176 -29.605,-23.933"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path180" />
+ <path
+ d="m 307.016,913.52 62.359,-47.243 -32.754,71.176 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path182" />
+ <g
+ id="g184">
+ <g
+ id="g186"
+ clip-path="url(#clipPath190)">
+ <path
+ d="M 375.676,574.633 630.785,291.176"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path192" />
+ </g>
+ </g>
+ <path
+ d="m 558.977,342.828 64.878,-44.094 -36.535,69.289 -28.343,-25.195"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path194" />
+ <path
+ d="m 558.977,342.828 64.878,-44.094 -36.535,69.289 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path196" />
+ <g
+ id="g198">
+ <g
+ id="g200"
+ clip-path="url(#clipPath204)">
+ <path
+ d="M 1141,1141.54 630.785,291.176"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path206" />
+ </g>
+ </g>
+ <path
+ d="m 658.5,374.953 -22.676,-74.957 54.801,55.43 -32.125,19.527"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path208" />
+ <path
+ d="m 658.5,374.953 -22.676,-74.957 54.801,55.43 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path210" />
+ <path
+ d="m 7.18359,1141.54 h 283.453 v 283.453 H 7.18359 Z"
+ style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path212" />
+ <path
+ d="m 7.18359,1141.54 h 283.453 v 283.453 H 7.18359 Z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path214" />
+ <path
+ d="m 999.273,1141.54 h 283.457 v 283.453 H 999.273 Z"
+ style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path216" />
+ <path
+ d="m 999.273,1141.54 h 283.457 v 283.453 H 999.273 Z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path218" />
+ <path
+ d="m 489.055,7.72266 h 283.457 v 283.453 H 489.055 Z"
+ style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path220" />
+ <path
+ d="m 489.055,7.72266 h 283.457 v 283.453 H 489.055 Z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path222" />
+ <g
+ id="g224"
+ transform="scale(10)">
+ <text
+ xml:space="preserve"
+ transform="matrix(1,0,0,-1,31.8984,65.9668)"
+ style="font-variant:normal;font-weight:bold;font-size:13.2279px;font-family:Times;-inkscape-font-specification:Times-Bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="text232"><tspan
+ x="0 4.4048905"
+ y="0"
+ sodipodi:role="line"
+ id="tspan226">t1</tspan><tspan
+ x="-22.6766 -16.803411 76.532784 82.405968"
+ y="-56.691002"
+ sodipodi:role="line"
+ id="tspan228">c1c2</tspan><tspan
+ x="25.5109 31.384089"
+ y="56.691002"
+ sodipodi:role="line"
+ id="tspan230">c3</tspan></text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ version="1.1"
+ id="svg2"
+ width="63.701672"
+ height="183.22269"
+ viewBox="0 0 63.701672 183.22269"
+ sodipodi:docname="simdag-101.pdf"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs6">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath182">
+ <path
+ d="M 0,0 H 130 V 371 H 0 Z"
+ id="path180" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath196">
+ <path
+ d="M 0,3710 V 0 h 1300 v 3710 z m 307.016,-1662.48 59.211,-74.33 29.605,23.93 -59.211,74.33 v 0 l 32.754,-71.17 z"
+ clip-rule="evenodd"
+ id="path194" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath210">
+ <path
+ d="M 0,3710 V 0 h 1300 v 3710 z m 558.977,-2233.17 63.617,-71.18 28.347,25.2 -63.621,71.17 v 0 l 36.535,-69.29 z"
+ clip-rule="evenodd"
+ id="path208" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath224">
+ <path
+ d="M 0,3710 V 0 h 1300 v 3710 z m 658.5,-2201.05 -49.133,-81.88 32.754,-19.53 48.504,81.89 v 0 L 635.824,1434 Z"
+ clip-rule="evenodd"
+ id="path222" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath272">
+ <path
+ d="M 0,3710 V 0 H 1300 V 3710 Z M 611.887,377.023 V 281.91 h 37.793 v 95.113 0 l -18.895,-75.585 z"
+ clip-rule="evenodd"
+ id="path270" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath286">
+ <path
+ d="M 0,3710 V 0 h 1300 v 3710 z m 1057.23,-557.01 81.88,-47.87 19.53,32.76 -82.52,47.87 v 0 l 56.06,-54.8 z"
+ clip-rule="evenodd"
+ id="path284" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath300">
+ <path
+ d="M 0,3710 V 0 h 1300 v 3710 z m 214.418,-525.51 -83.145,-46.61 18.266,-32.76 83.149,46.61 v 0 l -74.958,-20.78 z"
+ clip-rule="evenodd"
+ id="path298" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath322">
+ <path
+ d="M 0,3710 V 0 H 1300 V 3710 Z M 611.887,943.934 V 848.82 h 37.793 v 95.114 0 l -18.895,-75.586 z"
+ clip-rule="evenodd"
+ id="path320" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath336">
+ <path
+ d="M 0,3710 V 0 H 1300 V 3710 Z M 1122.11,2644.66 v -95.11 h 37.79 v 95.11 0 l -18.9,-75.59 z"
+ clip-rule="evenodd"
+ id="path334" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath350">
+ <path
+ d="M 0,3710 V 0 H 1300 V 3710 Z M 130.012,2644.66 v -95.11 h 37.797 v 95.11 0 l -18.899,-75.59 z"
+ clip-rule="evenodd"
+ id="path348" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="namedview4"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false" />
+ <g
+ id="g8"
+ inkscape:groupmode="layer"
+ inkscape:label="simdag-101"
+ transform="matrix(1.3333333,0,0,-1.3333333,-355.80477,267.77649)">
+ <g
+ id="g170"
+ transform="matrix(0.37244,0,0,0.37244,266.67401,63.20901)">
+ <g
+ id="g172">
+ <g
+ id="g174">
+ <g
+ id="g176">
+ <g
+ id="g178"
+ clip-path="url(#clipPath182)">
+ <g
+ id="g184"
+ transform="scale(0.1)">
+ <path
+ d="m 517.402,1850.36 c 0,-78.27 -63.453,-141.73 -141.726,-141.73 -78.274,0 -141.731,63.46 -141.731,141.73 0,78.27 63.457,141.73 141.731,141.73 78.273,0 141.726,-63.46 141.726,-141.73"
+ style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path186" />
+ <path
+ d="m 517.402,1850.36 c 0,-78.27 -63.453,-141.73 -141.726,-141.73 -78.274,0 -141.731,63.46 -141.731,141.73 0,78.27 63.457,141.73 141.731,141.73 78.273,0 141.726,-63.46 141.726,-141.73 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path188" />
+ <g
+ id="g190">
+ <g
+ id="g192"
+ clip-path="url(#clipPath196)">
+ <path
+ d="M 148.91,2275.54 375.676,1992.09"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path198" />
+ </g>
+ </g>
+ <path
+ d="m 307.016,2047.52 62.359,-47.24 -32.754,71.17 -29.605,-23.93"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path200" />
+ <path
+ d="m 307.016,2047.52 62.359,-47.24 -32.754,71.17 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path202" />
+ <g
+ id="g204">
+ <g
+ id="g206"
+ clip-path="url(#clipPath210)">
+ <path
+ d="M 375.676,1708.63 630.785,1425.18"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path212" />
+ </g>
+ </g>
+ <path
+ d="m 558.977,1476.83 64.878,-44.1 -36.535,69.29 -28.343,-25.19"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path214" />
+ <path
+ d="m 558.977,1476.83 64.878,-44.1 -36.535,69.29 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path216" />
+ <g
+ id="g218">
+ <g
+ id="g220"
+ clip-path="url(#clipPath224)">
+ <path
+ d="M 1141,2275.54 630.785,1425.18"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path226" />
+ </g>
+ </g>
+ <path
+ d="m 658.5,1508.95 -22.676,-74.95 54.801,55.43 -32.125,19.52"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path228" />
+ <path
+ d="m 658.5,1508.95 -22.676,-74.95 54.801,55.43 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path230" />
+ <path
+ d="m 7.18359,2275.54 h 283.453 v 283.453 H 7.18359 Z"
+ style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path232" />
+ <path
+ d="m 7.18359,2275.54 h 283.453 v 283.453 H 7.18359 Z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path234" />
+ <path
+ d="m 999.273,2275.54 h 283.457 v 283.453 H 999.273 Z"
+ style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path236" />
+ <path
+ d="m 999.273,2275.54 h 283.457 v 283.453 H 999.273 Z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path238" />
+ <path
+ d="m 489.055,1141.72 h 283.457 v 283.453 H 489.055 Z"
+ style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path240" />
+ <path
+ d="m 489.055,1141.72 h 283.457 v 283.453 H 489.055 Z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path242" />
+ <g
+ id="g244"
+ transform="scale(10)">
+ <text
+ xml:space="preserve"
+ transform="matrix(1,0,0,-1,31.8984,179.367)"
+ style="font-variant:normal;font-weight:bold;font-size:13.2279px;font-family:Times;-inkscape-font-specification:Times-Bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="text252"><tspan
+ x="0 4.4048905"
+ y="0"
+ sodipodi:role="line"
+ id="tspan246">t1</tspan><tspan
+ x="-22.6766 -16.803411 76.532784 82.405968"
+ y="-56.691002"
+ sodipodi:role="line"
+ id="tspan248">c1c2</tspan><tspan
+ x="25.5109 31.384089"
+ y="56.691002"
+ sodipodi:role="line"
+ id="tspan250">c3</tspan></text>
+ </g>
+ <path
+ d="m 768.73,714.02 c 0,-78.274 -63.453,-141.727 -141.726,-141.727 -78.274,0 -141.727,63.453 -141.727,141.727 0,78.273 63.453,141.726 141.727,141.726 78.273,0 141.726,-63.453 141.726,-141.726"
+ style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path254" />
+ <path
+ d="m 768.73,714.02 c 0,-78.274 -63.453,-141.727 -141.726,-141.727 -78.274,0 -141.727,63.453 -141.727,141.727 0,78.273 63.453,141.726 141.727,141.726 78.273,0 141.726,-63.453 141.726,-141.726 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path256" />
+ <path
+ d="m 1285.25,2983.55 c 0,-78.27 -63.45,-141.73 -141.73,-141.73 -78.27,0 -141.73,63.46 -141.73,141.73 0,78.27 63.46,141.73 141.73,141.73 78.28,0 141.73,-63.46 141.73,-141.73"
+ style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path258" />
+ <path
+ d="m 1285.25,2983.55 c 0,-78.27 -63.45,-141.73 -141.73,-141.73 -78.27,0 -141.73,63.46 -141.73,141.73 0,78.27 63.46,141.73 141.73,141.73 78.28,0 141.73,-63.46 141.73,-141.73 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path260" />
+ <path
+ d="m 290.637,2984.18 c 0,-78.27 -63.453,-141.73 -141.727,-141.73 -78.2733,0 -141.72641,63.46 -141.72641,141.73 0,78.27 63.45311,141.73 141.72641,141.73 78.274,0 141.727,-63.46 141.727,-141.73"
+ style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path262" />
+ <path
+ d="m 290.637,2984.18 c 0,-78.27 -63.453,-141.73 -141.727,-141.73 -78.2733,0 -141.72641,63.46 -141.72641,141.73 0,78.27 63.45311,141.73 141.72641,141.73 78.274,0 141.727,-63.46 141.727,-141.73 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path264" />
+ <g
+ id="g266">
+ <g
+ id="g268"
+ clip-path="url(#clipPath272)">
+ <path
+ d="M 630.785,574.812 V 291.355"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path274" />
+ </g>
+ </g>
+ <path
+ d="m 611.887,377.023 18.898,-75.585 18.895,75.585 h -37.793"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path276" />
+ <path
+ d="m 611.887,377.023 18.898,-75.585 18.895,75.585 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path278" />
+ <g
+ id="g280">
+ <g
+ id="g282"
+ clip-path="url(#clipPath286)">
+ <path
+ d="M 659.129,3409.36 1141,3125.91"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path288" />
+ </g>
+ </g>
+ <path
+ d="m 1057.23,3152.99 74.95,-22.04 -56.06,54.8 -18.89,-32.76"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path290" />
+ <path
+ d="m 1057.23,3152.99 74.95,-22.04 -56.06,54.8 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path292" />
+ <g
+ id="g294">
+ <g
+ id="g296"
+ clip-path="url(#clipPath300)">
+ <path
+ d="M 659.129,3409.36 148.91,3125.91"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path302" />
+ </g>
+ </g>
+ <path
+ d="m 214.418,3184.49 -56.688,-53.54 74.958,20.78 -18.27,32.76"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path304" />
+ <path
+ d="m 214.418,3184.49 -56.688,-53.54 74.958,20.78 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path306" />
+ <path
+ d="m 498.504,3692.82 v 0 c -36.527,0 -66.141,-29.62 -66.141,-66.14 V 3475.5 c 0,-36.52 29.614,-66.14 66.141,-66.14 h 292.902 c 36.528,0 66.141,29.62 66.141,66.14 v 151.18 c 0,36.52 -29.613,66.14 -66.141,66.14"
+ style="fill:#ffff80;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path308" />
+ <path
+ d="m 498.504,3692.82 v 0 c -36.527,0 -66.141,-29.62 -66.141,-66.14 V 3475.5 c 0,-36.52 29.614,-66.14 66.141,-66.14 h 292.902 c 36.528,0 66.141,29.62 66.141,66.14 v 151.18 c 0,36.52 -29.613,66.14 -66.141,66.14 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path310" />
+ <path
+ d="m 498.504,291.355 v 0 c -36.527,0 -66.141,-29.613 -66.141,-66.136 V 74.043 c 0,-36.5274 29.614,-66.14066 66.141,-66.14066 h 292.902 c 36.528,0 66.141,29.61326 66.141,66.14066 v 151.176 c 0,36.523 -29.613,66.136 -66.141,66.136"
+ style="fill:#ffff80;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path312" />
+ <path
+ d="m 498.504,291.355 v 0 c -36.527,0 -66.141,-29.613 -66.141,-66.136 V 74.043 c 0,-36.5274 29.614,-66.14066 66.141,-66.14066 h 292.902 c 36.528,0 66.141,29.61326 66.141,66.14066 v 151.176 c 0,36.523 -29.613,66.136 -66.141,66.136 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path314" />
+ <g
+ id="g316">
+ <g
+ id="g318"
+ clip-path="url(#clipPath322)">
+ <path
+ d="M 630.785,1141.72 V 858.266"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path324" />
+ </g>
+ </g>
+ <path
+ d="m 611.887,943.934 18.898,-75.586 18.895,75.586 h -37.793"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path326" />
+ <path
+ d="m 611.887,943.934 18.898,-75.586 18.895,75.586 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path328" />
+ <g
+ id="g330">
+ <g
+ id="g332"
+ clip-path="url(#clipPath336)">
+ <path
+ d="M 1141,2842.45 V 2559"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path338" />
+ </g>
+ </g>
+ <path
+ d="m 1122.11,2644.66 18.89,-75.59 18.9,75.59 h -37.79"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path340" />
+ <path
+ d="m 1122.11,2644.66 18.89,-75.59 18.9,75.59 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path342" />
+ <g
+ id="g344">
+ <g
+ id="g346"
+ clip-path="url(#clipPath350)">
+ <path
+ d="M 148.91,2842.45 V 2559"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path352" />
+ </g>
+ </g>
+ <path
+ d="m 130.012,2644.66 18.898,-75.59 18.899,75.59 h -37.797"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path354" />
+ <path
+ d="m 130.012,2644.66 18.898,-75.59 18.899,75.59 z"
+ style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path356" />
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<adag xmlns="http://pegasus.isi.edu/schema/DAX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://pegasus.isi.edu/schema/DAX http://pegasus.isi.edu/schema/dax-2.1.xsd"
+ version="2.1">
+ <job id="1" name="c1" runtime="10">
+ <uses file="i1" link="input" register="true" transfer="true" optional="false" type="data" size="2e8"/>
+ <uses file="o1" link="output" register="true" transfer="true" optional="false" type="data" size="5e8"/>
+ </job>
+ <job id="2" name="c2" runtime="50">
+ <uses file="i2" link="input" register="true" transfer="true" optional="false" type="data" size="1e8"/>
+ </job>
+ <job id="3" name="c3" runtime="20">
+ <uses file="o1" link="input" register="true" transfer="true" optional="false" type="data" size="5e8"/>
+ <uses file="o3" link="output" register="true" transfer="true" optional="false" type="data" size="2e8"/>
+ </job>
+ <child ref="3">
+ <parent ref="1"/>
+ <parent ref="2"/>
+ </child>
+</adag>
--- /dev/null
+digraph G {
+ c1 [size="1e9"];
+ c2 [size="5e9"];
+ c3 [size="2e9"];
+ root->c1 [size="2e8"];
+ root->c2 [size="1e8"];
+ c1->c3 [size="5e8"];
+ c2->c3 [size="-1."];
+ c3->end [size="2e8"];
+}
--- /dev/null
+{
+ "name": "simple_json",
+ "schemaVersion": "1.0",
+ "workflow": {
+ "makespan": 0,
+ "executedAt": "2023-03-09T00:00:00-00:00",
+ "tasks": [
+ {
+ "name": "c1",
+ "type": "compute",
+ "parents": [],
+ "runtime": 1e9,
+ "machine": "Tremblay"
+ },
+ {
+ "name": "t1",
+ "type": "transfer",
+ "parents": ["c1"],
+ "bytesWritten": 5e8,
+ "machine": "Jupiter"
+ },
+ {
+ "name": "c2",
+ "type": "compute",
+ "parents": [],
+ "runtime": 5e9,
+ "machine": "Jupiter"
+ },
+ {
+ "name": "c3",
+ "type": "compute",
+ "parents": ["t1","c2"],
+ "runtime": 2e9,
+ "machine": "Jupiter"
+ }
+ ],
+ "machines": [
+ {"nodeName": "Tremblay"},
+ {"nodeName": "Jupiter"}
+ ]
+ }
+}
\ No newline at end of file
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "https://simgrid.org/simgrid.dtd">
+<platform version="4.1">
+ <zone id="zone0" routing="Full">
+ <host id="Tremblay" speed="98.095Mf"/>
+ <host id="Jupiter" speed="76.296Mf"/>
+ <host id="Fafard" speed="76.296Mf"/>
+ <host id="Ginette" speed="48.492Mf"/>
+ <host id="Bourassa" speed="48.492Mf"/>
+ <host id="Jacquelin" speed="137.333Mf"/>
+ <host id="Boivin" speed="98.095Mf"/>
+
+ <link id="6" bandwidth="41.279125MBps" latency="59.904us"/>
+ <link id="3" bandwidth="34.285625MBps" latency="514.433us"/>
+ <link id="7" bandwidth="11.618875MBps" latency="189.98us"/>
+ <link id="9" bandwidth="7.20975MBps" latency="1.461517ms"/>
+ <link id="2" bandwidth="118.6825MBps" latency="136.931us"/>
+ <link id="8" bandwidth="8.158MBps" latency="270.544us"/>
+ <link id="1" bandwidth="34.285625MBps" latency="514.433us"/>
+ <link id="4" bandwidth="10.099625MBps" latency="479.78us"/>
+ <link id="0" bandwidth="41.279125MBps" latency="59.904us"/>
+ <link id="5" bandwidth="27.94625MBps" latency="278.066us"/>
+ <link id="145" bandwidth="2.583375MBps" latency="410.463us"/>
+ <link id="10" bandwidth="34.285625MBps" latency="514.433us"/>
+ <link id="11" bandwidth="118.6825MBps" latency="136.931us"/>
+ <link id="16" bandwidth="34.285625MBps" latency="514.433us"/>
+ <link id="17" bandwidth="118.6825MBps" latency="136.931us"/>
+ <link id="44" bandwidth="10.314625MBps" latency="6.932556ms"/>
+ <link id="47" bandwidth="10.314625MBps" latency="6.932556ms"/>
+ <link id="54" bandwidth="15.376875MBps" latency="35.083019ms"/>
+ <link id="56" bandwidth="21.41475MBps" latency="29.5890617ms"/>
+ <link id="59" bandwidth="11.845375MBps" latency="370.788us"/>
+ <link id="78" bandwidth="27.94625MBps" latency="278.066us"/>
+ <link id="79" bandwidth="8.42725MBps" latency="156.056us"/>
+ <link id="80" bandwidth="15.376875MBps" latency="35.083019ms"/>
+ <link id="loopback" bandwidth="498MBps" latency="15us" sharing_policy="FATPIPE"/>
+
+ <route src="Tremblay" dst="Tremblay">
+ <link_ctn id="loopback"/>
+ </route>
+ <route src="Jupiter" dst="Jupiter">
+ <link_ctn id="loopback"/>
+ </route>
+ <route src="Fafard" dst="Fafard">
+ <link_ctn id="loopback"/>
+ </route>
+ <route src="Ginette" dst="Ginette">
+ <link_ctn id="loopback"/>
+ </route>
+ <route src="Bourassa" dst="Bourassa">
+ <link_ctn id="loopback"/>
+ </route>
+ <route src="Tremblay" dst="Jupiter">
+ <link_ctn id="9"/>
+ </route>
+ <route src="Tremblay" dst="Fafard">
+ <link_ctn id="4"/>
+ <link_ctn id="3"/>
+ <link_ctn id="2"/>
+ <link_ctn id="0"/>
+ <link_ctn id="1"/>
+ <link_ctn id="8"/>
+ </route>
+ <route src="Tremblay" dst="Ginette">
+ <link_ctn id="4"/>
+ <link_ctn id="3"/>
+ <link_ctn id="5"/>
+ </route>
+ <route src="Tremblay" dst="Bourassa">
+ <link_ctn id="4"/>
+ <link_ctn id="3"/>
+ <link_ctn id="2"/>
+ <link_ctn id="0"/>
+ <link_ctn id="1"/>
+ <link_ctn id="6"/>
+ <link_ctn id="7"/>
+ </route>
+ <route src="Jupiter" dst="Fafard">
+ <link_ctn id="9"/>
+ <link_ctn id="4"/>
+ <link_ctn id="3"/>
+ <link_ctn id="2"/>
+ <link_ctn id="0"/>
+ <link_ctn id="1"/>
+ <link_ctn id="8"/>
+ </route>
+ <route src="Jupiter" dst="Bourassa">
+ <link_ctn id="9"/>
+ <link_ctn id="4"/>
+ <link_ctn id="3"/>
+ <link_ctn id="2"/>
+ <link_ctn id="0"/>
+ <link_ctn id="1"/>
+ <link_ctn id="6"/>
+ <link_ctn id="7"/>
+ </route>
+ <route src="Fafard" dst="Ginette">
+ <link_ctn id="8"/>
+ <link_ctn id="1"/>
+ <link_ctn id="0"/>
+ <link_ctn id="2"/>
+ <link_ctn id="5"/>
+ </route>
+ <route src="Jupiter" dst="Jacquelin">
+ <link_ctn id="145"/>
+ </route>
+ <route src="Jupiter" dst="Boivin">
+ <link_ctn id="47"/>
+ </route>
+ <route src="Jupiter" dst="Ginette">
+ <link_ctn id="9"/>
+ <link_ctn id="4"/>
+ <link_ctn id="3"/>
+ <link_ctn id="5"/>
+ </route>
+ <route src="Fafard" dst="Bourassa">
+ <link_ctn id="8"/>
+ <link_ctn id="6"/>
+ <link_ctn id="7"/>
+ </route>
+ <route src="Ginette" dst="Bourassa">
+ <link_ctn id="5"/>
+ <link_ctn id="2"/>
+ <link_ctn id="0"/>
+ <link_ctn id="1"/>
+ <link_ctn id="6"/>
+ <link_ctn id="7"/>
+ </route>
+ <route src="Ginette" dst="Jacquelin">
+ <link_ctn id="145"/>
+ </route>
+ <route src="Ginette" dst="Boivin">
+ <link_ctn id="47"/>
+ </route>
+ <route src="Bourassa" dst="Jacquelin">
+ <link_ctn id="145"/>
+ </route>
+ <route src="Bourassa" dst="Boivin">
+ <link_ctn id="47"/>
+ </route>
+ <route src="Jacquelin" dst="Boivin">
+ <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="Fafard">
+ <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"/>
+ </route>
+ <route src="Jacquelin" dst="Tremblay">
+ <link_ctn id="145"/>
+ <link_ctn id="59"/>
+ <link_ctn id="56"/>
+ <link_ctn id="54"/>
+ <link_ctn id="2"/>
+ <link_ctn id="3"/>
+ </route>
+ <route src="Boivin" dst="Tremblay">
+ <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"/>
+ </route>
+ <route src="Boivin" dst="Fafard">
+ <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"/>
+ </route>
+ </zone>
+</platform>
friend kernel::activity::ActivityImpl;
friend std::vector<ActivityPtr> create_DAG_from_dot(const std::string& filename);
friend std::vector<ActivityPtr> create_DAG_from_DAX(const std::string& filename);
+ friend std::vector<ActivityPtr> create_DAG_from_json(const std::string& filename);
#endif
public:
std::vector<ActivityPtr> create_DAG_from_dot(const std::string& filename);
std::vector<ActivityPtr> create_DAG_from_DAX(const std::string& filename);
+std::vector<ActivityPtr> create_DAG_from_json(const std::string& filename);
#ifndef DOXYGEN /* Internal use only, no need to expose it */
template <class T>
#include "src/internal_config.h"
#include <algorithm>
#include <map>
+#include <fstream>
+#include <simgrid/s4u/Host.hpp>
#include <simgrid/s4u/Comm.hpp>
#include <simgrid/s4u/Engine.hpp>
#include <simgrid/s4u/Exec.hpp>
#include "dax_dtd.h"
#include "dax_dtd.c"
+#include <nlohmann/json.hpp>
+
#if HAVE_GRAPHVIZ
#include <graphviz/cgraph.h>
#endif
static std::map<std::string, Comm*, std::less<>> files;
static ExecPtr current_job;
+/** @brief loads a JSON file describing a DAG
+ *
+ * See https://github.com/wfcommons/wfformat for more details.
+ */
+std::vector<ActivityPtr> create_DAG_from_json(const std::string& filename)
+{
+ std::ifstream f(filename);
+ auto data = nlohmann::json::parse(f);
+ std::vector<ActivityPtr> dag = {};
+ std::map<std::string, std::vector<ActivityPtr>> successors = {};
+ std::map<ActivityPtr, Host*> comms_destinations = {};
+ ActivityPtr current;
+
+ for (auto const& task: data["workflow"]["tasks"]) {
+ if (task["type"] == "compute") {
+ current = Exec::init()->set_name(task["name"])->set_flops_amount(task["runtime"]);
+ if (task.contains("machine"))
+ dynamic_cast<Exec*>(current.get())->set_host(simgrid::s4u::Engine::get_instance()->host_by_name(task["machine"]));
+ }
+ else if (task["type"] == "transfer"){
+ current = Comm::sendto_init()->set_name(task["name"])->set_payload_size(task["bytesWritten"]);
+ if (task.contains("machine"))
+ comms_destinations[current] = simgrid::s4u::Engine::get_instance()->host_by_name(task["machine"]);
+ if (task["parents"].size() == 1) {
+ ActivityPtr parent_activity;
+ for (auto const& activity: dag) {
+ if (activity->get_name() == task["parents"][0]) {
+ parent_activity = activity;
+ break;
+ }
+ }
+ if (dynamic_cast<Exec*>(parent_activity.get()) != nullptr)
+ dynamic_cast<Comm*>(current.get())->set_source(dynamic_cast<Exec*>(parent_activity.get())->get_host());
+ else if (dynamic_cast<Comm*>(parent_activity.get()) != nullptr)
+ dynamic_cast<Comm*>(current.get())->set_source(dynamic_cast<Comm*>(parent_activity.get())->get_destination());
+ }
+ }
+ else
+ XBT_DEBUG("Task type \"%s\" not supported.", task["type"]);
+
+ dag.push_back(current);
+ for (auto const& parent: task["parents"]) {
+ auto it = successors.find(parent);
+ if (it == successors.end())
+ successors[parent] = {};
+ successors[parent].push_back(current);
+ }
+ }
+ // Assign successors
+ for (auto const& [parent, successors_list] : successors)
+ for (auto const& activity: dag)
+ if (activity->get_name() == parent) {
+ for (auto const& successor: successors_list)
+ activity->add_successor(successor);
+ break;
+ }
+ // Assign destinations of Comms (if done before successors are assigned there is a bug)
+ for (auto const& [comm, destination]: comms_destinations)
+ dynamic_cast<Comm*>(comm.get())->set_destination(destination);
+
+ // Start only Activities with dependencies solved
+ for (auto const& activity: dag) {
+ if (dynamic_cast<Exec*>(activity.get()) != nullptr and activity->dependencies_solved())
+ activity->start();
+ }
+ return dag;
+}
+
/** @brief loads a DAX file describing a DAG
*
* See https://confluence.pegasus.isi.edu/display/pegasus/WorkflowGenerator for more details.