浏览代码

Every event name in the statechart gets a unique integer ID. This avoids string comparisons and enables us to represent sets of enabled events as bitmaps.
The generated event trigger of after-transitions is unique for the transition and no longer changes when its after-event is scheduled. Instead, each after-event has a single ever-incrementing integer parameter, checked by the after-transition's guard.

Joeri Exelmans 5 年之前
父节点
当前提交
e7fad50fbd

+ 20 - 5
src/sccd/runtime/controller.py

@@ -7,6 +7,13 @@ from sccd.runtime.object_manager import ObjectManager
 from sccd.runtime.infinity import INFINITY
 from sccd.runtime.debug import print_debug
 
+@dataclasses.dataclass
+class InputEvent:
+  name: str
+  port: str
+  parameters: List[Any]
+  time_offset: Timestamp
+
 # The Controller class is a primitive that can be used to build backends of any kind:
 # Threads, integration with existing event loop, game loop, test framework, ...
 # The Controller class itself is NOT thread-safe.
@@ -27,17 +34,25 @@ class Controller:
 
     # time_offset: the offset relative to the current simulated time
     # (the timestamp given in the last call to run_until)
-    def add_input(self, event: Event, time_offset = 0):
-            if event.name == "":
+    def add_input(self, input: InputEvent):
+            if input.name == "":
                 raise Exception("Input event can't have an empty name.")
         
-            if event.port not in self.model.inports:
-                raise Exception("No such port: '" + event.port + "'")
+            if input.port not in self.model.inports:
+                raise Exception("No such port: '" + input.port + "'")
+
+
+            e = Event(
+                id=self.model.event_namespace.get_id(input.name),
+                name=input.name,
+                port=input.port,
+                parameters=input.parameters)
 
             # For now, add events received on input ports to all instances.
             # In the future, we can optimize this by keeping a mapping from port name to a list of instances
             # potentially responding to the event
-            self.queue.add(self.simulated_time+time_offset, Controller.EventQueueEntry(event, self.object_manager.instances))
+            self.queue.add(self.simulated_time+input.time_offset,
+                Controller.EventQueueEntry(e, self.object_manager.instances))
 
     # Get timestamp of next entry in event queue
     def next_wakeup(self) -> Optional[Timestamp]:

+ 1 - 0
src/sccd/runtime/event.py

@@ -6,6 +6,7 @@ from sccd.runtime.event_queue import Timestamp
 # A raised event.
 @dataclasses.dataclass(frozen=True)
 class Event:
+    id: int
     name: str
     port: str = ""
     parameters: List[Any] = dataclasses.field(default_factory=list)

+ 8 - 8
src/sccd/runtime/expression.py

@@ -15,14 +15,14 @@ class Expression(ABC):
     pass
 
     @abstractmethod
-    def eval(self, datamodel):
+    def eval(self, events, datamodel):
         pass
 
 @dataclass
 class Identifier(Expression):
     identifier: str
 
-    def eval(self, datamodel):
+    def eval(self, events, datamodel):
         return datamodel.names[self.identifier].value
 
 @dataclass
@@ -30,21 +30,21 @@ class FunctionCall(Expression):
     function: Expression
     parameters: List[Expression]
 
-    def eval(self, datamodel):
-        f = self.function.eval(datamodel)
-        p = [p.eval(datamodel) for p in self.parameters]
+    def eval(self, events, datamodel):
+        f = self.function.eval(events, datamodel)
+        p = [p.eval(events, datamodel) for p in self.parameters]
         return f(*p)
 
 @dataclass
 class StringLiteral(Expression):
     string: str
 
-    def eval(self, datamodel):
+    def eval(self, events, datamodel):
         return self.string
 
 @dataclass
 class Array(Expression):
     elements: List[Any]
 
-    def eval(self, datamodel):
-        return [e.eval(datamodel) for e in self.elements]
+    def eval(self, events, datamodel):
+        return [e.eval(events, datamodel) for e in self.elements]

+ 82 - 30
src/sccd/runtime/statechart_instance.py

@@ -38,15 +38,6 @@ class StatechartInstance(Instance):
         self._combo_step = ComboStepState()
         self._small_step = SmallStepState()
 
-        # Each time a timer is started (i.e. upon entry of a state with an 'after' transition),
-        # a new unique (for this instance) future event is added to the Controller's event queue,
-        # and the event name of the 'after' transition is set to this new event.
-        # To get unique event names, we use an ever-increasing counter, stored in each instance.
-        # This way we never have to cancel future events upon exiting a state: Upon re-entry,
-        # the event name of the after transition is overwritten, so the previous already scheduled
-        # event for the transition will be ignored.
-        self.next_timer_id = 0
-
     # enter default states, generating a set of output events
     def initialize(self, now: Timestamp) -> Tuple[bool, List[OutputEvent]]:
         states = self.model.root.getEffectiveTargetStates(self)
@@ -142,7 +133,8 @@ class StatechartInstance(Instance):
         key = (self.configuration_bitmap, changed_bitmap)
         try:
             transitions = self.transition_mem[key]
-        except:
+        except KeyError:
+            # outgoing transitions whose arenas don't overlap with already fired transitions
             self.transition_mem[key] = transitions = [t for s in self.configuration if not (2**s.state_id & changed_bitmap) for t in s.transitions]
         
         # 2. Filter those based on guard and event trigger
@@ -163,10 +155,10 @@ class StatechartInstance(Instance):
     def _is_transition_enabled(self, t, events, enabled_transitions) -> bool:
         if t.trigger is None:
             # t.enabled_event = None
-            return (t.guard is None) or (t.guard == ELSE_GUARD and not enabled_transitions) or t.guard.eval(self.data_model)
+            return (t.guard is None) or (t.guard == ELSE_GUARD and not enabled_transitions) or t.guard.eval(events, self.data_model)
         else:
             for event in events:
-                if (t.trigger.name == event.name and (not t.trigger.port or t.trigger.port == event.port)) and ((t.guard is None) or (t.guard == ELSE_GUARD and not enabled_transitions) or t.guard(event.parameters)):
+                if (t.trigger.name == event.name and (not t.trigger.port or t.trigger.port == event.port)) and ((t.guard is None) or (t.guard == ELSE_GUARD and not enabled_transitions) or t.guard.eval(events, self.data_model)):
                     # t.enabled_event = event
                     return True
 
@@ -235,7 +227,6 @@ class StatechartInstance(Instance):
             self.configuration = self.config_mem[self.configuration_bitmap] = sorted([s for s in list(self.model.states.values()) if 2**s.state_id & self.configuration_bitmap], key=lambda s: s.state_id)
         # t.enabled_event = None
         
-
     # def getChildren(self, link_name):
     #     traversal_list = self.controller.object_manager.processAssociationReference(link_name)
     #     return [i["instance"] for i in self.controller.object_manager.getInstances(self, traversal_list)]
@@ -246,22 +237,19 @@ class StatechartInstance(Instance):
     def _perform_actions(self, actions: List[Action]):
         for a in actions:
             if isinstance(a, RaiseInternalEvent):
-                self._raiseInternalEvent(Event(name=a.name, port="", parameters=[]))
+                self._raiseInternalEvent(Event(id=a.event_id, name=a.name, port="", parameters=[]))
             elif isinstance(a, RaiseOutputEvent):
                 self._big_step.addOutputEvent(
-                    OutputEvent(Event(name=a.name, port=a.outport, parameters=[]),
+                    OutputEvent(Event(id=0, name=a.name, port=a.outport, parameters=[]),
                     OutputPortTarget(a.outport),
                     a.time_offset))
 
     def _start_timers(self, triggers: List[AfterTrigger]):
         for after in triggers:
-            event_name = "_after"+str(self.next_timer_id)
-            self.next_timer_id += 1
             self._big_step.addOutputEvent(OutputEvent(
-                Event(event_name),
+                Event(id=after.id, name=after.name, parameters=[after.nextTimerId()]),
                 target=InstancesTarget([self]),
                 time_offset=after.delay))
-            after.name = event_name # update trigger
 
     def _raiseInternalEvent(self, event):
         if self.model.semantics.internal_event_lifeline == InternalEventLifeline.NEXT_SMALL_STEP:
@@ -335,15 +323,79 @@ class SmallStepState(object):
     def addNextEvent(self, event):
         self.next_events.append(event)
 
-class Maximality(Enum):
-    TAKE_ONE = 0
-    TAKE_MANY = 1
-
-class Round:
-    def __init__(self, maximality: Maximality):
-        self.changed_bitmap: int
-        self.current_events: List[Event] = []
-        self.next_events: List[Event] = []
-        self.has_stepped: bool = True
-        self.maximality: Maximality
 
+# class TakeOneCandidates:
+#     def __init__(self):
+#         self.mem: Dict[Tuple[int,int], List[Transition]] = {}
+
+#     def get_candidates(configuration_bitmap:int, changed_bitmap:int) -> List[Transition]:
+#         try:
+#             return self.mem[(configuration_bitmap, changed_bitmap)]
+#         except KeyError:
+
+
+# class AbstractRound(ABC):
+#     def __init__(self):
+#         self.filter = None
+
+#     @abstractmethod
+#     def attempt(self) -> int:
+#         pass
+
+# class Round(AbstractRound):
+#     def __init__(self, subround: AbstractRound, f=lambda: True):
+#         super().__init__()
+#         self.subround = subround
+
+#         self.subround.filter = f
+#         # self.subround._parent = self
+#         self.filter = f
+
+#     def attempt(self, f) -> int:
+#         arenas_changed = 0
+#         while True:
+#             changed = self.subround.attempt()
+#             if not changed:
+#                 break
+#             arenas_changed |= changed
+#         return arenas_changed
+
+# class TakeManyRound(Round):
+#     def __init__(self, subround: Round):
+#         super().__init__()
+#         self.subround = subround
+#         self.subround._parent = self
+
+#         # state
+#         self.arenas_changed = 0
+
+#     def run(self) -> int:
+#         self.arenas_changed = 0
+#         while True:
+#             changed = self.subround.run()
+#             if not changed:
+#                 break
+#             self.arenas_changed |= changed
+#         return self.arenas_changed
+
+# class TakeOneRound(TakeManyRound):
+
+#     def is_allowed(self, t: Transition):
+#         # No overlap allowed between consecutive transition's arenas
+#         # and parent round must allow it.
+#         return not (self.arenas_changed & t.arena_bitmap)
+#             and super().is_allowed(t)
+
+# # Small Step - Concurrency: Single
+# class SmallStepSingle(AbstractRound):
+#     def __init__(self, instance: StatechartInstance):
+#         super().__init__()
+#         self.instance = instance
+
+#     def attempt(self) -> int:
+#         candidates = self.instance.get_candidates()
+#         for c in candidates:
+#             if self.is_allowed(c):
+#                 t.fire()
+#                 return t.arena_bitmap # good job, all done!
+#         return 0

+ 40 - 9
src/sccd/runtime/statechart_syntax.py

@@ -4,7 +4,6 @@ from sccd.runtime.event_queue import Timestamp
 from sccd.runtime.expression import *
 from sccd.compiler.utils import FormattedWriter
 
-
 @dataclass
 class Action:
     pass
@@ -129,24 +128,53 @@ class ParallelState(State):
 
 @dataclass
 class Trigger:
-    name: str
+    id: int # event ID
+    name: str # event name
     port: str
 
+    def render(self) -> str:
+        if self.port:
+            return self.port+'.'+self.name
+        else:
+            return self.name
+
 class AfterTrigger(Trigger):
-    def __init__(self, delay: Timestamp):
-        # event name will be generated by the runtime when the timer starts
-        super().__init__(name="", port="")
+    # id: unique within the statechart
+    def __init__(self, id: int, name: str, delay: Timestamp):
+        super().__init__(id=id, name=name, port="")
         self.delay = delay
 
+        # Stateful variable, incremented each time a new future 'after' event is scheduled.
+        # This is to distinguish multiple scheduled future events for the same after-transition.
+        # Only one scheduled event should be responded to, i.e. the latest one.
+        self.expected_id = -1
+
+    # Guard condition always paired with an AfterTrigger
+    class Guard(Expression):
+        def __init__(self, trigger):
+            self.trigger = trigger
+
+        def eval(self, events, datamodel):
+            e = [e for e in events if e.name == self.trigger.name][0]
+            return e.parameters[0] == self.trigger.expected_id
+
+    def createGuard(self):
+        return AfterTrigger.Guard(self)
+
+    def nextTimerId(self) -> int:
+        self.expected_id += 1
+        return self.expected_id
+
+    def render(self) -> str:
+        return "after("+str(self.delay)+")"
 
 class Transition:
     def __init__(self, source, targets: List[State]):
         self.guard: Optional[Expression] = None
         self.actions: List[Action] = []
         self.trigger: Optional[Trigger] = None
-        self.source = source
-        self.targets = targets
-        # self.enabled_event = None # the event that enabled this transition <_ huh?
+        self.source: State = source
+        self.targets: List[State] = targets
         self.optimize()
                     
     def setGuard(self, guard):
@@ -159,6 +187,8 @@ class Transition:
         self.trigger = trigger
         if self.trigger is None:
             self.source.has_eventless_transitions = True
+        if isinstance(self.trigger, AfterTrigger):
+            self.guard = self.trigger.createGuard()
         
     def optimize(self):
         # the least-common ancestor can be computed statically
@@ -172,6 +202,7 @@ class Transition:
                     if a in target.ancestors:
                         self.lca = a
                         break
+        self.arena_bitmap = 2**self.lca.state_id | self.lca.descendant_bitmap
                     
     def __repr__(self):
         return "Transition(%s, %s)" % (self.source, self.targets[0])
@@ -187,7 +218,7 @@ class RaiseEvent(Action):
 
 @dataclass
 class RaiseInternalEvent(RaiseEvent):
-    pass
+    event_id: int
 
 @dataclass
 class RaiseOutputEvent(RaiseEvent):

+ 50 - 52
src/sccd/runtime/xml_loader.py

@@ -3,10 +3,11 @@ import dataclasses
 from typing import List, Any, Optional
 import lxml.etree as ET
 from lark import Lark
-# import sccd.compiler
+
 from sccd.runtime.statechart_syntax import *
 from sccd.runtime.event import Event
 from sccd.runtime.semantic_options import SemanticConfiguration
+from sccd.runtime.controller import InputEvent
 import sccd.schema
 
 schema_dir = os.path.dirname(sccd.schema.__file__)
@@ -19,6 +20,16 @@ schema = ET.XMLSchema(ET.parse(schema_path))
 grammar = open(os.path.join(schema_dir,"grammar.g"))
 parser = Lark(grammar, parser="lalr", start=["state_ref", "expr"])
 
+# Mapping from event name to event ID
+class EventNamespace:
+  def __init__(self):
+    self.mapping: Dict[str, int] = {}
+
+  def assign_id(self, event: str) -> int:
+    return self.mapping.setdefault(event, len(self.mapping))
+
+  def get_id(self, event: str) -> int:
+    return self.mapping[event]
 
 # Some types immitating the types that are produced by the compiler
 @dataclass
@@ -35,18 +46,12 @@ class Class:
 
 @dataclass
 class Model:
+  event_namespace: EventNamespace
   inports: List[str]
   outports: List[str]
   classes: Dict[str, Any]
   default_class: str
 
-@dataclass
-class InputEvent:
-  name: str
-  port: str
-  parameters: List[Any]
-  time_offset: Timestamp
-
 @dataclass
 class Test:
   input_events: List[InputEvent]
@@ -58,7 +63,8 @@ def load_model(src_file) -> Tuple[Model, Optional[Test]]:
   schema.assertValid(tree)
   root = tree.getroot()
 
-  model = Model([], [], {}, "")
+  model = Model(event_namespace=EventNamespace(),
+    inports=[], outports=[], classes={}, default_class="")
 
   classes = root.findall(".//class", root.nsmap)
   for c in classes:
@@ -66,7 +72,7 @@ def load_model(src_file) -> Tuple[Model, Optional[Test]]:
     default = c.get("default", "")
 
     scxml_node = c.find("scxml", root.nsmap)
-    root_state, states = load_tree(scxml_node)
+    root_state, states = load_tree(scxml_node, model.event_namespace)
 
     # Semantics - We use reflection to find the xml attribute names and values
     semantics = SemanticConfiguration()
@@ -115,23 +121,37 @@ def load_model(src_file) -> Tuple[Model, Optional[Test]]:
         name = e.get("name")
         port = e.get("port")
         params = [] # todo: read params
-        slot.append(Event(name, port, params))
+        slot.append(Event(id=0, name=name, port=port, parameters=params))
       expected_events.append(slot)
     test = Test(input_events, expected_events)
 
   return (model, test)
 
-class SkipTag(Exception):
-  pass
-
-def load_tree(scxml_node) -> Tuple[State, Dict[str, State]]:
+def load_tree(scxml_node, event_namespace: EventNamespace) -> Tuple[State, Dict[str, State]]:
 
   states: Dict[str, State] = {}
   transitions: List[Tuple[Any, State]] = [] # List of (<transition>, State) tuples
 
+  def load_action(action_node) -> Optional[Action]:
+    tag = ET.QName(action_node).localname
+    if tag == "raise":
+      event = action_node.get("event")
+      port = action_node.get("port")
+      if not port:
+        return RaiseInternalEvent(name=event, parameters=[], event_id=event_namespace.assign_id(event))
+      else:
+        return RaiseOutputEvent(name=event, parameters=[], outport=port, time_offset=0)
+    else:
+      raise None
+
+  # parent_node: XML node containing any number of action nodes as direct children
+  def load_actions(parent_node) -> List[Action]:
+    return list(filter(lambda x: x is not None, map(lambda child: load_action(child), parent_node)))
+
+
   # Recursively create state hierarchy from XML node
   # Adding <transition> elements to the 'transitions' list as a side effect
-  def _get_state_tree(xml_node) -> State:
+  def build_tree(xml_node) -> Optional[State]:
     state = None
     name = xml_node.get("id", "")
     tag = ET.QName(xml_node).localname
@@ -146,17 +166,15 @@ def load_tree(scxml_node) -> Tuple[State, Dict[str, State]]:
       else:
         state = ShallowHistoryState(name)
     else:
-      raise SkipTag()
+      return None
 
     initial = xml_node.get("initial", "")
     for xml_child in xml_node.getchildren():
-      try:
-        child = _get_state_tree(xml_child) # may throw
-        state.addChild(child)
-        if child.short_name == initial:
-          state.default_state = child
-      except SkipTag:
-        pass # skip non-state tags
+        child = build_tree(xml_child) # may throw
+        if child:
+          state.addChild(child)
+          if child.short_name == initial:
+            state.default_state = child
 
     if not initial and len(state.children) == 1:
         state.default_state = state.children[0]
@@ -177,10 +195,11 @@ def load_tree(scxml_node) -> Tuple[State, Dict[str, State]]:
     return state
 
   # First build a state tree
-  root = _get_state_tree(scxml_node)
+  root = build_tree(scxml_node)
   root.init_tree(0, "", states)
 
   # Add transitions
+  next_after_id = 0
   for xml_t, source in transitions:
     # Parse and find target state
     target_string = xml_t.get("target", "")
@@ -207,9 +226,13 @@ def load_tree(scxml_node) -> Tuple[State, Dict[str, State]]:
     port = xml_t.get("port")
     after = xml_t.get("after")
     if after is not None:
-      trigger = AfterTrigger(Timestamp(after))
+      event = "_after%d" % next_after_id # transition gets unique event name
+      next_after_id += 1
+      trigger = AfterTrigger(event_namespace.assign_id(event), event, Timestamp(after))
+    elif event is not None:
+      trigger = Trigger(event_namespace.assign_id(event), event, port)
     else:
-      trigger = None if event == None else Trigger(event, port)
+      trigger = None
     transition.setTrigger(trigger)
     # Actions
     actions = load_actions(xml_t)
@@ -226,30 +249,6 @@ def load_tree(scxml_node) -> Tuple[State, Dict[str, State]]:
 
   return (root, states)
 
-def load_action(action_node) -> Optional[Action]:
-  tag = ET.QName(action_node).localname
-  if tag == "raise":
-    event = action_node.get("event")
-    port = action_node.get("port")
-    if not port:
-      return RaiseInternalEvent(name=event, parameters=[])
-    else:
-      return RaiseOutputEvent(name=event, parameters=[], outport=port, time_offset=0)
-  else:
-    raise SkipTag()
-
-# parent_node: XML node containing 0 or more action nodes as direct children
-def load_actions(parent_node) -> List[Action]:
-  actions = []
-  for node in parent_node:
-    try:
-      a = load_action(node)
-      if a:
-        actions.append(a)
-    except SkipTag:
-      pass # skip non-action tags
-  return actions
-
 class ParseError(Exception):
   def __init__(self, msg):
     self.msg = msg
@@ -267,4 +266,3 @@ def load_expression(parse_node) -> Expression:
     elements = [load_expression(e) for e in parse_node.children]
     return Array(elements)
   raise ParseError("Can't handle expression type: "+parse_node.data)
-  

+ 1 - 4
test/render.py

@@ -116,10 +116,7 @@ if __name__ == '__main__':
         for t in transitions:
           label = ""
           if t.trigger:
-            if t.trigger.name:
-              label = (t.trigger.port + '.' if t.trigger.port else '') + t.trigger.name
-            elif isinstance(t.trigger, AfterTrigger):
-              label = "after("+str(t.trigger.delay)+")"
+            label += t.trigger.render()
           if t.actions:
             raises = [a for a in t.actions if isinstance(a, RaiseEvent)]
             label += ','.join([r.render() for r in raises])

+ 2 - 3
test/test.py

@@ -29,9 +29,8 @@ class PyTestCase(unittest.TestCase):
         controller = Controller(model)
 
         # generate input
-        if inputs:
-            for i in inputs:
-                controller.add_input(Event(i.name, i.port, i.parameters), int(i.time_offset))
+        for i in inputs:
+            controller.add_input(i)
 
         pipe = queue.Queue()
 

+ 105 - 98
test/test_files/semantics/original_semantics/history_deep+Class1.svg

@@ -4,40 +4,40 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="441pt" height="1600pt"
- viewBox="0.00 0.00 441.00 1599.97" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="476pt" height="1600pt"
+ viewBox="0.00 0.00 476.00 1599.97" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1595.9656)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1595.9656 437,-1595.9656 437,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1595.9656 472,-1595.9656 472,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__parallel</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 413,-8 413,-8 419,-8 425,-14 425,-20 425,-20 425,-1540.9656 425,-1540.9656 425,-1546.9656 419,-1552.9656 413,-1552.9656 413,-1552.9656 20,-1552.9656 20,-1552.9656 14,-1552.9656 8,-1546.9656 8,-1540.9656 8,-1540.9656 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="197.1668" y="-1534.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 448,-8 448,-8 454,-8 460,-14 460,-20 460,-20 460,-1540.9656 460,-1540.9656 460,-1546.9656 454,-1552.9656 448,-1552.9656 448,-1552.9656 20,-1552.9656 20,-1552.9656 14,-1552.9656 8,-1546.9656 8,-1540.9656 8,-1540.9656 8,-20 8,-20 8,-14 14,-8 20,-8"/>
+<text text-anchor="start" x="214.6668" y="-1534.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__parallel_orthogonal</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="149,-16 149,-1514.9656 417,-1514.9656 417,-16 149,-16"/>
-<text text-anchor="start" x="254.656" y="-1496.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="184,-16 184,-1514.9656 452,-1514.9656 452,-16 184,-16"/>
+<text text-anchor="start" x="289.656" y="-1496.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M169,-24C169,-24 397,-24 397,-24 403,-24 409,-30 409,-36 409,-36 409,-1346.9656 409,-1346.9656 409,-1352.9656 403,-1358.9656 397,-1358.9656 397,-1358.9656 169,-1358.9656 169,-1358.9656 163,-1358.9656 157,-1352.9656 157,-1346.9656 157,-1346.9656 157,-36 157,-36 157,-30 163,-24 169,-24"/>
-<text text-anchor="start" x="261.8322" y="-1340.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">wrapper</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M204,-24C204,-24 432,-24 432,-24 438,-24 444,-30 444,-36 444,-36 444,-1346.9656 444,-1346.9656 444,-1352.9656 438,-1358.9656 432,-1358.9656 432,-1358.9656 204,-1358.9656 204,-1358.9656 198,-1358.9656 192,-1352.9656 192,-1346.9656 192,-1346.9656 192,-36 192,-36 192,-30 198,-24 204,-24"/>
+<text text-anchor="start" x="296.8322" y="-1340.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">wrapper</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper_state_1</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M177,-553C177,-553 287,-553 287,-553 293,-553 299,-559 299,-565 299,-565 299,-1071.5 299,-1071.5 299,-1077.5 293,-1083.5 287,-1083.5 287,-1083.5 177,-1083.5 177,-1083.5 171,-1083.5 165,-1077.5 165,-1071.5 165,-1071.5 165,-565 165,-565 165,-559 171,-553 177,-553"/>
-<text text-anchor="start" x="212.8236" y="-1064.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M212,-553C212,-553 322,-553 322,-553 328,-553 334,-559 334,-565 334,-565 334,-1071.5 334,-1071.5 334,-1077.5 328,-1083.5 322,-1083.5 322,-1083.5 212,-1083.5 212,-1083.5 206,-1083.5 200,-1077.5 200,-1071.5 200,-1071.5 200,-565 200,-565 200,-559 206,-553 212,-553"/>
+<text text-anchor="start" x="247.8236" y="-1064.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper_state_2</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M319,-32C319,-32 389,-32 389,-32 395,-32 401,-38 401,-44 401,-44 401,-797.5 401,-797.5 401,-803.5 395,-809.5 389,-809.5 389,-809.5 319,-809.5 319,-809.5 313,-809.5 307,-803.5 307,-797.5 307,-797.5 307,-44 307,-44 307,-38 313,-32 319,-32"/>
-<text text-anchor="start" x="334.8236" y="-790.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M354,-32C354,-32 424,-32 424,-32 430,-32 436,-38 436,-44 436,-44 436,-797.5 436,-797.5 436,-803.5 430,-809.5 424,-809.5 424,-809.5 354,-809.5 354,-809.5 348,-809.5 342,-803.5 342,-797.5 342,-797.5 342,-44 342,-44 342,-38 348,-32 354,-32"/>
+<text text-anchor="start" x="369.8236" y="-790.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
 </g>
 <g id="clust6" class="cluster">
 <title>cluster__parallel_orthogonal_tester</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-740 24,-1502.4656 141,-1502.4656 141,-740 24,-740"/>
-<text text-anchor="start" x="36.3176" y="-1483.6656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_tester</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-740 24,-1502.4656 176,-1502.4656 176,-740 24,-740"/>
+<text text-anchor="start" x="53.8176" y="-1483.6656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_tester</text>
 </g>
 <!-- __initial -->
 <g id="node1" class="node">
@@ -56,198 +56,205 @@
 <!-- _parallel_orthogonal_initial -->
 <g id="node4" class="node">
 <title>_parallel_orthogonal_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="372" cy="-1458.9656" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="416" cy="-1458.9656" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper -->
 <!-- _parallel_orthogonal_initial&#45;&gt;_parallel_orthogonal_wrapper -->
 <g id="edge2" class="edge">
 <title>_parallel_orthogonal_initial&#45;&gt;_parallel_orthogonal_wrapper</title>
-<path fill="none" stroke="#000000" d="M372,-1453.4315C372,-1446.4476 372,-1434.0663 372,-1423.4656 372,-1423.4656 372,-1423.4656 372,-1376.4656 372,-1374.0264 371.8734,-1371.5662 371.6379,-1369.0998"/>
-<polygon fill="#000000" stroke="#000000" points="375.0607,-1368.3257 370.1016,-1358.9632 368.1397,-1369.3748 375.0607,-1368.3257"/>
-<text text-anchor="middle" x="373.3895" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M419.5938,-1454.7406C426.0625,-1446.9593 439,-1430.5155 439,-1423.4656 439,-1423.4656 439,-1423.4656 439,-1376.4656 439,-1373.8695 438.7984,-1371.2847 438.4225,-1368.7216"/>
+<polygon fill="#000000" stroke="#000000" points="441.8294,-1367.9192 436.166,-1358.965 435.0094,-1369.4965 441.8294,-1367.9192"/>
+<text text-anchor="middle" x="440.3895" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_outer -->
 <g id="node5" class="node">
 <title>_parallel_orthogonal_outer</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="263,-1476.9656 207,-1476.9656 207,-1440.9656 263,-1440.9656 263,-1476.9656"/>
-<text text-anchor="start" x="221.329" y="-1455.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M219.3333,-1441.9656C219.3333,-1441.9656 250.6667,-1441.9656 250.6667,-1441.9656 256.3333,-1441.9656 262,-1447.6323 262,-1453.2989 262,-1453.2989 262,-1464.6323 262,-1464.6323 262,-1470.2989 256.3333,-1475.9656 250.6667,-1475.9656 250.6667,-1475.9656 219.3333,-1475.9656 219.3333,-1475.9656 213.6667,-1475.9656 208,-1470.2989 208,-1464.6323 208,-1464.6323 208,-1453.2989 208,-1453.2989 208,-1447.6323 213.6667,-1441.9656 219.3333,-1441.9656"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="330,-1476.9656 274,-1476.9656 274,-1440.9656 330,-1440.9656 330,-1476.9656"/>
+<text text-anchor="start" x="288.329" y="-1455.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M286.3333,-1441.9656C286.3333,-1441.9656 317.6667,-1441.9656 317.6667,-1441.9656 323.3333,-1441.9656 329,-1447.6323 329,-1453.2989 329,-1453.2989 329,-1464.6323 329,-1464.6323 329,-1470.2989 323.3333,-1475.9656 317.6667,-1475.9656 317.6667,-1475.9656 286.3333,-1475.9656 286.3333,-1475.9656 280.6667,-1475.9656 275,-1470.2989 275,-1464.6323 275,-1464.6323 275,-1453.2989 275,-1453.2989 275,-1447.6323 280.6667,-1441.9656 286.3333,-1441.9656"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_history -->
 <g id="node8" class="node">
 <title>_parallel_orthogonal_wrapper_history</title>
-<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="187" cy="-1302.2328" rx="18.9685" ry="18.9685"/>
-<text text-anchor="middle" x="187" y="-1298.6328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H*</text>
+<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="262" cy="-1302.2328" rx="18.9685" ry="18.9685"/>
+<text text-anchor="middle" x="262" y="-1298.6328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H*</text>
 </g>
 <!-- _parallel_orthogonal_outer&#45;&gt;_parallel_orthogonal_wrapper_history -->
-<g id="edge9" class="edge">
+<g id="edge10" class="edge">
 <title>_parallel_orthogonal_outer&#45;&gt;_parallel_orthogonal_wrapper_history</title>
-<path fill="none" stroke="#000000" d="M206.8006,-1449.0734C196.3523,-1443.4672 187,-1435.1778 187,-1423.4656 187,-1423.4656 187,-1423.4656 187,-1376.4656 187,-1361.6186 187,-1345.1014 187,-1331.4237"/>
-<polygon fill="#000000" stroke="#000000" points="190.5001,-1331.1495 187,-1321.1495 183.5001,-1331.1496 190.5001,-1331.1495"/>
-<text text-anchor="start" x="187" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_history &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M273.8006,-1449.0734C263.3523,-1443.4672 254,-1435.1778 254,-1423.4656 254,-1423.4656 254,-1423.4656 254,-1376.4656 254,-1361.4304 255.6424,-1344.7803 257.4388,-1331.0654"/>
+<polygon fill="#000000" stroke="#000000" points="260.9581,-1331.1724 258.8841,-1320.7825 254.0262,-1330.198 260.9581,-1331.1724"/>
+<text text-anchor="start" x="254" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_history &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper&#45;&gt;_parallel_orthogonal_outer -->
-<g id="edge8" class="edge">
+<g id="edge9" class="edge">
 <title>_parallel_orthogonal_wrapper&#45;&gt;_parallel_orthogonal_outer</title>
-<path fill="none" stroke="#000000" d="M308,-1358.9656C298.5087,-1368.654 283,-1362.9028 283,-1376.4656 283,-1423.4656 283,-1423.4656 283,-1423.4656 283,-1431.7008 278.3764,-1438.2437 271.9991,-1443.3516"/>
-<polygon fill="#000000" stroke="#000000" points="269.6751,-1440.6879 263.1994,-1449.0734 273.491,-1446.5564 269.6751,-1440.6879"/>
-<text text-anchor="start" x="283" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_outer &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M352.875,-1358.9627C351.068,-1364.6477 350,-1370.5219 350,-1376.4656 350,-1423.4656 350,-1423.4656 350,-1423.4656 350,-1431.7008 345.3764,-1438.2437 338.9991,-1443.3516"/>
+<polygon fill="#000000" stroke="#000000" points="336.6751,-1440.6879 330.1994,-1449.0734 340.491,-1446.5564 336.6751,-1440.6879"/>
+<text text-anchor="start" x="350" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_outer &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper_initial -->
 <g id="node7" class="node">
 <title>_parallel_orthogonal_wrapper_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="291" cy="-1302.2328" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="326" cy="-1302.2328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1 -->
 <!-- _parallel_orthogonal_wrapper_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1 -->
 <g id="edge3" class="edge">
 <title>_parallel_orthogonal_wrapper_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1</title>
-<path fill="none" stroke="#000000" d="M291,-1296.5844C291,-1289.4564 291,-1276.8195 291,-1266 291,-1266 291,-1266 291,-1101 291,-1098.6063 291,-1096.1687 291,-1093.7066"/>
-<polygon fill="#000000" stroke="#000000" points="294.5001,-1093.4956 291,-1083.4957 287.5001,-1093.4957 294.5001,-1093.4956"/>
-<text text-anchor="middle" x="292.3895" y="-1180.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M326,-1296.5844C326,-1289.4564 326,-1276.8195 326,-1266 326,-1266 326,-1266 326,-1101 326,-1098.6063 326,-1096.1687 326,-1093.7066"/>
+<polygon fill="#000000" stroke="#000000" points="329.5001,-1093.4956 326,-1083.4957 322.5001,-1093.4957 329.5001,-1093.4956"/>
+<text text-anchor="middle" x="327.3895" y="-1180.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+</g>
+<!-- _parallel_orthogonal_wrapper_history&#45;&gt;_parallel_orthogonal_wrapper_state_1 -->
+<g id="edge8" class="edge">
+<title>_parallel_orthogonal_wrapper_history&#45;&gt;_parallel_orthogonal_wrapper_state_1</title>
+<path fill="none" stroke="#000000" d="M269.5195,-1284.8599C271.4531,-1278.9839 273,-1272.311 273,-1266 273,-1266 273,-1266 273,-1101 273,-1084.5694 292.2807,-1093.6243 306.3732,-1089.1975"/>
+<polygon fill="#000000" stroke="#000000" points="308.5844,-1091.9316 315,-1083.5 304.7267,-1086.0905 308.5844,-1091.9316"/>
+<text text-anchor="middle" x="274.3895" y="-1180.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2 -->
 <!-- _parallel_orthogonal_wrapper_state_1&#45;&gt;_parallel_orthogonal_wrapper_state_2 -->
 <g id="edge5" class="edge">
 <title>_parallel_orthogonal_wrapper_state_1&#45;&gt;_parallel_orthogonal_wrapper_state_2</title>
-<path fill="none" stroke="#000000" d="M298.9989,-1023.7913C309.3297,-1018.3846 326,-1007.2911 326,-992 326,-992 326,-992 326,-827 326,-818.4104 333.1955,-818.3213 339.8948,-815.6936"/>
-<polygon fill="#000000" stroke="#000000" points="342.1794,-818.3527 348,-809.5 337.9291,-812.7907 342.1794,-818.3527"/>
-<text text-anchor="start" x="326" y="-906.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_state_2 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M333.9989,-1023.7913C344.3297,-1018.3846 361,-1007.2911 361,-992 361,-992 361,-992 361,-827 361,-818.4104 368.1955,-818.3213 374.8948,-815.6936"/>
+<polygon fill="#000000" stroke="#000000" points="377.1794,-818.3527 383,-809.5 372.9291,-812.7907 377.1794,-818.3527"/>
+<text text-anchor="start" x="361" y="-906.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_state_2 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_initial -->
 <g id="node10" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="263" cy="-1027.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="298" cy="-1027.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_inner_1 -->
 <g id="node11" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_inner_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="291,-597 229,-597 229,-561 291,-561 291,-597"/>
-<text text-anchor="start" x="239.9942" y="-575.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M241.3333,-562C241.3333,-562 278.6667,-562 278.6667,-562 284.3333,-562 290,-567.6667 290,-573.3333 290,-573.3333 290,-584.6667 290,-584.6667 290,-590.3333 284.3333,-596 278.6667,-596 278.6667,-596 241.3333,-596 241.3333,-596 235.6667,-596 230,-590.3333 230,-584.6667 230,-584.6667 230,-573.3333 230,-573.3333 230,-567.6667 235.6667,-562 241.3333,-562"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="326,-597 264,-597 264,-561 326,-561 326,-597"/>
+<text text-anchor="start" x="274.9942" y="-575.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M276.3333,-562C276.3333,-562 313.6667,-562 313.6667,-562 319.3333,-562 325,-567.6667 325,-573.3333 325,-573.3333 325,-584.6667 325,-584.6667 325,-590.3333 319.3333,-596 313.6667,-596 313.6667,-596 276.3333,-596 276.3333,-596 270.6667,-596 265,-590.3333 265,-584.6667 265,-584.6667 265,-573.3333 265,-573.3333 265,-567.6667 270.6667,-562 276.3333,-562"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_1 -->
 <g id="edge4" class="edge">
 <title>_parallel_orthogonal_wrapper_state_1_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_1</title>
-<path fill="none" stroke="#000000" d="M262.4953,-1021.9713C261.9028,-1014.993 261,-1002.6175 261,-992 261,-992 261,-992 261,-614.5 261,-612.107 260.977,-609.6235 260.938,-607.1322"/>
-<polygon fill="#000000" stroke="#000000" points="264.4354,-606.9735 260.7054,-597.057 257.4372,-607.1351 264.4354,-606.9735"/>
-<text text-anchor="middle" x="262.3895" y="-763" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M297.4953,-1021.9713C296.9028,-1014.993 296,-1002.6175 296,-992 296,-992 296,-992 296,-614.5 296,-612.107 295.977,-609.6235 295.938,-607.1322"/>
+<polygon fill="#000000" stroke="#000000" points="299.4354,-606.9735 295.7054,-597.057 292.4372,-607.1351 299.4354,-606.9735"/>
+<text text-anchor="middle" x="297.3895" y="-763" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_inner_2 -->
 <g id="node12" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_inner_2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="235,-1045.5 173,-1045.5 173,-1009.5 235,-1009.5 235,-1045.5"/>
-<text text-anchor="start" x="183.9942" y="-1023.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M185.3333,-1010.5C185.3333,-1010.5 222.6667,-1010.5 222.6667,-1010.5 228.3333,-1010.5 234,-1016.1667 234,-1021.8333 234,-1021.8333 234,-1033.1667 234,-1033.1667 234,-1038.8333 228.3333,-1044.5 222.6667,-1044.5 222.6667,-1044.5 185.3333,-1044.5 185.3333,-1044.5 179.6667,-1044.5 174,-1038.8333 174,-1033.1667 174,-1033.1667 174,-1021.8333 174,-1021.8333 174,-1016.1667 179.6667,-1010.5 185.3333,-1010.5"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="270,-1045.5 208,-1045.5 208,-1009.5 270,-1009.5 270,-1045.5"/>
+<text text-anchor="start" x="218.9942" y="-1023.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M220.3333,-1010.5C220.3333,-1010.5 257.6667,-1010.5 257.6667,-1010.5 263.3333,-1010.5 269,-1016.1667 269,-1021.8333 269,-1021.8333 269,-1033.1667 269,-1033.1667 269,-1038.8333 263.3333,-1044.5 257.6667,-1044.5 257.6667,-1044.5 220.3333,-1044.5 220.3333,-1044.5 214.6667,-1044.5 209,-1038.8333 209,-1033.1667 209,-1033.1667 209,-1021.8333 209,-1021.8333 209,-1016.1667 214.6667,-1010.5 220.3333,-1010.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_initial -->
 <g id="node14" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="331" cy="-766" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="366" cy="-766" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_3 -->
 <g id="node15" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_inner_3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="377,-410 315,-410 315,-374 377,-374 377,-410"/>
-<text text-anchor="start" x="325.9942" y="-388.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M327.3333,-375C327.3333,-375 364.6667,-375 364.6667,-375 370.3333,-375 376,-380.6667 376,-386.3333 376,-386.3333 376,-397.6667 376,-397.6667 376,-403.3333 370.3333,-409 364.6667,-409 364.6667,-409 327.3333,-409 327.3333,-409 321.6667,-409 316,-403.3333 316,-397.6667 316,-397.6667 316,-386.3333 316,-386.3333 316,-380.6667 321.6667,-375 327.3333,-375"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="412,-410 350,-410 350,-374 412,-374 412,-410"/>
+<text text-anchor="start" x="360.9942" y="-388.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M362.3333,-375C362.3333,-375 399.6667,-375 399.6667,-375 405.3333,-375 411,-380.6667 411,-386.3333 411,-386.3333 411,-397.6667 411,-397.6667 411,-403.3333 405.3333,-409 399.6667,-409 399.6667,-409 362.3333,-409 362.3333,-409 356.6667,-409 351,-403.3333 351,-397.6667 351,-397.6667 351,-386.3333 351,-386.3333 351,-380.6667 356.6667,-375 362.3333,-375"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_initial&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_3 -->
 <g id="edge6" class="edge">
 <title>_parallel_orthogonal_wrapper_state_2_initial&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_3</title>
-<path fill="none" stroke="#000000" d="M333.0236,-760.7324C335.9457,-752.6398 341,-736.6033 341,-722.5 341,-722.5 341,-722.5 341,-427.5 341,-425.2243 341.102,-422.8746 341.2768,-420.5183"/>
-<polygon fill="#000000" stroke="#000000" points="344.7801,-420.6846 342.4194,-410.3561 337.8239,-419.9024 344.7801,-420.6846"/>
-<text text-anchor="middle" x="342.3895" y="-576" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M368.0236,-760.7324C370.9457,-752.6398 376,-736.6033 376,-722.5 376,-722.5 376,-722.5 376,-427.5 376,-425.2243 376.102,-422.8746 376.2768,-420.5183"/>
+<polygon fill="#000000" stroke="#000000" points="379.7801,-420.6846 377.4194,-410.3561 372.8239,-419.9024 379.7801,-420.6846"/>
+<text text-anchor="middle" x="377.3895" y="-576" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_4 -->
 <g id="node16" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_inner_4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="377,-76 315,-76 315,-40 377,-40 377,-76"/>
-<text text-anchor="start" x="325.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M327.3333,-41C327.3333,-41 364.6667,-41 364.6667,-41 370.3333,-41 376,-46.6667 376,-52.3333 376,-52.3333 376,-63.6667 376,-63.6667 376,-69.3333 370.3333,-75 364.6667,-75 364.6667,-75 327.3333,-75 327.3333,-75 321.6667,-75 316,-69.3333 316,-63.6667 316,-63.6667 316,-52.3333 316,-52.3333 316,-46.6667 321.6667,-41 327.3333,-41"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="412,-76 350,-76 350,-40 412,-40 412,-76"/>
+<text text-anchor="start" x="360.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_4</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M362.3333,-41C362.3333,-41 399.6667,-41 399.6667,-41 405.3333,-41 411,-46.6667 411,-52.3333 411,-52.3333 411,-63.6667 411,-63.6667 411,-69.3333 405.3333,-75 399.6667,-75 399.6667,-75 362.3333,-75 362.3333,-75 356.6667,-75 351,-69.3333 351,-63.6667 351,-63.6667 351,-52.3333 351,-52.3333 351,-46.6667 356.6667,-41 362.3333,-41"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_3&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_4 -->
 <g id="edge7" class="edge">
 <title>_parallel_orthogonal_wrapper_state_2_inner_3&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_4</title>
-<path fill="none" stroke="#000000" d="M339.555,-373.7962C338.1124,-368.3088 337,-362.2224 337,-356.5 337,-356.5 337,-356.5 337,-93.5 337,-91.0859 337.198,-88.607 337.5352,-86.1355"/>
-<polygon fill="#000000" stroke="#000000" points="340.9918,-86.7008 339.555,-76.2038 334.1322,-85.3057 340.9918,-86.7008"/>
-<text text-anchor="start" x="337" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_4 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M374.555,-373.7962C373.1124,-368.3088 372,-362.2224 372,-356.5 372,-356.5 372,-356.5 372,-93.5 372,-91.0859 372.198,-88.607 372.5352,-86.1355"/>
+<polygon fill="#000000" stroke="#000000" points="375.9918,-86.7008 374.555,-76.2038 369.1322,-85.3057 375.9918,-86.7008"/>
+<text text-anchor="start" x="372" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_4 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester -->
 <!-- _parallel_orthogonal_tester_initial -->
 <g id="node18" class="node">
 <title>_parallel_orthogonal_tester_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="71" cy="-1458.9656" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="60" cy="-1458.9656" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_tester_start -->
 <g id="node19" class="node">
 <title>_parallel_orthogonal_tester_start</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-1320.2328 43,-1320.2328 43,-1284.2328 99,-1284.2328 99,-1320.2328"/>
-<text text-anchor="start" x="59.3324" y="-1298.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">start</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-1285.2328C55.3333,-1285.2328 86.6667,-1285.2328 86.6667,-1285.2328 92.3333,-1285.2328 98,-1290.8995 98,-1296.5661 98,-1296.5661 98,-1307.8995 98,-1307.8995 98,-1313.5661 92.3333,-1319.2328 86.6667,-1319.2328 86.6667,-1319.2328 55.3333,-1319.2328 55.3333,-1319.2328 49.6667,-1319.2328 44,-1313.5661 44,-1307.8995 44,-1307.8995 44,-1296.5661 44,-1296.5661 44,-1290.8995 49.6667,-1285.2328 55.3333,-1285.2328"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-1320.2328 32,-1320.2328 32,-1284.2328 88,-1284.2328 88,-1320.2328"/>
+<text text-anchor="start" x="48.3324" y="-1298.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">start</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-1285.2328C44.3333,-1285.2328 75.6667,-1285.2328 75.6667,-1285.2328 81.3333,-1285.2328 87,-1290.8995 87,-1296.5661 87,-1296.5661 87,-1307.8995 87,-1307.8995 87,-1313.5661 81.3333,-1319.2328 75.6667,-1319.2328 75.6667,-1319.2328 44.3333,-1319.2328 44.3333,-1319.2328 38.6667,-1319.2328 33,-1313.5661 33,-1307.8995 33,-1307.8995 33,-1296.5661 33,-1296.5661 33,-1290.8995 38.6667,-1285.2328 44.3333,-1285.2328"/>
 </g>
 <!-- _parallel_orthogonal_tester_initial&#45;&gt;_parallel_orthogonal_tester_start -->
-<g id="edge10" class="edge">
+<g id="edge11" class="edge">
 <title>_parallel_orthogonal_tester_initial&#45;&gt;_parallel_orthogonal_tester_start</title>
-<path fill="none" stroke="#000000" d="M71,-1453.4315C71,-1446.4476 71,-1434.0663 71,-1423.4656 71,-1423.4656 71,-1423.4656 71,-1376.4656 71,-1361.3136 71,-1344.4219 71,-1330.5842"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-1330.2331 71,-1320.2331 67.5001,-1330.2331 74.5001,-1330.2331"/>
-<text text-anchor="middle" x="72.3895" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M60,-1453.4315C60,-1446.4476 60,-1434.0663 60,-1423.4656 60,-1423.4656 60,-1423.4656 60,-1376.4656 60,-1361.3136 60,-1344.4219 60,-1330.5842"/>
+<polygon fill="#000000" stroke="#000000" points="63.5001,-1330.2331 60,-1320.2331 56.5001,-1330.2331 63.5001,-1330.2331"/>
+<text text-anchor="middle" x="61.3895" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_tester_step1 -->
 <g id="node20" class="node">
 <title>_parallel_orthogonal_tester_step1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-1201.5 43,-1201.5 43,-1165.5 99,-1165.5 99,-1201.5"/>
-<text text-anchor="start" x="56.3264" y="-1179.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-1166.5C55.3333,-1166.5 86.6667,-1166.5 86.6667,-1166.5 92.3333,-1166.5 98,-1172.1667 98,-1177.8333 98,-1177.8333 98,-1189.1667 98,-1189.1667 98,-1194.8333 92.3333,-1200.5 86.6667,-1200.5 86.6667,-1200.5 55.3333,-1200.5 55.3333,-1200.5 49.6667,-1200.5 44,-1194.8333 44,-1189.1667 44,-1189.1667 44,-1177.8333 44,-1177.8333 44,-1172.1667 49.6667,-1166.5 55.3333,-1166.5"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-1201.5 32,-1201.5 32,-1165.5 88,-1165.5 88,-1201.5"/>
+<text text-anchor="start" x="45.3264" y="-1179.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-1166.5C44.3333,-1166.5 75.6667,-1166.5 75.6667,-1166.5 81.3333,-1166.5 87,-1172.1667 87,-1177.8333 87,-1177.8333 87,-1189.1667 87,-1189.1667 87,-1194.8333 81.3333,-1200.5 75.6667,-1200.5 75.6667,-1200.5 44.3333,-1200.5 44.3333,-1200.5 38.6667,-1200.5 33,-1194.8333 33,-1189.1667 33,-1189.1667 33,-1177.8333 33,-1177.8333 33,-1172.1667 38.6667,-1166.5 44.3333,-1166.5"/>
 </g>
 <!-- _parallel_orthogonal_tester_start&#45;&gt;_parallel_orthogonal_tester_step1 -->
-<g id="edge11" class="edge">
+<g id="edge12" class="edge">
 <title>_parallel_orthogonal_tester_start&#45;&gt;_parallel_orthogonal_tester_step1</title>
-<path fill="none" stroke="#000000" d="M71,-1284.1715C71,-1278.3688 71,-1271.913 71,-1266 71,-1266 71,-1266 71,-1219 71,-1216.6079 71,-1214.1252 71,-1211.6342"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-1211.5597 71,-1201.5598 67.5001,-1211.5598 74.5001,-1211.5597"/>
-<text text-anchor="middle" x="72.3895" y="-1239.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M55.7677,-1283.8973C54.7749,-1278.1953 54,-1271.866 54,-1266 54,-1266 54,-1266 54,-1219 54,-1216.7146 54.1224,-1214.3579 54.3322,-1211.9969"/>
+<polygon fill="#000000" stroke="#000000" points="57.8359,-1212.2039 55.7033,-1201.8259 50.8986,-1211.2687 57.8359,-1212.2039"/>
+<text text-anchor="start" x="54" y="-1239.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^to_state_2,^to_inner_4 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester_step2 -->
 <g id="node21" class="node">
 <title>_parallel_orthogonal_tester_step2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-1045.5 43,-1045.5 43,-1009.5 99,-1009.5 99,-1045.5"/>
-<text text-anchor="start" x="56.3264" y="-1023.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-1010.5C55.3333,-1010.5 86.6667,-1010.5 86.6667,-1010.5 92.3333,-1010.5 98,-1016.1667 98,-1021.8333 98,-1021.8333 98,-1033.1667 98,-1033.1667 98,-1038.8333 92.3333,-1044.5 86.6667,-1044.5 86.6667,-1044.5 55.3333,-1044.5 55.3333,-1044.5 49.6667,-1044.5 44,-1038.8333 44,-1033.1667 44,-1033.1667 44,-1021.8333 44,-1021.8333 44,-1016.1667 49.6667,-1010.5 55.3333,-1010.5"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-1045.5 32,-1045.5 32,-1009.5 88,-1009.5 88,-1045.5"/>
+<text text-anchor="start" x="45.3264" y="-1023.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-1010.5C44.3333,-1010.5 75.6667,-1010.5 75.6667,-1010.5 81.3333,-1010.5 87,-1016.1667 87,-1021.8333 87,-1021.8333 87,-1033.1667 87,-1033.1667 87,-1038.8333 81.3333,-1044.5 75.6667,-1044.5 75.6667,-1044.5 44.3333,-1044.5 44.3333,-1044.5 38.6667,-1044.5 33,-1038.8333 33,-1033.1667 33,-1033.1667 33,-1021.8333 33,-1021.8333 33,-1016.1667 38.6667,-1010.5 44.3333,-1010.5"/>
 </g>
 <!-- _parallel_orthogonal_tester_step1&#45;&gt;_parallel_orthogonal_tester_step2 -->
-<g id="edge12" class="edge">
+<g id="edge13" class="edge">
 <title>_parallel_orthogonal_tester_step1&#45;&gt;_parallel_orthogonal_tester_step2</title>
-<path fill="none" stroke="#000000" d="M71,-1165.4402C71,-1159.8497 71,-1153.6701 71,-1148 71,-1148 71,-1148 71,-1101 71,-1086.0982 71,-1069.497 71,-1055.8478"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-1055.6232 71,-1045.6232 67.5001,-1055.6233 74.5001,-1055.6232"/>
-<text text-anchor="middle" x="72.3895" y="-1121.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M60,-1165.4402C60,-1159.8497 60,-1153.6701 60,-1148 60,-1148 60,-1148 60,-1101 60,-1086.0982 60,-1069.497 60,-1055.8478"/>
+<polygon fill="#000000" stroke="#000000" points="63.5001,-1055.6232 60,-1045.6232 56.5001,-1055.6233 63.5001,-1055.6232"/>
+<text text-anchor="start" x="60" y="-1121.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^out.check1,^to_outer &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester_step3 -->
 <g id="node22" class="node">
 <title>_parallel_orthogonal_tester_step3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-927.5 43,-927.5 43,-891.5 99,-891.5 99,-927.5"/>
-<text text-anchor="start" x="56.3264" y="-905.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-892.5C55.3333,-892.5 86.6667,-892.5 86.6667,-892.5 92.3333,-892.5 98,-898.1667 98,-903.8333 98,-903.8333 98,-915.1667 98,-915.1667 98,-920.8333 92.3333,-926.5 86.6667,-926.5 86.6667,-926.5 55.3333,-926.5 55.3333,-926.5 49.6667,-926.5 44,-920.8333 44,-915.1667 44,-915.1667 44,-903.8333 44,-903.8333 44,-898.1667 49.6667,-892.5 55.3333,-892.5"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-927.5 32,-927.5 32,-891.5 88,-891.5 88,-927.5"/>
+<text text-anchor="start" x="45.3264" y="-905.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-892.5C44.3333,-892.5 75.6667,-892.5 75.6667,-892.5 81.3333,-892.5 87,-898.1667 87,-903.8333 87,-903.8333 87,-915.1667 87,-915.1667 87,-920.8333 81.3333,-926.5 75.6667,-926.5 75.6667,-926.5 44.3333,-926.5 44.3333,-926.5 38.6667,-926.5 33,-920.8333 33,-915.1667 33,-915.1667 33,-903.8333 33,-903.8333 33,-898.1667 38.6667,-892.5 44.3333,-892.5"/>
 </g>
 <!-- _parallel_orthogonal_tester_step2&#45;&gt;_parallel_orthogonal_tester_step3 -->
-<g id="edge13" class="edge">
+<g id="edge14" class="edge">
 <title>_parallel_orthogonal_tester_step2&#45;&gt;_parallel_orthogonal_tester_step3</title>
-<path fill="none" stroke="#000000" d="M71,-1009.4402C71,-1003.8497 71,-997.6701 71,-992 71,-992 71,-992 71,-945 71,-942.6079 71,-940.1252 71,-937.6342"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-937.5597 71,-927.5598 67.5001,-937.5598 74.5001,-937.5597"/>
-<text text-anchor="middle" x="72.3895" y="-965.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M57.1785,-1009.4844C56.5166,-1003.8957 56,-997.706 56,-992 56,-992 56,-992 56,-945 56,-942.5928 56.0919,-940.0995 56.248,-937.6015"/>
+<polygon fill="#000000" stroke="#000000" points="59.7449,-937.7949 57.1785,-927.5156 52.7745,-937.1517 59.7449,-937.7949"/>
+<text text-anchor="start" x="56" y="-965.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^out.check2,^to_history &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester_end -->
 <g id="node23" class="node">
 <title>_parallel_orthogonal_tester_end</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-784 43,-784 43,-748 99,-748 99,-784"/>
-<text text-anchor="start" x="60.9938" y="-762.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">end</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-749C55.3333,-749 86.6667,-749 86.6667,-749 92.3333,-749 98,-754.6667 98,-760.3333 98,-760.3333 98,-771.6667 98,-771.6667 98,-777.3333 92.3333,-783 86.6667,-783 86.6667,-783 55.3333,-783 55.3333,-783 49.6667,-783 44,-777.3333 44,-771.6667 44,-771.6667 44,-760.3333 44,-760.3333 44,-754.6667 49.6667,-749 55.3333,-749"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-784 32,-784 32,-748 88,-748 88,-784"/>
+<text text-anchor="start" x="49.9938" y="-762.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">end</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-749C44.3333,-749 75.6667,-749 75.6667,-749 81.3333,-749 87,-754.6667 87,-760.3333 87,-760.3333 87,-771.6667 87,-771.6667 87,-777.3333 81.3333,-783 75.6667,-783 75.6667,-783 44.3333,-783 44.3333,-783 38.6667,-783 33,-777.3333 33,-771.6667 33,-771.6667 33,-760.3333 33,-760.3333 33,-754.6667 38.6667,-749 44.3333,-749"/>
 </g>
 <!-- _parallel_orthogonal_tester_step3&#45;&gt;_parallel_orthogonal_tester_end -->
-<g id="edge14" class="edge">
+<g id="edge15" class="edge">
 <title>_parallel_orthogonal_tester_step3&#45;&gt;_parallel_orthogonal_tester_end</title>
-<path fill="none" stroke="#000000" d="M71,-891.4402C71,-885.8497 71,-879.6701 71,-874 71,-874 71,-874 71,-827 71,-816.3104 71,-804.5672 71,-794.263"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-794.1503 71,-784.1503 67.5001,-794.1504 74.5001,-794.1503"/>
-<text text-anchor="middle" x="72.3895" y="-847.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M60,-891.4402C60,-885.8497 60,-879.6701 60,-874 60,-874 60,-874 60,-827 60,-816.3104 60,-804.5672 60,-794.263"/>
+<polygon fill="#000000" stroke="#000000" points="63.5001,-794.1503 60,-784.1503 56.5001,-794.1504 63.5001,-794.1503"/>
+<text text-anchor="start" x="60" y="-847.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^out.check3 &#160;&#160;</text>
 </g>
 </g>
 </svg>

+ 87 - 87
test/test_files/semantics/original_semantics/history_parallel_deep+Class1.svg

@@ -4,40 +4,40 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="469pt" height="1195pt"
- viewBox="0.00 0.00 469.00 1195.23" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="505pt" height="1195pt"
+ viewBox="0.00 0.00 505.00 1195.23" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1191.2328)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1191.2328 465,-1191.2328 465,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1191.2328 501,-1191.2328 501,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__parallel</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 441,-8 441,-8 447,-8 453,-14 453,-20 453,-20 453,-1136.2328 453,-1136.2328 453,-1142.2328 447,-1148.2328 441,-1148.2328 441,-1148.2328 20,-1148.2328 20,-1148.2328 14,-1148.2328 8,-1142.2328 8,-1136.2328 8,-1136.2328 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="211.1668" y="-1129.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 477,-8 477,-8 483,-8 489,-14 489,-20 489,-20 489,-1136.2328 489,-1136.2328 489,-1142.2328 483,-1148.2328 477,-1148.2328 477,-1148.2328 20,-1148.2328 20,-1148.2328 14,-1148.2328 8,-1142.2328 8,-1136.2328 8,-1136.2328 8,-20 8,-20 8,-14 14,-8 20,-8"/>
+<text text-anchor="start" x="229.1668" y="-1129.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__parallel_orthogonal</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="149,-16 149,-1110.2328 445,-1110.2328 445,-16 149,-16"/>
-<text text-anchor="start" x="268.656" y="-1091.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="185,-16 185,-1110.2328 481,-1110.2328 481,-16 185,-16"/>
+<text text-anchor="start" x="304.656" y="-1091.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M169,-24C169,-24 425,-24 425,-24 431,-24 437,-30 437,-36 437,-36 437,-942.2328 437,-942.2328 437,-948.2328 431,-954.2328 425,-954.2328 425,-954.2328 169,-954.2328 169,-954.2328 163,-954.2328 157,-948.2328 157,-942.2328 157,-942.2328 157,-36 157,-36 157,-30 163,-24 169,-24"/>
-<text text-anchor="start" x="275.8322" y="-935.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">wrapper</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M205,-24C205,-24 461,-24 461,-24 467,-24 473,-30 473,-36 473,-36 473,-942.2328 473,-942.2328 473,-948.2328 467,-954.2328 461,-954.2328 461,-954.2328 205,-954.2328 205,-954.2328 199,-954.2328 193,-948.2328 193,-942.2328 193,-942.2328 193,-36 193,-36 193,-30 199,-24 205,-24"/>
+<text text-anchor="start" x="311.8322" y="-935.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">wrapper</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper_state_1</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="335,-32 335,-916.2328 429,-916.2328 429,-32 335,-32"/>
-<text text-anchor="start" x="362.8236" y="-897.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="371,-32 371,-916.2328 465,-916.2328 465,-32 371,-32"/>
+<text text-anchor="start" x="398.8236" y="-897.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper_state_2</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="233,-32 233,-916.2328 327,-916.2328 327,-32 233,-32"/>
-<text text-anchor="start" x="260.8236" y="-897.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="269,-32 269,-916.2328 363,-916.2328 363,-32 269,-32"/>
+<text text-anchor="start" x="296.8236" y="-897.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
 </g>
 <g id="clust6" class="cluster">
 <title>cluster__parallel_orthogonal_tester</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-374 24,-1097.7328 141,-1097.7328 141,-374 24,-374"/>
-<text text-anchor="start" x="36.3176" y="-1078.9328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_tester</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-374 24,-1097.7328 177,-1097.7328 177,-374 24,-374"/>
+<text text-anchor="start" x="54.3176" y="-1078.9328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_tester</text>
 </g>
 <!-- __initial -->
 <g id="node1" class="node">
@@ -56,186 +56,186 @@
 <!-- _parallel_orthogonal_initial -->
 <g id="node4" class="node">
 <title>_parallel_orthogonal_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="364" cy="-1054.2328" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="400" cy="-1054.2328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper -->
 <!-- _parallel_orthogonal_initial&#45;&gt;_parallel_orthogonal_wrapper -->
 <g id="edge2" class="edge">
 <title>_parallel_orthogonal_initial&#45;&gt;_parallel_orthogonal_wrapper</title>
-<path fill="none" stroke="#000000" d="M364,-1048.6987C364,-1041.7148 364,-1029.3335 364,-1018.7328 364,-1018.7328 364,-1018.7328 364,-971.7328 364,-944.5542 271.5926,-970.0283 237.9413,-959.3633"/>
-<polygon fill="#000000" stroke="#000000" points="239.4155,-956.174 229,-954.2328 235.9316,-962.2455 239.4155,-956.174"/>
-<text text-anchor="middle" x="365.3895" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M400,-1048.6987C400,-1041.7148 400,-1029.3335 400,-1018.7328 400,-1018.7328 400,-1018.7328 400,-971.7328 400,-944.5542 307.5926,-970.0283 273.9413,-959.3633"/>
+<polygon fill="#000000" stroke="#000000" points="275.4155,-956.174 265,-954.2328 271.9316,-962.2455 275.4155,-956.174"/>
+<text text-anchor="middle" x="401.3895" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_outer -->
 <g id="node5" class="node">
 <title>_parallel_orthogonal_outer</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="258,-1072.2328 202,-1072.2328 202,-1036.2328 258,-1036.2328 258,-1072.2328"/>
-<text text-anchor="start" x="216.329" y="-1050.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M214.3333,-1037.2328C214.3333,-1037.2328 245.6667,-1037.2328 245.6667,-1037.2328 251.3333,-1037.2328 257,-1042.8995 257,-1048.5661 257,-1048.5661 257,-1059.8995 257,-1059.8995 257,-1065.5661 251.3333,-1071.2328 245.6667,-1071.2328 245.6667,-1071.2328 214.3333,-1071.2328 214.3333,-1071.2328 208.6667,-1071.2328 203,-1065.5661 203,-1059.8995 203,-1059.8995 203,-1048.5661 203,-1048.5661 203,-1042.8995 208.6667,-1037.2328 214.3333,-1037.2328"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="294,-1072.2328 238,-1072.2328 238,-1036.2328 294,-1036.2328 294,-1072.2328"/>
+<text text-anchor="start" x="252.329" y="-1050.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M250.3333,-1037.2328C250.3333,-1037.2328 281.6667,-1037.2328 281.6667,-1037.2328 287.3333,-1037.2328 293,-1042.8995 293,-1048.5661 293,-1048.5661 293,-1059.8995 293,-1059.8995 293,-1065.5661 287.3333,-1071.2328 281.6667,-1071.2328 281.6667,-1071.2328 250.3333,-1071.2328 250.3333,-1071.2328 244.6667,-1071.2328 239,-1065.5661 239,-1059.8995 239,-1059.8995 239,-1048.5661 239,-1048.5661 239,-1042.8995 244.6667,-1037.2328 250.3333,-1037.2328"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_history -->
 <g id="node7" class="node">
 <title>_parallel_orthogonal_wrapper_history</title>
-<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="184" cy="-872.7328" rx="18.9685" ry="18.9685"/>
-<text text-anchor="middle" x="184" y="-869.1328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H*</text>
+<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="220" cy="-872.7328" rx="18.9685" ry="18.9685"/>
+<text text-anchor="middle" x="220" y="-869.1328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H*</text>
 </g>
 <!-- _parallel_orthogonal_outer&#45;&gt;_parallel_orthogonal_wrapper_history -->
 <g id="edge8" class="edge">
 <title>_parallel_orthogonal_outer&#45;&gt;_parallel_orthogonal_wrapper_history</title>
-<path fill="none" stroke="#000000" d="M201.815,-1045.6437C190.0201,-1040.144 179,-1031.5705 179,-1018.7328 179,-1018.7328 179,-1018.7328 179,-971.7328 179,-948.2097 180.4254,-921.5826 181.7541,-901.8723"/>
-<polygon fill="#000000" stroke="#000000" points="185.2594,-901.9191 182.4727,-891.6974 178.2768,-901.426 185.2594,-901.9191"/>
-<text text-anchor="start" x="179" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_history &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M237.815,-1045.6437C226.0201,-1040.144 215,-1031.5705 215,-1018.7328 215,-1018.7328 215,-1018.7328 215,-971.7328 215,-948.2097 216.4254,-921.5826 217.7541,-901.8723"/>
+<polygon fill="#000000" stroke="#000000" points="221.2594,-901.9191 218.4727,-891.6974 214.2768,-901.426 221.2594,-901.9191"/>
+<text text-anchor="start" x="215" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_history &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper&#45;&gt;_parallel_orthogonal_outer -->
 <g id="edge7" class="edge">
 <title>_parallel_orthogonal_wrapper&#45;&gt;_parallel_orthogonal_outer</title>
-<path fill="none" stroke="#000000" d="M229,-954.2328C241.8543,-971.9313 275,-949.8589 275,-971.7328 275,-1018.7328 275,-1018.7328 275,-1018.7328 275,-1025.8197 271.5173,-1031.711 266.4896,-1036.5234"/>
-<polygon fill="#000000" stroke="#000000" points="264.0702,-1033.9669 258.2437,-1042.8157 268.3167,-1039.5317 264.0702,-1033.9669"/>
-<text text-anchor="start" x="275" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_outer &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M265,-954.2328C277.8543,-971.9313 311,-949.8589 311,-971.7328 311,-1018.7328 311,-1018.7328 311,-1018.7328 311,-1025.8197 307.5173,-1031.711 302.4896,-1036.5234"/>
+<polygon fill="#000000" stroke="#000000" points="300.0702,-1033.9669 294.2437,-1042.8157 304.3167,-1039.5317 300.0702,-1033.9669"/>
+<text text-anchor="start" x="311" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_outer &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1 -->
 <!-- _parallel_orthogonal_wrapper_state_1_initial -->
 <g id="node9" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="374" cy="-872.7328" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="410" cy="-872.7328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_inner_1 -->
 <g id="node10" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_inner_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="405,-418 343,-418 343,-382 405,-382 405,-418"/>
-<text text-anchor="start" x="353.9942" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M355.3333,-383C355.3333,-383 392.6667,-383 392.6667,-383 398.3333,-383 404,-388.6667 404,-394.3333 404,-394.3333 404,-405.6667 404,-405.6667 404,-411.3333 398.3333,-417 392.6667,-417 392.6667,-417 355.3333,-417 355.3333,-417 349.6667,-417 344,-411.3333 344,-405.6667 344,-405.6667 344,-394.3333 344,-394.3333 344,-388.6667 349.6667,-383 355.3333,-383"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="441,-418 379,-418 379,-382 441,-382 441,-418"/>
+<text text-anchor="start" x="389.9942" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M391.3333,-383C391.3333,-383 428.6667,-383 428.6667,-383 434.3333,-383 440,-388.6667 440,-394.3333 440,-394.3333 440,-405.6667 440,-405.6667 440,-411.3333 434.3333,-417 428.6667,-417 428.6667,-417 391.3333,-417 391.3333,-417 385.6667,-417 380,-411.3333 380,-405.6667 380,-405.6667 380,-394.3333 380,-394.3333 380,-388.6667 385.6667,-383 391.3333,-383"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_1 -->
 <g id="edge3" class="edge">
 <title>_parallel_orthogonal_wrapper_state_1_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_1</title>
-<path fill="none" stroke="#000000" d="M374,-867.0844C374,-859.9564 374,-847.3195 374,-836.5 374,-836.5 374,-836.5 374,-435.5 374,-433.1079 374,-430.6252 374,-428.1342"/>
-<polygon fill="#000000" stroke="#000000" points="377.5001,-428.0597 374,-418.0598 370.5001,-428.0598 377.5001,-428.0597"/>
-<text text-anchor="middle" x="375.3895" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M410,-867.0844C410,-859.9564 410,-847.3195 410,-836.5 410,-836.5 410,-836.5 410,-435.5 410,-433.1079 410,-430.6252 410,-428.1342"/>
+<polygon fill="#000000" stroke="#000000" points="413.5001,-428.0597 410,-418.0598 406.5001,-428.0598 413.5001,-428.0597"/>
+<text text-anchor="middle" x="411.3895" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_inner_2 -->
 <g id="node11" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_inner_2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="405,-76 343,-76 343,-40 405,-40 405,-76"/>
-<text text-anchor="start" x="353.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M355.3333,-41C355.3333,-41 392.6667,-41 392.6667,-41 398.3333,-41 404,-46.6667 404,-52.3333 404,-52.3333 404,-63.6667 404,-63.6667 404,-69.3333 398.3333,-75 392.6667,-75 392.6667,-75 355.3333,-75 355.3333,-75 349.6667,-75 344,-69.3333 344,-63.6667 344,-63.6667 344,-52.3333 344,-52.3333 344,-46.6667 349.6667,-41 355.3333,-41"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="441,-76 379,-76 379,-40 441,-40 441,-76"/>
+<text text-anchor="start" x="389.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M391.3333,-41C391.3333,-41 428.6667,-41 428.6667,-41 434.3333,-41 440,-46.6667 440,-52.3333 440,-52.3333 440,-63.6667 440,-63.6667 440,-69.3333 434.3333,-75 428.6667,-75 428.6667,-75 391.3333,-75 391.3333,-75 385.6667,-75 380,-69.3333 380,-63.6667 380,-63.6667 380,-52.3333 380,-52.3333 380,-46.6667 385.6667,-41 391.3333,-41"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_inner_1&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_2 -->
 <g id="edge4" class="edge">
 <title>_parallel_orthogonal_wrapper_state_1_inner_1&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_2</title>
-<path fill="none" stroke="#000000" d="M368.557,-381.97C366.6617,-374.2076 365,-364.9832 365,-356.5 365,-356.5 365,-356.5 365,-93.5 365,-91.0859 365.198,-88.607 365.5352,-86.1355"/>
-<polygon fill="#000000" stroke="#000000" points="368.9918,-86.7008 367.555,-76.2038 362.1322,-85.3057 368.9918,-86.7008"/>
-<text text-anchor="start" x="365" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_2 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M404.557,-381.97C402.6617,-374.2076 401,-364.9832 401,-356.5 401,-356.5 401,-356.5 401,-93.5 401,-91.0859 401.198,-88.607 401.5352,-86.1355"/>
+<polygon fill="#000000" stroke="#000000" points="404.9918,-86.7008 403.555,-76.2038 398.1322,-85.3057 404.9918,-86.7008"/>
+<text text-anchor="start" x="401" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_2 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2 -->
 <!-- _parallel_orthogonal_wrapper_state_2_initial -->
 <g id="node13" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="272" cy="-872.7328" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="308" cy="-872.7328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_3 -->
 <g id="node14" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_inner_3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="303,-418 241,-418 241,-382 303,-382 303,-418"/>
-<text text-anchor="start" x="251.9942" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M253.3333,-383C253.3333,-383 290.6667,-383 290.6667,-383 296.3333,-383 302,-388.6667 302,-394.3333 302,-394.3333 302,-405.6667 302,-405.6667 302,-411.3333 296.3333,-417 290.6667,-417 290.6667,-417 253.3333,-417 253.3333,-417 247.6667,-417 242,-411.3333 242,-405.6667 242,-405.6667 242,-394.3333 242,-394.3333 242,-388.6667 247.6667,-383 253.3333,-383"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="339,-418 277,-418 277,-382 339,-382 339,-418"/>
+<text text-anchor="start" x="287.9942" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M289.3333,-383C289.3333,-383 326.6667,-383 326.6667,-383 332.3333,-383 338,-388.6667 338,-394.3333 338,-394.3333 338,-405.6667 338,-405.6667 338,-411.3333 332.3333,-417 326.6667,-417 326.6667,-417 289.3333,-417 289.3333,-417 283.6667,-417 278,-411.3333 278,-405.6667 278,-405.6667 278,-394.3333 278,-394.3333 278,-388.6667 283.6667,-383 289.3333,-383"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_initial&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_3 -->
 <g id="edge5" class="edge">
 <title>_parallel_orthogonal_wrapper_state_2_initial&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_3</title>
-<path fill="none" stroke="#000000" d="M272,-867.0844C272,-859.9564 272,-847.3195 272,-836.5 272,-836.5 272,-836.5 272,-435.5 272,-433.1079 272,-430.6252 272,-428.1342"/>
-<polygon fill="#000000" stroke="#000000" points="275.5001,-428.0597 272,-418.0598 268.5001,-428.0598 275.5001,-428.0597"/>
-<text text-anchor="middle" x="273.3895" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M308,-867.0844C308,-859.9564 308,-847.3195 308,-836.5 308,-836.5 308,-836.5 308,-435.5 308,-433.1079 308,-430.6252 308,-428.1342"/>
+<polygon fill="#000000" stroke="#000000" points="311.5001,-428.0597 308,-418.0598 304.5001,-428.0598 311.5001,-428.0597"/>
+<text text-anchor="middle" x="309.3895" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_4 -->
 <g id="node15" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_inner_4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="303,-76 241,-76 241,-40 303,-40 303,-76"/>
-<text text-anchor="start" x="251.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M253.3333,-41C253.3333,-41 290.6667,-41 290.6667,-41 296.3333,-41 302,-46.6667 302,-52.3333 302,-52.3333 302,-63.6667 302,-63.6667 302,-69.3333 296.3333,-75 290.6667,-75 290.6667,-75 253.3333,-75 253.3333,-75 247.6667,-75 242,-69.3333 242,-63.6667 242,-63.6667 242,-52.3333 242,-52.3333 242,-46.6667 247.6667,-41 253.3333,-41"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="339,-76 277,-76 277,-40 339,-40 339,-76"/>
+<text text-anchor="start" x="287.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_4</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M289.3333,-41C289.3333,-41 326.6667,-41 326.6667,-41 332.3333,-41 338,-46.6667 338,-52.3333 338,-52.3333 338,-63.6667 338,-63.6667 338,-69.3333 332.3333,-75 326.6667,-75 326.6667,-75 289.3333,-75 289.3333,-75 283.6667,-75 278,-69.3333 278,-63.6667 278,-63.6667 278,-52.3333 278,-52.3333 278,-46.6667 283.6667,-41 289.3333,-41"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_3&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_4 -->
 <g id="edge6" class="edge">
 <title>_parallel_orthogonal_wrapper_state_2_inner_3&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_4</title>
-<path fill="none" stroke="#000000" d="M266.557,-381.97C264.6617,-374.2076 263,-364.9832 263,-356.5 263,-356.5 263,-356.5 263,-93.5 263,-91.0859 263.198,-88.607 263.5352,-86.1355"/>
-<polygon fill="#000000" stroke="#000000" points="266.9918,-86.7008 265.555,-76.2038 260.1322,-85.3057 266.9918,-86.7008"/>
-<text text-anchor="start" x="263" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_4 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M302.557,-381.97C300.6617,-374.2076 299,-364.9832 299,-356.5 299,-356.5 299,-356.5 299,-93.5 299,-91.0859 299.198,-88.607 299.5352,-86.1355"/>
+<polygon fill="#000000" stroke="#000000" points="302.9918,-86.7008 301.555,-76.2038 296.1322,-85.3057 302.9918,-86.7008"/>
+<text text-anchor="start" x="299" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_4 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester -->
 <!-- _parallel_orthogonal_tester_initial -->
 <g id="node17" class="node">
 <title>_parallel_orthogonal_tester_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="71" cy="-1054.2328" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="60" cy="-1054.2328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_tester_start -->
 <g id="node18" class="node">
 <title>_parallel_orthogonal_tester_start</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-890.7328 43,-890.7328 43,-854.7328 99,-854.7328 99,-890.7328"/>
-<text text-anchor="start" x="59.3324" y="-868.9328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">start</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-855.7328C55.3333,-855.7328 86.6667,-855.7328 86.6667,-855.7328 92.3333,-855.7328 98,-861.3995 98,-867.0661 98,-867.0661 98,-878.3995 98,-878.3995 98,-884.0661 92.3333,-889.7328 86.6667,-889.7328 86.6667,-889.7328 55.3333,-889.7328 55.3333,-889.7328 49.6667,-889.7328 44,-884.0661 44,-878.3995 44,-878.3995 44,-867.0661 44,-867.0661 44,-861.3995 49.6667,-855.7328 55.3333,-855.7328"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-890.7328 32,-890.7328 32,-854.7328 88,-854.7328 88,-890.7328"/>
+<text text-anchor="start" x="48.3324" y="-868.9328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">start</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-855.7328C44.3333,-855.7328 75.6667,-855.7328 75.6667,-855.7328 81.3333,-855.7328 87,-861.3995 87,-867.0661 87,-867.0661 87,-878.3995 87,-878.3995 87,-884.0661 81.3333,-889.7328 75.6667,-889.7328 75.6667,-889.7328 44.3333,-889.7328 44.3333,-889.7328 38.6667,-889.7328 33,-884.0661 33,-878.3995 33,-878.3995 33,-867.0661 33,-867.0661 33,-861.3995 38.6667,-855.7328 44.3333,-855.7328"/>
 </g>
 <!-- _parallel_orthogonal_tester_initial&#45;&gt;_parallel_orthogonal_tester_start -->
 <g id="edge9" class="edge">
 <title>_parallel_orthogonal_tester_initial&#45;&gt;_parallel_orthogonal_tester_start</title>
-<path fill="none" stroke="#000000" d="M71,-1048.6987C71,-1041.7148 71,-1029.3335 71,-1018.7328 71,-1018.7328 71,-1018.7328 71,-971.7328 71,-947.9496 71,-920.9525 71,-901.1647"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-900.9793 71,-890.9793 67.5001,-900.9794 74.5001,-900.9793"/>
-<text text-anchor="middle" x="72.3895" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M60,-1048.6987C60,-1041.7148 60,-1029.3335 60,-1018.7328 60,-1018.7328 60,-1018.7328 60,-971.7328 60,-947.9496 60,-920.9525 60,-901.1647"/>
+<polygon fill="#000000" stroke="#000000" points="63.5001,-900.9793 60,-890.9793 56.5001,-900.9794 63.5001,-900.9793"/>
+<text text-anchor="middle" x="61.3895" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_tester_step1 -->
 <g id="node19" class="node">
 <title>_parallel_orthogonal_tester_step1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-772 43,-772 43,-736 99,-736 99,-772"/>
-<text text-anchor="start" x="56.3264" y="-750.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-737C55.3333,-737 86.6667,-737 86.6667,-737 92.3333,-737 98,-742.6667 98,-748.3333 98,-748.3333 98,-759.6667 98,-759.6667 98,-765.3333 92.3333,-771 86.6667,-771 86.6667,-771 55.3333,-771 55.3333,-771 49.6667,-771 44,-765.3333 44,-759.6667 44,-759.6667 44,-748.3333 44,-748.3333 44,-742.6667 49.6667,-737 55.3333,-737"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-772 32,-772 32,-736 88,-736 88,-772"/>
+<text text-anchor="start" x="45.3264" y="-750.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-737C44.3333,-737 75.6667,-737 75.6667,-737 81.3333,-737 87,-742.6667 87,-748.3333 87,-748.3333 87,-759.6667 87,-759.6667 87,-765.3333 81.3333,-771 75.6667,-771 75.6667,-771 44.3333,-771 44.3333,-771 38.6667,-771 33,-765.3333 33,-759.6667 33,-759.6667 33,-748.3333 33,-748.3333 33,-742.6667 38.6667,-737 44.3333,-737"/>
 </g>
 <!-- _parallel_orthogonal_tester_start&#45;&gt;_parallel_orthogonal_tester_step1 -->
 <g id="edge10" class="edge">
 <title>_parallel_orthogonal_tester_start&#45;&gt;_parallel_orthogonal_tester_step1</title>
-<path fill="none" stroke="#000000" d="M71,-854.6715C71,-848.8688 71,-842.413 71,-836.5 71,-836.5 71,-836.5 71,-789.5 71,-787.1079 71,-784.6252 71,-782.1342"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-782.0597 71,-772.0598 67.5001,-782.0598 74.5001,-782.0597"/>
-<text text-anchor="middle" x="72.3895" y="-810" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M55.7677,-854.3973C54.7749,-848.6953 54,-842.366 54,-836.5 54,-836.5 54,-836.5 54,-789.5 54,-787.2146 54.1224,-784.8579 54.3322,-782.4969"/>
+<polygon fill="#000000" stroke="#000000" points="57.8359,-782.7039 55.7033,-772.3259 50.8986,-781.7687 57.8359,-782.7039"/>
+<text text-anchor="start" x="54" y="-810" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^to_inner_2,^to_inner_4 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester_step2 -->
 <g id="node20" class="node">
 <title>_parallel_orthogonal_tester_step2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-654 43,-654 43,-618 99,-618 99,-654"/>
-<text text-anchor="start" x="56.3264" y="-632.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-619C55.3333,-619 86.6667,-619 86.6667,-619 92.3333,-619 98,-624.6667 98,-630.3333 98,-630.3333 98,-641.6667 98,-641.6667 98,-647.3333 92.3333,-653 86.6667,-653 86.6667,-653 55.3333,-653 55.3333,-653 49.6667,-653 44,-647.3333 44,-641.6667 44,-641.6667 44,-630.3333 44,-630.3333 44,-624.6667 49.6667,-619 55.3333,-619"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-654 32,-654 32,-618 88,-618 88,-654"/>
+<text text-anchor="start" x="45.3264" y="-632.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-619C44.3333,-619 75.6667,-619 75.6667,-619 81.3333,-619 87,-624.6667 87,-630.3333 87,-630.3333 87,-641.6667 87,-641.6667 87,-647.3333 81.3333,-653 75.6667,-653 75.6667,-653 44.3333,-653 44.3333,-653 38.6667,-653 33,-647.3333 33,-641.6667 33,-641.6667 33,-630.3333 33,-630.3333 33,-624.6667 38.6667,-619 44.3333,-619"/>
 </g>
 <!-- _parallel_orthogonal_tester_step1&#45;&gt;_parallel_orthogonal_tester_step2 -->
 <g id="edge11" class="edge">
 <title>_parallel_orthogonal_tester_step1&#45;&gt;_parallel_orthogonal_tester_step2</title>
-<path fill="none" stroke="#000000" d="M71,-735.9402C71,-730.3497 71,-724.1701 71,-718.5 71,-718.5 71,-718.5 71,-671.5 71,-669.1079 71,-666.6252 71,-664.1342"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-664.0597 71,-654.0598 67.5001,-664.0598 74.5001,-664.0597"/>
-<text text-anchor="middle" x="72.3895" y="-692" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M60,-735.9402C60,-730.3497 60,-724.1701 60,-718.5 60,-718.5 60,-718.5 60,-671.5 60,-669.1079 60,-666.6252 60,-664.1342"/>
+<polygon fill="#000000" stroke="#000000" points="63.5001,-664.0597 60,-654.0598 56.5001,-664.0598 63.5001,-664.0597"/>
+<text text-anchor="start" x="60" y="-692" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^out.check1,^to_outer &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester_step3 -->
 <g id="node21" class="node">
 <title>_parallel_orthogonal_tester_step3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-536 43,-536 43,-500 99,-500 99,-536"/>
-<text text-anchor="start" x="56.3264" y="-514.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-501C55.3333,-501 86.6667,-501 86.6667,-501 92.3333,-501 98,-506.6667 98,-512.3333 98,-512.3333 98,-523.6667 98,-523.6667 98,-529.3333 92.3333,-535 86.6667,-535 86.6667,-535 55.3333,-535 55.3333,-535 49.6667,-535 44,-529.3333 44,-523.6667 44,-523.6667 44,-512.3333 44,-512.3333 44,-506.6667 49.6667,-501 55.3333,-501"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-536 32,-536 32,-500 88,-500 88,-536"/>
+<text text-anchor="start" x="45.3264" y="-514.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-501C44.3333,-501 75.6667,-501 75.6667,-501 81.3333,-501 87,-506.6667 87,-512.3333 87,-512.3333 87,-523.6667 87,-523.6667 87,-529.3333 81.3333,-535 75.6667,-535 75.6667,-535 44.3333,-535 44.3333,-535 38.6667,-535 33,-529.3333 33,-523.6667 33,-523.6667 33,-512.3333 33,-512.3333 33,-506.6667 38.6667,-501 44.3333,-501"/>
 </g>
 <!-- _parallel_orthogonal_tester_step2&#45;&gt;_parallel_orthogonal_tester_step3 -->
 <g id="edge12" class="edge">
 <title>_parallel_orthogonal_tester_step2&#45;&gt;_parallel_orthogonal_tester_step3</title>
-<path fill="none" stroke="#000000" d="M71,-617.9402C71,-612.3497 71,-606.1701 71,-600.5 71,-600.5 71,-600.5 71,-553.5 71,-551.1079 71,-548.6252 71,-546.1342"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-546.0597 71,-536.0598 67.5001,-546.0598 74.5001,-546.0597"/>
-<text text-anchor="middle" x="72.3895" y="-574" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M57.8839,-617.9651C57.3875,-612.3756 57,-606.1903 57,-600.5 57,-600.5 57,-600.5 57,-553.5 57,-551.0994 57.069,-548.6107 57.186,-546.1158"/>
+<polygon fill="#000000" stroke="#000000" points="60.6848,-546.2528 57.8839,-536.0349 53.7015,-545.7692 60.6848,-546.2528"/>
+<text text-anchor="start" x="57" y="-574" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^out.check2,^to_history &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester_end -->
 <g id="node22" class="node">
 <title>_parallel_orthogonal_tester_end</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-418 43,-418 43,-382 99,-382 99,-418"/>
-<text text-anchor="start" x="60.9938" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">end</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-383C55.3333,-383 86.6667,-383 86.6667,-383 92.3333,-383 98,-388.6667 98,-394.3333 98,-394.3333 98,-405.6667 98,-405.6667 98,-411.3333 92.3333,-417 86.6667,-417 86.6667,-417 55.3333,-417 55.3333,-417 49.6667,-417 44,-411.3333 44,-405.6667 44,-405.6667 44,-394.3333 44,-394.3333 44,-388.6667 49.6667,-383 55.3333,-383"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-418 32,-418 32,-382 88,-382 88,-418"/>
+<text text-anchor="start" x="49.9938" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">end</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-383C44.3333,-383 75.6667,-383 75.6667,-383 81.3333,-383 87,-388.6667 87,-394.3333 87,-394.3333 87,-405.6667 87,-405.6667 87,-411.3333 81.3333,-417 75.6667,-417 75.6667,-417 44.3333,-417 44.3333,-417 38.6667,-417 33,-411.3333 33,-405.6667 33,-405.6667 33,-394.3333 33,-394.3333 33,-388.6667 38.6667,-383 44.3333,-383"/>
 </g>
 <!-- _parallel_orthogonal_tester_step3&#45;&gt;_parallel_orthogonal_tester_end -->
 <g id="edge13" class="edge">
 <title>_parallel_orthogonal_tester_step3&#45;&gt;_parallel_orthogonal_tester_end</title>
-<path fill="none" stroke="#000000" d="M71,-499.9402C71,-494.3497 71,-488.1701 71,-482.5 71,-482.5 71,-482.5 71,-435.5 71,-433.1079 71,-430.6252 71,-428.1342"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-428.0597 71,-418.0598 67.5001,-428.0598 74.5001,-428.0597"/>
-<text text-anchor="middle" x="72.3895" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M60,-499.9402C60,-494.3497 60,-488.1701 60,-482.5 60,-482.5 60,-482.5 60,-435.5 60,-433.1079 60,-430.6252 60,-428.1342"/>
+<polygon fill="#000000" stroke="#000000" points="63.5001,-428.0597 60,-418.0598 56.5001,-428.0598 63.5001,-428.0597"/>
+<text text-anchor="start" x="60" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^out.check3 &#160;&#160;</text>
 </g>
 </g>
 </svg>

+ 58 - 48
test/test_files/semantics/original_semantics/multiple_target+Class1.svg

@@ -4,126 +4,136 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="330pt" height="400pt"
- viewBox="0.00 0.00 330.00 400.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 396)">
+<svg width="568pt" height="430pt"
+ viewBox="0.00 0.00 568.00 430.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 426)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-396 326,-396 326,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-426 564,-426 564,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__parallel</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 302,-8 302,-8 308,-8 314,-14 314,-20 314,-20 314,-242 314,-242 314,-248 308,-254 302,-254 302,-254 20,-254 20,-254 14,-254 8,-248 8,-242 8,-242 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="141.6668" y="-235.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 540,-8 540,-8 546,-8 552,-14 552,-20 552,-20 552,-262 552,-262 552,-268 546,-274 540,-274 540,-274 20,-274 20,-274 14,-274 8,-268 8,-262 8,-262 8,-20 8,-20 8,-14 14,-8 20,-8"/>
+<text text-anchor="start" x="260.6668" y="-255.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__parallel_orthogonal_1</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="30,-16 30,-216 164,-216 164,-16 30,-16"/>
-<text text-anchor="start" x="61.9852" y="-197.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_1</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="30,-16 30,-236 283,-236 283,-16 30,-16"/>
+<text text-anchor="start" x="121.4852" y="-217.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_1</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__parallel_orthogonal_2</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="172,-16 172,-216 306,-216 306,-16 172,-16"/>
-<text text-anchor="start" x="203.9852" y="-197.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_2</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="291,-16 291,-236 544,-236 544,-16 291,-16"/>
+<text text-anchor="start" x="382.4852" y="-217.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_2</text>
 </g>
 <!-- __initial -->
 <g id="node1" class="node">
 <title>__initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="140" cy="-386.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="259" cy="-416.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _next_to_parallel -->
 <g id="node2" class="node">
 <title>_next_to_parallel</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="193,-353 87,-353 87,-317 193,-317 193,-353"/>
-<text text-anchor="start" x="97.655" y="-331.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">next_to_parallel</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M99.3333,-318C99.3333,-318 180.6667,-318 180.6667,-318 186.3333,-318 192,-323.6667 192,-329.3333 192,-329.3333 192,-340.6667 192,-340.6667 192,-346.3333 186.3333,-352 180.6667,-352 180.6667,-352 99.3333,-352 99.3333,-352 93.6667,-352 88,-346.3333 88,-340.6667 88,-340.6667 88,-329.3333 88,-329.3333 88,-323.6667 93.6667,-318 99.3333,-318"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="342.5,-383 175.5,-383 175.5,-337 342.5,-337 342.5,-383"/>
+<text text-anchor="start" x="217.155" y="-366.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">next_to_parallel</text>
+<text text-anchor="start" x="181.6542" y="-346.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^test_output.enter_0</text>
+<polygon fill="#000000" stroke="#000000" points="176,-360 176,-360 343,-360 343,-360 176,-360"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M188.5,-338C188.5,-338 329.5,-338 329.5,-338 335.5,-338 341.5,-344 341.5,-350 341.5,-350 341.5,-370 341.5,-370 341.5,-376 335.5,-382 329.5,-382 329.5,-382 188.5,-382 188.5,-382 182.5,-382 176.5,-376 176.5,-370 176.5,-370 176.5,-350 176.5,-350 176.5,-344 182.5,-338 188.5,-338"/>
 </g>
 <!-- __initial&#45;&gt;_next_to_parallel -->
 <g id="edge1" class="edge">
 <title>__initial&#45;&gt;_next_to_parallel</title>
-<path fill="none" stroke="#000000" d="M140,-380.9886C140,-376.6293 140,-370.1793 140,-363.4801"/>
-<polygon fill="#000000" stroke="#000000" points="143.5001,-363.0122 140,-353.0122 136.5001,-363.0122 143.5001,-363.0122"/>
-<text text-anchor="middle" x="141.3895" y="-364" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M259,-410.876C259,-406.5252 259,-400.1081 259,-393.286"/>
+<polygon fill="#000000" stroke="#000000" points="262.5001,-393.1947 259,-383.1947 255.5001,-393.1947 262.5001,-393.1947"/>
+<text text-anchor="middle" x="260.3895" y="-394" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- ]split0 -->
 <g id="node3" class="node">
 <title>]split0</title>
-<polygon fill="#000000" stroke="#000000" stroke-width="2" points="167,-289 113,-289 113,-282 167,-282 167,-289"/>
-<text text-anchor="middle" x="140" y="-281.9" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000"> </text>
+<polygon fill="#000000" stroke="#000000" stroke-width="2" points="286,-309 232,-309 232,-302 286,-302 286,-309"/>
+<text text-anchor="middle" x="259" y="-301.9" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000"> </text>
 </g>
 <!-- _next_to_parallel&#45;&gt;]split0 -->
 <g id="edge4" class="edge">
 <title>_next_to_parallel&#45;&gt;]split0</title>
-<path fill="none" stroke="#000000" d="M140,-316.8491C140,-311.1375 140,-304.9201 140,-299.5394"/>
-<polygon fill="#000000" stroke="#000000" points="143.5001,-299.1348 140,-289.1348 136.5001,-299.1349 143.5001,-299.1348"/>
-<text text-anchor="middle" x="141.3895" y="-300" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M259,-336.8871C259,-330.8817 259,-324.6018 259,-319.251"/>
+<polygon fill="#000000" stroke="#000000" points="262.5001,-319.0182 259,-309.0182 255.5001,-319.0182 262.5001,-319.0182"/>
+<text text-anchor="middle" x="260.3895" y="-320" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_1_inner_2 -->
 <g id="node8" class="node">
 <title>_parallel_orthogonal_1_inner_2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="100,-178 38,-178 38,-142 100,-142 100,-178"/>
-<text text-anchor="start" x="48.9942" y="-156.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M50.3333,-143C50.3333,-143 87.6667,-143 87.6667,-143 93.3333,-143 99,-148.6667 99,-154.3333 99,-154.3333 99,-165.6667 99,-165.6667 99,-171.3333 93.3333,-177 87.6667,-177 87.6667,-177 50.3333,-177 50.3333,-177 44.6667,-177 39,-171.3333 39,-165.6667 39,-165.6667 39,-154.3333 39,-154.3333 39,-148.6667 44.6667,-143 50.3333,-143"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="219.5,-198 38.5,-198 38.5,-152 219.5,-152 219.5,-198"/>
+<text text-anchor="start" x="109.4942" y="-181.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_2</text>
+<text text-anchor="start" x="44.9834" y="-161.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^test_output.enter_1_2</text>
+<polygon fill="#000000" stroke="#000000" points="39,-175 39,-175 220,-175 220,-175 39,-175"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M51.5,-153C51.5,-153 206.5,-153 206.5,-153 212.5,-153 218.5,-159 218.5,-165 218.5,-165 218.5,-185 218.5,-185 218.5,-191 212.5,-197 206.5,-197 206.5,-197 51.5,-197 51.5,-197 45.5,-197 39.5,-191 39.5,-185 39.5,-185 39.5,-165 39.5,-165 39.5,-159 45.5,-153 51.5,-153"/>
 </g>
 <!-- ]split0&#45;&gt;_parallel_orthogonal_1_inner_2 -->
 <g id="edge5" class="edge">
 <title>]split0&#45;&gt;_parallel_orthogonal_1_inner_2</title>
-<path fill="none" stroke="#000000" d="M135.964,-281.7366C130.1141,-276.1235 119.1939,-265.0322 112,-254 98.3105,-233.0064 86.7601,-206.9433 79.089,-187.5896"/>
-<polygon fill="#000000" stroke="#000000" points="82.3083,-186.2102 75.4403,-178.1429 75.7784,-188.7323 82.3083,-186.2102"/>
-<text text-anchor="middle" x="128.3895" y="-265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M255.2496,-301.7351C241.355,-287.7872 191.9275,-238.1695 159.197,-205.3132"/>
+<polygon fill="#000000" stroke="#000000" points="161.617,-202.7832 152.0799,-198.1687 156.6578,-207.7235 161.617,-202.7832"/>
+<text text-anchor="middle" x="246.3895" y="-285" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_2_inner_4 -->
 <g id="node12" class="node">
 <title>_parallel_orthogonal_2_inner_4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="242,-178 180,-178 180,-142 242,-142 242,-178"/>
-<text text-anchor="start" x="190.9942" y="-156.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M192.3333,-143C192.3333,-143 229.6667,-143 229.6667,-143 235.3333,-143 241,-148.6667 241,-154.3333 241,-154.3333 241,-165.6667 241,-165.6667 241,-171.3333 235.3333,-177 229.6667,-177 229.6667,-177 192.3333,-177 192.3333,-177 186.6667,-177 181,-171.3333 181,-165.6667 181,-165.6667 181,-154.3333 181,-154.3333 181,-148.6667 186.6667,-143 192.3333,-143"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="480.5,-198 299.5,-198 299.5,-152 480.5,-152 480.5,-198"/>
+<text text-anchor="start" x="370.4942" y="-181.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_4</text>
+<text text-anchor="start" x="305.9834" y="-161.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^test_output.enter_2_4</text>
+<polygon fill="#000000" stroke="#000000" points="300,-175 300,-175 481,-175 481,-175 300,-175"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M312.5,-153C312.5,-153 467.5,-153 467.5,-153 473.5,-153 479.5,-159 479.5,-165 479.5,-165 479.5,-185 479.5,-185 479.5,-191 473.5,-197 467.5,-197 467.5,-197 312.5,-197 312.5,-197 306.5,-197 300.5,-191 300.5,-185 300.5,-185 300.5,-165 300.5,-165 300.5,-159 306.5,-153 312.5,-153"/>
 </g>
 <!-- ]split0&#45;&gt;_parallel_orthogonal_2_inner_4 -->
 <g id="edge6" class="edge">
 <title>]split0&#45;&gt;_parallel_orthogonal_2_inner_4</title>
-<path fill="none" stroke="#000000" d="M144.205,-281.7747C150.2948,-276.209 161.6433,-265.1762 169,-254 182.725,-233.1491 193.9745,-207.073 201.3649,-187.678"/>
-<polygon fill="#000000" stroke="#000000" points="204.6813,-188.8009 204.8705,-178.2078 198.1166,-186.3708 204.6813,-188.8009"/>
-<text text-anchor="middle" x="163.3895" y="-265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M262.7793,-301.7351C276.7807,-287.7872 326.5885,-238.1695 359.5707,-205.3132"/>
+<polygon fill="#000000" stroke="#000000" points="362.1281,-207.7059 366.7426,-198.1687 357.1878,-202.7466 362.1281,-207.7059"/>
+<text text-anchor="middle" x="281.3895" y="-285" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel -->
 <!-- _parallel_orthogonal_1 -->
 <!-- _parallel_orthogonal_1_initial -->
 <g id="node6" class="node">
 <title>_parallel_orthogonal_1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="128" cy="-160" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="247" cy="-175" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_1_inner_1 -->
 <g id="node7" class="node">
 <title>_parallel_orthogonal_1_inner_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="156,-60 94,-60 94,-24 156,-24 156,-60"/>
-<text text-anchor="start" x="104.9942" y="-38.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M106.3333,-25C106.3333,-25 143.6667,-25 143.6667,-25 149.3333,-25 155,-30.6667 155,-36.3333 155,-36.3333 155,-47.6667 155,-47.6667 155,-53.3333 149.3333,-59 143.6667,-59 143.6667,-59 106.3333,-59 106.3333,-59 100.6667,-59 95,-53.3333 95,-47.6667 95,-47.6667 95,-36.3333 95,-36.3333 95,-30.6667 100.6667,-25 106.3333,-25"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="274.5,-70 93.5,-70 93.5,-24 274.5,-24 274.5,-70"/>
+<text text-anchor="start" x="164.4942" y="-53.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_1</text>
+<text text-anchor="start" x="99.9834" y="-33.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^test_output.enter_1_1</text>
+<polygon fill="#000000" stroke="#000000" points="94,-47 94,-47 275,-47 275,-47 94,-47"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M106.5,-25C106.5,-25 261.5,-25 261.5,-25 267.5,-25 273.5,-31 273.5,-37 273.5,-37 273.5,-57 273.5,-57 273.5,-63 267.5,-69 261.5,-69 261.5,-69 106.5,-69 106.5,-69 100.5,-69 94.5,-63 94.5,-57 94.5,-57 94.5,-37 94.5,-37 94.5,-31 100.5,-25 106.5,-25"/>
 </g>
 <!-- _parallel_orthogonal_1_initial&#45;&gt;_parallel_orthogonal_1_inner_1 -->
 <g id="edge2" class="edge">
 <title>_parallel_orthogonal_1_initial&#45;&gt;_parallel_orthogonal_1_inner_1</title>
-<path fill="none" stroke="#000000" d="M127.4953,-154.4713C126.9028,-147.493 126,-135.1175 126,-124.5 126,-124.5 126,-124.5 126,-77.5 126,-75.107 125.977,-72.6235 125.938,-70.1322"/>
-<polygon fill="#000000" stroke="#000000" points="129.4354,-69.9735 125.7054,-60.057 122.4372,-70.1351 129.4354,-69.9735"/>
-<text text-anchor="middle" x="127.3895" y="-98" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M243.9873,-170.2876C240.894,-165.5442 235.8587,-158.0798 231,-152 224.4208,-143.7674 215,-145.0386 215,-134.5 215,-134.5 215,-134.5 215,-87.5 215,-84.6914 214.5241,-81.9571 213.6902,-79.3217"/>
+<polygon fill="#000000" stroke="#000000" points="216.8132,-77.74 209.3141,-70.2557 210.5092,-80.7829 216.8132,-77.74"/>
+<text text-anchor="middle" x="216.3895" y="-108" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_2 -->
 <!-- _parallel_orthogonal_2_initial -->
 <g id="node10" class="node">
 <title>_parallel_orthogonal_2_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="270" cy="-160" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="508" cy="-175" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_2_inner_3 -->
 <g id="node11" class="node">
 <title>_parallel_orthogonal_2_inner_3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="298,-60 236,-60 236,-24 298,-24 298,-60"/>
-<text text-anchor="start" x="246.9942" y="-38.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M248.3333,-25C248.3333,-25 285.6667,-25 285.6667,-25 291.3333,-25 297,-30.6667 297,-36.3333 297,-36.3333 297,-47.6667 297,-47.6667 297,-53.3333 291.3333,-59 285.6667,-59 285.6667,-59 248.3333,-59 248.3333,-59 242.6667,-59 237,-53.3333 237,-47.6667 237,-47.6667 237,-36.3333 237,-36.3333 237,-30.6667 242.6667,-25 248.3333,-25"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="535.5,-70 354.5,-70 354.5,-24 535.5,-24 535.5,-70"/>
+<text text-anchor="start" x="425.4942" y="-53.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_3</text>
+<text text-anchor="start" x="360.9834" y="-33.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^test_output.enter_2_3</text>
+<polygon fill="#000000" stroke="#000000" points="355,-47 355,-47 536,-47 536,-47 355,-47"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M367.5,-25C367.5,-25 522.5,-25 522.5,-25 528.5,-25 534.5,-31 534.5,-37 534.5,-37 534.5,-57 534.5,-57 534.5,-63 528.5,-69 522.5,-69 522.5,-69 367.5,-69 367.5,-69 361.5,-69 355.5,-63 355.5,-57 355.5,-57 355.5,-37 355.5,-37 355.5,-31 361.5,-25 367.5,-25"/>
 </g>
 <!-- _parallel_orthogonal_2_initial&#45;&gt;_parallel_orthogonal_2_inner_3 -->
 <g id="edge3" class="edge">
 <title>_parallel_orthogonal_2_initial&#45;&gt;_parallel_orthogonal_2_inner_3</title>
-<path fill="none" stroke="#000000" d="M269.4953,-154.4713C268.9028,-147.493 268,-135.1175 268,-124.5 268,-124.5 268,-124.5 268,-77.5 268,-75.107 267.977,-72.6235 267.938,-70.1322"/>
-<polygon fill="#000000" stroke="#000000" points="271.4354,-69.9735 267.7054,-60.057 264.4372,-70.1351 271.4354,-69.9735"/>
-<text text-anchor="middle" x="269.3895" y="-98" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M504.9873,-170.2876C501.894,-165.5442 496.8587,-158.0798 492,-152 485.4208,-143.7674 476,-145.0386 476,-134.5 476,-134.5 476,-134.5 476,-87.5 476,-84.6914 475.5241,-81.9571 474.6902,-79.3217"/>
+<polygon fill="#000000" stroke="#000000" points="477.8132,-77.74 470.3141,-70.2557 471.5092,-80.7829 477.8132,-77.74"/>
+<text text-anchor="middle" x="477.3895" y="-108" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 </g>
 </svg>

+ 33 - 29
test/test_files/semantics/original_semantics/outer_first+Class1.svg

@@ -4,75 +4,79 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="224pt" height="311pt"
- viewBox="0.00 0.00 223.92 311.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 307)">
+<svg width="337pt" height="331pt"
+ viewBox="0.00 0.00 336.50 331.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 327)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-307 219.923,-307 219.923,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-327 332.5,-327 332.5,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__state1</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 113,-8 113,-8 119,-8 125,-14 125,-20 125,-20 125,-252 125,-252 125,-258 119,-264 113,-264 113,-264 20,-264 20,-264 14,-264 8,-258 8,-252 8,-252 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="50.159" y="-245.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 160,-8 160,-8 166,-8 172,-14 172,-20 172,-20 172,-272 172,-272 172,-278 166,-284 160,-284 160,-284 20,-284 20,-284 14,-284 8,-278 8,-272 8,-272 8,-20 8,-20 8,-14 14,-8 20,-8"/>
+<text text-anchor="start" x="73.659" y="-265.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state1</text>
 </g>
 <!-- __initial -->
 <g id="node1" class="node">
 <title>__initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="117" cy="-297.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="164" cy="-317.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _state1 -->
 <!-- __initial&#45;&gt;_state1 -->
 <g id="edge1" class="edge">
 <title>__initial&#45;&gt;_state1</title>
-<path fill="none" stroke="#000000" d="M117,-291.9623C117,-287.7143 117,-281.3733 117,-274.1925"/>
-<polygon fill="#000000" stroke="#000000" points="120.5001,-273.9976 117,-263.9976 113.5001,-273.9976 120.5001,-273.9976"/>
-<text text-anchor="middle" x="118.3895" y="-275" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M164,-311.9623C164,-307.7143 164,-301.3733 164,-294.1925"/>
+<polygon fill="#000000" stroke="#000000" points="167.5001,-293.9976 164,-283.9976 160.5001,-293.9976 167.5001,-293.9976"/>
+<text text-anchor="middle" x="165.3895" y="-295" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _stateb -->
 <g id="node2" class="node">
 <title>_stateb</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="189,-187 133,-187 133,-151 189,-151 189,-187"/>
-<text text-anchor="start" x="144.659" y="-165.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">stateb</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M145.3333,-152C145.3333,-152 176.6667,-152 176.6667,-152 182.3333,-152 188,-157.6667 188,-163.3333 188,-163.3333 188,-174.6667 188,-174.6667 188,-180.3333 182.3333,-186 176.6667,-186 176.6667,-186 145.3333,-186 145.3333,-186 139.6667,-186 134,-180.3333 134,-174.6667 134,-174.6667 134,-163.3333 134,-163.3333 134,-157.6667 139.6667,-152 145.3333,-152"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="328.5,-207 179.5,-207 179.5,-161 328.5,-161 328.5,-207"/>
+<text text-anchor="start" x="238.159" y="-190.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">stateb</text>
+<text text-anchor="start" x="185.6584" y="-170.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^test_output.in_b</text>
+<polygon fill="#000000" stroke="#000000" points="180,-184 180,-184 329,-184 329,-184 180,-184"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M192.5,-162C192.5,-162 315.5,-162 315.5,-162 321.5,-162 327.5,-168 327.5,-174 327.5,-174 327.5,-194 327.5,-194 327.5,-200 321.5,-206 315.5,-206 315.5,-206 192.5,-206 192.5,-206 186.5,-206 180.5,-200 180.5,-194 180.5,-194 180.5,-174 180.5,-174 180.5,-168 186.5,-162 192.5,-162"/>
 </g>
 <!-- _state1&#45;&gt;_stateb -->
 <g id="edge4" class="edge">
 <title>_state1&#45;&gt;_stateb</title>
-<path fill="none" stroke="#000000" d="M124.9962,-211.1408C128.9147,-206.5544 133.8475,-200.7808 138.7942,-194.9909"/>
-<polygon fill="#000000" stroke="#000000" points="141.6061,-197.0878 145.4408,-187.2113 136.284,-192.5408 141.6061,-197.0878"/>
-<text text-anchor="start" x="137" y="-198" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.event &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M171.9985,-235.4787C180.4731,-230.1586 194.5577,-221.3165 208.6839,-212.4484"/>
+<polygon fill="#000000" stroke="#000000" points="210.6715,-215.3333 217.28,-207.052 206.9496,-209.4047 210.6715,-215.3333"/>
+<text text-anchor="start" x="203" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.event &#160;&#160;</text>
 </g>
 <!-- _state1_initial -->
 <g id="node4" class="node">
 <title>_state1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="44" cy="-220.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="85" cy="-240.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _state1_state1 -->
 <g id="node5" class="node">
 <title>_state1_state1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="72,-134 16,-134 16,-98 72,-98 72,-134"/>
-<text text-anchor="start" x="27.659" y="-112.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M28.3333,-99C28.3333,-99 59.6667,-99 59.6667,-99 65.3333,-99 71,-104.6667 71,-110.3333 71,-110.3333 71,-121.6667 71,-121.6667 71,-127.3333 65.3333,-133 59.6667,-133 59.6667,-133 28.3333,-133 28.3333,-133 22.6667,-133 17,-127.3333 17,-121.6667 17,-121.6667 17,-110.3333 17,-110.3333 17,-104.6667 22.6667,-99 28.3333,-99"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="113,-144 57,-144 57,-108 113,-108 113,-144"/>
+<text text-anchor="start" x="68.659" y="-122.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M69.3333,-109C69.3333,-109 100.6667,-109 100.6667,-109 106.3333,-109 112,-114.6667 112,-120.3333 112,-120.3333 112,-131.6667 112,-131.6667 112,-137.3333 106.3333,-143 100.6667,-143 100.6667,-143 69.3333,-143 69.3333,-143 63.6667,-143 58,-137.3333 58,-131.6667 58,-131.6667 58,-120.3333 58,-120.3333 58,-114.6667 63.6667,-109 69.3333,-109"/>
 </g>
 <!-- _state1_initial&#45;&gt;_state1_state1 -->
 <g id="edge2" class="edge">
 <title>_state1_initial&#45;&gt;_state1_state1</title>
-<path fill="none" stroke="#000000" d="M44,-214.8816C44,-201.8087 44,-168.6145 44,-144.2784"/>
-<polygon fill="#000000" stroke="#000000" points="47.5001,-144.1502 44,-134.1503 40.5001,-144.1503 47.5001,-144.1502"/>
-<text text-anchor="middle" x="45.3895" y="-166" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M85,-234.9774C85,-220.7014 85,-181.7897 85,-154.5583"/>
+<polygon fill="#000000" stroke="#000000" points="88.5001,-154.4162 85,-144.4163 81.5001,-154.4163 88.5001,-154.4162"/>
+<text text-anchor="middle" x="86.3895" y="-181" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _state1_statea -->
 <g id="node6" class="node">
 <title>_state1_statea</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="72,-52 16,-52 16,-16 72,-16 72,-52"/>
-<text text-anchor="start" x="27.659" y="-30.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">statea</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M28.3333,-17C28.3333,-17 59.6667,-17 59.6667,-17 65.3333,-17 71,-22.6667 71,-28.3333 71,-28.3333 71,-39.6667 71,-39.6667 71,-45.3333 65.3333,-51 59.6667,-51 59.6667,-51 28.3333,-51 28.3333,-51 22.6667,-51 17,-45.3333 17,-39.6667 17,-39.6667 17,-28.3333 17,-28.3333 17,-22.6667 22.6667,-17 28.3333,-17"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="164.5,-62 15.5,-62 15.5,-16 164.5,-16 164.5,-62"/>
+<text text-anchor="start" x="74.159" y="-45.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">statea</text>
+<text text-anchor="start" x="21.6584" y="-25.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^test_output.in_a</text>
+<polygon fill="#000000" stroke="#000000" points="16,-39 16,-39 165,-39 165,-39 16,-39"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M28.5,-17C28.5,-17 151.5,-17 151.5,-17 157.5,-17 163.5,-23 163.5,-29 163.5,-29 163.5,-49 163.5,-49 163.5,-55 157.5,-61 151.5,-61 151.5,-61 28.5,-61 28.5,-61 22.5,-61 16.5,-55 16.5,-49 16.5,-49 16.5,-29 16.5,-29 16.5,-23 22.5,-17 28.5,-17"/>
 </g>
 <!-- _state1_state1&#45;&gt;_state1_statea -->
 <g id="edge3" class="edge">
 <title>_state1_state1&#45;&gt;_state1_statea</title>
-<path fill="none" stroke="#000000" d="M44,-97.8015C44,-87.3976 44,-74.1215 44,-62.3768"/>
-<polygon fill="#000000" stroke="#000000" points="47.5001,-62.1476 44,-52.1476 40.5001,-62.1476 47.5001,-62.1476"/>
-<text text-anchor="start" x="44" y="-72" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.event &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M86.036,-107.9735C86.6245,-97.7339 87.3801,-84.5867 88.0735,-72.5218"/>
+<polygon fill="#000000" stroke="#000000" points="91.5814,-72.4827 88.661,-62.2983 84.5929,-72.081 91.5814,-72.4827"/>
+<text text-anchor="start" x="87" y="-82" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.event &#160;&#160;</text>
 </g>
 </g>
 </svg>