Nat! authored on 09-11-2017 16:38:51
Showing 26 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,52 @@
1
+# mulle-bashlib-[version]
2
+
3
+have versionized functions in `share/mulle-bashlib-3/` or so
4
+
5
+mulle-bootstrap-array.sh
6
+mulle-bootstrap-logging.sh
7
+mulle-bootstrap-functions.sh
8
+mulle-bootstrap-snip.sh
9
+mulle-local-environment.sh  # teilweise
10
+mulle-bootstrap-core-options.sh
11
+
12
+## mulle-fetch
13
+
14
+Get as a URL, branch, version. Fetches it and unpacks it. Possibly
15
+caches it Nothing more,
16
+
17
+## mulle-make
18
+
19
+Gets a file or folder <makeinfo>, which contains all the CC, CMAKEFLAGS etc.
20
+builds it using various tools. Nothing else.
21
+
22
+
23
+## mulle-config
24
+
25
+Keep configuration settings on a per project basis separate from
26
+mulle-bootstrap. These are NOT buildinfos.
27
+
28
+
29
+## mulle-makeinfo
30
+
31
+Acquire makeinfos from WWW. Merge makeinfos together. Do the platform dependent
32
+merge stuff. This is what mulle-bootstrap auto used to do.
33
+
34
+
35
+## mulle-bootstrap
36
+
37
+Uses mulle-make and mulle-fetch but not mulle-build. Does .bootstrap.auto
38
+and all this stuff.
39
+
40
+
41
+## mulle-build
42
+
43
+Use mulle-make to build current directory. Does systeminstall and the other
44
+stuff. May use mulle-bootstrap. Could be part of mulle-sde then...
45
+
46
+
47
+## mulle-sde
48
+
49
+
50
+
51
+
52
+
... ...
@@ -1,3 +1,7 @@
1
+### 3.15.3
2
+
3
+* Various small improvements
4
+
1 5
 ### 3.15.2
2 6
 
3 7
 * fix documentation wrapper
4 8
new file mode 100644
... ...
@@ -0,0 +1,2 @@
1
+fgrep '="`' src/*.sh | sort | fgrep -v 'exit 1' | egrep -v '`assoc_array_|`array_|`dependency_add|`concat|`pwd|`escaped_|`basename|`dirname|`echo|`symlink|`_chosen_bootstrapdir|`stash_of_repository|`clone_of_repository|`sed|`absolutepath|`readlink' | egrep -v '_setting'
2
+
0 3
new file mode 100644
... ...
@@ -0,0 +1,31 @@
1
+Q: Your tool is running downloaded shell scripts ? That is not very secure is it ?
2
+A: It's a developer tool, that should be pretty normal.
3
+
4
+Q: Ha! I never run foreign scripts without checking them first.
5
+A: I have a hard time believing this. Do you always check out the configure script, Xcode build phases, Makefile, CMakeLists.txt before compiling ?
6
+
7
+Q: Well, yes I do.
8
+A: That's very conscientious and mulle-bootstrap is here to help. When you clone a repository and it contains shellscripts, mulle-bootstrap will alert you to fact (doesn't work for Makefiles and autoconf yet though.)
9
+
10
+Q: Yeah and then you run it with `mulle-bootstrap -y' all the time, and the checks are automatically answered.
11
+A: Well at least you see some warnings. If you split your fetch and build phases it's safe. At least you have options here.
12
+
13
+Q: Or you might miss them.
14
+A: OK how about this. The script facility for downloaded repositories can be turned off by default. `mulle-bootstrap config copy_inherited_scripts NO`. There aren't to many libraries that need scripts tweaks anyway.
15
+
16
+Q: Can this be the default ?
17
+A: No.
18
+
19
+
20
+***
21
+
22
+Q: I made some changes to a third party library and added a .bootstrap folder. They won't take my pull request though. Do I have to live with a thousand forks ?
23
+A: There is actually another facility in mulle-bootstrap to share build folders. If you have folder with ".build" folder and 
24
+point the configuration variable `shared_buildinfo_path`to it, then build informations will be picked up this from this folder.
25
+
26
+Q: This is actually quite a bit like brew with formula repositories ?
27
+A: Coming to think of it, yes it is. You can make it a git repository with submodules. Every submodule is a tap. It should work out of the box.
28
+
29
+Q: Wouldn't it then make sense to turn off `copy_inherited_scripts` if you have "formulas" ?
30
+A: Maybe so, maybe not so
31
+
0 32
new file mode 100644
... ...
@@ -0,0 +1,110 @@
1
+
2
+digraph install
3
+{
4
+   node [shape=folder];
5
+
6
+   subgraph cluster_bootstrap
7
+   {
8
+      ".bootstrap" -> "repositories"
9
+      "repositories"  [ shape="note" ]
10
+   }
11
+
12
+   subgraph cluster_bootstrap_auto
13
+   {
14
+      ".bootstrap.auto" -> "repositories auto"
15
+      "repositories auto"  [ shape="note" label="repositories" ]
16
+   }
17
+
18
+   subgraph cluster_powersrc
19
+   {
20
+      ".repos powerfoo" -> "powerfoo src"
21
+      ".repos powerfoo" [ label=".repos" ]
22
+
23
+      "powerfoo src"  [ label="powerfoo" ]
24
+      "powerfoo src" -> "src powerfoo"
25
+      "powerfoo src" -> "CMakeLists.txt powerfoo"
26
+      "powerfoo src" -> ".bootstrap powerfoo"
27
+      ".bootstrap powerfoo" [ label=".bootstrap"]
28
+      ".bootstrap powerfoo" -> "repositories powerfoo"
29
+      ".bootstrap powerfoo" -> "settings powerfoo"
30
+
31
+      "repositories powerfoo"  [ shape="note"  label="repositories"]
32
+      "settings powerfoo"  [ label="settings"]
33
+
34
+      "settings powerfoo" -> "dispense_headers_path powerfoo"
35
+      "dispense_headers_path powerfoo"  [ shape="note" label="dispense_headers_path"]
36
+
37
+      "src powerfoo"  [ label="src" ]
38
+      "CMakeLists.txt powerfoo"  [ shape="note"  label="CMakeLists.txt"]
39
+      "src powerfoo" -> "powerfoo.h powerfoo"
40
+      "src powerfoo" -> "powerfoo.c powerfoo"
41
+      "powerfoo.h powerfoo"   [ label="powerfoo.h" shape="note" ]
42
+      "powerfoo.c powerfoo"   [ label="powerfoo.c" shape="note" ]
43
+   }
44
+
45
+   subgraph cluster_src
46
+   {
47
+      ".repos" -> "foo src"
48
+      "foo src"  [ label="foo" ]
49
+      "foo src" -> "src"
50
+      "foo src" -> "CMakeLists.txt"
51
+      "CMakeLists.txt"  [ shape="note" ]
52
+      "src" -> "foo.h src"
53
+      "src" -> "foo.c src"
54
+      "foo.h src"   [ label="foo.h" shape="note" ]
55
+      "foo.c src"   [ label="foo.c" shape="note" ]
56
+   }
57
+
58
+   subgraph cluster_build
59
+   {
60
+      "build" -> ".repos build"
61
+      ".repos build"  [ label=".repos" ]
62
+      ".repos build" -> "Release"
63
+      "Release" -> "foo Release"
64
+      "Release" -> "powerfoo Release"
65
+      "foo Release" -> "libfoo.a Release"
66
+      "foo Release"     [ label="foo" ]
67
+      "powerfoo Release" -> "libpowerfoo.a Release"
68
+      "powerfoo Release"     [ label="powerfoo" ]
69
+      "libfoo.a Release"   [ label="libfoo.a" shape="note" ]
70
+      "libpowerfoo.a Release"   [ label="libpowerfoo.a" shape="note" ]
71
+   }
72
+
73
+   subgraph cluster_tmp
74
+   {
75
+      "dependencies tmp" [ label="dependencies" ]
76
+      "dependencies tmp" -> "tmp"
77
+      "tmp" -> "lib"
78
+      "tmp" -> "include"
79
+      "lib" ->  "libfoo.a install"
80
+      "lib" ->  "libpowerfoo.a install"
81
+      "include" ->  "foo.h install"
82
+      "include" ->  "powerfoo install"
83
+      "powerfoo install" ->  "powerfoo.h install"
84
+      "powerfoo install"   [ label="powerfoo" ]
85
+      "libpowerfoo.a install"   [ label="libpowerfoo.a" shape="note" ]
86
+      "libfoo.a install"   [ label="libfoo.a" shape="note" ]
87
+      "foo.h install"   [ label="foo.h" shape="note" ]
88
+      "powerfoo.h install"   [ label="powerfoo.h" shape="note" ]
89
+   }
90
+
91
+   subgraph cluster_dependencies
92
+   {
93
+      "dependencies" -> "lib dependencies"
94
+      "dependencies" -> "include dependencies"
95
+      "lib dependencies" ->  "libfoo.a dependencies"
96
+      "lib dependencies" ->  "libpowerfoo.a dependencies"
97
+      "lib dependencies"  [ label="lib" ]
98
+      "include dependencies"  [ label="include" ]
99
+      "include dependencies" ->  "foo dependencies"
100
+      "include dependencies" ->  "powerfoo dependencies"
101
+      "foo dependencies" ->  "foo.h dependencies"
102
+      "powerfoo dependencies" ->  "powerfoo.h dependencies"
103
+      "foo dependencies"       [ label="foo" ]
104
+      "powerfoo dependencies"  [ label="powerfoo" ]
105
+      "libfoo.a dependencies"  [ label="libfoo.a" shape="note" ]
106
+      "libpowerfoo.a dependencies"  [ label="libpowerfoo.a" shape="note" ]
107
+      "foo.h dependencies"     [ label="foo.h" shape="note" ]
108
+      "powerfoo.h dependencies" [ label="powerfoo.h" shape="note" ]
109
+   }
110
+}
0 111
\ No newline at end of file
1 112
new file mode 100644
2 113
Binary files /dev/null and b/dox/biginheritpicture.png differ
3 114
new file mode 100644
4 115
Binary files /dev/null and b/dox/bigpicture.png differ
5 116
new file mode 100644
... ...
@@ -0,0 +1,4 @@
1
+digraph scripts {
2
+
3
+   "bin/pre-build.sh"  -> "bin/build.sh" -> "bin/post-build.sh"
4
+}
0 5
\ No newline at end of file
1 6
new file mode 100644
2 7
Binary files /dev/null and b/dox/build-scripts.png differ
3 8
new file mode 100644
... ...
@@ -0,0 +1,36 @@
1
+## Fetch
2
+
3
+During the fetch phase, mulle-bootstrap does one ore more of the following
4
+operations:
5
+
6
+Operation | Git Equivalent | Description
7
+----------|----------------|----------------------------
8
+clone     | git clone      | A new entry or changes in the source prompt a clone
9
+checkout  | git checkout   | Changes of the tag prompt a checkout
10
+upgrade   | git pull       | Changes in branch information trigger an upgrade
11
+set-url   | git set-url    | Changes in the URL with the same source may be handled with set-url
12
+
13
+For many sources, any change will just trigger a removal of the old contents
14
+and a fresh clone. In terms of "tar" as a source, that means refetching of the
15
+archive and unpacking.
16
+
17
+
18
+## Update/Upgrade
19
+
20
+You can manually trigger the following actions
21
+
22
+Operation | Git Equivalent | Description
23
+----------|----------------|------------------------------
24
+update    | git fetch      | Fetch new repository information, but don't check it out
25
+upgrade   | git pull       | Pull new repository information
26
+
27
+
28
+## Scripts used
29
+
30
+Though all operations have builtin functions, each operation can be overridden
31
+on a per-dependency basis with a script. After each operation is run (script
32
+or built-in) a post-script will be triggered.
33
+
34
+There are different post-scripts for embedded and regular repositories.
35
+
36
+![fetch-scripts](fetch-scripts.png)
0 37
new file mode 100644
... ...
@@ -0,0 +1,88 @@
1
+digraph scripts {
2
+   rankdir=LR
3
+
4
+   node [ shape="box" ]
5
+
6
+   "fetch" [ color="mauve", fontcolor="mauve", penwidth=2 ]
7
+
8
+   "fetch" -> "clone"
9
+   "fetch" -> "checkout"
10
+   "fetch" -> "upgrade"
11
+   "fetch" -> "update"
12
+   "fetch" -> "set-url"
13
+
14
+   {
15
+      rank="same";
16
+
17
+      node [ label="", fixedsize=true, width=0, height=0, style="invis"]
18
+
19
+      "invis clone"
20
+      "invis checkout"
21
+      "invis upgrade"
22
+      "invis update"
23
+      "invis set-url"
24
+   }
25
+
26
+   {
27
+      rank="same";
28
+
29
+      node [ shape="box" ]
30
+      "builtin checkout"
31
+      "builtin clone"
32
+      "builtin set-url"
33
+      "builtin update"
34
+      "builtin upgrade"
35
+
36
+      node [ shape="note", color="blue", fontcolor="blue" ]
37
+
38
+      "bin/clone.sh"
39
+      "bin/checkout.sh"
40
+      "bin/update.sh"
41
+      "bin/upgrade.sh"
42
+
43
+      node [ shape="note", color="dodgerblue2", fontcolor="dodgerblue2", penwidth=2 ]
44
+
45
+      "bin/post-checkout.sh 1"          [ label="bin/post-checkout.sh" ]
46
+      "bin/post-checkout.sh 2"          [ label="bin/post-checkout.sh" ]
47
+      "bin/post-checkout.sh 3"          [ label="bin/post-checkout.sh" ]
48
+
49
+      node [ shape="note", color="aquamarine3", fontcolor="aquamarine3", penwidth=2 ]
50
+
51
+      "bin/post-embedded-checkout.sh 1" [ label="bin/post-embedded-checkout.sh" ]
52
+      "bin/post-embedded-checkout.sh 2" [ label="bin/post-embedded-checkout.sh" ]
53
+      "bin/post-embedded-checkout.sh 3" [ label="bin/post-embedded-checkout.sh" ]
54
+   }
55
+
56
+   edge [ fontcolor="dodgerblue2", color="dodgerblue2", penwidth=2]
57
+
58
+   "clone"    -> "bin/post-checkout.sh 1"
59
+   "checkout" -> "bin/post-checkout.sh 2"
60
+   "upgrade"  -> "bin/post-checkout.sh 3"
61
+
62
+   edge [ color="aquamarine3", fontcolor="aquamarine3" ]
63
+
64
+   "clone"    -> "bin/post-embedded-checkout.sh 1"
65
+   "checkout" -> "bin/post-embedded-checkout.sh 2"
66
+   "upgrade"  -> "bin/post-embedded-checkout.sh 3"
67
+
68
+   edge [ color="black", fontcolor="black", penwidth=1  ]
69
+
70
+   "clone" -> "invis clone" [ arrowhead="none"]
71
+   "invis clone" -> "bin/clone.sh" [ fontcolor="blue", color="blue" ]
72
+   "invis clone" -> "builtin clone"
73
+
74
+   "checkout" -> "invis checkout" [ arrowhead="none"]
75
+   "invis checkout" -> "bin/checkout.sh" [ fontcolor="blue", color="blue" ]
76
+   "invis checkout" -> "builtin checkout"
77
+
78
+   "upgrade" -> "invis upgrade" [ arrowhead="none"]
79
+   "invis upgrade" -> "bin/upgrade.sh" [ fontcolor="blue", color="blue" ]
80
+   "invis upgrade" -> "builtin upgrade"
81
+
82
+   "update" -> "invis update" [ arrowhead="none"]
83
+   "invis update" -> "bin/update.sh" [ fontcolor="blue", color="blue" ]
84
+   "invis update" -> "builtin update"
85
+
86
+   "set-url" -> "invis set-url" [ arrowhead="none"]
87
+   "invis set-url" -> "builtin set-url"
88
+}
0 89
\ No newline at end of file
1 90
new file mode 100644
2 91
Binary files /dev/null and b/dox/fetch-scripts.png differ
3 92
new file mode 100644
... ...
@@ -0,0 +1,80 @@
1
+
2
+digraph install
3
+{
4
+   node [shape=folder];
5
+
6
+   subgraph cluster_bootstrap
7
+   {
8
+      ".bootstrap" -> "repositories"
9
+      "repositories"  [ shape="note" ]
10
+   }
11
+
12
+   subgraph cluster_bootstrap_auto
13
+   {
14
+      ".bootstrap.auto" -> "repositories auto"
15
+      "repositories auto"  [ shape="note" label="repositories" ]
16
+   }
17
+
18
+   subgraph cluster_src
19
+   {
20
+      ".repos" -> "foo src"
21
+      "foo src"  [ label="foo" ]
22
+      "foo src" -> "src"
23
+      "foo src" -> "CMakeLists.txt"
24
+      "CMakeLists.txt"  [ shape="note" ]
25
+      "src" -> "foo.h src"
26
+      "src" -> "foo.c src"
27
+      "foo.h src"   [ label="foo.h" shape="note" ]
28
+      "foo.c src"   [ label="foo.c" shape="note" ]
29
+   }
30
+
31
+   subgraph cluster_build
32
+   {
33
+      "build" -> ".repos build"
34
+      ".repos build"  [ label=".repos" ]
35
+      ".repos build" -> "Release"
36
+      "Release" -> "foo Release"
37
+      "foo Release" -> "libfoo.a Release"
38
+      "foo Release"     [ label="foo" ]
39
+      "libfoo.a Release"   [ label="libfoo.a" shape="note" ]
40
+   }
41
+
42
+   subgraph cluster_tmp
43
+   {
44
+      "dependencies tmp" [ label="dependencies" ]
45
+      "dependencies tmp" -> "tmp"
46
+      "tmp" -> "lib"
47
+      "tmp" -> "include"
48
+      "lib" ->  "libfoo.a install"
49
+      "include" ->  "foo.h install"
50
+      "libfoo.a install"   [ label="libfoo.a" shape="note" ]
51
+      "foo.h install"   [ label="foo.h" shape="note" ]
52
+   }
53
+
54
+   subgraph cluster_dependencies
55
+   {
56
+      "dependencies" -> "lib dependencies"
57
+      "dependencies" -> "include dependencies"
58
+      "lib dependencies" ->  "libfoo.a dependencies"
59
+      "lib dependencies"  [ label="lib" ]
60
+      "include dependencies"  [ label="include" ]
61
+      "include dependencies" ->  "foo dependencies"
62
+      "foo dependencies" ->  "foo.h dependencies"
63
+      "foo dependencies"     [ label="foo" ]
64
+      "libfoo.a dependencies"   [ label="libfoo.a" shape="note" ]
65
+      "foo.h dependencies"   [ label="foo.h" shape="note" ]
66
+   }
67
+
68
+   subgraph cluster_dependencies_2
69
+   {
70
+      "dependencies2" -> "lib dependencies2"
71
+      "dependencies2"  [ label="dependencies" ]
72
+      "dependencies2" -> "include dependencies2"
73
+      "lib dependencies2" ->  "libfoo.a dependencies2"
74
+      "lib dependencies2"  [ label="lib" ]
75
+      "include dependencies2"  [ label="include" ]
76
+      "include dependencies2" ->  "foo.h dependencies2"
77
+      "libfoo.a dependencies2"   [ label="libfoo.a" shape="note" ]
78
+      "foo.h dependencies2"   [ label="foo.h" shape="note" ]
79
+   }
80
+}
0 81
\ No newline at end of file
1 82
new file mode 100644
2 83
Binary files /dev/null and b/dox/install.png differ
3 84
new file mode 100644
... ...
@@ -0,0 +1,87 @@
1
+digraph pic  {
2
+  compound=true;
3
+   node [shape= record];
4
+
5
+   "1_Master"  [ label="Master", color="red" ]
6
+
7
+   node [shape= "folder" ]
8
+
9
+   "1_Master" -> "2_Minion"          [lhead=cluster_0];
10
+   "2_Minion" -> "Minion#.bootstrap" [lhead=cluster_1];
11
+
12
+
13
+   subgraph cluster_0 {
14
+      color="red"
15
+      node [shape= folder];
16
+
17
+      "2_Minion"  [ label="Minion", color="green" ]
18
+
19
+      "Master#.bootstrap.local" [ label=".bootstrap.local"]
20
+      "Master#.bootstrap.local" -> "Master#minions"
21
+      "Master#.bootstrap.local" -> "Master#is_master"
22
+
23
+      "Master#is_master" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
24
+<TR><TD bgcolor="#DDDDDD">is_master</TD></TR>
25
+</TABLE>>];
26
+
27
+      "Master#minions"        [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
28
+<TR><TD bgcolor="#DDDDDD">minions</TD></TR>
29
+<TR><TD PORT="f1">Minion</TD></TR>
30
+</TABLE>>];
31
+   }
32
+
33
+
34
+   subgraph cluster_1 {
35
+      color="green"
36
+      node [shape= folder];
37
+
38
+      "Minion#.bootstrap"    -> "Minion#repositories"
39
+      "Minion#.bootstrap"    -> "Minion#embedded_repositories"
40
+
41
+      "Minion#.bootstrap"  [ label = ".bootstrap"]
42
+
43
+      "Minion#repositories"        [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
44
+<TR><TD bgcolor="#DDDDDD">repositories</TD></TR>
45
+<TR><TD PORT="f3">Foobie</TD></TR>
46
+</TABLE>>];
47
+
48
+      "Minion#embedded_repositories"        [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
49
+<TR><TD bgcolor="#DDDDDD">embedded_repositories</TD></TR>
50
+<TR><TD PORT="f4">Boobie</TD></TR>
51
+</TABLE>>];
52
+
53
+      "Minion#.bootstrap.local" -> "Minion#is_minion"
54
+      "Minion#.bootstrap.local"  [ label = ".bootstrap.local"]
55
+
56
+      "Minion#is_minion" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
57
+<TR><TD bgcolor="#DDDDDD">is_minion</TD></TR>
58
+</TABLE>>];
59
+   }
60
+
61
+   subgraph cluster_2 {
62
+      color="gray"
63
+      node [shape= folder];
64
+
65
+      "Foobie"  [ label = "Foobie"]
66
+      "Foobie" -> "Foobie#i_am_foobie"
67
+
68
+      "Foobie#i_am_foobie" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
69
+<TR><TD bgcolor="#DDDDDD">i_am_foobie.txt</TD></TR>
70
+<TR><TD PORT="f5">Foobie</TD></TR>
71
+</TABLE>>];
72
+   }
73
+
74
+   subgraph cluster_3 {
75
+      color="gray"
76
+      node [shape= folder];
77
+
78
+      "Boobie"  [ label = "Boobie"]
79
+      "Boobie" -> "Boobie#i_am_boobie"
80
+
81
+      "Boobie#i_am_boobie" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
82
+<TR><TD bgcolor="#DDDDDD">i_am_boobie.txt</TD></TR>
83
+<TR><TD PORT="f6">Boobie</TD></TR>
84
+</TABLE>>];
85
+   }
86
+
87
+}
0 88
\ No newline at end of file
1 89
new file mode 100644
... ...
@@ -0,0 +1,113 @@
1
+digraph pic  {
2
+  compound=true;
3
+   node [shape= record];
4
+
5
+   "1_Master"  [ label="Master", color="red" ]
6
+
7
+   node [shape= "folder" ]
8
+
9
+   "1_Master" -> "2_Minion"          [lhead=cluster_0];
10
+   "2_Minion" -> "Minion#.bootstrap" [lhead=cluster_1];
11
+
12
+
13
+   subgraph cluster_0 {
14
+      color="red"
15
+      node [shape= folder];
16
+
17
+      "2_Minion"  [ label="Minion", color="green" ]
18
+
19
+      "Master#.bootstrap.local" [ label=".bootstrap.local"]
20
+      "Master#.bootstrap.local" -> "Master#minions"
21
+      "Master#.bootstrap.local" -> "Master#is_master"
22
+
23
+      "Master#is_master" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
24
+<TR><TD bgcolor="#DDDDDD">is_master</TD></TR>
25
+</TABLE>>];
26
+
27
+      "Master#minions"        [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
28
+<TR><TD bgcolor="#DDDDDD">minions</TD></TR>
29
+<TR><TD PORT="a1">Minion</TD></TR>
30
+</TABLE>>];
31
+
32
+      "Master#.bootstrap.auto" [ label=".bootstrap.auto", penwidth="3" ]
33
+      "Master#.bootstrap.auto" -> "Master#.bootstrap.auto/.deep" [ penwidth="3" ]
34
+      "Master#.bootstrap.auto" -> "Master#.bootstrap.auto/minions" [ penwidth="3" ]
35
+      "Master#.bootstrap.auto" -> "Master#.bootstrap.auto/repositories" [ penwidth="3" ]
36
+
37
+      "Master#.bootstrap.auto/minions"   [ shape="none", label=< <TABLE BORDER="3" CELLBORDER="0" CELLSPACING="0">
38
+<TR><TD bgcolor="#DDDDDD">minions</TD></TR>
39
+<TR><TD PORT="a2">Minion</TD></TR>
40
+</TABLE>>];
41
+
42
+      "Master#.bootstrap.auto/repositories"   [ shape="none", label=< <TABLE BORDER="3" CELLBORDER="0" CELLSPACING="0">
43
+<TR><TD bgcolor="#DDDDDD">repositories</TD></TR>
44
+<TR><TD PORT="a3">Foobie</TD></TR>
45
+</TABLE>>];
46
+
47
+      "Master#.bootstrap.auto/.deep"        [ label=".deep", penwidth="3" ]
48
+      "Master#.bootstrap.auto/.deep/Minion" [ label="Minion", penwidth="3" ]
49
+
50
+      "Master#.bootstrap.auto/.deep" -> "Master#.bootstrap.auto/.deep/Minion" [ penwidth="3" ]
51
+      "Master#.bootstrap.auto/.deep/Minion" -> "Master#.bootstrap.auto/.deep/Minion/embedded_repositories" [ penwidth="3" ]
52
+
53
+      "Master#.bootstrap.auto/.deep/Minion/embedded_repositories"    [ shape="none", label=< <TABLE BORDER="3" CELLBORDER="0" CELLSPACING="0">
54
+<TR><TD bgcolor="#DDDDDD">embedded_repositories</TD></TR>
55
+<TR><TD PORT="f4">Boobie</TD></TR>
56
+</TABLE>>];
57
+
58
+   }
59
+
60
+
61
+   subgraph cluster_1 {
62
+      color="green"
63
+      node [shape= folder];
64
+
65
+      "Minion#.bootstrap"    -> "Minion#repositories"
66
+      "Minion#.bootstrap"    -> "Minion#embedded_repositories"
67
+
68
+      "Minion#.bootstrap"  [ label = ".bootstrap"]
69
+
70
+      "Minion#repositories"        [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
71
+<TR><TD bgcolor="#DDDDDD">repositories</TD></TR>
72
+<TR><TD PORT="f3">Foobie</TD></TR>
73
+</TABLE>>];
74
+
75
+      "Minion#embedded_repositories"   [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
76
+<TR><TD bgcolor="#DDDDDD">embedded_repositories</TD></TR>
77
+<TR><TD PORT="f4">Boobie</TD></TR>
78
+</TABLE>>];
79
+
80
+      "Minion#.bootstrap.local" -> "Minion#is_minion"
81
+      "Minion#.bootstrap.local"         [ label = ".bootstrap.local"]
82
+
83
+      "Minion#is_minion" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
84
+<TR><TD bgcolor="#DDDDDD">is_minion</TD></TR>
85
+</TABLE>>];
86
+   }
87
+
88
+   subgraph cluster_2 {
89
+      color="gray"
90
+      node [shape= folder];
91
+
92
+      "Foobie"  [ label = "Foobie"]
93
+      "Foobie" -> "Foobie#i_am_foobie"
94
+
95
+      "Foobie#i_am_foobie" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
96
+<TR><TD bgcolor="#DDDDDD">i_am_foobie.txt</TD></TR>
97
+<TR><TD PORT="f5">Foobie</TD></TR>
98
+</TABLE>>];
99
+   }
100
+
101
+   subgraph cluster_3 {
102
+      color="gray"
103
+      node [shape= folder];
104
+
105
+      "Boobie"  [ label = "Boobie"]
106
+      "Boobie" -> "Boobie#i_am_boobie"
107
+
108
+      "Boobie#i_am_boobie" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
109
+<TR><TD bgcolor="#DDDDDD">i_am_boobie.txt</TD></TR>
110
+<TR><TD PORT="f6">Boobie</TD></TR>
111
+</TABLE>>];
112
+   }
113
+}
0 114
\ No newline at end of file
1 115
new file mode 100644
... ...
@@ -0,0 +1,128 @@
1
+digraph pic  {
2
+  compound=true;
3
+   node [shape= record];
4
+
5
+   "1_Master"  [ label="Master", color="red" ]
6
+
7
+   node [shape= "folder" ]
8
+
9
+   "1_Master" -> "2_Minion"          [lhead=cluster_0];
10
+   "2_Minion" -> "Minion#.bootstrap" [lhead=cluster_1];
11
+
12
+
13
+   subgraph cluster_0 {
14
+      color="red"
15
+      node [shape= folder];
16
+
17
+      "2_Minion"  [ label="Minion", color="green" ]
18
+
19
+
20
+      "Master#.bootstrap.local" [ label=".bootstrap.local"]
21
+      "Master#.bootstrap.local" -> "Master#minions"
22
+      "Master#.bootstrap.local" -> "Master#is_master"
23
+
24
+
25
+      "Master#is_master" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
26
+<TR><TD bgcolor="#DDDDDD">is_master</TD></TR>
27
+</TABLE>>];
28
+
29
+      "Master#minions"        [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
30
+<TR><TD bgcolor="#DDDDDD">minions</TD></TR>
31
+<TR><TD PORT="a1">Minion</TD></TR>
32
+</TABLE>>];
33
+
34
+      "Master#.bootstrap.auto" [ label=".bootstrap.auto" ]
35
+      "Master#.bootstrap.auto" -> "Master#.bootstrap.auto/.deep"
36
+      "Master#.bootstrap.auto" -> "Master#.bootstrap.auto/minions"
37
+      "Master#.bootstrap.auto" -> "Master#.bootstrap.auto/repositories"
38
+
39
+      "Master#.bootstrap.auto/minions"   [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
40
+<TR><TD bgcolor="#DDDDDD">minions</TD></TR>
41
+<TR><TD PORT="a2">Minion</TD></TR>
42
+</TABLE>>];
43
+
44
+      "Master#.bootstrap.auto/repositories"   [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
45
+<TR><TD bgcolor="#DDDDDD">repositories</TD></TR>
46
+<TR><TD PORT="a3">Foobie</TD></TR>
47
+</TABLE>>];
48
+
49
+      "Master#.bootstrap.auto/.deep"        [ label=".deep" ]
50
+      "Master#.bootstrap.auto/.deep/Minion" [ label="Minion" ]
51
+
52
+      "Master#.bootstrap.auto/.deep" -> "Master#.bootstrap.auto/.deep/Minion"
53
+      "Master#.bootstrap.auto/.deep/Minion" -> "Master#.bootstrap.auto/.deep/Minion/embedded_repositories"
54
+
55
+      "Master#.bootstrap.auto/.deep/Minion/embedded_repositories"    [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
56
+<TR><TD bgcolor="#DDDDDD">embedded_repositories</TD></TR>
57
+<TR><TD PORT="f4">Boobie</TD></TR>
58
+</TABLE>>];
59
+
60
+      "Master#.bootstrap.repos"       [ label=".bootstrap.repos", penwidth="3" ]
61
+
62
+      "Master#.bootstrap.repos" -> "Master#.bootstrap.repos/.deep"  [ penwidth="3" ]
63
+      "Master#.bootstrap.repos" -> "Master#.bootstrap.repos/Foobie" [ penwidth="3" ]
64
+
65
+      "Master#.bootstrap.repos/Foobie"   [ shape="none", label=< <TABLE BORDER="3" CELLBORDER="0" CELLSPACING="0">
66
+<TR><TD bgcolor="#DDDDDD">Foobie</TD></TR>
67
+<TR><TD PORT="f5">Foobie;Foobie;master;git</TD></TR>
68
+</TABLE>>];
69
+
70
+      "Master#.bootstrap.repos/.deep" [ label=".deep", penwidth="3"]
71
+
72
+      "Master#.bootstrap.repos/.deep" -> "Master#.bootstrap.repos/.deep/Minions.d" [ penwidth="3" ]
73
+
74
+      "Master#.bootstrap.repos/.deep/Minions.d" [ label="Minions.d", penwidth="3"]
75
+
76
+      "Master#.bootstrap.repos/.deep/Minions.d" -> "Master#.bootstrap.repos/.deep/Minions/Noobie" [ penwidth="3" ]
77
+
78
+      "Master#.bootstrap.repos/.deep/Minions/Noobie"   [ shape="none", label=< <TABLE BORDER="3" CELLBORDER="0" CELLSPACING="0">
79
+<TR><TD bgcolor="#DDDDDD">Boobie</TD></TR>
80
+<TR><TD PORT="f6">Boobie;Boobie;master;git</TD></TR>
81
+</TABLE>>];
82
+
83
+      "Foobie"  [ label = "Foobie", penwidth="3" ]
84
+      "Foobie" -> "Foobie#i_am_foobie" [ penwidth="3" ]
85
+      "Foobie#i_am_foobie" [ shape="none", label=< <TABLE BORDER="3" CELLBORDER="0" CELLSPACING="0">
86
+<TR><TD bgcolor="#DDDDDD">i_am_foobie.txt</TD></TR>
87
+<TR><TD PORT="f5">Foobie</TD></TR>
88
+</TABLE>>];
89
+   }
90
+
91
+
92
+   subgraph cluster_1 {
93
+      color="green"
94
+      node [shape= folder];
95
+
96
+      "Minion#.bootstrap"    -> "Minion#repositories"
97
+      "Minion#.bootstrap"    -> "Minion#embedded_repositories"
98
+
99
+      "Minion#.bootstrap"  [ label = ".bootstrap"]
100
+
101
+      "Minion#repositories"        [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
102
+<TR><TD bgcolor="#DDDDDD">repositories</TD></TR>
103
+<TR><TD PORT="f3">Foobie</TD></TR>
104
+</TABLE>>];
105
+
106
+      "Minion#embedded_repositories"   [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
107
+<TR><TD bgcolor="#DDDDDD">embedded_repositories</TD></TR>
108
+<TR><TD PORT="f4">Boobie</TD></TR>
109
+</TABLE>>];
110
+
111
+      "Minion#.bootstrap.local" -> "Minion#is_minion"
112
+      "Minion#.bootstrap.local"         [ label = ".bootstrap.local"]
113
+
114
+      "Minion#is_minion" [ shape="none", label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0">
115
+<TR><TD bgcolor="#DDDDDD">is_minion</TD></TR>
116
+</TABLE>>];
117
+
118
+
119
+      "Boobie"  [ label = "Boobie", penwidth="3" ]
120
+      "Boobie" -> "Boobie#i_am_boobie" [ penwidth="3" ]
121
+
122
+      "Boobie#i_am_boobie" [ shape="none", label=< <TABLE BORDER="3" CELLBORDER="0" CELLSPACING="0">
123
+<TR><TD bgcolor="#DDDDDD">i_am_boobie.txt</TD></TR>
124
+<TR><TD PORT="f6">Boobie</TD></TR>
125
+</TABLE>>];
126
+
127
+   }
128
+}
0 129
\ No newline at end of file
1 130
new file mode 100644
... ...
@@ -0,0 +1,1040 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+<dict>
5
+	<key>ActiveLayerIndex</key>
6
+	<integer>0</integer>
7
+	<key>ApplicationVersion</key>
8
+	<array>
9
+		<string>com.omnigroup.OmniGrafflePro</string>
10
+		<string>139.18.0.187838</string>
11
+	</array>
12
+	<key>AutoAdjust</key>
13
+	<true/>
14
+	<key>BackgroundGraphic</key>
15
+	<dict>
16
+		<key>Bounds</key>
17
+		<string>{{0, 0}, {559, 783}}</string>
18
+		<key>Class</key>
19
+		<string>SolidGraphic</string>
20
+		<key>ID</key>
21
+		<integer>2</integer>
22
+		<key>Style</key>
23
+		<dict>
24
+			<key>shadow</key>
25
+			<dict>
26
+				<key>Draws</key>
27
+				<string>NO</string>
28
+			</dict>
29
+			<key>stroke</key>
30
+			<dict>
31
+				<key>Draws</key>
32
+				<string>NO</string>
33
+			</dict>
34
+		</dict>
35
+	</dict>
36
+	<key>BaseZoom</key>
37
+	<integer>0</integer>
38
+	<key>CanvasOrigin</key>
39
+	<string>{0, 0}</string>
40
+	<key>ColumnAlign</key>
41
+	<integer>1</integer>
42
+	<key>ColumnSpacing</key>
43
+	<real>36</real>
44
+	<key>CreationDate</key>
45
+	<string>2017-09-19 18:19:08 +0000</string>
46
+	<key>Creator</key>
47
+	<string>Nat!</string>
48
+	<key>DisplayScale</key>
49
+	<string>1 0/72 in = 1 0/72 in</string>
50
+	<key>GraphDocumentVersion</key>
51
+	<integer>8</integer>
52
+	<key>GraphicsList</key>
53
+	<array>
54
+		<dict>
55
+			<key>Bounds</key>
56
+			<string>{{24, 100}, {207.5, 98}}</string>
57
+			<key>Class</key>
58
+			<string>ShapedGraphic</string>
59
+			<key>FitText</key>
60
+			<string>Vertical</string>
61
+			<key>Flow</key>
62
+			<string>Resize</string>
63
+			<key>FontInfo</key>
64
+			<dict>
65
+				<key>Font</key>
66
+				<string>GillSans</string>
67
+				<key>Size</key>
68
+				<real>10</real>
69
+			</dict>
70
+			<key>ID</key>
71
+			<integer>33</integer>
72
+			<key>Shape</key>
73
+			<string>Subprocess</string>
74
+			<key>Style</key>
75
+			<dict>
76
+				<key>fill</key>
77
+				<dict>
78
+					<key>Draws</key>
79
+					<string>NO</string>
80
+				</dict>
81
+				<key>shadow</key>
82
+				<dict>
83
+					<key>Draws</key>
84
+					<string>NO</string>
85
+				</dict>
86
+				<key>stroke</key>
87
+				<dict>
88
+					<key>Draws</key>
89
+					<string>NO</string>
90
+					<key>GapRatio</key>
91
+					<real>0.5</real>
92
+					<key>Width</key>
93
+					<real>4</real>
94
+				</dict>
95
+			</dict>
96
+			<key>Text</key>
97
+			<dict>
98
+				<key>Text</key>
99
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
100
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
101
+{\colortbl;\red255\green255\blue255;}
102
+{\*\expandedcolortbl;;}
103
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
104
+
105
+\f0\fs20 \cf0 mulle-build does the compiling for mulle-bootstrap\
106
+it gets the relevant build info folder and the relevant "root" folder\
107
+from mulle-bootstrap or mulle-project.\
108
+\
109
+That way the duplicate code in mulle-build and \
110
+mulle-bootstrap can be removed.}</string>
111
+			</dict>
112
+			<key>TextRelativeArea</key>
113
+			<string>{{0, 0}, {1, 1}}</string>
114
+		</dict>
115
+		<dict>
116
+			<key>Class</key>
117
+			<string>LineGraphic</string>
118
+			<key>Head</key>
119
+			<dict>
120
+				<key>ID</key>
121
+				<integer>4</integer>
122
+			</dict>
123
+			<key>ID</key>
124
+			<integer>32</integer>
125
+			<key>Points</key>
126
+			<array>
127
+				<string>{229.44567727255409, 310.47490888546997}</string>
128
+				<string>{178.05363603580659, 466.52508738527013}</string>
129
+			</array>
130
+			<key>Style</key>
131
+			<dict>
132
+				<key>stroke</key>
133
+				<dict>
134
+					<key>HeadArrow</key>
135
+					<string>FilledArrow</string>
136
+					<key>Legacy</key>
137
+					<true/>
138
+					<key>LineType</key>
139
+					<integer>1</integer>
140
+					<key>TailArrow</key>
141
+					<string>0</string>
142
+				</dict>
143
+			</dict>
144
+			<key>Tail</key>
145
+			<dict>
146
+				<key>ID</key>
147
+				<integer>11</integer>
148
+			</dict>
149
+		</dict>
150
+		<dict>
151
+			<key>Class</key>
152
+			<string>LineGraphic</string>
153
+			<key>Head</key>
154
+			<dict>
155
+				<key>ID</key>
156
+				<integer>20</integer>
157
+			</dict>
158
+			<key>ID</key>
159
+			<integer>31</integer>
160
+			<key>Points</key>
161
+			<array>
162
+				<string>{381.01983678747911, 511.95701428667667}</string>
163
+				<string>{407.12276284362656, 570.77330110246828}</string>
164
+			</array>
165
+			<key>Style</key>
166
+			<dict>
167
+				<key>stroke</key>
168
+				<dict>
169
+					<key>HeadArrow</key>
170
+					<string>FilledArrow</string>
171
+					<key>Legacy</key>
172
+					<true/>
173
+					<key>LineType</key>
174
+					<integer>1</integer>
175
+					<key>TailArrow</key>
176
+					<string>0</string>
177
+				</dict>
178
+			</dict>
179
+			<key>Tail</key>
180
+			<dict>
181
+				<key>ID</key>
182
+				<integer>5</integer>
183
+			</dict>
184
+		</dict>
185
+		<dict>
186
+			<key>Class</key>
187
+			<string>LineGraphic</string>
188
+			<key>Head</key>
189
+			<dict>
190
+				<key>ID</key>
191
+				<integer>21</integer>
192
+			</dict>
193
+			<key>ID</key>
194
+			<integer>30</integer>
195
+			<key>Points</key>
196
+			<array>
197
+				<string>{360.55982614939307, 511.97277592282381}</string>
198
+				<string>{340.35718184987348, 570.66500743958727}</string>
199
+			</array>
200
+			<key>Style</key>
201
+			<dict>
202
+				<key>stroke</key>
203
+				<dict>
204
+					<key>HeadArrow</key>
205
+					<string>FilledArrow</string>
206
+					<key>Legacy</key>
207
+					<true/>
208
+					<key>LineType</key>
209
+					<integer>1</integer>
210
+					<key>TailArrow</key>
211
+					<string>0</string>
212
+				</dict>
213
+			</dict>
214
+			<key>Tail</key>
215
+			<dict>
216
+				<key>ID</key>
217
+				<integer>5</integer>
218
+			</dict>
219
+		</dict>
220
+		<dict>
221
+			<key>Bounds</key>
222
+			<string>{{186, 655}, {49.549109101926945, 41.25}}</string>
223
+			<key>Class</key>
224
+			<string>ShapedGraphic</string>
225
+			<key>ID</key>
226
+			<integer>29</integer>
227
+			<key>Shape</key>
228
+			<string>NoteShape</string>
229
+			<key>Text</key>
230
+			<dict>
231
+				<key>Text</key>
232
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
233
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
234
+{\colortbl;\red255\green255\blue255;}
235
+{\*\expandedcolortbl;;}
236
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
237
+
238
+\f0\fs20 \cf0 CC}</string>
239
+			</dict>
240
+		</dict>
241
+		<dict>
242
+			<key>Class</key>
243
+			<string>LineGraphic</string>
244
+			<key>Head</key>
245
+			<dict>
246
+				<key>ID</key>
247
+				<integer>29</integer>
248
+			</dict>
249
+			<key>ID</key>
250
+			<integer>28</integer>
251
+			<key>Points</key>
252
+			<array>
253
+				<string>{213.94224991148252, 622.49494215312814}</string>
254
+				<string>{212.02429060632971, 654.50087273018971}</string>
255
+			</array>
256
+			<key>Style</key>
257
+			<dict>
258
+				<key>stroke</key>
259
+				<dict>
260
+					<key>HeadArrow</key>
261
+					<string>FilledArrow</string>
262
+					<key>Legacy</key>
263
+					<true/>
264
+					<key>LineType</key>
265
+					<integer>1</integer>
266
+					<key>TailArrow</key>
267
+					<string>0</string>
268
+				</dict>
269
+			</dict>
270
+			<key>Tail</key>
271
+			<dict>
272
+				<key>ID</key>
273
+				<integer>14</integer>
274
+			</dict>
275
+		</dict>
276
+		<dict>
277
+			<key>Bounds</key>
278
+			<string>{{54, 655}, {49.549109101926945, 41.25}}</string>
279
+			<key>Class</key>
280
+			<string>ShapedGraphic</string>
281
+			<key>ID</key>
282
+			<integer>27</integer>
283
+			<key>Shape</key>
284
+			<string>NoteShape</string>
285
+			<key>Text</key>
286
+			<dict>
287
+				<key>Text</key>
288
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
289
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
290
+{\colortbl;\red255\green255\blue255;}
291
+{\*\expandedcolortbl;;}
292
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
293
+
294
+\f0\fs20 \cf0 .CC}</string>
295
+			</dict>
296
+		</dict>
297
+		<dict>
298
+			<key>Class</key>
299
+			<string>LineGraphic</string>
300
+			<key>Head</key>
301
+			<dict>
302
+				<key>ID</key>
303
+				<integer>27</integer>
304
+			</dict>
305
+			<key>ID</key>
306
+			<integer>26</integer>
307
+			<key>Points</key>
308
+			<array>
309
+				<string>{98.804020455472582, 622.30202949927229}</string>
310
+				<string>{86.692565738433032, 654.53189451219271}</string>
311
+			</array>
312
+			<key>Style</key>
313
+			<dict>
314
+				<key>stroke</key>
315
+				<dict>
316
+					<key>HeadArrow</key>
317
+					<string>FilledArrow</string>
318
+					<key>Legacy</key>
319
+					<true/>
320
+					<key>LineType</key>
321
+					<integer>1</integer>
322
+					<key>TailArrow</key>
323
+					<string>0</string>
324
+				</dict>
325
+			</dict>
326
+			<key>Tail</key>
327
+			<dict>
328
+				<key>ID</key>
329
+				<integer>16</integer>
330
+			</dict>
331
+		</dict>
332
+		<dict>
333
+			<key>Bounds</key>
334
+			<string>{{381, 685}, {75, 51}}</string>
335
+			<key>Class</key>
336
+			<string>ShapedGraphic</string>
337
+			<key>ID</key>
338
+			<integer>25</integer>
339
+			<key>Shape</key>
340
+			<string>Cylinder</string>
341
+			<key>Style</key>
342
+			<dict/>
343
+			<key>Text</key>
344
+			<dict>
345
+				<key>Text</key>
346
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
347
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
348
+{\colortbl;\red255\green255\blue255;}
349
+{\*\expandedcolortbl;;}
350
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
351
+
352
+\f0\fs20 \cf0 c.info}</string>
353
+			</dict>
354
+		</dict>
355
+		<dict>
356
+			<key>Bounds</key>
357
+			<string>{{381, 628}, {75, 51}}</string>
358
+			<key>Class</key>
359
+			<string>ShapedGraphic</string>
360
+			<key>ID</key>
361
+			<integer>24</integer>
362
+			<key>Shape</key>
363
+			<string>Cylinder</string>
364
+			<key>Style</key>
365
+			<dict/>
366
+			<key>Text</key>
367
+			<dict>
368
+				<key>Text</key>
369
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
370
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
371
+{\colortbl;\red255\green255\blue255;}
372
+{\*\expandedcolortbl;;}
373
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
374
+
375
+\f0\fs20 \cf0 b.info}</string>
376
+			</dict>
377
+		</dict>
378
+		<dict>
379
+			<key>Bounds</key>
380
+			<string>{{294, 685}, {75, 51}}</string>
381
+			<key>Class</key>
382
+			<string>ShapedGraphic</string>
383
+			<key>ID</key>
384
+			<integer>23</integer>
385
+			<key>Shape</key>
386
+			<string>Cylinder</string>
387
+			<key>Style</key>
388
+			<dict/>
389
+			<key>Text</key>
390
+			<dict>
391
+				<key>Text</key>
392
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
393
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
394
+{\colortbl;\red255\green255\blue255;}
395
+{\*\expandedcolortbl;;}
396
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
397
+
398
+\f0\fs20 \cf0 c}</string>
399
+			</dict>
400
+		</dict>
401
+		<dict>
402
+			<key>Bounds</key>
403
+			<string>{{294, 628}, {75, 51}}</string>
404
+			<key>Class</key>
405
+			<string>ShapedGraphic</string>
406
+			<key>ID</key>
407
+			<integer>22</integer>
408
+			<key>Shape</key>
409
+			<string>Cylinder</string>
410
+			<key>Style</key>
411
+			<dict/>
412
+			<key>Text</key>
413
+			<dict>
414
+				<key>Text</key>
415
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
416
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
417
+{\colortbl;\red255\green255\blue255;}
418
+{\*\expandedcolortbl;;}
419
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
420
+
421
+\f0\fs20 \cf0 b}</string>
422
+			</dict>
423
+		</dict>
424
+		<dict>
425
+			<key>Bounds</key>
426
+			<string>{{294, 571}, {75, 51}}</string>
427
+			<key>Class</key>
428
+			<string>ShapedGraphic</string>
429
+			<key>ID</key>
430
+			<integer>21</integer>
431
+			<key>Shape</key>
432
+			<string>Cylinder</string>
433
+			<key>Style</key>
434
+			<dict/>
435
+			<key>Text</key>
436
+			<dict>
437
+				<key>Text</key>
438
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
439
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
440
+{\colortbl;\red255\green255\blue255;}
441
+{\*\expandedcolortbl;;}
442
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
443
+
444
+\f0\fs20 \cf0 a}</string>
445
+			</dict>
446
+		</dict>
447
+		<dict>
448
+			<key>Bounds</key>
449
+			<string>{{381, 571}, {75, 51}}</string>
450
+			<key>Class</key>
451
+			<string>ShapedGraphic</string>
452
+			<key>ID</key>
453
+			<integer>20</integer>
454
+			<key>Shape</key>
455
+			<string>Cylinder</string>
456
+			<key>Style</key>
457
+			<dict/>
458
+			<key>Text</key>
459
+			<dict>
460
+				<key>Text</key>
461
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
462
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
463
+{\colortbl;\red255\green255\blue255;}
464
+{\*\expandedcolortbl;;}
465
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
466
+
467
+\f0\fs20 \cf0 a.info}</string>
468
+			</dict>
469
+		</dict>
470
+		<dict>
471
+			<key>Class</key>
472
+			<string>LineGraphic</string>
473
+			<key>Head</key>
474
+			<dict>
475
+				<key>ID</key>
476
+				<integer>16</integer>
477
+			</dict>
478
+			<key>ID</key>
479
+			<integer>17</integer>
480
+			<key>Points</key>
481
+			<array>
482
+				<string>{154.26672344514023, 518.43111467806671}</string>
483
+				<string>{123.40122278489275, 570.97245956433687}</string>
484
+			</array>
485
+			<key>Style</key>
486
+			<dict>
487
+				<key>stroke</key>
488
+				<dict>
489
+					<key>HeadArrow</key>
490
+					<string>FilledArrow</string>
491
+					<key>Legacy</key>
492
+					<true/>
493
+					<key>LineType</key>
494
+					<integer>1</integer>
495
+					<key>TailArrow</key>
496
+					<string>0</string>
497
+				</dict>
498
+			</dict>
499
+			<key>Tail</key>
500
+			<dict>
501
+				<key>ID</key>
502
+				<integer>4</integer>
503
+			</dict>
504
+		</dict>
505
+		<dict>
506
+			<key>Bounds</key>
507
+			<string>{{71, 571}, {75, 51}}</string>
508
+			<key>Class</key>
509
+			<string>ShapedGraphic</string>
510
+			<key>ID</key>
511
+			<integer>16</integer>
512
+			<key>Shape</key>
513
+			<string>Cylinder</string>
514
+			<key>Style</key>
515
+			<dict/>
516
+			<key>Text</key>
517
+			<dict>
518
+				<key>Text</key>
519
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
520
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
521
+{\colortbl;\red255\green255\blue255;}
522
+{\*\expandedcolortbl;;}
523
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
524
+
525
+\f0\fs20 \cf0 a}</string>
526
+			</dict>
527
+		</dict>
528
+		<dict>
529
+			<key>Class</key>
530
+			<string>LineGraphic</string>
531
+			<key>Head</key>
532
+			<dict>
533
+				<key>ID</key>
534
+				<integer>14</integer>
535
+			</dict>
536
+			<key>ID</key>
537
+			<integer>15</integer>
538
+			<key>Points</key>
539
+			<array>
540
+				<string>{181.01720309073195, 518.45703152770557}</string>
541
+				<string>{204.22781869949381, 570.76822864629321}</string>
542
+			</array>
543
+			<key>Style</key>
544
+			<dict>
545
+				<key>stroke</key>
546
+				<dict>
547
+					<key>HeadArrow</key>
548
+					<string>FilledArrow</string>
549
+					<key>Legacy</key>
550
+					<true/>
551
+					<key>LineType</key>
552
+					<integer>1</integer>
553
+					<key>TailArrow</key>
554
+					<string>0</string>
555
+				</dict>
556
+			</dict>
557
+			<key>Tail</key>
558
+			<dict>
559
+				<key>ID</key>
560
+				<integer>4</integer>
561
+			</dict>
562
+		</dict>
563
+		<dict>
564
+			<key>Bounds</key>
565
+			<string>{{178, 571}, {75, 51}}</string>
566
+			<key>Class</key>
567
+			<string>ShapedGraphic</string>
568
+			<key>ID</key>
569
+			<integer>14</integer>
570
+			<key>Shape</key>
571
+			<string>Cylinder</string>
572
+			<key>Style</key>
573
+			<dict/>
574
+			<key>Text</key>
575
+			<dict>
576
+				<key>Text</key>
577
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
578
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 GillSans;}
579
+{\colortbl;\red255\green255\blue255;}
580
+{\*\expandedcolortbl;;}
581
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
582
+
583
+\f0\fs20 \cf0 a.info}</string>
584
+			</dict>
585
+		</dict>
586
+		<dict>
587
+			<key>Class</key>
588
+			<string>LineGraphic</string>
589
+			<key>Head</key>
590
+			<dict>
591
+				<key>ID</key>
592
+				<integer>11</integer>
593
+			</dict>
594
+			<key>ID</key>
595
+			<integer>13</integer>
596
+			<key>Points</key>
597
+			<array>
598
+				<string>{301.80989874954952, 198.40175175824919}</string>
599
+				<string>{257.21137435379057, 258.59840692993845}</string>
600
+			</array>
601
+			<key>Style</key>
602
+			<dict>
603
+				<key>stroke</key>
604
+				<dict>
605
+					<key>HeadArrow</key>
606
+					<string>FilledArrow</string>