Просмотр исходного кода

ncd: add state chart for NCDModuleInst

ambrop7 13 лет назад
Родитель
Сommit
1e195eb96c
2 измененных файлов с 896 добавлено и 0 удалено
  1. 351 0
      ncd/NCDModuleInst.svg
  2. 545 0
      ncd/NCDModuleInst.uxf

+ 351 - 0
ncd/NCDModuleInst.svg

@@ -0,0 +1,351 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
+          'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
+<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" stroke="black" text-rendering="auto" stroke-linecap="square" width="1356" stroke-miterlimit="10" stroke-opacity="1" shape-rendering="auto" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="-20 -20 1356 1030" height="1030" xmlns="http://www.w3.org/2000/svg" font-family="&apos;Dialog&apos;" font-style="normal" stroke-linejoin="miter" font-size="12" stroke-dashoffset="0" image-rendering="auto"
+><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
+  /><g
+  ><g fill="white" font-size="14" font-family="sans-serif" transform="translate(210,90)" stroke="white"
+    ><rect x="0" y="0" width="89" rx="15" opacity="0" ry="15" height="79" stroke="none"
+      /><rect x="0" y="0" fill="none" width="89" rx="15" ry="15" height="79" stroke="black"
+      /><text fill="black" x="34" xml:space="preserve" y="20" stroke="none"
+      >init</text
+      ><line y2="26" fill="none" x1="0" x2="90" stroke="black" y1="26"
+      /><text fill="black" x="7" xml:space="preserve" y="43" stroke="none"
+      >init job</text
+      ><line y2="49" fill="none" x1="0" x2="90" stroke="black" y1="49"
+      /><text fill="black" x="7" xml:space="preserve" y="66" stroke="none"
+      >interp down</text
+      ><rect x="0" y="0" transform="translate(-160,130)" width="129" rx="15" opacity="0" ry="15" height="79" stroke="none"
+      /><rect x="0" y="0" transform="translate(-160,130)" fill="none" width="129" rx="15" ry="15" height="79" stroke="black"
+      /><text fill="black" x="46" xml:space="preserve" y="20" transform="translate(-160,130)" stroke="none"
+      >uninit</text
+      ><line transform="translate(-160,130)" fill="none" x1="0" x2="130" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(-160,130)" stroke="none"
+      >uninit job</text
+      ><line transform="translate(-160,130)" fill="none" x1="0" x2="130" y1="49" y2="49" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="66" transform="translate(-160,130)" stroke="none"
+      >interp dying</text
+      ><rect x="0" y="0" transform="translate(230,400)" width="139" rx="15" opacity="0" ry="15" height="99" stroke="none"
+      /><rect x="0" y="0" transform="translate(230,400)" fill="none" width="139" rx="15" ry="15" height="99" stroke="black"
+      /><text fill="black" x="39" xml:space="preserve" y="20" transform="translate(230,400)" stroke="none"
+      >down die</text
+      ><line transform="translate(230,400)" fill="none" x1="0" x2="140" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(230,400)" stroke="none"
+      >die job</text
+      ><line transform="translate(230,400)" fill="none" x1="0" x2="140" y1="49" y2="49" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="66" transform="translate(230,400)" stroke="none"
+      >interp dying</text
+      ><line transform="translate(230,400)" fill="none" x1="0" x2="140" y1="72" y2="72" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="89" transform="translate(230,400)" stroke="none"
+      >backend down</text
+      ><rect x="0" y="0" transform="translate(580,400)" width="159" rx="15" opacity="0" ry="15" height="99" stroke="none"
+      /><rect x="0" y="0" transform="translate(580,400)" fill="none" width="159" rx="15" ry="15" height="99" stroke="black"
+      /><text fill="black" x="59" xml:space="preserve" y="20" transform="translate(580,400)" stroke="none"
+      >up die</text
+      ><line transform="translate(580,400)" fill="none" x1="0" x2="160" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(580,400)" stroke="none"
+      >die job</text
+      ><line transform="translate(580,400)" fill="none" x1="0" x2="160" y1="49" y2="49" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="66" transform="translate(580,400)" stroke="none"
+      >interp dying</text
+      ><line transform="translate(580,400)" fill="none" x1="0" x2="160" y1="72" y2="72" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="89" transform="translate(580,400)" stroke="none"
+      >backend up</text
+      ><rect x="0" y="0" transform="translate(550,0)" width="239" rx="15" opacity="0" ry="15" height="79" stroke="none"
+      /><rect x="0" y="0" transform="translate(550,0)" fill="none" width="239" rx="15" ry="15" height="79" stroke="black"
+      /><text fill="black" x="112" xml:space="preserve" y="20" transform="translate(550,0)" stroke="none"
+      >up</text
+      ><line transform="translate(550,0)" fill="none" x1="0" x2="240" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(550,0)" stroke="none"
+      >interp up</text
+      ><line transform="translate(550,0)" fill="none" x1="0" x2="240" y1="49" y2="49" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="66" transform="translate(550,0)" stroke="none"
+      >backend up</text
+      ><rect x="0" y="0" transform="translate(410,730)" width="99" rx="15" opacity="0" ry="15" height="99" stroke="none"
+      /><rect x="0" y="0" transform="translate(410,730)" fill="none" width="99" rx="15" ry="15" height="99" stroke="black"
+      /><text fill="black" x="34" xml:space="preserve" y="20" transform="translate(410,730)" stroke="none"
+      >dead</text
+      ><line transform="translate(410,730)" fill="none" x1="0" x2="100" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(410,730)" stroke="none"
+      >interp dead</text
+      ><rect x="0" y="0" transform="translate(550,210)" width="239" rx="15" opacity="0" ry="15" height="79" stroke="none"
+      /><rect x="0" y="0" transform="translate(550,210)" fill="none" width="239" rx="15" ry="15" height="79" stroke="black"
+      /><text fill="black" x="73" xml:space="preserve" y="20" transform="translate(550,210)" stroke="none"
+      >down unclean</text
+      ><line transform="translate(550,210)" fill="none" x1="0" x2="240" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(550,210)" stroke="none"
+      >interp down</text
+      ><line transform="translate(550,210)" fill="none" x1="0" x2="240" y1="49" y2="49" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="66" transform="translate(550,210)" stroke="none"
+      >backend down</text
+      ><rect x="0" y="0" transform="translate(210,0)" width="159" rx="15" opacity="0" ry="15" height="79" stroke="none"
+      /><rect x="0" y="0" transform="translate(210,0)" fill="none" width="159" rx="15" ry="15" height="79" stroke="black"
+      /><text fill="black" x="42" xml:space="preserve" y="20" transform="translate(210,0)" stroke="none"
+      >down clean</text
+      ><line transform="translate(210,0)" fill="none" x1="0" x2="160" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(210,0)" stroke="none"
+      >interp down</text
+      ><line transform="translate(210,0)" fill="none" x1="0" x2="160" y1="49" y2="49" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="66" transform="translate(210,0)" stroke="none"
+      >backend down</text
+      ><rect x="0" y="0" transform="translate(220,210)" width="149" rx="15" opacity="0" ry="15" height="99" stroke="none"
+      /><rect x="0" y="0" transform="translate(220,210)" fill="none" width="149" rx="15" ry="15" height="99" stroke="black"
+      /><text fill="black" x="33" xml:space="preserve" y="20" transform="translate(220,210)" stroke="none"
+      >down pclean</text
+      ><line transform="translate(220,210)" fill="none" x1="0" x2="150" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(220,210)" stroke="none"
+      >clean job</text
+      ><line transform="translate(220,210)" fill="none" x1="0" x2="150" y1="49" y2="49" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="66" transform="translate(220,210)" stroke="none"
+      >interp down</text
+      ><line transform="translate(220,210)" fill="none" x1="0" x2="150" y1="72" y2="72" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="89" transform="translate(220,210)" stroke="none"
+      >backend down</text
+      ><circle fill="black" r="10" cx="10" transform="translate(-110,10)" cy="10" stroke="none"
+      /><line transform="translate(-120,-30)" fill="none" x1="120" x2="75" y1="50" y2="50" stroke="black"
+      /><line transform="translate(-120,-30)" fill="none" x1="75" x2="30" y1="50" y2="50" stroke="black"
+      /><line transform="translate(-120,-30)" fill="none" x1="119" x2="107" y1="50" y2="56" stroke="black"
+      /><line transform="translate(-120,-30)" fill="none" x1="119" x2="107" y1="50" y2="44" stroke="black"
+      /><text fill="black" x="64" xml:space="preserve" y="47" transform="translate(-120,-30)" stroke="none"
+      >Init</text
+      ><rect x="0" y="0" transform="translate(400,580)" width="119" rx="15" opacity="0" ry="15" height="79" stroke="none"
+      /><rect x="0" y="0" transform="translate(400,580)" fill="none" width="119" rx="15" ry="15" height="79" stroke="black"
+      /><text fill="black" x="42" xml:space="preserve" y="20" transform="translate(400,580)" stroke="none"
+      >dying</text
+      ><line transform="translate(400,580)" fill="none" x1="0" x2="120" y1="26" y2="26" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="43" transform="translate(400,580)" stroke="none"
+      >interp dying</text
+      ><line transform="translate(400,580)" fill="none" x1="0" x2="120" y1="49" y2="49" stroke="black"
+      /><text fill="black" x="7" xml:space="preserve" y="66" transform="translate(400,580)" stroke="none"
+      >backend dying</text
+      ><circle fill="none" r="9.5" cx="9.5" transform="translate(450,880)" cy="9.5" stroke="black"
+      /><circle fill="black" r="6" cx="10" transform="translate(450,880)" cy="10" stroke="none"
+      /><line transform="translate(410,800)" fill="none" x1="50" x2="50" y1="80" y2="55" stroke="black"
+      /><line transform="translate(410,800)" fill="none" x1="50" x2="50" y1="55" y2="30" stroke="black"
+      /><line transform="translate(410,800)" fill="none" x1="50" x2="44" y1="79" y2="67" stroke="black"
+      /><line transform="translate(410,800)" fill="none" x1="50" x2="56" y1="79" y2="67" stroke="black"
+      /><text fill="black" x="36" xml:space="preserve" y="52" transform="translate(410,800)" stroke="none"
+      >Free</text
+      ><line transform="translate(-130,20)" fill="none" x1="30" x2="80" y1="110" y2="70" stroke="black"
+      /><line transform="translate(-130,20)" fill="none" x1="80" x2="130" y1="70" y2="30" stroke="black"
+      /><line transform="translate(-130,20)" fill="none" x1="30" x2="35" y1="109" y2="97" stroke="black"
+      /><line transform="translate(-130,20)" fill="none" x1="30" x2="43" y1="109" y2="107" stroke="black"
+      /><text fill="black" x="69" xml:space="preserve" y="67" transform="translate(-130,20)" stroke="none"
+      >Die</text
+      ><line transform="translate(60,-30)" fill="none" x1="150" x2="90" y1="50" y2="50" stroke="black"
+      /><line transform="translate(60,-30)" fill="none" x1="90" x2="30" y1="50" y2="50" stroke="black"
+      /><line transform="translate(60,-30)" fill="none" x1="149" x2="137" y1="50" y2="56" stroke="black"
+      /><line transform="translate(60,-30)" fill="none" x1="149" x2="137" y1="50" y2="44" stroke="black"
+      /><text fill="black" x="66" xml:space="preserve" y="47" transform="translate(60,-30)" stroke="none"
+      >init job</text
+      ><text fill="black" x="53" xml:space="preserve" y="64" transform="translate(60,-30)" stroke="none"
+      >func_new()</text
+      ><line transform="translate(-10,-90)" fill="none" x1="30" x2="30" y1="90" y2="50" stroke="black"
+      /><line transform="translate(-10,-90)" fill="none" x1="30" x2="55" y1="50" y2="50" stroke="black"
+      /><line transform="translate(-10,-90)" fill="none" x1="55" x2="80" y1="50" y2="50" stroke="black"
+      /><line transform="translate(-10,-90)" fill="none" x1="80" x2="80" y1="50" y2="90" stroke="black"
+      /><line transform="translate(-10,-90)" fill="none" x1="30" x2="24" y1="89" y2="77" stroke="black"
+      /><line transform="translate(-10,-90)" fill="none" x1="30" x2="36" y1="89" y2="77" stroke="black"
+      /><text fill="black" x="37" xml:space="preserve" y="47" transform="translate(-10,-90)" stroke="none"
+      >Clean</text
+    ></g
+    ><g stroke-dasharray="8,5" font-size="14" stroke-miterlimit="5" font-family="sans-serif" transform="translate(0,270)" stroke-linecap="butt"
+    ><line y2="630" fill="none" x1="620" x2="110" y1="630"
+      /><line y2="330" fill="none" x1="110" x2="110" y1="630"
+      /><line y2="30" fill="none" x1="110" x2="110" y1="330"
+      /><line stroke-linecap="square" fill="none" x1="619" x2="607" y1="630" y2="636" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" fill="none" x1="619" x2="607" y1="630" y2="624" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="78" stroke-linecap="square" y="627" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >uninit job</text
+      ><text x="34" stroke-linecap="square" y="644" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_dead()</text
+      ><line stroke-linecap="square" transform="translate(320,-130)" fill="none" x1="140" x2="40" y1="350" y2="280" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(320,-130)" fill="none" x1="40" x2="40" y1="280" y2="180" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(320,-130)" fill="none" x1="40" x2="40" y1="180" y2="80" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(320,-130)" fill="none" x1="40" x2="110" y1="80" y2="30" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(320,-130)" fill="none" x1="139" x2="126" y1="349" y2="347" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(320,-130)" fill="none" x1="139" x2="133" y1="349" y2="337" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="29" stroke-linecap="square" y="177" transform="translate(320,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Die</text
+      ><line stroke-linecap="square" transform="translate(440,-260)" fill="none" x1="30" x2="30" y1="80" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(440,-260)" fill="none" x1="30" x2="60" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(440,-260)" fill="none" x1="60" x2="90" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(440,-260)" fill="none" x1="90" x2="90" y1="50" y2="80" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(440,-260)" fill="none" x1="30" x2="24" y1="79" y2="67" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(440,-260)" fill="none" x1="30" x2="36" y1="79" y2="67" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="42" stroke-linecap="square" y="47" transform="translate(440,-260)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Clean</text
+      ><line stroke-linecap="square" transform="translate(550,-210)" fill="none" x1="210" x2="120" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,-210)" fill="none" x1="120" x2="30" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,-210)" fill="none" x1="209" x2="197" y1="50" y2="56" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,-210)" fill="none" x1="209" x2="197" y1="50" y2="44" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="81" stroke-linecap="square" y="47" transform="translate(550,-210)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Up</text
+      ><text x="52" stroke-linecap="square" y="64" transform="translate(550,-210)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_up()</text
+      ><line y2="780" fill="none" x1="500" x2="110" transform="translate(120,-170)" y1="780"
+      /><line y2="460" fill="none" x1="110" x2="110" transform="translate(120,-170)" y1="780"
+      /><line y2="140" fill="none" x1="110" x2="110" transform="translate(120,-170)" y1="460"
+      /><line y2="30" fill="none" x1="110" x2="300" transform="translate(120,-170)" y1="140"
+      /><line stroke-linecap="square" transform="translate(120,-170)" fill="none" x1="499" x2="487" y1="780" y2="786" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(120,-170)" fill="none" x1="499" x2="487" y1="780" y2="774" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="63" stroke-linecap="square" y="457" transform="translate(120,-170)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Dead</text
+      ><text x="34" stroke-linecap="square" y="474" transform="translate(120,-170)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_dead()</text
+      ><line stroke-linecap="square" transform="translate(900,-170)" fill="none" x1="30" x2="160" y1="390" y2="330" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(900,-170)" fill="none" x1="160" x2="160" y1="330" y2="215" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(900,-170)" fill="none" x1="160" x2="160" y1="215" y2="100" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(900,-170)" fill="none" x1="160" x2="100" y1="100" y2="30" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(900,-170)" fill="none" x1="30" x2="38" y1="389" y2="379" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(900,-170)" fill="none" x1="30" x2="43" y1="389" y2="389" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="149" stroke-linecap="square" y="212" transform="translate(900,-170)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Die</text
+      ><line stroke-linecap="square" transform="translate(710,-130)" fill="none" x1="110" x2="110" y1="160" y2="95" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(710,-130)" fill="none" x1="110" x2="110" y1="95" y2="30" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(710,-130)" fill="none" x1="110" x2="104" y1="159" y2="147" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(710,-130)" fill="none" x1="110" x2="116" y1="159" y2="147" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="61" stroke-linecap="square" y="92" transform="translate(710,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Down</text
+      ><text x="32" stroke-linecap="square" y="109" transform="translate(710,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_down()</text
+      ><line y2="790" fill="none" x1="30" x2="530" transform="translate(690,-180)" y1="790"
+      /><line y2="410" fill="none" x1="530" x2="530" transform="translate(690,-180)" y1="790"
+      /><line y2="30" fill="none" x1="530" x2="530" transform="translate(690,-180)" y1="410"
+      /><line y2="30" fill="none" x1="530" x2="310" transform="translate(690,-180)" y1="30"
+      /><line stroke-linecap="square" transform="translate(690,-180)" fill="none" x1="30" x2="42" y1="790" y2="784" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(690,-180)" fill="none" x1="30" x2="42" y1="790" y2="796" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="483" stroke-linecap="square" y="407" transform="translate(690,-180)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Dead</text
+      ><text x="456" stroke-linecap="square" y="424" transform="translate(690,-180)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontent_event_dead()</text
+      ><line stroke-linecap="square" transform="translate(490,290)" fill="none" x1="150" x2="90" y1="110" y2="70" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(490,290)" fill="none" x1="90" x2="30" y1="70" y2="30" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(490,290)" fill="none" x1="149" x2="136" y1="109" y2="108" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(490,290)" fill="none" x1="149" x2="143" y1="109" y2="97" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="67" stroke-linecap="square" y="67" transform="translate(490,290)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >die job</text
+      ><text x="57" stroke-linecap="square" y="84" transform="translate(490,290)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >func_die()</text
+      ><line stroke-linecap="square" transform="translate(550,200)" fill="none" x1="240" x2="135" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,200)" fill="none" x1="135" x2="30" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,200)" fill="none" x1="239" x2="227" y1="50" y2="56" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,200)" fill="none" x1="239" x2="227" y1="50" y2="44" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="96" stroke-linecap="square" y="47" transform="translate(550,200)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Up</text
+      ><line y2="320" fill="none" x1="320" x2="110" transform="translate(300,250)" y1="320"
+      /><line y2="175" fill="none" x1="110" x2="110" transform="translate(300,250)" y1="320"
+      /><line y2="30" fill="none" x1="110" x2="110" transform="translate(300,250)" y1="175"
+      /><line y2="30" fill="none" x1="110" x2="140" transform="translate(300,250)" y1="30"
+      /><line stroke-linecap="square" transform="translate(300,250)" fill="none" x1="319" x2="307" y1="320" y2="326" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(300,250)" fill="none" x1="319" x2="307" y1="320" y2="314" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="63" stroke-linecap="square" y="172" transform="translate(300,250)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Dead</text
+      ><text x="34" stroke-linecap="square" y="189" transform="translate(300,250)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_dead()</text
+      ><line stroke-linecap="square" transform="translate(660,290)" fill="none" x1="30" x2="110" y1="110" y2="70" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(660,290)" fill="none" x1="110" x2="190" y1="70" y2="30" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(660,290)" fill="none" x1="30" x2="38" y1="109" y2="98" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(660,290)" fill="none" x1="30" x2="44" y1="109" y2="109" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="87" stroke-linecap="square" y="67" transform="translate(660,290)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >die job</text
+      ><text x="77" stroke-linecap="square" y="84" transform="translate(660,290)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >func_die()</text
+      ><line stroke-linecap="square" transform="translate(550,230)" fill="none" x1="30" x2="135" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,230)" fill="none" x1="135" x2="240" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,230)" fill="none" x1="30" x2="42" y1="50" y2="44" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,230)" fill="none" x1="30" x2="42" y1="50" y2="56" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="86" stroke-linecap="square" y="47" transform="translate(550,230)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Down</text
+      ><line y2="320" fill="none" x1="30" x2="290" transform="translate(690,250)" y1="320"
+      /><line y2="175" fill="none" x1="290" x2="290" transform="translate(690,250)" y1="320"
+      /><line y2="30" fill="none" x1="290" x2="290" transform="translate(690,250)" y1="175"
+      /><line y2="30" fill="none" x1="290" x2="260" transform="translate(690,250)" y1="30"
+      /><line stroke-linecap="square" transform="translate(690,250)" fill="none" x1="30" x2="42" y1="320" y2="314" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(690,250)" fill="none" x1="30" x2="42" y1="320" y2="326" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="243" stroke-linecap="square" y="172" transform="translate(690,250)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Dead</text
+      ><text x="214" stroke-linecap="square" y="189" transform="translate(690,250)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_dead()</text
+      ><line stroke-linecap="square" transform="translate(530,80)" fill="none" x1="30" x2="140" y1="140" y2="85" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(530,80)" fill="none" x1="140" x2="250" y1="85" y2="30" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(530,80)" fill="none" x1="30" x2="38" y1="139" y2="128" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(530,80)" fill="none" x1="30" x2="44" y1="139" y2="139" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="129" stroke-linecap="square" y="82" transform="translate(530,80)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Die</text
+      ><line stroke-linecap="square" transform="translate(550,10)" fill="none" x1="30" x2="120" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,10)" fill="none" x1="120" x2="210" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,10)" fill="none" x1="30" x2="42" y1="50" y2="44" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(550,10)" fill="none" x1="30" x2="42" y1="50" y2="56" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="102" stroke-linecap="square" y="47" transform="translate(550,10)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Clean</text
+      ><line stroke-linecap="square" transform="translate(870,-130)" fill="none" x1="100" x2="100" y1="30" y2="95" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(870,-130)" fill="none" x1="100" x2="100" y1="95" y2="160" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(870,-130)" fill="none" x1="100" x2="106" y1="30" y2="42" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(870,-130)" fill="none" x1="100" x2="94" y1="30" y2="42" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="61" stroke-linecap="square" y="92" transform="translate(870,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Up</text
+      ><text x="32" stroke-linecap="square" y="109" transform="translate(870,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_up()</text
+      ><line y2="530" fill="none" x1="30" x2="440" transform="translate(690,60)" y1="530"
+      /><line y2="280" fill="none" x1="440" x2="440" transform="translate(690,60)" y1="530"
+      /><line y2="30" fill="none" x1="440" x2="440" transform="translate(690,60)" y1="280"
+      /><line y2="30" fill="none" x1="440" x2="310" transform="translate(690,60)" y1="30"
+      /><line stroke-linecap="square" transform="translate(690,60)" fill="none" x1="30" x2="42" y1="530" y2="524" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(690,60)" fill="none" x1="30" x2="42" y1="530" y2="536" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="393" stroke-linecap="square" y="277" transform="translate(690,60)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Dead</text
+      ><text x="364" stroke-linecap="square" y="294" transform="translate(690,60)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_dead()</text
+      ><line stroke-linecap="square" transform="translate(380,-130)" fill="none" x1="70" x2="70" y1="30" y2="95" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(380,-130)" fill="none" x1="70" x2="70" y1="95" y2="160" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(380,-130)" fill="none" x1="70" x2="76" y1="30" y2="42" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(380,-130)" fill="none" x1="70" x2="64" y1="30" y2="42" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="39" stroke-linecap="square" y="92" transform="translate(380,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >clean job</text
+      ><text x="29" stroke-linecap="square" y="109" transform="translate(380,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >func_clean()</text
+      ><line stroke-linecap="square" transform="translate(470,100)" fill="none" x1="40" x2="40" y1="120" y2="75" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(470,100)" fill="none" x1="40" x2="40" y1="75" y2="30" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(470,100)" fill="none" x1="40" x2="34" y1="119" y2="107" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(470,100)" fill="none" x1="40" x2="46" y1="119" y2="107" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="29" stroke-linecap="square" y="72" transform="translate(470,100)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Die</text
+      ><line stroke-linecap="square" transform="translate(460,-60)" fill="none" x1="30" x2="30" y1="90" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(460,-60)" fill="none" x1="30" x2="55" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(460,-60)" fill="none" x1="55" x2="80" y1="50" y2="50" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(460,-60)" fill="none" x1="80" x2="80" y1="50" y2="90" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(460,-60)" fill="none" x1="30" x2="24" y1="89" y2="77" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(460,-60)" fill="none" x1="30" x2="36" y1="89" y2="77" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="37" stroke-linecap="square" y="47" transform="translate(460,-60)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Clean</text
+      ><line stroke-linecap="square" transform="translate(540,-130)" fill="none" x1="230" x2="130" y1="30" y2="95" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(540,-130)" fill="none" x1="130" x2="30" y1="95" y2="160" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(540,-130)" fill="none" x1="229" x2="222" y1="30" y2="42" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(540,-130)" fill="none" x1="229" x2="216" y1="30" y2="31" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="91" stroke-linecap="square" y="92" transform="translate(540,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Up</text
+      ><text x="64" stroke-linecap="square" y="109" transform="translate(540,-130)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontent_event_up()</text
+      ><line y2="530" fill="none" x1="420" x2="110" transform="translate(200,60)" y1="530"
+      /><line y2="280" fill="none" x1="110" x2="110" transform="translate(200,60)" y1="530"
+      /><line y2="30" fill="none" x1="110" x2="110" transform="translate(200,60)" y1="280"
+      /><line y2="30" fill="none" x1="110" x2="230" transform="translate(200,60)" y1="30"
+      /><line stroke-linecap="square" transform="translate(200,60)" fill="none" x1="419" x2="407" y1="530" y2="536" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(200,60)" fill="none" x1="419" x2="407" y1="530" y2="524" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="63" stroke-linecap="square" y="277" transform="translate(200,60)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Dead</text
+      ><text x="34" stroke-linecap="square" y="294" transform="translate(200,60)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_dead()</text
+      ><line stroke-linecap="square" transform="translate(560,450)" fill="none" x1="110" x2="110" y1="100" y2="65" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(560,450)" fill="none" x1="110" x2="110" y1="65" y2="30" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(560,450)" fill="none" x1="110" x2="104" y1="99" y2="87" stroke-dasharray="none" stroke-miterlimit="10"
+      /><line stroke-linecap="square" transform="translate(560,450)" fill="none" x1="110" x2="116" y1="99" y2="87" stroke-dasharray="none" stroke-miterlimit="10"
+      /><text x="63" stroke-linecap="square" y="62" transform="translate(560,450)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >Backend Dead</text
+      ><text x="34" stroke-linecap="square" y="79" transform="translate(560,450)" stroke-dasharray="none" stroke="none" xml:space="preserve" stroke-miterlimit="10"
+      >frontend_event_dead()</text
+    ></g
+  ></g
+></svg
+>

+ 545 - 0
ncd/NCDModuleInst.uxf

@@ -0,0 +1,545 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<diagram program="umlet" version="11.5">
+  <zoom_level>10</zoom_level>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>210</x>
+      <y>90</y>
+      <w>90</w>
+      <h>80</h>
+    </coordinates>
+    <panel_attributes>init
+--
+init job
+--
+interp down</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>50</x>
+      <y>220</y>
+      <w>130</w>
+      <h>80</h>
+    </coordinates>
+    <panel_attributes>uninit
+--
+uninit job
+--
+interp dying</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>440</x>
+      <y>490</y>
+      <w>140</w>
+      <h>100</h>
+    </coordinates>
+    <panel_attributes>down die
+--
+die job
+--
+interp dying
+--
+backend down</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>790</x>
+      <y>490</y>
+      <w>160</w>
+      <h>100</h>
+    </coordinates>
+    <panel_attributes>up die
+--
+die job
+--
+interp dying
+--
+backend up</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>760</x>
+      <y>90</y>
+      <w>240</w>
+      <h>80</h>
+    </coordinates>
+    <panel_attributes>up
+--
+interp up
+--
+backend up</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>620</x>
+      <y>820</y>
+      <w>100</w>
+      <h>100</h>
+    </coordinates>
+    <panel_attributes>dead
+--
+interp dead</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>760</x>
+      <y>300</y>
+      <w>240</w>
+      <h>80</h>
+    </coordinates>
+    <panel_attributes>down unclean
+--
+interp down
+--
+backend down</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>420</x>
+      <y>90</y>
+      <w>160</w>
+      <h>80</h>
+    </coordinates>
+    <panel_attributes>down clean
+--
+interp down
+--
+backend down</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>430</x>
+      <y>300</y>
+      <w>150</w>
+      <h>100</h>
+    </coordinates>
+    <panel_attributes>down pclean
+--
+clean job
+--
+interp down
+--
+backend down</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.InitialState</type>
+    <coordinates>
+      <x>100</x>
+      <y>100</y>
+      <w>20</w>
+      <h>20</h>
+    </coordinates>
+    <panel_attributes/>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>90</x>
+      <y>60</y>
+      <w>140</w>
+      <h>70</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Init</panel_attributes>
+    <additional_attributes>120;50;30;50</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.State</type>
+    <coordinates>
+      <x>610</x>
+      <y>670</y>
+      <w>120</w>
+      <h>80</h>
+    </coordinates>
+    <panel_attributes>dying
+--
+interp dying
+--
+backend dying</panel_attributes>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.custom.FinalState</type>
+    <coordinates>
+      <x>660</x>
+      <y>970</y>
+      <w>20</w>
+      <h>20</h>
+    </coordinates>
+    <panel_attributes/>
+    <additional_attributes/>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>620</x>
+      <y>890</y>
+      <w>86</w>
+      <h>100</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Free</panel_attributes>
+    <additional_attributes>50;80;50;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>80</x>
+      <y>110</y>
+      <w>150</w>
+      <h>130</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Die</panel_attributes>
+    <additional_attributes>30;110;130;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>270</x>
+      <y>60</y>
+      <w>170</w>
+      <h>94</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+init job
+func_new()</panel_attributes>
+    <additional_attributes>150;50;30;50</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>200</x>
+      <y>0</y>
+      <w>100</w>
+      <h>110</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Clean</panel_attributes>
+    <additional_attributes>30;90;30;50;80;50;80;90</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>0</x>
+      <y>270</y>
+      <w>640</w>
+      <h>674</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;.
+uninit job
+frontend_event_dead()</panel_attributes>
+    <additional_attributes>620;630;110;630;110;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>320</x>
+      <y>140</y>
+      <w>160</w>
+      <h>370</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Die</panel_attributes>
+    <additional_attributes>140;350;40;280;40;80;110;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>440</x>
+      <y>10</y>
+      <w>110</w>
+      <h>100</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Clean</panel_attributes>
+    <additional_attributes>30;80;30;50;90;50;90;80</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>550</x>
+      <y>60</y>
+      <w>230</w>
+      <h>94</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Backend Up
+frontend_event_up()</panel_attributes>
+    <additional_attributes>210;50;30;50</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>120</x>
+      <y>100</y>
+      <w>520</w>
+      <h>800</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;.
+Backend Dead
+frontend_event_dead()</panel_attributes>
+    <additional_attributes>500;780;110;780;110;140;300;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>900</x>
+      <y>100</y>
+      <w>190</w>
+      <h>410</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Die</panel_attributes>
+    <additional_attributes>30;390;160;330;160;100;100;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>710</x>
+      <y>140</y>
+      <w>214</w>
+      <h>180</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Backend Down
+frontend_event_down()</panel_attributes>
+    <additional_attributes>110;160;110;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>690</x>
+      <y>90</y>
+      <w>626</w>
+      <h>810</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;.
+Backend Dead
+frontent_event_dead()</panel_attributes>
+    <additional_attributes>30;790;530;790;530;30;310;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>490</x>
+      <y>560</y>
+      <w>170</w>
+      <h>130</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+die job
+func_die()</panel_attributes>
+    <additional_attributes>150;110;30;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>550</x>
+      <y>470</y>
+      <w>260</w>
+      <h>70</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Backend Up</panel_attributes>
+    <additional_attributes>240;50;30;50</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>300</x>
+      <y>520</y>
+      <w>340</w>
+      <h>340</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;.
+Backend Dead
+frontend_event_dead()</panel_attributes>
+    <additional_attributes>320;320;110;320;110;30;140;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>660</x>
+      <y>560</y>
+      <w>210</w>
+      <h>130</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+die job
+func_die()</panel_attributes>
+    <additional_attributes>30;110;190;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>550</x>
+      <y>500</y>
+      <w>260</w>
+      <h>70</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Backend Down</panel_attributes>
+    <additional_attributes>30;50;240;50</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>690</x>
+      <y>520</y>
+      <w>390</w>
+      <h>340</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;.
+Backend Dead
+frontend_event_dead()</panel_attributes>
+    <additional_attributes>30;320;290;320;290;30;260;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>530</x>
+      <y>350</y>
+      <w>270</w>
+      <h>160</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Die
+</panel_attributes>
+    <additional_attributes>30;140;250;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>550</x>
+      <y>280</y>
+      <w>230</w>
+      <h>70</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Clean</panel_attributes>
+    <additional_attributes>30;50;210;50</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>870</x>
+      <y>140</y>
+      <w>194</w>
+      <h>180</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Backend Up
+frontend_event_up()</panel_attributes>
+    <additional_attributes>100;30;100;160</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>690</x>
+      <y>330</y>
+      <w>540</w>
+      <h>550</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;.
+Backend Dead
+frontend_event_dead()</panel_attributes>
+    <additional_attributes>30;530;440;530;440;30;310;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>380</x>
+      <y>140</y>
+      <w>130</w>
+      <h>180</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+clean job
+func_clean()</panel_attributes>
+    <additional_attributes>70;30;70;160</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>470</x>
+      <y>370</y>
+      <w>70</w>
+      <h>140</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Die</panel_attributes>
+    <additional_attributes>40;120;40;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>460</x>
+      <y>210</y>
+      <w>100</w>
+      <h>110</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Clean</panel_attributes>
+    <additional_attributes>30;90;30;50;80;50;80;90</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>540</x>
+      <y>140</y>
+      <w>250</w>
+      <h>180</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Backend Up
+frontent_event_up()</panel_attributes>
+    <additional_attributes>230;30;30;160</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>200</x>
+      <y>330</y>
+      <w>440</w>
+      <h>550</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;.
+Backend Dead
+frontend_event_dead()</panel_attributes>
+    <additional_attributes>420;530;110;530;110;30;230;30</additional_attributes>
+  </element>
+  <element>
+    <type>com.umlet.element.Relation</type>
+    <coordinates>
+      <x>560</x>
+      <y>720</y>
+      <w>210</w>
+      <h>120</h>
+    </coordinates>
+    <panel_attributes>lt=&lt;-
+Backend Dead
+frontend_event_dead()</panel_attributes>
+    <additional_attributes>110;100;110;30</additional_attributes>
+  </element>
+</diagram>