You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/04/21 12:43:44 UTC

[17/39] incubator-tinkerpop git commit: fixed up IO section of docs for @dkuppitz and added a new adjacency-list graphic.

fixed up IO section of docs for @dkuppitz and added a new adjacency-list graphic.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/5f9e24df
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/5f9e24df
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/5f9e24df

Branch: refs/heads/refactor-io
Commit: 5f9e24df8e84d846e8ed842ee87b86a7098a0478
Parents: bfc6566
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Apr 20 09:39:12 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Apr 20 09:39:12 2015 -0600

----------------------------------------------------------------------
 docs/src/implementations.asciidoc     |   46 +-
 docs/src/the-graph.asciidoc           |    3 +-
 docs/static/images/adjacency-list.png |  Bin 0 -> 36192 bytes
 docs/static/images/tinkerpop3.graffle | 1334 ++++++++++++++++++++++++++--
 4 files changed, 1295 insertions(+), 88 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5f9e24df/docs/src/implementations.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/implementations.asciidoc b/docs/src/implementations.asciidoc
index 090059e..acfd291 100644
--- a/docs/src/implementations.asciidoc
+++ b/docs/src/implementations.asciidoc
@@ -692,16 +692,17 @@ MapReduceGraphComputer
 Input/Output Formats
 ~~~~~~~~~~~~~~~~~~~~
 
-GraphSON IO Format
-^^^^^^^^^^^^^^^^^^
+image:adjacency-list.png[width=300,float=right] Hadoop-Gremlin provides various I/O formats -- i.e. Hadoop `InputFormat` and `OutputFormat`. All of the formats make use of an link:http://en.wikipedia.org/wiki/Adjacency_list[adjacency list] representation of the graph where each "row" represents a single vertex, its properties, and its incoming and outgoing edges.
+
+{empty} +
+
+GraphSON I/O Format
+^^^^^^^^^^^^^^^^^^^
 
 * **InputFormat**: `org.apache.tinkerpop.gremlin.hadoop.structure.io.graphson.GraphSONInputFormat`
 * **OutputFormat**: `org.apache.tinkerpop.gremlin.hadoop.structure.io.graphson.GraphSONOutputFormat`
 
-GraphSON is a JSON based graph format. Hadoop-Gremlin makes use of a slight variation of the typical form that is:
-
-* **vertex-centric**: a row in a Hadoop-Gremlin GraphSON file is a vertex, its properties, and its incident edges (and their respective properties).
-* **less verbose**: a row does not include both `_inV` and `_outV` ids as one of the ids can be inferred from the incident vertex.
+<<graphson-reader-writer,GraphSON>> is a JSON based graph format. GraphSON is a space-expensive graph format in that it is a text-based markup language. However, it is convenient for many developers to work with as its structure is simple (easy to create and parse).
 
 The data below represents an adjacency list representation of the classic TinkerGraph toy graph in GraphSON format.
 
@@ -713,25 +714,23 @@ The data below represents an adjacency list representation of the classic Tinker
 {"inE":[{"inV":5,"inVLabel":"vertex","outVLabel":"vertex","id":10,"label":"created","type":"edge","outV":4,"properties":{"weight":1.0}}],"outE":[],"id":5,"label":"vertex","type":"vertex","properties":{"name":[{"id":8,"label":"name","value":"ripple","properties":{}}],"lang":[{"id":9,"label":"lang","value":"java","properties":{}}]}}
 {"inE":[],"outE":[{"inV":3,"inVLabel":"vertex","outVLabel":"vertex","id":12,"label":"created","type":"edge","outV":6,"properties":{"weight":0.2}}],"id":6,"label":"vertex","type":"vertex","properties":{"name":[{"id":10,"label":"name","value":"peter","properties":{}}],"age":[{"id":11,"label":"age","value":35,"properties":{}}]}}
 
-GraphSON is a space-expensive graph format in that it is a text-based markup language. However, it is convenient for many developers to work with as its structure is simple (easy to create and parse).
-
-
-Gryo IO Format
-^^^^^^^^^^^^^^
+Gryo I/O Format
+^^^^^^^^^^^^^^^
 
 * **InputFormat**: `org.apache.tinkerpop.gremlin.hadoop.structure.io.gryo.GryoInputFormat`
 * **OutputFormat**: `org.apache.tinkerpop.gremlin.hadoop.structure.io.gryo.GryoOutputFormat`
 
-Gryo is a binary graph format. Given that it's compact and splittable, Gremlin-Hadoop makes use of the Gryo IO Format as the intermediate representation between consecutive Gremlin-Hadoop jobs. In other words, when a Gremlin-Hadoop job requires more than one MapReduce phase, a Gryo file representing the output of the first MapReduce job is temporarily persisted in HDFS and fed as the input to the second MapReduce job.
+<<gryo-reader-writer,Gryo>> is a binary graph format that leverages link:https://github.com/EsotericSoftware/kryo[Kryo] to make a compact, binary representation of a vertex. It is recommended that users leverage Gryo given its space/time savings over text-based representations.
 
+NOTE: The `GryoInputFormat` is splittable.
 
-Script IO Format
-^^^^^^^^^^^^^^^^
+Script I/O Format
+^^^^^^^^^^^^^^^^^
 
 * **InputFormat**: `org.apache.tinkerpop.gremlin.hadoop.structure.io.script.ScriptInputFormat`
 * **OutputFormat**: `org.apache.tinkerpop.gremlin.hadoop.structure.io.script.ScriptOutputFormat`
 
-`ScriptInutFormat` and `ScriptOutputFormat` take an arbitrary script and use that script to either read or write Vertex objects, respectively. This can be considered the most general `InputFormat`/`OutputFormat` possible in that link:http://www.tinkerpop.com/docs/3.0.0-SNAPSHOT/#hadoop-gremlin[Hadoop-Gremlin] uses the user provided script for all reading/writing.
+`ScriptInputFormat` and `ScriptOutputFormat` take an arbitrary script and use that script to either read or write `Vertex` objects, respectively. This can be considered the most general `InputFormat`/`OutputFormat` possible in that Hadoop-Gremlin uses the user provided script for all reading/writing.
 
 ScriptInputFormat
 +++++++++++++++++
@@ -766,19 +765,19 @@ def parse(line, factory) {
     def parts = line.split(/ /)
     def (id, label, name, x) = parts[0].split(/:/).toList()
     def v1 = factory.vertex(id, label)
-    if (name != null) v1.property("name", name) // first value is always the name
+    if (name != null) v1.property('name', name) // first value is always the name
     if (x != null) {
         // second value depends on the vertex label; it's either
         // the age of a person or the language of a project
-        if (label.equals("project")) v1.property("lang", x)
-        else v1.property("age", Integer.valueOf(x))
+        if (label.equals('project')) v1.property('lang', x)
+        else v1.property('age', Integer.valueOf(x))
     }
     if (parts.length == 2) {
         parts[1].split(/,/).grep { !it.isEmpty() }.each {
             def (eLabel, refId, weight) = it.split(/:/).toList()
             def v2 = factory.vertex(refId)
             def edge = factory.edge(v1, v2, eLabel)
-            edge.property("weight", Double.valueOf(weight))
+            edge.property('weight', Double.valueOf(weight))
         }
     }
     return v1
@@ -798,12 +797,12 @@ An appropriate `stringify()` to produce output in the same format that was shown
 
 [source,groovy]
 def stringify(vertex) {
-    def v = vertex.values("name", "age", "lang").inject(vertex.id(), vertex.label()).join(":")
+    def v = vertex.values('name', 'age', 'lang').inject(vertex.id(), vertex.label()).join(':')
     def outE = vertex.outE().map {
         def e = it.get()
-        e.values("weight").inject(e.label(), e.inV().next().id()).join(":")
-    }.join(",")
-    return [v, outE].join("\t")
+        e.values('weight').inject(e.label(), e.inV().next().id()).join(':')
+    }.join(',')
+    return [v, outE].join('\t')
 }
 
 Interacting with HDFS
@@ -822,7 +821,6 @@ gremlin> hdfs.ls()
 ==>rw-r--r-- marko supergroup 1439 tinkerpop-modern-vertices.kryo
 gremlin> hdfs.ls('output')
 ==>rwxr-xr-x marko supergroup 0 (D) a
-==>rwxr-xr-x marko supergroup 0 (D) ~g
 gremlin> hdfs.ls('output/a')
 ==>rw-r--r-- marko supergroup 0 _SUCCESS
 ==>rwxr-xr-x marko supergroup 0 (D) _logs

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5f9e24df/docs/src/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/the-graph.asciidoc b/docs/src/the-graph.asciidoc
index 85365c1..f5f06b9 100644
--- a/docs/src/the-graph.asciidoc
+++ b/docs/src/the-graph.asciidoc
@@ -385,6 +385,7 @@ try (final InputStream stream = new FileInputStream("tinkerpop-modern.xml")) {
 }
 ----
 
+[[graphson-reader-writer]]
 GraphSON Reader/Writer
 ~~~~~~~~~~~~~~~~~~~~~~
 
@@ -621,7 +622,7 @@ In the above code, the `embedTypes` option is set to `true` and the output below
 
 The ambiguity of components of the GraphSON is now removed by the `@class` property, which contains Java class information for the data it is associated with.  The `@class` property is used for all non-final types, with the exception of a small number of "natural" types (String, Boolean, Integer, and Double) which can be correctly inferred from JSON typing.  While the output is more verbose, it comes with the security of not losing type information.  While non-JVM languages won't be able to consume this information automatically, at least there is a hint as to how the values should be coerced back into the correct types in the target language.
 
-[[gremlin-kryo]]
+[[gryo-reader-writer]]
 Gryo Reader/Writer
 ~~~~~~~~~~~~~~~~~~
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5f9e24df/docs/static/images/adjacency-list.png
----------------------------------------------------------------------
diff --git a/docs/static/images/adjacency-list.png b/docs/static/images/adjacency-list.png
new file mode 100644
index 0000000..e6726fd
Binary files /dev/null and b/docs/static/images/adjacency-list.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5f9e24df/docs/static/images/tinkerpop3.graffle
----------------------------------------------------------------------
diff --git a/docs/static/images/tinkerpop3.graffle b/docs/static/images/tinkerpop3.graffle
index 61c7db0..626b191 100644
--- a/docs/static/images/tinkerpop3.graffle
+++ b/docs/static/images/tinkerpop3.graffle
@@ -148438,7 +148438,7 @@
 	<key>MasterSheets</key>
 	<array/>
 	<key>ModificationDate</key>
-	<string>2015-04-06 15:38:31 +0000</string>
+	<string>2015-04-20 15:29:36 +0000</string>
 	<key>Modifier</key>
 	<string>Marko Rodriguez</string>
 	<key>NotesVisible</key>
@@ -212521,8 +212521,8 @@ lang:java}</string>
 					<integer>154</integer>
 					<key>Points</key>
 					<array>
-						<string>{411.12995833633272, 249.17537096233991}</string>
-						<string>{393.34156685592802, 263.82463264639244}</string>
+						<string>{411.12995833633278, 249.17537096233991}</string>
+						<string>{393.34156685592797, 263.8246326463925}</string>
 					</array>
 					<key>Style</key>
 					<dict>
@@ -217507,8 +217507,8 @@ lang:java}</string>
 							<integer>142</integer>
 							<key>Points</key>
 							<array>
-								<string>{432.31558180663797, 157.68958738721886}</string>
-								<string>{428.44294795917932, 154.48274935358782}</string>
+								<string>{432.31558180663797, 157.68958738721889}</string>
+								<string>{428.44294795917938, 154.48274935358785}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -228423,8 +228423,8 @@ endTime:2001}</string>
 					<integer>48</integer>
 					<key>Points</key>
 					<array>
-						<string>{207.56428733349856, 306.90079234700102}</string>
-						<string>{275.56067070483158, 339.75387073893654}</string>
+						<string>{207.56428733349856, 306.90079234700096}</string>
+						<string>{275.56067070483152, 339.75387073893648}</string>
 					</array>
 					<key>Style</key>
 					<dict>
@@ -247345,8 +247345,8 @@ endTime:2001}</string>
 							<integer>833</integer>
 							<key>Points</key>
 							<array>
-								<string>{105.52240403029504, 208.3100188140665}</string>
-								<string>{105.63736150330095, 212.65601058722137}</string>
+								<string>{105.52240408494099, 208.31001881262998}</string>
+								<string>{105.63736159747532, 212.65601058474579}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247378,8 +247378,8 @@ endTime:2001}</string>
 							<integer>834</integer>
 							<key>Points</key>
 							<array>
-								<string>{93.331422242558062, 215.70135517219023}</string>
-								<string>{98.654531776153462, 217.66213773341005}</string>
+								<string>{93.331422242689513, 215.70135517183266}</string>
+								<string>{98.654531776548254, 217.66213773233616}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247444,8 +247444,8 @@ endTime:2001}</string>
 							<integer>836</integer>
 							<key>Points</key>
 							<array>
-								<string>{100.21217967313495, 238.89697600430461}</string>
-								<string>{105.91488367654856, 245.27828248892104}</string>
+								<string>{100.21217967313549, 238.89697600430412}</string>
+								<string>{105.91488367655013, 245.27828248891964}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247477,8 +247477,8 @@ endTime:2001}</string>
 							<integer>837</integer>
 							<key>Points</key>
 							<array>
-								<string>{120.05186741437218, 243.60060621851554}</string>
-								<string>{113.0856676721661, 246.78076127235684}</string>
+								<string>{120.05186740484737, 243.6006061976436}</string>
+								<string>{113.08566765786165, 246.78076124101128}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247510,8 +247510,8 @@ endTime:2001}</string>
 							<integer>838</integer>
 							<key>Points</key>
 							<array>
-								<string>{130.57075904798424, 262.18129383817126}</string>
-								<string>{125.06911274984924, 263.81727597372048}</string>
+								<string>{130.5707590466703, 262.18129383373827}</string>
+								<string>{125.06911274687776, 263.81727596369541}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247543,8 +247543,8 @@ endTime:2001}</string>
 							<integer>839</integer>
 							<key>Points</key>
 							<array>
-								<string>{116.15985324700489, 260.40897171735179}</string>
-								<string>{111.32857272868951, 252.5470749258003}</string>
+								<string>{116.15985324700752, 260.4089717173502}</string>
+								<string>{111.32857272869616, 252.54707492579618}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247577,7 +247577,7 @@ endTime:2001}</string>
 							<key>Points</key>
 							<array>
 								<string>{107.28622204221787, 264.95973627295768}</string>
-								<string>{108.48506035797377, 253.1963134696845}</string>
+								<string>{108.48506035797375, 253.1963134696845}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247609,8 +247609,8 @@ endTime:2001}</string>
 							<integer>841</integer>
 							<key>Points</key>
 							<array>
-								<string>{108.63067853348939, 291.16607222356322}</string>
-								<string>{114.28915500094197, 297.78906313757636}</string>
+								<string>{108.63067853348943, 291.16607222356316}</string>
+								<string>{114.28915500094216, 297.78906313757631}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247642,8 +247642,8 @@ endTime:2001}</string>
 							<integer>842</integer>
 							<key>Points</key>
 							<array>
-								<string>{118.22300918817062, 298.0366084071386}</string>
-								<string>{123.67765004029698, 293.07492070790607}</string>
+								<string>{118.22300918811058, 298.03660840707266}</string>
+								<string>{123.67765004008055, 293.07492070766858}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247675,8 +247675,8 @@ endTime:2001}</string>
 							<integer>843</integer>
 							<key>Points</key>
 							<array>
-								<string>{105.45810336850954, 280.63059710466632}</string>
-								<string>{106.27117009328316, 274.00116179971627}</string>
+								<string>{105.45810336836132, 280.63059710464819}</string>
+								<string>{106.27117009297022, 274.00116179967819}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247708,8 +247708,8 @@ endTime:2001}</string>
 							<integer>844</integer>
 							<key>Points</key>
 							<array>
-								<string>{102.04876077774966, 226.96183307128487}</string>
-								<string>{99.433513409899675, 231.55140536390201}</string>
+								<string>{102.04876075241448, 226.96183305682845}</string>
+								<string>{99.433513367086988, 231.55140533947281}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247741,8 +247741,8 @@ endTime:2001}</string>
 							<integer>845</integer>
 							<key>Points</key>
 							<array>
-								<string>{93.50285959490364, 287.07465081623042}</string>
-								<string>{98.721662339079643, 286.85223980477372}</string>
+								<string>{93.502859594886559, 287.07465081582734}</string>
+								<string>{98.72166233903107, 286.85223980362696}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247774,8 +247774,8 @@ endTime:2001}</string>
 							<integer>846</integer>
 							<key>Points</key>
 							<array>
-								<string>{159.43731397913405, 205.84687693941407}</string>
-								<string>{162.35514868127774, 208.67371295169653}</string>
+								<string>{159.43731414980377, 205.84687676336159}</string>
+								<string>{162.35514896731198, 208.67371265664104}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247807,8 +247807,8 @@ endTime:2001}</string>
 							<integer>847</integer>
 							<key>Points</key>
 							<array>
-								<string>{161.23890209607933, 213.05815791344412}</string>
-								<string>{155.15923175253209, 214.74885405344486}</string>
+								<string>{161.23890209574947, 213.05815791225373}</string>
+								<string>{155.15923175174476, 214.74885405060346}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247840,8 +247840,8 @@ endTime:2001}</string>
 							<integer>848</integer>
 							<key>Points</key>
 							<array>
-								<string>{162.56243984296631, 222.63477028615461}</string>
-								<string>{166.19630023458282, 223.00523794504238}</string>
+								<string>{162.56243990273416, 222.63476969645922}</string>
+								<string>{166.19630037145237, 223.00523659462658}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247873,8 +247873,8 @@ endTime:2001}</string>
 							<integer>849</integer>
 							<key>Points</key>
 							<array>
-								<string>{168.78580754083944, 215.10846427118236}</string>
-								<string>{169.5950657085998, 215.9448375789141}</string>
+								<string>{168.79233034099153, 215.10213683409572}</string>
+								<string>{169.60321976391066, 215.93685289937744}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247906,8 +247906,8 @@ endTime:2001}</string>
 							<integer>850</integer>
 							<key>Points</key>
 							<array>
-								<string>{183.94200051992217, 233.83165400902206}</string>
-								<string>{184.80121324579733, 235.15210129191226}</string>
+								<string>{183.94247138049354, 233.83134696888808}</string>
+								<string>{184.80174841130375, 235.15175216273306}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247939,8 +247939,8 @@ endTime:2001}</string>
 							<integer>851</integer>
 							<key>Points</key>
 							<array>
-								<string>{175.24913725059324, 235.44080899813503}</string>
-								<string>{174.40161903293651, 239.40563672732344}</string>
+								<string>{175.24913584438843, 235.44080869892082}</string>
+								<string>{174.40161713189687, 239.40563632281714}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -247972,8 +247972,8 @@ endTime:2001}</string>
 							<integer>852</integer>
 							<key>Points</key>
 							<array>
-								<string>{173.92627549970555, 248.37919269665824}</string>
-								<string>{174.71179922172865, 255.85018463435762}</string>
+								<string>{173.92627550037102, 248.37919269658866}</string>
+								<string>{174.7117992234929, 255.85018463417322}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248426,7 +248426,7 @@ endTime:2001}</string>
 							<key>Points</key>
 							<array>
 								<string>{162.31406161317949, 239.75189222681848}</string>
-								<string>{170.48263333262153, 257.03200725594502}</string>
+								<string>{170.48263333262159, 257.03200725594496}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248458,8 +248458,8 @@ endTime:2001}</string>
 							<integer>866</integer>
 							<key>Points</key>
 							<array>
-								<string>{144.5279522224894, 248.24181403781614}</string>
-								<string>{148.15905792004799, 252.00481950796657}</string>
+								<string>{144.52796784439431, 248.24179895285823}</string>
+								<string>{148.15907889641588, 252.00479925247197}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248524,8 +248524,8 @@ endTime:2001}</string>
 							<integer>868</integer>
 							<key>Points</key>
 							<array>
-								<string>{151.67980343045804, 286.44727021079694}</string>
-								<string>{149.25206386874544, 294.20494474688684}</string>
+								<string>{151.67980343039275, 286.44727021077659}</string>
+								<string>{149.25206386859193, 294.20494474683892}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248662,8 +248662,8 @@ endTime:2001}</string>
 							<integer>872</integer>
 							<key>Points</key>
 							<array>
-								<string>{158.30376887390227, 284.2902307202425}</string>
-								<string>{162.57830127756046, 287.45935204713572}</string>
+								<string>{158.30376897028509, 284.29023059058028}</string>
+								<string>{162.57830145926638, 287.45935180268981}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248695,8 +248695,8 @@ endTime:2001}</string>
 							<integer>873</integer>
 							<key>Points</key>
 							<array>
-								<string>{172.11519751861155, 281.36045772624959}</string>
-								<string>{171.04736859995992, 284.72178649020134}</string>
+								<string>{172.11508225554951, 281.36042121351852}</string>
+								<string>{171.04722230483219, 284.72174014425366}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248761,8 +248761,8 @@ endTime:2001}</string>
 							<integer>875</integer>
 							<key>Points</key>
 							<array>
-								<string>{143.63683143705023, 202.97385223022545}</string>
-								<string>{149.14894806624338, 202.34555971560366}</string>
+								<string>{143.63683101175044, 202.97384847746898}</string>
+								<string>{149.14894746079224, 202.34555437325542}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248794,8 +248794,8 @@ endTime:2001}</string>
 							<integer>876</integer>
 							<key>Points</key>
 							<array>
-								<string>{112.29024516438258, 216.18315264170525}</string>
-								<string>{119.58822631367659, 211.51538189673749}</string>
+								<string>{112.29024510905514, 216.18315255538488}</string>
+								<string>{119.5882261957522, 211.51538171275507}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248827,8 +248827,8 @@ endTime:2001}</string>
 							<integer>877</integer>
 							<key>Points</key>
 							<array>
-								<string>{120.86900144778934, 229.37865256488112}</string>
-								<string>{112.39567531047626, 224.26518336544657}</string>
+								<string>{120.86900147638671, 229.37865251757736}</string>
+								<string>{112.39567535762028, 224.26518328746423}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -248860,8 +248860,8 @@ endTime:2001}</string>
 							<integer>878</integer>
 							<key>Points</key>
 							<array>
-								<string>{82.683863244162524, 237.10127510276209}</string>
-								<string>{83.628230255244361, 245.16711254704902}</string>
+								<string>{82.683863249710825, 237.1012751021162}</string>
+								<string>{83.628230268289229, 245.16711254553044}</string>
 							</array>
 							<key>Style</key>
 							<dict>
@@ -254483,6 +254483,1209 @@ program}</string>
 			<key>VPages</key>
 			<integer>1</integer>
 		</dict>
+		<dict>
+			<key>ActiveLayerIndex</key>
+			<integer>0</integer>
+			<key>AutoAdjust</key>
+			<true/>
+			<key>BackgroundGraphic</key>
+			<dict>
+				<key>Bounds</key>
+				<string>{{0, 0}, {576.00000953674316, 733}}</string>
+				<key>Class</key>
+				<string>SolidGraphic</string>
+				<key>ID</key>
+				<integer>2</integer>
+				<key>Style</key>
+				<dict>
+					<key>shadow</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+					<key>stroke</key>
+					<dict>
+						<key>Draws</key>
+						<string>NO</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>BaseZoom</key>
+			<integer>0</integer>
+			<key>CanvasOrigin</key>
+			<string>{0, 0}</string>
+			<key>ColumnAlign</key>
+			<integer>1</integer>
+			<key>ColumnSpacing</key>
+			<real>36</real>
+			<key>DisplayScale</key>
+			<string>1 0/72 in = 1.0000 in</string>
+			<key>GraphicsList</key>
+			<array>
+				<dict>
+					<key>Bounds</key>
+					<string>{{333.32059001922607, 91.394824981689453}, {44, 28}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>213</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\b\fs24 \cf0 outoing\
+edges}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{245.50003337860107, 91.535919189453125}, {54, 28}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>212</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\b\fs24 \cf0 incoming\
+edges}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{125.14100646972656, 98.394828796386719}, {36, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>211</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\b\fs24 \cf0 vertex}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{171.00000381469727, 98.394828796386719}, {59, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>210</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\b\fs24 \cf0 properties}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{172.50000262260437, 206.90742111206055}, {16, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>ID</key>
+					<integer>209</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 k/v}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{172.49999856948853, 174.18954086303711}, {51, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>ID</key>
+					<integer>208</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 k/v,k/v,k/v}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{171.00000429153442, 153.47166061401367}, {34, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>ID</key>
+					<integer>207</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 k/v,k/v}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>205</integer>
+					<key>Points</key>
+					<array>
+						<string>{345.32059574127197, 213.40742111206055}</string>
+						<string>{366.32059574127197, 213.40742111206055}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>204</integer>
+					<key>Points</key>
+					<array>
+						<string>{321.32059574127197, 213.40742111206055}</string>
+						<string>{342.32059574127197, 213.40742111206055}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>203</integer>
+					<key>Points</key>
+					<array>
+						<string>{344.82059574127197, 180.68951034545898}</string>
+						<string>{365.82059574127197, 180.68951034545898}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>202</integer>
+					<key>Points</key>
+					<array>
+						<string>{321.32059574127197, 180.68952560424805}</string>
+						<string>{342.32059574127197, 180.68952560424805}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>201</integer>
+					<key>Points</key>
+					<array>
+						<string>{321.32058668136597, 159.97164535522461}</string>
+						<string>{342.32058668136597, 159.97164535522461}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>200</integer>
+					<key>Points</key>
+					<array>
+						<string>{368.67954349517822, 139.25378036499023}</string>
+						<string>{389.67954349517822, 139.53586959838867}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>199</integer>
+					<key>Points</key>
+					<array>
+						<string>{345.32059574127197, 139.25378036499023}</string>
+						<string>{366.32059574127197, 139.25378036499023}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>198</integer>
+					<key>Points</key>
+					<array>
+						<string>{321.32059574127197, 139.25378036499023}</string>
+						<string>{342.32059574127197, 139.25378036499023}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>FilledArrow</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>0</string>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{171, 132.75378799438477}, {51, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>ID</key>
+					<integer>194</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 k/v,k/v,k/v}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>117</integer>
+					<key>Points</key>
+					<array>
+						<string>{288.00004529953003, 213.40742874145508}</string>
+						<string>{309.00004529953003, 213.40742874145508}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>FilledArrow</string>
+							<key>TailScale</key>
+							<real>0.59999990463256836</real>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>116</integer>
+					<key>Points</key>
+					<array>
+						<string>{262.00004529953003, 213.40742874145508}</string>
+						<string>{283.00004529953003, 213.40742874145508}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>FilledArrow</string>
+							<key>TailScale</key>
+							<real>0.59999990463256836</real>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>115</integer>
+					<key>Points</key>
+					<array>
+						<string>{238.00004529953003, 213.40742874145508}</string>
+						<string>{259.00004529953003, 213.40742874145508}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>FilledArrow</string>
+							<key>TailScale</key>
+							<real>0.59999990463256836</real>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>114</integer>
+					<key>Points</key>
+					<array>
+						<string>{261.50004529953003, 180.68951797485352}</string>
+						<string>{282.50004529953003, 180.68951797485352}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>FilledArrow</string>
+							<key>TailScale</key>
+							<real>0.59999990463256836</real>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>113</integer>
+					<key>Points</key>
+					<array>
+						<string>{238.00004529953003, 180.68953323364258}</string>
+						<string>{259.00004529953003, 180.68953323364258}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>FilledArrow</string>
+							<key>TailScale</key>
+							<real>0.59999990463256836</real>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>109</integer>
+					<key>Points</key>
+					<array>
+						<string>{262.00004529953003, 139.25378799438477}</string>
+						<string>{283.00004529953003, 139.25378799438477}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>FilledArrow</string>
+							<key>TailScale</key>
+							<real>0.59999990463256836</real>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>LineGraphic</string>
+					<key>ID</key>
+					<integer>59</integer>
+					<key>Points</key>
+					<array>
+						<string>{238.00004529953003, 139.25378799438477}</string>
+						<string>{259.00004529953003, 139.25378799438477}</string>
+					</array>
+					<key>Style</key>
+					<dict>
+						<key>stroke</key>
+						<dict>
+							<key>HeadArrow</key>
+							<string>0</string>
+							<key>HeadScale</key>
+							<real>0.59999990463256836</real>
+							<key>Legacy</key>
+							<true/>
+							<key>LineType</key>
+							<integer>1</integer>
+							<key>TailArrow</key>
+							<string>FilledArrow</string>
+							<key>TailScale</key>
+							<real>0.59999990463256836</real>
+							<key>Width</key>
+							<real>2</real>
+						</dict>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{131.28207397460938, 203.54848709702492}, {20.717874149566725, 20.717874149566725}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>108</integer>
+					<key>Shape</key>
+					<string>Circle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.994293</string>
+								<key>g</key>
+								<string>0.853217</string>
+								<key>r</key>
+								<string>0.622309</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 n}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{136.14101409912109, 185.54848098754883}, {11, 16}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>YES</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica-Bold</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>107</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\b\fs26 \cf0 ...}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+					<key>Wrap</key>
+					<string>NO</string>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{131.28207397460938, 170.83060073852539}, {20.717874149566725, 20.717874149566725}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>106</integer>
+					<key>Shape</key>
+					<string>Circle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.994293</string>
+								<key>g</key>
+								<string>0.853217</string>
+								<key>r</key>
+								<string>0.622309</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 3}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{131.28207397460938, 150.11272048950195}, {20.717874149566725, 20.717874149566725}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>105</integer>
+					<key>Shape</key>
+					<string>Circle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.994293</string>
+								<key>g</key>
+								<string>0.853217</string>
+								<key>r</key>
+								<string>0.622309</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 2}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
+					<key>Bounds</key>
+					<string>{{131.28207397460938, 129.39485323717179}, {20.717874149566725, 20.717874149566725}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Font</key>
+						<string>Helvetica</string>
+						<key>Size</key>
+						<real>12</real>
+					</dict>
+					<key>ID</key>
+					<integer>104</integer>
+					<key>Shape</key>
+					<string>Circle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Color</key>
+							<dict>
+								<key>b</key>
+								<string>0.994293</string>
+								<key>g</key>
+								<string>0.853217</string>
+								<key>r</key>
+								<string>0.622309</string>
+							</dict>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 1}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+			</array>
+			<key>GridInfo</key>
+			<dict/>
+			<key>HPages</key>
+			<integer>1</integer>
+			<key>KeepToScale</key>
+			<false/>
+			<key>Layers</key>
+			<array>
+				<dict>
+					<key>Lock</key>
+					<string>NO</string>
+					<key>Name</key>
+					<string>Layer 1</string>
+					<key>Print</key>
+					<string>YES</string>
+					<key>View</key>
+					<string>YES</string>
+				</dict>
+			</array>
+			<key>LayoutInfo</key>
+			<dict>
+				<key>Animate</key>
+				<string>NO</string>
+				<key>circoMinDist</key>
+				<real>18</real>
+				<key>circoSeparation</key>
+				<real>0.0</real>
+				<key>layoutEngine</key>
+				<string>dot</string>
+				<key>neatoSeparation</key>
+				<real>0.0</real>
+				<key>twopiSeparation</key>
+				<real>0.0</real>
+			</dict>
+			<key>Orientation</key>
+			<integer>2</integer>
+			<key>PrintOnePage</key>
+			<false/>
+			<key>RowAlign</key>
+			<integer>1</integer>
+			<key>RowSpacing</key>
+			<real>36</real>
+			<key>SheetTitle</key>
+			<string>adjacency-list</string>
+			<key>UniqueID</key>
+			<integer>73</integer>
+			<key>VPages</key>
+			<integer>1</integer>
+		</dict>
 	</array>
 	<key>SmartAlignmentGuidesActive</key>
 	<string>YES</string>
@@ -254493,7 +255696,7 @@ program}</string>
 	<key>WindowInfo</key>
 	<dict>
 		<key>CurrentSheet</key>
-		<integer>66</integer>
+		<integer>67</integer>
 		<key>ExpandedCanvases</key>
 		<array/>
 		<key>Frame</key>
@@ -254511,7 +255714,7 @@ program}</string>
 		<key>SidebarWidth</key>
 		<integer>173</integer>
 		<key>VisibleRegion</key>
-		<string>{{0, -6}, {861, 746}}</string>
+		<string>{{-142, -14}, {861, 761}}</string>
 		<key>Zoom</key>
 		<real>1</real>
 		<key>ZoomValues</key>
@@ -254851,6 +256054,11 @@ program}</string>
 				<real>1</real>
 				<real>1</real>
 			</array>
+			<array>
+				<string>adjacency-list</string>
+				<real>1</real>
+				<real>1</real>
+			</array>
 		</array>
 	</dict>
 </dict>