Compare commits
945 Commits
Author | SHA1 | Date | |
---|---|---|---|
f1e9a944ef | |||
4cb38ddf01 | |||
593fde628c | |||
34fa025b17 | |||
33843f824a | |||
542bda0a6f | |||
d8bdbbf291 | |||
168b0f71f5 | |||
be79d97dde | |||
ea2b26e5f5 | |||
d68e2c4d06 | |||
0cfa3d3de7 | |||
0d1f463f7f | |||
ff34bfebde | |||
e103789994 | |||
8a37b1e742 | |||
0cf4eb2ee4 | |||
5496f85dbc | |||
71ff269780 | |||
3879109e4c | |||
f901d71202 | |||
1738632822 | |||
bbd5dde66d | |||
43c0103e4c | |||
6eeca9c6f1 | |||
28d3af6f35 | |||
7f3072d53a | |||
90461245f9 | |||
1c91c1e880 | |||
53c7be32b6 | |||
397ea05aa7 | |||
dadcb632d8 | |||
2de2fbd5e3 | |||
14eca5aea6 | |||
27f38a3770 | |||
7a7abe692e | |||
f46a2cec3c | |||
8e5e48dd92 | |||
a2543e5a8d | |||
e9bdee3dc7 | |||
88033bccbb | |||
b4119c454a | |||
d398898c38 | |||
39fc677781 | |||
dc52b17c4d | |||
ddefc96433 | |||
955d0ab76f | |||
f1172617cc | |||
6ce115ec95 | |||
03d29a8311 | |||
35cc74ef25 | |||
35d6196384 | |||
01fe7c90a5 | |||
26b8747014 | |||
bedb05bdeb | |||
6829b8a6fb | |||
e462a7d1d5 | |||
4c515d0ef1 | |||
7d650eff8d | |||
0b2d4f32fa | |||
4f25013954 | |||
5c7735c40f | |||
e6438098e1 | |||
45b2c138e5 | |||
75d68edfe7 | |||
f80a5b8c34 | |||
1b1980ad49 | |||
3b9b9b1500 | |||
18feba2431 | |||
929a81e636 | |||
00809a67c0 | |||
d1b18a5060 | |||
3fb70b8d47 | |||
b38bf90de7 | |||
8319fa05d0 | |||
564c14a2c6 | |||
6996f45d54 | |||
b1c2c6009e | |||
934f69b660 | |||
84e911361a | |||
364583ea5c | |||
951e1f8b48 | |||
9232057e95 | |||
6c79f56c2c | |||
48eafcc74f | |||
dec9272813 | |||
eb3093d43e | |||
09abbd93b1 | |||
91920cc390 | |||
cc1cc7be94 | |||
2636418659 | |||
31e9074ae5 | |||
e2c316d2d0 | |||
74ee88d9bc | |||
f52c813fc2 | |||
badeb4d31a | |||
e59af8269e | |||
785c2574cd | |||
1a77f7ce3b | |||
6e7dccbbfb | |||
32bfced6a4 | |||
985f5c7351 | |||
621c67a8cb | |||
f2fd53e773 | |||
0fc3c7eee2 | |||
e81ba8e79f | |||
35461df92d | |||
a19ffb353d | |||
35ed432d1a | |||
8c29700402 | |||
171c0d5421 | |||
c01bc4afbd | |||
c404008743 | |||
193c9a08e0 | |||
5468be2ef9 | |||
6f58bdfcb1 | |||
9cf9de6044 | |||
a48dcb1421 | |||
51dad397ed | |||
27c0d30a07 | |||
6c33c3a5ba | |||
e6198debd6 | |||
298ba34c3c | |||
52b5edcb8f | |||
c73e8d9a82 | |||
842eaf90df | |||
24846b7b61 | |||
326a4282bb | |||
854c62e208 | |||
1759968c1e | |||
9e52d11ad0 | |||
d865f1f0c5 | |||
2747c9db23 | |||
bfc67e8680 | |||
d3068c3918 | |||
a931ad40c8 | |||
b4ed88e0f7 | |||
b7b71b31d3 | |||
83c1831a01 | |||
b85996494b | |||
26d31b68d7 | |||
8740bb42c0 | |||
ccb4e32ee0 | |||
2d351d3952 | |||
7ae5ff838b | |||
605b477e06 | |||
7e6e7e8406 | |||
e267dfacdd | |||
f4c5da3c72 | |||
a258e1e0b3 | |||
1fd84cb52b | |||
8dd24bc7d9 | |||
b7af5f08d6 | |||
781dfd9dc4 | |||
f6b48b0a67 | |||
ee099b0880 | |||
51ac05b3cf | |||
9267931ef6 | |||
60141e0c2c | |||
609d6cdf61 | |||
a3ccbe02d0 | |||
996c8cf2eb | |||
528d0b6af8 | |||
33052c1dd2 | |||
c1b401a04a | |||
78d5c1de9a | |||
2ee05f1234 | |||
20e800230f | |||
37a29b979f | |||
1afc527919 | |||
d89174ee82 | |||
f6255c2f9e | |||
ae41c88eb2 | |||
41067de5e4 | |||
dfca2b510b | |||
8bc9d8988f | |||
f7279804b4 | |||
47e1ea107b | |||
799d6aeb19 | |||
f8ccd90eeb | |||
169b772398 | |||
d2e28b0f7e | |||
88bb55ffd2 | |||
5508ac6272 | |||
2be03ca631 | |||
9803f167bd | |||
6a161c740d | |||
5d99853502 | |||
c2ebf466fd | |||
3313b2ff58 | |||
e210e76bd5 | |||
b75438ff32 | |||
82fea9ce73 | |||
79e32c92c1 | |||
322fcea6e5 | |||
5650231df3 | |||
78b2e4df9f | |||
bf9c815b9e | |||
798065fc71 | |||
578aa439be | |||
364781366a | |||
fa64a0b367 | |||
ba46bc4624 | |||
c6e4641781 | |||
9cde67086f | |||
f8b36f4658 | |||
753bd77b41 | |||
a9276700ea | |||
1960ea8ed7 | |||
1b775044f7 | |||
570b98c7bc | |||
81fb9e6a59 | |||
c2761a1259 | |||
0f7bf28617 | |||
60e8cf5a47 | |||
10cf728e11 | |||
eca56eb87d | |||
54d0168746 | |||
e58e48e919 | |||
1f345ce2d9 | |||
ed85aa43a4 | |||
33e34cbba9 | |||
4b0250192a | |||
dd66d16fdb | |||
de82e60c64 | |||
72d227ae91 | |||
4713cb8675 | |||
fdaee4ab17 | |||
32312f3c16 | |||
95d15dc720 | |||
2db83e1a21 | |||
cfbfcb5734 | |||
c28633a949 | |||
7cf90766a3 | |||
f2ee01ace3 | |||
9fbbb17c3b | |||
5e31565574 | |||
723f9a9b81 | |||
baf4e767e1 | |||
c5e5342325 | |||
6123d2f9e8 | |||
788296047a | |||
9dceb8ac74 | |||
ac2374e9a1 | |||
667f9e0d79 | |||
57916f8be6 | |||
e12c577b16 | |||
ba7efbb136 | |||
79987e788e | |||
4a071b06bd | |||
17f169f446 | |||
6662986169 | |||
1c86160e16 | |||
c34cc4918f | |||
4870a2cbac | |||
da7d94d0f0 | |||
cdef065cca | |||
e6676b4d4d | |||
896351e0e8 | |||
fb39bd45d7 | |||
5ef012b2c1 | |||
9c9754fa0f | |||
2e921437cd | |||
5617162cb6 | |||
0c3ff6b75c | |||
7f53737000 | |||
23ea8ae56b | |||
b5f7a4bff9 | |||
18653b825b | |||
aa3694cca8 | |||
844d231d74 | |||
d759a447be | |||
ffae4662bc | |||
a05d772aa9 | |||
cf3bbc09b6 | |||
d25576f8ef | |||
4b42fa2d75 | |||
c1c7e0ff08 | |||
1d503faa2c | |||
18c0f76f89 | |||
4d458a5e00 | |||
92ea11fca1 | |||
cf2bcee607 | |||
db7a3ac826 | |||
f792171ae9 | |||
81550e609b | |||
c28d0d7c34 | |||
6cb0790796 | |||
c2961617bd | |||
08e59b4a3c | |||
7ac4ce637f | |||
586e0a67ef | |||
5aab2866e1 | |||
a20f12865a | |||
0bf1a24bf5 | |||
f9f5bc2eb5 | |||
9fe8c98047 | |||
13fc518268 | |||
c06876eb3d | |||
f331f1d1e9 | |||
054deb809b | |||
865ddfc63f | |||
315940b6a9 | |||
211cae5811 | |||
2c6599c73b | |||
58139ce5ae | |||
8e888059d8 | |||
8d0236e3f1 | |||
774e9df2e5 | |||
faae122375 | |||
a6363e56b6 | |||
214c041bf7 | |||
ae7700296d | |||
f09183765c | |||
2f92b92a8a | |||
fee97236bf | |||
520f7c3e18 | |||
97752b4937 | |||
2c8c2029d8 | |||
4fbe36d9c6 | |||
4f4618441c | |||
e5a7d08966 | |||
11fc684f3c | |||
d50aef8404 | |||
5637f88aff | |||
f14bc0bb59 | |||
c50d2a6311 | |||
284273a73f | |||
4c5d0fc51f | |||
75a92d58cb | |||
db18611c86 | |||
bf199a2ebc | |||
db05864a69 | |||
f97d33e3a7 | |||
16e3ba86d5 | |||
cc05019bbb | |||
f57e48a209 | |||
7c964cf79f | |||
c9e58743e7 | |||
a09cf1470a | |||
57dc46fcfe | |||
06b445ac07 | |||
b4da83a3ab | |||
a964570b1a | |||
50bbe34b66 | |||
c10b2e6cc0 | |||
c4ed80d544 | |||
67d07254c2 | |||
74a648accb | |||
35365974bf | |||
355a40800d | |||
701d90a41d | |||
56f6ee84f1 | |||
e2a5ec9cd2 | |||
aea0326b82 | |||
93ad637c5c | |||
6be5e21aaf | |||
43795193c4 | |||
62429585ba | |||
e987d0094f | |||
093b5b5267 | |||
678a5aff83 | |||
03dc4a20a1 | |||
de3765ab70 | |||
5f079137e5 | |||
94f0c081a6 | |||
229836511d | |||
f2f041bb7c | |||
3562774f8b | |||
374b776a3e | |||
5763d63737 | |||
9d805dfc59 | |||
e6390b754f | |||
7babfd00c1 | |||
571dc4e387 | |||
3ed34b571c | |||
d7e4c8e3cf | |||
57e90948a8 | |||
26a20a7e62 | |||
b6a8268da3 | |||
61d7467ba8 | |||
7fa809c16d | |||
84f74807d4 | |||
4f59077318 | |||
3a9c03cc89 | |||
f055d2f0cc | |||
72fb52ec60 | |||
62c22c6cb1 | |||
dbd337c616 | |||
eeda7338cc | |||
261ea00efb | |||
02647c25a9 | |||
433b0808e4 | |||
529b163bd0 | |||
9c9991db1d | |||
aacead62c0 | |||
ae5a6a06bb | |||
60320e6b6e | |||
169ece8226 | |||
5020a4aa6b | |||
4c49566a89 | |||
ab60c578b9 | |||
050021cf77 | |||
8240d1fe0a | |||
fd6e7020eb | |||
261b869e27 | |||
d6d5b4429c | |||
67d7375ab9 | |||
020d34187c | |||
5486e4c364 | |||
33e2af341a | |||
cca08c3923 | |||
bb9f07183b | |||
22e807c212 | |||
a60a3efc1a | |||
558a362c46 | |||
19ae556857 | |||
5dd3a07a23 | |||
58a6c9a5f0 | |||
7053978861 | |||
3d44cffcda | |||
4b1de02bbb | |||
078a3aeccd | |||
abaccd6882 | |||
3fe54206aa | |||
debee350f8 | |||
890be36fd3 | |||
c9be9acd14 | |||
8eab673b1c | |||
e5806d07a6 | |||
11e6197a83 | |||
accd49f2e4 | |||
54cf9aaa1e | |||
8bbc8343ff | |||
a4e72ac037 | |||
1d0be265d9 | |||
d379786c90 | |||
ca9d4e34df | |||
6657312f44 | |||
2636a9c9f1 | |||
05ada97d00 | |||
4c54245969 | |||
5157bdd8ce | |||
8fa28f965c | |||
51b3451e20 | |||
fee5c6c057 | |||
9917ece826 | |||
8d94972d88 | |||
5cbd1190b2 | |||
1a71804ef2 | |||
1650519962 | |||
355564e486 | |||
1e3543e953 | |||
e83f6332bf | |||
0dbf7995b5 | |||
0d16db2d1b | |||
10565277d6 | |||
e0858cfe06 | |||
48d754220b | |||
958cbe688b | |||
783e8672e7 | |||
d93b552e8c | |||
365fe70f77 | |||
6c4e656795 | |||
86213d38fe | |||
b757294864 | |||
8b99e6dfbe | |||
0d4a2c5eb0 | |||
64f23ab26a | |||
31a276b628 | |||
742562fc2e | |||
ce65604154 | |||
75c0a268e0 | |||
badcb8b0e3 | |||
c48c9be913 | |||
92295dea4f | |||
76223f5ae7 | |||
ea015ccbe8 | |||
2f50d0e145 | |||
268beb3489 | |||
20d13f51a9 | |||
ffdf36c65b | |||
ff608992ee | |||
7e31a67d81 | |||
c0ec2ca27a | |||
a2595b44c6 | |||
180f415736 | |||
6541d9fbb0 | |||
de4f564780 | |||
14cb6353c0 | |||
9e680112e7 | |||
c90595cba1 | |||
de1636c792 | |||
e26f68fe62 | |||
39ba9cb489 | |||
08d4570ce5 | |||
084706c5ea | |||
d63518a835 | |||
b31d334ef4 | |||
5c4c562a2d | |||
f10438d530 | |||
7459eb15c3 | |||
c44e7ce184 | |||
bd19fe5909 | |||
82615c703b | |||
bc2141fbe0 | |||
f5964b4f3c | |||
d5ba90d375 | |||
167adff22c | |||
5f54573613 | |||
2b43b117dc | |||
1aec9e38fa | |||
c1880e3f3e | |||
c490a50c91 | |||
ee791e2e3e | |||
140d4ccf77 | |||
ceacc42126 | |||
a6479eb6e9 | |||
84c8a5bbec | |||
e1f4e8a84a | |||
8135279335 | |||
5dceeec1ca | |||
8f5a1535af | |||
92a5979558 | |||
8b64de0a3c | |||
9c30e98df6 | |||
c1d788880d | |||
385086359c | |||
176c7d8b13 | |||
a85604b2ba | |||
bf1ecc2441 | |||
92d2452f33 | |||
1853771930 | |||
772ee4b29d | |||
c62a4a1c13 | |||
008dcd71b9 | |||
ee4266bc59 | |||
294d531e0b | |||
e05f8faa74 | |||
fc4aa71193 | |||
0d7efe5176 | |||
b426dfb2c0 | |||
fd33b27af1 | |||
39f89e5a56 | |||
b881029de3 | |||
7682db4826 | |||
61fe1aa9cf | |||
468095ede2 | |||
9dc5da7dbd | |||
a18cd29411 | |||
b13c690f0c | |||
a7fd726872 | |||
6a082d2310 | |||
a317e9513f | |||
ee0c570d54 | |||
7607800d47 | |||
b35c022629 | |||
11cec8f24e | |||
df205f8752 | |||
affcb5ec43 | |||
bdda79343e | |||
1833db51a5 | |||
81c36699c4 | |||
d3052d094c | |||
4c4b7d39b8 | |||
e8d88f3237 | |||
cc8575dd96 | |||
f28782cb84 | |||
c58e7dd631 | |||
d9817c153a | |||
6057768fdc | |||
4a20c2aa1b | |||
e5f902369c | |||
1f9fde5f7b | |||
c3782082bc | |||
a452249bf3 | |||
3d3b03a123 | |||
719c03d33f | |||
609b18c2cd | |||
5279b83d34 | |||
05d2eec45c | |||
0cbc0dc79c | |||
9210f40c38 | |||
3237e897d7 | |||
f1110f2e85 | |||
5ffb6b874b | |||
c4a5442146 | |||
bd74e63702 | |||
f78b865cba | |||
7062fe4b47 | |||
b6da5a3f47 | |||
5fb2d7a98f | |||
ceaf4781b0 | |||
933e835838 | |||
94eb78d399 | |||
02ee2a601c | |||
b19d9a50d3 | |||
355640b5db | |||
dfa6238342 | |||
3b0d48e3b8 | |||
2b696ac8dc | |||
8362b408d9 | |||
62f6a78ccd | |||
f7e039e7ac | |||
61bd14c40a | |||
5dd85f1533 | |||
0d20bc5e14 | |||
a82754913f | |||
5840e3bbdf | |||
e8ab599bae | |||
85e5fbeb35 | |||
475f6fe666 | |||
9f354522a7 | |||
0c2a49391a | |||
e3a6c9234a | |||
6089c8030b | |||
643d0b0868 | |||
3cc5d8df7f | |||
34155fc36f | |||
f840eefcbf | |||
e1f3e33bfb | |||
36fcb4fbca | |||
22667d64d1 | |||
4786143524 | |||
f78baf80e4 | |||
33e7e23484 | |||
50214f059f | |||
57f778bcdb | |||
c3f07eb85a | |||
8adac30c05 | |||
5a5a6b3840 | |||
2803eb0d72 | |||
f41fb7d772 | |||
156399e8aa | |||
5745a54d4c | |||
3548d42a6c | |||
7dfb735db9 | |||
1609765740 | |||
2510f3d352 | |||
50ab34ad92 | |||
47535b9ff1 | |||
ffc748becb | |||
34ab25a88b | |||
8b9c3a2561 | |||
362a39a941 | |||
9f2119920c | |||
afb24d28ca | |||
0c62cf8980 | |||
f1d58f980b | |||
b1dfbf0ac4 | |||
12ad95eb5e | |||
7aaf5bc02c | |||
85f03b590d | |||
a29f0484dc | |||
8e6e72babd | |||
def71164f4 | |||
eda46d30bb | |||
d87910eb15 | |||
7257d2845d | |||
9744eb0ccd | |||
a273ddcd97 | |||
99a97b7008 | |||
3d098d2ed9 | |||
db768b4c3a | |||
4ac1213c9c | |||
a0f3208828 | |||
97db802be3 | |||
28f2c75137 | |||
81bb208a62 | |||
6979a17674 | |||
bd20c5e791 | |||
b4935ff4ed | |||
e1dd74f1bf | |||
e2ecacc141 | |||
6512aced21 | |||
615da845cd | |||
2c7f49c3e6 | |||
ba59741b60 | |||
52da207f83 | |||
ef8eff69e4 | |||
1abdeca4c1 | |||
6e82978931 | |||
4e827af392 | |||
f6b63a7dbc | |||
6bb22902cc | |||
881a6dc0f7 | |||
877e7a3893 | |||
bb80116605 | |||
0ffe7a9c8f | |||
9b8d59d2e9 | |||
f7bd7a41d2 | |||
3fc5009ef2 | |||
bde4ba04af | |||
f1ad69c84e | |||
97ea75a890 | |||
52f6da5cee | |||
aeaa0feb61 | |||
1207664bbb | |||
19d16e75c6 | |||
51cf559ce1 | |||
63d62c33c6 | |||
919c066e5a | |||
4125d01668 | |||
087c43b9ef | |||
c18ea3ccc9 | |||
564b590c89 | |||
d36ecb5c91 | |||
e2d6f01ad3 | |||
5034331131 | |||
faafee6b42 | |||
80f618f011 | |||
84f763d079 | |||
0dc0594aaa | |||
d651cb7a25 | |||
f18aa4e423 | |||
ab4f370e15 | |||
d6f824abc0 | |||
3450b9a44d | |||
afaf95cf53 | |||
8c371dd2fb | |||
bb558acdf0 | |||
159e518671 | |||
4798e7fa73 | |||
f4534ef12d | |||
8e0f41a790 | |||
b1203da82c | |||
e366fb6328 | |||
32de5e6e7a | |||
93ae98812b | |||
2c2de12e88 | |||
bd193535c9 | |||
d4d1e5e15b | |||
f7a670596f | |||
a8b82a0b68 | |||
bb25a06baa | |||
8b7cca986a | |||
626e16a177 | |||
814af378a7 | |||
a252acf539 | |||
01eb7600d9 | |||
52c2191545 | |||
25403e61ed | |||
f402b477b2 | |||
8df8f84701 | |||
ccee6241a6 | |||
4d13d3871d | |||
bb0c9d6145 | |||
8d105042ea | |||
84304cb0fc | |||
89fe297416 | |||
d853b20d7f | |||
b28407d98a | |||
4fa795b026 | |||
c298474e6f | |||
d925902b3f | |||
99eeb63f71 | |||
ff95f6dcfa | |||
8258532791 | |||
e73cbdda61 | |||
94f1132fb6 | |||
4ee212ae4c | |||
d5fb493aa4 | |||
88ea950652 | |||
e4519d6447 | |||
471bc73a23 | |||
75a2b74751 | |||
4e69408f54 | |||
38602d60b3 | |||
1fe1550a30 | |||
827f2b3a5c | |||
a948c9b7f9 | |||
1363841f32 | |||
4688f9821f | |||
0c90c889cd | |||
9f6c9c428b | |||
fd443d85c4 | |||
b4f0f4abcc | |||
d22848f9b1 | |||
79416381dc | |||
d791c70d90 | |||
802537564b | |||
1d0608200c | |||
cd14a940d8 | |||
58d4e32c97 | |||
1b6a200d6f | |||
08f6a2ea3e | |||
97d57d168b | |||
2b219228ce | |||
07d11be6ab | |||
7981431f09 | |||
a43922ccbf | |||
687818aad6 | |||
b7a5136136 | |||
0fde19239b | |||
771d1a78fd | |||
a8eb0409b7 | |||
b6151b5200 | |||
c68ebbb0a6 | |||
1b84092b94 | |||
b1d43ace14 | |||
6085109171 | |||
cd89f280b7 | |||
54f4d13350 | |||
799d3b1575 | |||
b3b782988c | |||
5e128f8cc2 | |||
c8c0815144 | |||
d59aae4849 | |||
342733be54 | |||
2da7601084 | |||
958c345f0c | |||
fe83c66686 | |||
5884469d11 | |||
9ee5f36068 | |||
c02373493b | |||
4090600717 | |||
8a4179da67 | |||
ed093f86f9 | |||
07a049aa59 | |||
7b77fbd525 | |||
e1e295e1b6 | |||
5b4ee36cfd | |||
784943ecab | |||
4f86c0b74a | |||
5b4f24eabd | |||
a2986d3b6b | |||
032d523737 | |||
238aa2133d | |||
eaf1b91148 | |||
4ae48b56f3 | |||
8c15214923 | |||
7a603d72bf | |||
5b51bb27b6 | |||
8231d2b672 | |||
6597c71e23 | |||
e30ca01999 | |||
12bb05c320 | |||
8aa7a851ca | |||
2a17e90b7b | |||
f154a53e5e | |||
7911895b67 | |||
d6aaab0b2c | |||
be9fa22db7 | |||
b72c5689c9 | |||
9dcf3347f5 | |||
72e9492ca6 | |||
572e942413 | |||
3ae9357a36 | |||
1dbb5c8647 | |||
06d8c06119 | |||
cc0e455a51 | |||
a01520e694 | |||
c524d62ce0 | |||
dd4640e1ed | |||
42c7d57fc0 | |||
efd09ecd37 | |||
14f6d5c82b | |||
c7710fdd24 | |||
b5aa03dd7c | |||
a81dd80d60 | |||
09ca92d416 | |||
56ed033233 | |||
e56efe237c | |||
3f0ff45de0 | |||
3709dc6558 | |||
6ec0318bae | |||
92e419f1c7 | |||
ccc0f2d956 | |||
80bb0158b7 | |||
f12592826f | |||
8d38777c1f | |||
832dfd4ab0 | |||
04d2db4dbb | |||
6f269e5a0e | |||
eb3991b9ba | |||
aee63f15c2 | |||
aced847735 | |||
e360e63b74 | |||
a6c4525998 | |||
77b196a226 | |||
b6b9c2cf56 | |||
59d900977d | |||
0f5acb86d3 | |||
911dee24c5 | |||
f03e066ec5 | |||
f7d3f55566 | |||
4298b1f595 | |||
870503ee36 | |||
4d14abbd04 | |||
5212b2716c | |||
97c0573c7d | |||
43cc9fcb1d | |||
47b5ba44e9 | |||
e95397e0a8 | |||
c7cdf8ba93 | |||
6ee734e1b4 | |||
3ab1b46ef7 | |||
22891b39d6 | |||
b6ce7ec782 | |||
a41c7451f1 | |||
6cb2040a1b | |||
937f9ad049 | |||
c2fc0f2418 | |||
9278201198 | |||
149a63100d | |||
d09afdbefe | |||
1d6bafbc77 | |||
01d2b4e952 | |||
05f3437601 | |||
f859243191 | |||
9ddc25283c | |||
388d4a8592 | |||
0b0b679120 | |||
3b752876ac | |||
9b8b7dbfd7 | |||
c209e14e40 | |||
6df1f6450f | |||
6d7cb23c61 | |||
bd7e269280 | |||
b05b42d74d | |||
af733a678a | |||
8a5045f05c | |||
4a336eb5ff | |||
b7e08052ae | |||
f6a4acfac3 | |||
68eff230f0 | |||
c78db6a94b | |||
294d9288d2 | |||
7dc5cc26a6 | |||
d7a2b790dc | |||
a7a10e12c7 | |||
8d243221f0 | |||
84368697af | |||
4a57cd3300 | |||
2214d2dbb5 | |||
50a991fdf9 | |||
4e093525c7 | |||
506b305959 | |||
e83efcfc80 | |||
4f1c881227 | |||
a642168369 | |||
8d296d0969 | |||
68b11c1c29 | |||
c209718a6f | |||
b8835312bb |
@ -1,22 +1,23 @@
|
|||||||
os: Visual Studio 2017
|
|
||||||
version: '{build}'
|
version: '{build}'
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
- /^v[0-9.]+/
|
- /^v[0-9.]+\.[0-9.]+/
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
- '%USERPROFILE%\.cargo'
|
- '%USERPROFILE%\.cargo'
|
||||||
- '%APPVEYOR_BUILD_FOLDER%\target'
|
- '%APPVEYOR_BUILD_FOLDER%\target'
|
||||||
|
|
||||||
|
clone_folder: d:\projects\solana
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- bash ci/publish-tarball.sh
|
- bash ci/publish-tarball.sh
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
- provider: Slack
|
- provider: Slack
|
||||||
incoming_webhook:
|
incoming_webhook:
|
||||||
secure: 6HnLbeS6/Iv7JSMrrHQ7V9OSIjH/3KFzvZiinNWgQqEN0e9A6zaE4MwEXUYDWbcvVJiQneWit6dswY8Scoms2rS1PWEN5N6sjgLgyzroptc=
|
secure: GJsBey+F5apAtUm86MHVJ68Uqa6WN1SImcuIc4TsTZrDhA8K1QWUNw9FFQPybUWDyOcS5dly3kubnUqlGt9ux6Ad2efsfRIQYWv0tOVXKeY=
|
||||||
channel: ci-status
|
channel: ci-status
|
||||||
on_build_success: false
|
on_build_success: false
|
||||||
on_build_failure: true
|
on_build_failure: true
|
||||||
@ -25,16 +26,16 @@ notifications:
|
|||||||
deploy:
|
deploy:
|
||||||
- provider: S3
|
- provider: S3
|
||||||
access_key_id:
|
access_key_id:
|
||||||
secure: G6uzyGqbkMCXS2+sCeBCT/+s/11AHLWXCuGayfKcMEE=
|
secure: fTbJl6JpFebR40J7cOWZ2mXBa3kIvEiXgzxAj6L3N7A=
|
||||||
secret_access_key:
|
secret_access_key:
|
||||||
secure: Lc+aVrbcPSXoDV7h2J7gqKT+HX0n3eEzp3JIrSP2pcKxbAikGnCtOogCiHO9/er2
|
secure: vItsBXb2rEFLvkWtVn/Rcxu5a5+2EwC+b7GsA0waJy9hXh6XuBAD0lnHd9re3g/4
|
||||||
bucket: release.solana.com
|
bucket: release.solana.com
|
||||||
region: us-west-1
|
region: us-west-1
|
||||||
set_public: true
|
set_public: true
|
||||||
|
|
||||||
- provider: GitHub
|
- provider: GitHub
|
||||||
auth_token:
|
auth_token:
|
||||||
secure: JdggY+mrznklWDcV0yvetHhD9eRcNdc627q6NcZdZAJsDidYcGgZ/tgYJiXb9D1A
|
secure: 81fEmPZ0cV1wLtNuUrcmtgxKF6ROQF1+/ft5m+fHX21z6PoeCbaNo8cTyLioWBj7
|
||||||
draft: false
|
draft: false
|
||||||
prerelease: false
|
prerelease: false
|
||||||
on:
|
on:
|
||||||
|
19
.buildkite/env/secrets.ejson
vendored
@ -1,14 +1,15 @@
|
|||||||
{
|
{
|
||||||
"_public_key": "ae29f4f7ad2fc92de70d470e411c8426d5d48db8817c9e3dae574b122192335f",
|
"_public_key": "ae29f4f7ad2fc92de70d470e411c8426d5d48db8817c9e3dae574b122192335f",
|
||||||
"environment": {
|
"environment": {
|
||||||
"CODECOV_TOKEN": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:ks2/ElgxwgxqgmFcxTHANNLmj23YH74h:U4uzRONRfiQyqy6HrPQ/e7OnBUY4HkW37R0iekkF3KJ9UGnHqT1UvwgVbDqLahtDIJ4rWw==]",
|
"CODECOV_TOKEN": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:JnxhrIxh09AvqdJgrVSYmb7PxSrh19aE:07WzVExCHEd1lJ1m8QizRRthGri+WBNeZRKjjEvsy5eo4gv3HD7zVEm42tVTGkqITKkBNQ==]",
|
||||||
"CRATES_IO_TOKEN": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:lKMh3aLW+jyRrfS/c7yvkpB+TaPhXqLq:j0v27EbaPgwRdHZAbsM0FlAnt3r9ScQrFbWJYOAZtM3qestEiByTlKpZ0eyF/823]",
|
"CRATES_IO_TOKEN": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:d0jJqC32/axwzq/N7kMRmpxKhnRrhtpt:zvcPHwkOzGnjhNkAQSejwdy1Jkr9wR1qXFFCnfIjyt/XQYubzB1tLkoly/qdmeb5]",
|
||||||
"GITHUB_TOKEN": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:Ll78c3jGpYqnTwR7HJq3mNNUC7pOv9Lu:GrInO2r8MjmP5c54szkyygdsrW5KQYkDgJQUVyFEPyG8SWfchyM9Gur8RV0a+cdwuxNkHLi4U2M=]",
|
"GEOLOCATION_API_KEY": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:R4gfB6Ey4i50HyfLt4UZDLBqg3qHEUye:UfZCOgt8XI6Y2g+ivCRVoS1fjFycFs7/GSevvCqh1B50mG0+hzpEyzXQLuKG5OeI]",
|
||||||
"INFLUX_DATABASE": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:IlH/ZLTXv3SwlY3TVyAPCX2KzLRY6iG3:gGmUGSU/kCfR/mTwKONaUC/X]",
|
"GITHUB_TOKEN": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:Vq2dkGTOzfEpRht0BAGHFp/hDogMvXJe:tFXHg1epVt2mq9hkuc5sRHe+KAnVREi/p8S+IZu67XRyzdiA/nGak1k860FXYuuzuaE0QWekaEc=]",
|
||||||
"INFLUX_PASSWORD": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:o2qm95GU4VrrcC4OU06jjPvCwKZy/CZF:OW2ga3kLOQJvaDEdGRJ+gn3L2ckFm8AJZtv9wj/GeUIKDH2A4uBPTHsAH9PMe6zujpuHGk3qbeg=]",
|
"INFLUX_DATABASE": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:5KI9WBkXx3R/W4m256mU5MJOE7N8aAT9:Cb8QFELZ9I60t5zhJ9h55Kcs]",
|
||||||
"INFLUX_USERNAME": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:yDWW/uIHsJqOTDYskZoSx3pzoB1vztWY:2z31oTA3g0Xs9fCczGNJRcx8xf/hFCed]",
|
"INFLUX_PASSWORD": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:hQRMpLCrav+OYkNphkeM4hagdVoZv5Iw:AUO76rr6+gF1OLJA8ZLSG8wHKXgYCPNk6gRCV8rBhZBJ4KwDaxpvOhMl7bxxXG6jol7v4aRa/Lk=]",
|
||||||
"SOLANA_INSTALL_UPDATE_MANIFEST_KEYPAIR_x86_64_unknown_linux_gnu": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:RqRaHlYUvGPNFJa6gmciaYM3tRJTURUH:q78/3GTHCN3Uqx9z4nOBjPZcO1lOazNoB/mdhGRDFsnAqVd2hU8zbKkqLrZfLlGqyD8WQOFuw5oTJR9qWg6L9LcOyj3pGL8jWF2yjgZxdtNMXnkbSrCWLooWBBLT61jYQnEwg73gT8ld3Q8EVv3T+MeSMu6FnPz+0+bqQCAGgfqksP4hsUAJGzgZu+i0tNOdlT7fxnh5KJK/yFM/CKgN2sRwEjukA9hXsffyB61g2zqzTDJxCUDLbCVrCkA/bfUk7Of/t0W5t0nK1H3oyGZEc/lRMauCknDBka3Gz11dVss2QT19WQNh0u7bHVaT/U4lepX1j9Zv]",
|
"INFLUX_USERNAME": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:R7BNmQjfeqoGDAFTJu9bYTGHol2NgnYN:Q2tOT/EBcFvhFk+DKLKmVU7tLCpVC3Ui]",
|
||||||
"SOLANA_INSTALL_UPDATE_MANIFEST_KEYPAIR_x86_64_apple_darwin": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:wFDl3INEnA3EQDHRX40avqGe1OMoJxyy:6ncCRVRTIRuYI5o/gayeuWCudWvmKNYr8KEHAWeTq34a5bdcKInBdKhjmjX+wLHqsEwQ5gcyhcxy4Ri2mbuN6AHazfZOZlubQkGlyUOAIYO5D5jkbyIh40DAtjVzo1MD/0HsW9zdGOzqUKp5xJJeDsbR4F153jbxa7fvwF90Q4UQjYFTKAtExEmHtDGSJG48ToVwTabTV/OnISMIggDZBviIv2QWHvXgK07b2mUj34rHJywEDGN1nj5rITTDdUeRcB1x4BAMOe94kTFPSTaj/OszvYlGECt8rkKFqbm092qL+XLfiBaImqe/WJHRCnAj6Don]",
|
"SOLANA_INSTALL_UPDATE_MANIFEST_KEYPAIR_x86_64_unknown_linux_gnu": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:Egc2dMrHDU0NcZ71LwGv/V66shUhwYUE:04VoIb8CKy7KYhQ5W4cEW9SDKZltxWBL5Hob106lMBbUOD/yUvKYcG3Ep8JfTMwO3K8zowW5HpU/IdGoilX0XWLiJJ6t+p05WWK0TA16nOEtwrEG+UK8wm3sN+xCO20i4jDhpNpgg3FYFHT5rKTHW8+zaBTNUX/SFxkN67Lm+92IM28CXYE43SU1WV6H99hGFFVpTK5JVM3JuYU1ex/dHRE+xCzTr4MYUB/F+nGoNFW8HUDV/y0e1jxT9to3x0SmnytEEuk+5RUzFuEt9cKNFeNml3fOCi4qL+sfj/Y5pjH9xDiUxsvH/8NL35jbLP244aFHgWcp]",
|
||||||
"SOLANA_INSTALL_UPDATE_MANIFEST_KEYPAIR_x86_64_pc_windows_msvc": "EJ[1:8iZ6baJB4fbBV+XDsrUooyGAnGL/8Ol+4Qd0zKh5YjI=:wAh+dBuZopv6vruVOYegUcq/aBnbksT1:qIJfCfDvDWiqicMOkmbJs/0n7UJLKNmgMQaKzeQ8J7Q60YpXbtWzKVW3tS6lzlgf64m3MrPXyo1C+mWh6jkjsb18T/OfggZy1ZHM4AcsOC6/ldUkV5YtuxUQuAmd5jCuV/R7iuYY8Z66AcfAevlb+bnLpgIifdA8fh/IktOo58nZUQwZDdppAacmftsLc6Frn5Er6A6+EXpxK1nmnlmLJ4AJztqlh6X0r+JvE2O7qeoZUXrIegnkxo7Aay7I/dd8zdYpp7ICSiTEtfVN/xNIu/5QmTRU7gWoz7cPl9epq4aiEALzPOzb6KVOiRcsOg+TlFvLQ71Ik5o=]"
|
"SOLANA_INSTALL_UPDATE_MANIFEST_KEYPAIR_x86_64_apple_darwin": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:NeOxSoWCvXB9AL4H6OK26l/7bmsKd/oz:Ijfoxtvk2CHlN1ZXHup3Gg/914kbbAkEGWJfvozA8UIe+aUzUObMyTrKkVOeNAH8Q8YH9tNzk7RRnrTcpnzeCCBLlWcVEeruMxHox3mPRzmSeDLxtbzCl9VePlRO3T7jg90K5hW+ZAkd5J/WJNzpAcmr93ts/of3MbvGHSujId/efCTzJEcP6JInnBb8Vrj7TlgKbzUlnqpq1+NjYPSXN3maKa9pKeo2JWxZlGBMoy6QWUUY5GbYEylw9smwh1LJcHZjlaZNMuOl4gNKtaSr38IXQkAXaRUJDPAmPras00YObKzXU8RkTrP4EoP/jx5LPR7f]",
|
||||||
|
"SOLANA_INSTALL_UPDATE_MANIFEST_KEYPAIR_x86_64_pc_windows_msvc": "EJ[1:yGpTmjdbyjW2kjgIHkFoJv7Ue7EbUvUbqHyw6anGgWg=:7t+56twjW+jR7fpFNNeRFLPd7E4lbmyN:JuviDpkQrfVcNUGRGsa2e/UhvH6tTYyk1s4cHHE5xZH1NByL7Kpqx36VG/+o1AUGEeSQdsBnKgzYdMoFYbO8o50DoRPc86QIEVXCupD6J9avxLFtQgOWgJp+/mCdUVXlqXiFs/vQgS/L4psrcKdF6WHd77BeUr6ll8DjH+9m5FC9Rcai2pXno6VbPpunHQ0oUdYzhFR64+LiRacBaefQ9igZ+nSEWDLqbaZSyfm9viWkijoVFTq8gAgdXXEh7g0QdxVE5T6bPristJhT6jWBhWunPUCDNFFErWIsbRGctepl4pbCWqh2hNTw9btSgVfeY6uGCOsdy9E=]"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,11 +10,22 @@
|
|||||||
set -e
|
set -e
|
||||||
cd "$(dirname "$0")"/..
|
cd "$(dirname "$0")"/..
|
||||||
|
|
||||||
buildkite-agent pipeline upload ci/buildkite.yml
|
if [[ -n $BUILDKITE_TAG ]]; then
|
||||||
|
buildkite-agent annotate --style info --context release-tag \
|
||||||
if [[ $BUILDKITE_BRANCH =~ ^pull ]]; then
|
"https://github.com/solana-labs/solana/releases/$BUILDKITE_TAG"
|
||||||
|
buildkite-agent pipeline upload ci/buildkite-release.yml
|
||||||
|
else
|
||||||
|
if [[ $BUILDKITE_BRANCH =~ ^pull ]]; then
|
||||||
# Add helpful link back to the corresponding Github Pull Request
|
# Add helpful link back to the corresponding Github Pull Request
|
||||||
buildkite-agent annotate --style info --context pr-backlink \
|
buildkite-agent annotate --style info --context pr-backlink \
|
||||||
"Github Pull Request: https://github.com/solana-labs/solana/$BUILDKITE_BRANCH"
|
"Github Pull Request: https://github.com/solana-labs/solana/$BUILDKITE_BRANCH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ $BUILDKITE_MESSAGE =~ GitBook: ]]; then
|
||||||
|
buildkite-agent annotate --style info --context gitbook-ci-skip \
|
||||||
|
"GitBook commit detected, CI skipped"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
buildkite-agent pipeline upload ci/buildkite.yml
|
||||||
|
fi
|
||||||
|
5
.gitbook.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
root: ./book/src
|
||||||
|
|
||||||
|
structure:
|
||||||
|
readme: introduction.md
|
||||||
|
summary: SUMMARY.md
|
24
.github/stale.yml
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
only: pulls
|
||||||
|
|
||||||
|
# Number of days of inactivity before a pull request becomes stale
|
||||||
|
daysUntilStale: 30
|
||||||
|
|
||||||
|
# Number of days of inactivity before a stale pull request is closed
|
||||||
|
daysUntilClose: 7
|
||||||
|
|
||||||
|
# Issues with these labels will never be considered stale
|
||||||
|
exemptLabels:
|
||||||
|
- security
|
||||||
|
|
||||||
|
# Label to use when marking a pull request as stale
|
||||||
|
staleLabel: stale
|
||||||
|
|
||||||
|
# Comment to post when marking a pull request as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This pull request has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be closed if no further activity occurs.
|
||||||
|
|
||||||
|
# Comment to post when closing a stale pull request. Set to `false` to disable
|
||||||
|
closeComment: >
|
||||||
|
This stale pull request has been automatically closed.
|
||||||
|
Thank you for your contributions.
|
4
.gitignore
vendored
@ -1,5 +1,4 @@
|
|||||||
/book/html/
|
/book/html/
|
||||||
/book/src/img/
|
|
||||||
/book/src/tests.ok
|
/book/src/tests.ok
|
||||||
/farf/
|
/farf/
|
||||||
/solana-release/
|
/solana-release/
|
||||||
@ -11,10 +10,7 @@
|
|||||||
**/*.rs.bk
|
**/*.rs.bk
|
||||||
.cargo
|
.cargo
|
||||||
|
|
||||||
# node config that is rsynced
|
|
||||||
/config/
|
/config/
|
||||||
# node config that remains local
|
|
||||||
/config-local/
|
|
||||||
|
|
||||||
# log files
|
# log files
|
||||||
*.log
|
*.log
|
||||||
|
32
.mergify.yml
@ -43,3 +43,35 @@ pull_request_rules:
|
|||||||
backport:
|
backport:
|
||||||
branches:
|
branches:
|
||||||
- v0.18
|
- v0.18
|
||||||
|
- name: v0.19 backport
|
||||||
|
conditions:
|
||||||
|
- base=master
|
||||||
|
- label=v0.19
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- v0.19
|
||||||
|
- name: v0.20 backport
|
||||||
|
conditions:
|
||||||
|
- base=master
|
||||||
|
- label=v0.20
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- v0.20
|
||||||
|
- name: v0.21 backport
|
||||||
|
conditions:
|
||||||
|
- base=master
|
||||||
|
- label=v0.21
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- v0.21
|
||||||
|
- name: v0.22 backport
|
||||||
|
conditions:
|
||||||
|
- base=master
|
||||||
|
- label=v0.22
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- v0.22
|
||||||
|
@ -2,13 +2,11 @@ os:
|
|||||||
- osx
|
- osx
|
||||||
|
|
||||||
language: rust
|
language: rust
|
||||||
cache: cargo
|
|
||||||
rust:
|
rust:
|
||||||
- 1.36.0
|
- stable
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- source ci/rust-version.sh
|
- source ci/rust-version.sh
|
||||||
- test $rust_stable = $TRAVIS_RUST_VERSION # Update .travis.yml rust version above when this fails
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- source ci/env.sh
|
- source ci/env.sh
|
||||||
@ -17,7 +15,7 @@ script:
|
|||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
|
- /^v\d+\.\d+/
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
slack:
|
slack:
|
||||||
|
@ -103,7 +103,7 @@ Solana's architecture is described by a book generated from markdown files in
|
|||||||
the `book/src/` directory, maintained by an *editor* (currently @garious). To
|
the `book/src/` directory, maintained by an *editor* (currently @garious). To
|
||||||
add a design proposal, you'll need to at least propose a change the content
|
add a design proposal, you'll need to at least propose a change the content
|
||||||
under the [Accepted Design
|
under the [Accepted Design
|
||||||
Proposals](https://solana-labs.github.io/book-edge/proposals.html) chapter.
|
Proposals](https://docs.solana.com/book/v/master/proposals) chapter.
|
||||||
Here's the full process:
|
Here's the full process:
|
||||||
|
|
||||||
1. Propose a design by creating a PR that adds a markdown document to the
|
1. Propose a design by creating a PR that adds a markdown document to the
|
||||||
|
3224
Cargo.lock
generated
28
Cargo.toml
@ -3,54 +3,62 @@ members = [
|
|||||||
"bench-exchange",
|
"bench-exchange",
|
||||||
"bench-streamer",
|
"bench-streamer",
|
||||||
"bench-tps",
|
"bench-tps",
|
||||||
"sdk-c",
|
"banking_bench",
|
||||||
"chacha-sys",
|
"chacha-sys",
|
||||||
"client",
|
"client",
|
||||||
"core",
|
"core",
|
||||||
"drone",
|
"drone",
|
||||||
"validator",
|
"validator",
|
||||||
"genesis",
|
"genesis",
|
||||||
|
"genesis_programs",
|
||||||
"gossip",
|
"gossip",
|
||||||
"install",
|
"install",
|
||||||
"keygen",
|
"keygen",
|
||||||
"kvstore",
|
"ledger",
|
||||||
"ledger-tool",
|
"ledger-tool",
|
||||||
|
"local_cluster",
|
||||||
"logger",
|
"logger",
|
||||||
"merkle-tree",
|
"merkle-tree",
|
||||||
"measure",
|
"measure",
|
||||||
"metrics",
|
"metrics",
|
||||||
"netutil",
|
|
||||||
"programs/bpf",
|
|
||||||
"programs/bpf_loader_api",
|
"programs/bpf_loader_api",
|
||||||
"programs/bpf_loader_program",
|
"programs/bpf_loader_program",
|
||||||
"programs/budget_api",
|
"programs/budget_api",
|
||||||
"programs/budget_program",
|
"programs/budget_program",
|
||||||
|
"programs/btc_spv_program",
|
||||||
|
"programs/btc_spv_api",
|
||||||
|
"programs/btc_spv_bin",
|
||||||
"programs/config_api",
|
"programs/config_api",
|
||||||
"programs/config_program",
|
"programs/config_program",
|
||||||
|
"programs/config_tests",
|
||||||
"programs/exchange_api",
|
"programs/exchange_api",
|
||||||
"programs/exchange_program",
|
"programs/exchange_program",
|
||||||
"programs/failure_program",
|
"programs/failure_program",
|
||||||
"programs/move_loader_api",
|
"programs/move_loader_api",
|
||||||
"programs/move_loader_program",
|
"programs/move_loader_program",
|
||||||
|
"programs/librapay_api",
|
||||||
"programs/noop_program",
|
"programs/noop_program",
|
||||||
"programs/stake_api",
|
"programs/stake_api",
|
||||||
"programs/stake_program",
|
"programs/stake_program",
|
||||||
"programs/stake_tests",
|
"programs/stake_tests",
|
||||||
"programs/storage_api",
|
"programs/storage_api",
|
||||||
"programs/storage_program",
|
"programs/storage_program",
|
||||||
"programs/token_api",
|
"programs/vest_api",
|
||||||
"programs/token_program",
|
"programs/vest_program",
|
||||||
"programs/vote_api",
|
"programs/vote_api",
|
||||||
"programs/vote_program",
|
"programs/vote_program",
|
||||||
"replicator",
|
"archiver",
|
||||||
"runtime",
|
"runtime",
|
||||||
"sdk",
|
"sdk",
|
||||||
|
"sdk-c",
|
||||||
"upload-perf",
|
"upload-perf",
|
||||||
"validator-info",
|
"netutil",
|
||||||
|
"fixed-buf",
|
||||||
"vote-signer",
|
"vote-signer",
|
||||||
"wallet",
|
"cli",
|
||||||
|
"rayon-threadlimit",
|
||||||
]
|
]
|
||||||
|
|
||||||
exclude = [
|
exclude = [
|
||||||
"programs/bpf/rust/noop",
|
"programs/bpf",
|
||||||
]
|
]
|
||||||
|
14
README.md
@ -1,5 +1,5 @@
|
|||||||
[](https://crates.io/crates/solana)
|
[](https://crates.io/crates/solana-core)
|
||||||
[](https://docs.rs/solana)
|
[](https://docs.rs/solana-core)
|
||||||
[](https://buildkite.com/solana-labs/solana/builds?branch=master)
|
[](https://buildkite.com/solana-labs/solana/builds?branch=master)
|
||||||
[](https://codecov.io/gh/solana-labs/solana)
|
[](https://codecov.io/gh/solana-labs/solana)
|
||||||
|
|
||||||
@ -26,9 +26,9 @@ Furthermore, and much to our surprise, it can be implemented using a mechanism t
|
|||||||
Architecture
|
Architecture
|
||||||
===
|
===
|
||||||
|
|
||||||
Before you jump into the code, review the online book [Solana: Blockchain Rebuilt for Scale](https://solana-labs.github.io/book/).
|
Before you jump into the code, review the online book [Solana: Blockchain Rebuilt for Scale](https://docs.solana.com/book/).
|
||||||
|
|
||||||
(The _latest_ development version of the online book is also [available here](https://solana-labs.github.io/book-edge/).)
|
(The _latest_ development version of the online book is also [available here](https://docs.solana.com/book/v/master/).)
|
||||||
|
|
||||||
Release Binaries
|
Release Binaries
|
||||||
===
|
===
|
||||||
@ -78,7 +78,7 @@ $ source $HOME/.cargo/env
|
|||||||
$ rustup component add rustfmt
|
$ rustup component add rustfmt
|
||||||
```
|
```
|
||||||
|
|
||||||
If your rustc version is lower than 1.34.0, please update it:
|
If your rustc version is lower than 1.38.0, please update it:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ rustup update
|
$ rustup update
|
||||||
@ -120,7 +120,7 @@ $ cargo test
|
|||||||
Local Testnet
|
Local Testnet
|
||||||
---
|
---
|
||||||
|
|
||||||
Start your own testnet locally, instructions are in the book [Solana: Blockchain Rebuild for Scale: Getting Started](https://solana-labs.github.io/book/getting-started.html).
|
Start your own testnet locally, instructions are in the book [Solana: Blockchain Rebuild for Scale: Getting Started](https://docs.solana.com/book/getting-started).
|
||||||
|
|
||||||
Remote Testnets
|
Remote Testnets
|
||||||
---
|
---
|
||||||
@ -240,5 +240,3 @@ problem is solved by this code?" On the other hand, if a test does fail and you
|
|||||||
better way to solve the same problem, a Pull Request with your solution would most certainly be
|
better way to solve the same problem, a Pull Request with your solution would most certainly be
|
||||||
welcome! Likewise, if rewriting a test can better communicate what code it's protecting, please
|
welcome! Likewise, if rewriting a test can better communicate what code it's protecting, please
|
||||||
send us that patch!
|
send us that patch!
|
||||||
|
|
||||||
|
|
||||||
|
116
RELEASE.md
@ -59,60 +59,88 @@ There are three release channels that map to branches as follows:
|
|||||||
* beta - tracks the largest (and latest) `vX.Y` stabilization branch, more stable.
|
* beta - tracks the largest (and latest) `vX.Y` stabilization branch, more stable.
|
||||||
* stable - tracks the second largest `vX.Y` stabilization branch, most stable.
|
* stable - tracks the second largest `vX.Y` stabilization branch, most stable.
|
||||||
|
|
||||||
## Release Steps
|
## Steps to Create a Branch
|
||||||
|
|
||||||
### Creating a new branch from master
|
### Create the new branch
|
||||||
|
1. Check out the latest commit on `master` branch:
|
||||||
#### Create the new branch
|
```
|
||||||
1. Pick your branch point for release on master.
|
git fetch --all
|
||||||
1. Create the branch. The name should be "v" + the first 2 "version" fields
|
git checkout upstream/master
|
||||||
|
```
|
||||||
|
1. Determine the new branch name. The name should be "v" + the first 2 version fields
|
||||||
from Cargo.toml. For example, a Cargo.toml with version = "0.9.0" implies
|
from Cargo.toml. For example, a Cargo.toml with version = "0.9.0" implies
|
||||||
the next branch name is "v0.9".
|
the next branch name is "v0.9".
|
||||||
1. Note the Cargo.toml in the repo root directory does not contain a version. Look at any other Cargo.toml file.
|
1. Create the new branch and push this branch to the `solana` repository:
|
||||||
1. Create a new branch and push this branch to the solana repository.
|
```
|
||||||
1. `git checkout -b <branchname>`
|
git checkout -b <branchname>
|
||||||
1. `git push -u origin <branchname>`
|
git push -u origin <branchname>
|
||||||
|
```
|
||||||
|
|
||||||
#### Update master with the next version
|
### Update master branch with the next version
|
||||||
|
|
||||||
1. After the new branch has been created and pushed, update Cargo.toml on **master** to the next semantic version (e.g. 0.9.0 -> 0.10.0)
|
1. After the new branch has been created and pushed, update the Cargo.toml files on **master** to the next semantic version (e.g. 0.9.0 -> 0.10.0) with:
|
||||||
by running `./scripts/increment-cargo-version.sh`, then rebuild with
|
```
|
||||||
`cargo build` to cause a refresh of `Cargo.lock`.
|
scripts/increment-cargo-version.sh minor
|
||||||
1. Push your Cargo.toml change and the autogenerated Cargo.lock changes to the
|
```
|
||||||
master branch
|
1. Rebuild to get an updated version of `Cargo.lock`:
|
||||||
|
```
|
||||||
|
cargo build
|
||||||
|
```
|
||||||
|
1. Push all the changed Cargo.toml and Cargo.lock files to the `master` branch with something like:
|
||||||
|
```
|
||||||
|
git co -b version_update
|
||||||
|
git ls-files -m | xargs git add
|
||||||
|
git commit -m 'Update Cargo.toml versions from X.Y to X.Y+1'
|
||||||
|
git push -u origin version_update
|
||||||
|
```
|
||||||
|
1. Confirm that your freshly cut release branch is shown as `BETA_CHANNEL` and the previous release branch as `STABLE_CHANNEL`:
|
||||||
|
```
|
||||||
|
ci/channel_info.sh
|
||||||
|
```
|
||||||
|
|
||||||
At this point, `ci/channel-info.sh` should show your freshly cut release branch as
|
## Steps to Create a Release
|
||||||
"BETA_CHANNEL" and the previous release branch as "STABLE_CHANNEL".
|
|
||||||
|
### Create the Release Tag on GitHub
|
||||||
|
|
||||||
|
1. Go to [GitHub's Releases UI](https://github.com/solana-labs/solana/releases) for tagging a release.
|
||||||
|
1. Click "Draft new release". The release tag must exactly match the `version`
|
||||||
|
field in `/Cargo.toml` prefixed by `v`.
|
||||||
|
1. If the Cargo.toml verion field is **0.12.3**, then the release tag must be **v0.12.3**
|
||||||
|
1. Make sure the Target Branch field matches the branch you want to make a release on.
|
||||||
|
1. If you want to release v0.12.0, the target branch must be v0.12
|
||||||
|
1. If this is the first release on the branch (e.g. v0.13.**0**), paste in [this
|
||||||
|
template](https://raw.githubusercontent.com/solana-labs/solana/master/.github/RELEASE_TEMPLATE.md). Engineering Lead can provide summary contents for release notes if needed.
|
||||||
|
1. Click "Save Draft", then confirm the release notes look good and the tag name and branch are correct. Go back into edit the release and click "Publish release" when ready.
|
||||||
|
|
||||||
|
### Update release branch with the next patch version
|
||||||
|
|
||||||
|
1. After the new release has been tagged, update the Cargo.toml files on **release branch** to the next semantic version (e.g. 0.9.0 -> 0.9.1) with:
|
||||||
|
```
|
||||||
|
scripts/increment-cargo-version.sh patch
|
||||||
|
```
|
||||||
|
1. Rebuild to get an updated version of `Cargo.lock`:
|
||||||
|
```
|
||||||
|
cargo build
|
||||||
|
```
|
||||||
|
1. Push all the changed Cargo.toml and Cargo.lock files to the **release branch** with something like:
|
||||||
|
```
|
||||||
|
git co -b version_update
|
||||||
|
git ls-files -m | xargs git add
|
||||||
|
git commit -m 'Update Cargo.toml versions from X.Y.Z to X.Y.Z+1'
|
||||||
|
git push -u origin version_update
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verify release automation success
|
||||||
|
1. Go to [Solana Releases](https://github.com/solana-labs/solana/releases) and click on the latest release that you just published. Verify that all of the build artifacts are present. This can take up to 90 minutes after creating the tag.
|
||||||
|
1. The `solana-secondary` Buildkite pipeline handles creating the binary tarballs and updated crates. Look for a job under the tag name of the release: https://buildkite.com/solana-labs/solana-secondary
|
||||||
|
1. [Crates.io](https://crates.io/crates/solana) should have an updated Solana version.
|
||||||
|
|
||||||
### Update documentation
|
### Update documentation
|
||||||
|
TODO: Documentation update procedure is WIP as we move to gitbook
|
||||||
|
|
||||||
Document the new recommended version by updating
|
Document the new recommended version by updating `book/src/running-archiver.md` and `book/src/validator-testnet.md` on the release (beta) branch to point at the `solana-install` for the upcoming release version.
|
||||||
```export SOLANA_RELEASE=[new scheduled TESTNET_TAG value]```
|
|
||||||
in book/src/testnet-participation.md on the release (beta) branch.
|
|
||||||
|
|
||||||
### Make the Release
|
#### Publish updated Book
|
||||||
|
|
||||||
We use [github's Releases UI](https://github.com/solana-labs/solana/releases) for tagging a release.
|
|
||||||
|
|
||||||
1. Go [there ;)](https://github.com/solana-labs/solana/releases).
|
|
||||||
1. Click "Draft new release". The release tag must exactly match the `version`
|
|
||||||
field in `/Cargo.toml` prefixed by `v` (ie, `<branchname>.X`).
|
|
||||||
1. If the Cargo.toml verion field is **0.12.3**, then the release tag must be **v0.12.3**
|
|
||||||
1. If this is the first release on the branch (e.g. v0.13.**0**), paste in [this
|
|
||||||
template](https://raw.githubusercontent.com/solana-labs/solana/master/.github/RELEASE_TEMPLATE.md)
|
|
||||||
and fill it in.
|
|
||||||
1. Test the release by generating a tag using semver's rules. First try at a
|
|
||||||
release should be `<branchname>.X-rc.0`.
|
|
||||||
1. Verify release automation:
|
|
||||||
1. [Crates.io](https://crates.io/crates/solana) should have an updated Solana version.
|
|
||||||
1. Once the release has been made, update Cargo.toml on the release branch to the next
|
|
||||||
semantic version (e.g. 0.9.0 -> 0.9.1) by running
|
|
||||||
`./scripts/increment-cargo-version.sh patch`, then rebuild with `cargo
|
|
||||||
build` to cause a refresh of `Cargo.lock`.
|
|
||||||
1. Push your Cargo.toml change and the autogenerated Cargo.lock changes to the
|
|
||||||
release branch.
|
|
||||||
|
|
||||||
### Publish updated Book
|
|
||||||
We maintain three copies of the "book" as official documentation:
|
We maintain three copies of the "book" as official documentation:
|
||||||
|
|
||||||
1) "Book" is the documentation for the latest official release. This should get manually updated whenever a new release is made. It is published here:
|
1) "Book" is the documentation for the latest official release. This should get manually updated whenever a new release is made. It is published here:
|
||||||
|
18
archiver/Cargo.toml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[package]
|
||||||
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
name = "solana-archiver"
|
||||||
|
version = "0.20.0"
|
||||||
|
repository = "https://github.com/solana-labs/solana"
|
||||||
|
license = "Apache-2.0"
|
||||||
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
clap = "2.33.0"
|
||||||
|
console = "0.9.0"
|
||||||
|
solana-core = { path = "../core", version = "0.20.0" }
|
||||||
|
solana-logger = { path = "../logger", version = "0.20.0" }
|
||||||
|
solana-metrics = { path = "../metrics", version = "0.20.0" }
|
||||||
|
solana-netutil = { path = "../netutil", version = "0.20.0" }
|
||||||
|
solana-sdk = { path = "../sdk", version = "0.20.0" }
|
||||||
|
|
@ -1,12 +1,21 @@
|
|||||||
use clap::{crate_description, crate_name, crate_version, App, Arg};
|
use clap::{crate_description, crate_name, crate_version, App, Arg};
|
||||||
use solana::cluster_info::{Node, FULLNODE_PORT_RANGE};
|
use console::style;
|
||||||
use solana::contact_info::ContactInfo;
|
use solana_core::archiver::Archiver;
|
||||||
use solana::replicator::Replicator;
|
use solana_core::cluster_info::{Node, VALIDATOR_PORT_RANGE};
|
||||||
use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil};
|
use solana_core::contact_info::ContactInfo;
|
||||||
|
use solana_sdk::signature::{read_keypair_file, Keypair, KeypairUtil};
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
|
use std::path::PathBuf;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
// Return an error if a keypair file cannot be parsed.
|
||||||
|
fn is_keypair(string: String) -> Result<(), String> {
|
||||||
|
read_keypair_file(&string)
|
||||||
|
.map(|_| ())
|
||||||
|
.map_err(|err| format!("{:?}", err))
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
@ -19,6 +28,7 @@ fn main() {
|
|||||||
.long("identity")
|
.long("identity")
|
||||||
.value_name("PATH")
|
.value_name("PATH")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("File containing an identity (keypair)"),
|
.help("File containing an identity (keypair)"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -28,6 +38,7 @@ fn main() {
|
|||||||
.value_name("HOST:PORT")
|
.value_name("HOST:PORT")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.required(true)
|
.required(true)
|
||||||
|
.validator(solana_netutil::is_host_port)
|
||||||
.help("Rendezvous with the cluster at this entry point"),
|
.help("Rendezvous with the cluster at this entry point"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -46,14 +57,15 @@ fn main() {
|
|||||||
.value_name("PATH")
|
.value_name("PATH")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.required(true)
|
.required(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("File containing the storage account keypair"),
|
.help("File containing the storage account keypair"),
|
||||||
)
|
)
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
let ledger_path = matches.value_of("ledger").unwrap();
|
let ledger_path = PathBuf::from(matches.value_of("ledger").unwrap());
|
||||||
|
|
||||||
let keypair = if let Some(identity) = matches.value_of("identity") {
|
let keypair = if let Some(identity) = matches.value_of("identity") {
|
||||||
read_keypair(identity).unwrap_or_else(|err| {
|
read_keypair_file(identity).unwrap_or_else(|err| {
|
||||||
eprintln!("{}: Unable to open keypair file: {}", err, identity);
|
eprintln!("{}: Unable to open keypair file: {}", err, identity);
|
||||||
exit(1);
|
exit(1);
|
||||||
})
|
})
|
||||||
@ -61,7 +73,7 @@ fn main() {
|
|||||||
Keypair::new()
|
Keypair::new()
|
||||||
};
|
};
|
||||||
let storage_keypair = if let Some(storage_keypair) = matches.value_of("storage_keypair") {
|
let storage_keypair = if let Some(storage_keypair) = matches.value_of("storage_keypair") {
|
||||||
read_keypair(storage_keypair).unwrap_or_else(|err| {
|
read_keypair_file(storage_keypair).unwrap_or_else(|err| {
|
||||||
eprintln!("{}: Unable to open keypair file: {}", err, storage_keypair);
|
eprintln!("{}: Unable to open keypair file: {}", err, storage_keypair);
|
||||||
exit(1);
|
exit(1);
|
||||||
})
|
})
|
||||||
@ -83,8 +95,16 @@ fn main() {
|
|||||||
addr
|
addr
|
||||||
};
|
};
|
||||||
let node =
|
let node =
|
||||||
Node::new_replicator_with_external_ip(&keypair.pubkey(), &gossip_addr, FULLNODE_PORT_RANGE);
|
Node::new_archiver_with_external_ip(&keypair.pubkey(), &gossip_addr, VALIDATOR_PORT_RANGE);
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"{} version {} (branch={}, commit={})",
|
||||||
|
style(crate_name!()).bold(),
|
||||||
|
crate_version!(),
|
||||||
|
option_env!("CI_BRANCH").unwrap_or("unknown"),
|
||||||
|
option_env!("CI_COMMIT").unwrap_or("unknown")
|
||||||
|
);
|
||||||
|
solana_metrics::set_host_id(keypair.pubkey().to_string());
|
||||||
println!(
|
println!(
|
||||||
"replicating the data with keypair={:?} gossip_addr={:?}",
|
"replicating the data with keypair={:?} gossip_addr={:?}",
|
||||||
keypair.pubkey(),
|
keypair.pubkey(),
|
||||||
@ -92,8 +112,8 @@ fn main() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let entrypoint_info = ContactInfo::new_gossip_entry_point(&entrypoint_addr);
|
let entrypoint_info = ContactInfo::new_gossip_entry_point(&entrypoint_addr);
|
||||||
let replicator = Replicator::new(
|
let archiver = Archiver::new(
|
||||||
ledger_path,
|
&ledger_path,
|
||||||
node,
|
node,
|
||||||
entrypoint_info,
|
entrypoint_info,
|
||||||
Arc::new(keypair),
|
Arc::new(keypair),
|
||||||
@ -101,5 +121,5 @@ fn main() {
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
replicator.join();
|
archiver.join();
|
||||||
}
|
}
|
20
banking_bench/Cargo.toml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
[package]
|
||||||
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
name = "solana-banking-bench"
|
||||||
|
version = "0.20.0"
|
||||||
|
repository = "https://github.com/solana-labs/solana"
|
||||||
|
license = "Apache-2.0"
|
||||||
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
log = "0.4.6"
|
||||||
|
rayon = "1.2.0"
|
||||||
|
solana-core = { path = "../core", version = "0.20.0" }
|
||||||
|
solana-ledger = { path = "../ledger", version = "0.20.0" }
|
||||||
|
solana-logger = { path = "../logger", version = "0.20.0" }
|
||||||
|
solana-runtime = { path = "../runtime", version = "0.20.0" }
|
||||||
|
solana-measure = { path = "../measure", version = "0.20.0" }
|
||||||
|
solana-sdk = { path = "../sdk", version = "0.20.0" }
|
||||||
|
rand = "0.6.5"
|
||||||
|
crossbeam-channel = "0.3"
|
322
banking_bench/src/main.rs
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
#[macro_use]
|
||||||
|
extern crate solana_ledger;
|
||||||
|
extern crate crossbeam_channel;
|
||||||
|
|
||||||
|
use crossbeam_channel::unbounded;
|
||||||
|
use log::*;
|
||||||
|
use rand::{thread_rng, Rng};
|
||||||
|
use rayon::prelude::*;
|
||||||
|
use solana_core::banking_stage::{create_test_recorder, BankingStage};
|
||||||
|
use solana_core::cluster_info::ClusterInfo;
|
||||||
|
use solana_core::cluster_info::Node;
|
||||||
|
use solana_core::genesis_utils::{create_genesis_block, GenesisBlockInfo};
|
||||||
|
use solana_core::packet::to_packets_chunked;
|
||||||
|
use solana_core::poh_recorder::PohRecorder;
|
||||||
|
use solana_core::poh_recorder::WorkingBankEntry;
|
||||||
|
use solana_core::service::Service;
|
||||||
|
use solana_ledger::bank_forks::BankForks;
|
||||||
|
use solana_ledger::blocktree::{get_tmp_ledger_path, Blocktree};
|
||||||
|
use solana_measure::measure::Measure;
|
||||||
|
use solana_runtime::bank::Bank;
|
||||||
|
use solana_sdk::hash::Hash;
|
||||||
|
use solana_sdk::pubkey::Pubkey;
|
||||||
|
use solana_sdk::signature::Keypair;
|
||||||
|
use solana_sdk::signature::Signature;
|
||||||
|
use solana_sdk::system_transaction;
|
||||||
|
use solana_sdk::timing::{duration_as_us, timestamp};
|
||||||
|
use solana_sdk::transaction::Transaction;
|
||||||
|
use std::iter;
|
||||||
|
use std::sync::atomic::Ordering;
|
||||||
|
use std::sync::mpsc::Receiver;
|
||||||
|
use std::sync::{Arc, Mutex, RwLock};
|
||||||
|
use std::thread::sleep;
|
||||||
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
|
fn check_txs(
|
||||||
|
receiver: &Arc<Receiver<WorkingBankEntry>>,
|
||||||
|
ref_tx_count: usize,
|
||||||
|
poh_recorder: &Arc<Mutex<PohRecorder>>,
|
||||||
|
) -> bool {
|
||||||
|
let mut total = 0;
|
||||||
|
let now = Instant::now();
|
||||||
|
let mut no_bank = false;
|
||||||
|
loop {
|
||||||
|
if let Ok((_bank, (entry, _tick_height))) = receiver.recv_timeout(Duration::from_millis(10))
|
||||||
|
{
|
||||||
|
total += entry.transactions.len();
|
||||||
|
}
|
||||||
|
if total >= ref_tx_count {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if now.elapsed().as_secs() > 60 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if poh_recorder.lock().unwrap().bank().is_none() {
|
||||||
|
trace!("no bank");
|
||||||
|
no_bank = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !no_bank {
|
||||||
|
assert!(total >= ref_tx_count);
|
||||||
|
}
|
||||||
|
no_bank
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_accounts_txs(txes: usize, mint_keypair: &Keypair, hash: Hash) -> Vec<Transaction> {
|
||||||
|
let to_pubkey = Pubkey::new_rand();
|
||||||
|
let dummy = system_transaction::transfer(mint_keypair, &to_pubkey, 1, hash);
|
||||||
|
(0..txes)
|
||||||
|
.into_par_iter()
|
||||||
|
.map(|_| {
|
||||||
|
let mut new = dummy.clone();
|
||||||
|
let sig: Vec<u8> = (0..64).map(|_| thread_rng().gen()).collect();
|
||||||
|
new.message.account_keys[0] = Pubkey::new_rand();
|
||||||
|
new.message.account_keys[1] = Pubkey::new_rand();
|
||||||
|
new.signatures = vec![Signature::new(&sig[0..64])];
|
||||||
|
new
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Config {
|
||||||
|
packets_per_batch: usize,
|
||||||
|
chunk_len: usize,
|
||||||
|
num_threads: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
fn get_transactions_index(&self, chunk_index: usize) -> usize {
|
||||||
|
chunk_index * (self.chunk_len / self.num_threads) * self.packets_per_batch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bytes_as_usize(bytes: &[u8]) -> usize {
|
||||||
|
bytes[0] as usize | (bytes[1] as usize) << 8
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
solana_logger::setup();
|
||||||
|
let num_threads = BankingStage::num_threads() as usize;
|
||||||
|
// a multiple of packet chunk duplicates to avoid races
|
||||||
|
const CHUNKS: usize = 8 * 2;
|
||||||
|
const PACKETS_PER_BATCH: usize = 192;
|
||||||
|
let txes = PACKETS_PER_BATCH * num_threads * CHUNKS;
|
||||||
|
let mint_total = 1_000_000_000_000;
|
||||||
|
let GenesisBlockInfo {
|
||||||
|
genesis_block,
|
||||||
|
mint_keypair,
|
||||||
|
..
|
||||||
|
} = create_genesis_block(mint_total);
|
||||||
|
|
||||||
|
let (verified_sender, verified_receiver) = unbounded();
|
||||||
|
let (vote_sender, vote_receiver) = unbounded();
|
||||||
|
let bank0 = Bank::new(&genesis_block);
|
||||||
|
let mut bank_forks = BankForks::new(0, bank0);
|
||||||
|
let mut bank = bank_forks.working_bank();
|
||||||
|
|
||||||
|
info!("threads: {} txs: {}", num_threads, txes);
|
||||||
|
|
||||||
|
let mut transactions = make_accounts_txs(txes, &mint_keypair, genesis_block.hash());
|
||||||
|
|
||||||
|
// fund all the accounts
|
||||||
|
transactions.iter().for_each(|tx| {
|
||||||
|
let fund = system_transaction::transfer(
|
||||||
|
&mint_keypair,
|
||||||
|
&tx.message.account_keys[0],
|
||||||
|
mint_total / txes as u64,
|
||||||
|
genesis_block.hash(),
|
||||||
|
);
|
||||||
|
let x = bank.process_transaction(&fund);
|
||||||
|
x.unwrap();
|
||||||
|
});
|
||||||
|
//sanity check, make sure all the transactions can execute sequentially
|
||||||
|
transactions.iter().for_each(|tx| {
|
||||||
|
let res = bank.process_transaction(&tx);
|
||||||
|
assert!(res.is_ok(), "sanity test transactions");
|
||||||
|
});
|
||||||
|
bank.clear_signatures();
|
||||||
|
//sanity check, make sure all the transactions can execute in parallel
|
||||||
|
let res = bank.process_transactions(&transactions);
|
||||||
|
for r in res {
|
||||||
|
assert!(r.is_ok(), "sanity parallel execution");
|
||||||
|
}
|
||||||
|
bank.clear_signatures();
|
||||||
|
let mut verified: Vec<_> = to_packets_chunked(&transactions.clone(), PACKETS_PER_BATCH)
|
||||||
|
.into_iter()
|
||||||
|
.map(|x| {
|
||||||
|
let len = x.packets.len();
|
||||||
|
(x, iter::repeat(1).take(len).collect())
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let ledger_path = get_tmp_ledger_path!();
|
||||||
|
{
|
||||||
|
let blocktree = Arc::new(
|
||||||
|
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"),
|
||||||
|
);
|
||||||
|
let (exit, poh_recorder, poh_service, signal_receiver) =
|
||||||
|
create_test_recorder(&bank, &blocktree, None);
|
||||||
|
let cluster_info = ClusterInfo::new_with_invalid_keypair(Node::new_localhost().info);
|
||||||
|
let cluster_info = Arc::new(RwLock::new(cluster_info));
|
||||||
|
let banking_stage = BankingStage::new(
|
||||||
|
&cluster_info,
|
||||||
|
&poh_recorder,
|
||||||
|
verified_receiver,
|
||||||
|
vote_receiver,
|
||||||
|
);
|
||||||
|
poh_recorder.lock().unwrap().set_bank(&bank);
|
||||||
|
|
||||||
|
let chunk_len = verified.len() / CHUNKS;
|
||||||
|
let mut start = 0;
|
||||||
|
|
||||||
|
// This is so that the signal_receiver does not go out of scope after the closure.
|
||||||
|
// If it is dropped before poh_service, then poh_service will error when
|
||||||
|
// calling send() on the channel.
|
||||||
|
let signal_receiver = Arc::new(signal_receiver);
|
||||||
|
let signal_receiver2 = signal_receiver.clone();
|
||||||
|
let mut total = 0;
|
||||||
|
let mut tx_total = 0;
|
||||||
|
let mut txs_processed = 0;
|
||||||
|
let mut root = 1;
|
||||||
|
let collector = Pubkey::new_rand();
|
||||||
|
const ITERS: usize = 1_000;
|
||||||
|
let config = Config {
|
||||||
|
packets_per_batch: PACKETS_PER_BATCH,
|
||||||
|
chunk_len,
|
||||||
|
num_threads,
|
||||||
|
};
|
||||||
|
for _ in 0..ITERS {
|
||||||
|
let now = Instant::now();
|
||||||
|
let mut sent = 0;
|
||||||
|
|
||||||
|
for (i, v) in verified[start..start + chunk_len]
|
||||||
|
.chunks(chunk_len / num_threads)
|
||||||
|
.enumerate()
|
||||||
|
{
|
||||||
|
let mut byte = 0;
|
||||||
|
let index = config.get_transactions_index(start + i);
|
||||||
|
if index < transactions.len() {
|
||||||
|
byte = bytes_as_usize(transactions[index].signatures[0].as_ref());
|
||||||
|
}
|
||||||
|
trace!(
|
||||||
|
"sending... {}..{} {} v.len: {} sig: {} transactions.len: {} index: {}",
|
||||||
|
start + i,
|
||||||
|
start + chunk_len,
|
||||||
|
timestamp(),
|
||||||
|
v.len(),
|
||||||
|
byte,
|
||||||
|
transactions.len(),
|
||||||
|
index,
|
||||||
|
);
|
||||||
|
for xv in v {
|
||||||
|
sent += xv.0.packets.len();
|
||||||
|
}
|
||||||
|
verified_sender.send(v.to_vec()).unwrap();
|
||||||
|
}
|
||||||
|
let start_tx_index = config.get_transactions_index(start);
|
||||||
|
let end_tx_index = config.get_transactions_index(start + chunk_len);
|
||||||
|
for tx in &transactions[start_tx_index..end_tx_index] {
|
||||||
|
loop {
|
||||||
|
if bank.get_signature_status(&tx.signatures[0]).is_some() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if poh_recorder.lock().unwrap().bank().is_none() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sleep(Duration::from_millis(5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if check_txs(&signal_receiver2, txes / CHUNKS, &poh_recorder) {
|
||||||
|
debug!(
|
||||||
|
"resetting bank {} tx count: {} txs_proc: {}",
|
||||||
|
bank.slot(),
|
||||||
|
bank.transaction_count(),
|
||||||
|
txs_processed
|
||||||
|
);
|
||||||
|
assert!(txs_processed < bank.transaction_count());
|
||||||
|
txs_processed = bank.transaction_count();
|
||||||
|
tx_total += duration_as_us(&now.elapsed());
|
||||||
|
|
||||||
|
let mut poh_time = Measure::start("poh_time");
|
||||||
|
poh_recorder.lock().unwrap().reset(
|
||||||
|
bank.last_blockhash(),
|
||||||
|
bank.slot(),
|
||||||
|
Some((bank.slot(), bank.slot() + 1)),
|
||||||
|
);
|
||||||
|
poh_time.stop();
|
||||||
|
|
||||||
|
let mut new_bank_time = Measure::start("new_bank");
|
||||||
|
let new_bank = Bank::new_from_parent(&bank, &collector, bank.slot() + 1);
|
||||||
|
new_bank_time.stop();
|
||||||
|
|
||||||
|
let mut insert_time = Measure::start("insert_time");
|
||||||
|
bank_forks.insert(new_bank);
|
||||||
|
bank = bank_forks.working_bank();
|
||||||
|
insert_time.stop();
|
||||||
|
|
||||||
|
poh_recorder.lock().unwrap().set_bank(&bank);
|
||||||
|
assert!(poh_recorder.lock().unwrap().bank().is_some());
|
||||||
|
if bank.slot() > 32 {
|
||||||
|
bank_forks.set_root(root, &None);
|
||||||
|
root += 1;
|
||||||
|
}
|
||||||
|
debug!(
|
||||||
|
"new_bank_time: {}us insert_time: {}us poh_time: {}us",
|
||||||
|
new_bank_time.as_us(),
|
||||||
|
insert_time.as_us(),
|
||||||
|
poh_time.as_us(),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
tx_total += duration_as_us(&now.elapsed());
|
||||||
|
}
|
||||||
|
|
||||||
|
// This signature clear may not actually clear the signatures
|
||||||
|
// in this chunk, but since we rotate between CHUNKS then
|
||||||
|
// we should clear them by the time we come around again to re-use that chunk.
|
||||||
|
bank.clear_signatures();
|
||||||
|
total += duration_as_us(&now.elapsed());
|
||||||
|
debug!(
|
||||||
|
"time: {} us checked: {} sent: {}",
|
||||||
|
duration_as_us(&now.elapsed()),
|
||||||
|
txes / CHUNKS,
|
||||||
|
sent,
|
||||||
|
);
|
||||||
|
|
||||||
|
if bank.slot() > 0 && bank.slot() % 16 == 0 {
|
||||||
|
for tx in transactions.iter_mut() {
|
||||||
|
tx.message.recent_blockhash = bank.last_blockhash();
|
||||||
|
let sig: Vec<u8> = (0..64).map(|_| thread_rng().gen()).collect();
|
||||||
|
tx.signatures[0] = Signature::new(&sig[0..64]);
|
||||||
|
}
|
||||||
|
verified = to_packets_chunked(&transactions.clone(), PACKETS_PER_BATCH)
|
||||||
|
.into_iter()
|
||||||
|
.map(|x| {
|
||||||
|
let len = x.packets.len();
|
||||||
|
(x, iter::repeat(1).take(len).collect())
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
start += chunk_len;
|
||||||
|
start %= verified.len();
|
||||||
|
}
|
||||||
|
eprintln!(
|
||||||
|
"{{'name': 'banking_bench_total', 'median': '{}'}}",
|
||||||
|
total / ITERS as u64,
|
||||||
|
);
|
||||||
|
eprintln!(
|
||||||
|
"{{'name': 'banking_bench_tx_total', 'median': '{}'}}",
|
||||||
|
tx_total / ITERS as u64,
|
||||||
|
);
|
||||||
|
|
||||||
|
drop(verified_sender);
|
||||||
|
drop(vote_sender);
|
||||||
|
exit.store(true, Ordering::Relaxed);
|
||||||
|
banking_stage.join().unwrap();
|
||||||
|
debug!("waited for banking_stage");
|
||||||
|
poh_service.join().unwrap();
|
||||||
|
sleep(Duration::from_secs(1));
|
||||||
|
debug!("waited for poh_service");
|
||||||
|
}
|
||||||
|
let _unused = Blocktree::destroy(&ledger_path);
|
||||||
|
}
|
@ -2,41 +2,38 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-bench-exchange"
|
name = "solana-bench-exchange"
|
||||||
version = "0.17.0"
|
version = "0.20.0"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bincode = "1.1.4"
|
bincode = "1.2.0"
|
||||||
bs58 = "0.2.0"
|
bs58 = "0.3.0"
|
||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
env_logger = "0.6.2"
|
env_logger = "0.7.1"
|
||||||
itertools = "0.8.0"
|
itertools = "0.8.0"
|
||||||
log = "0.4.7"
|
log = "0.4.8"
|
||||||
num-derive = "0.2"
|
num-derive = "0.3"
|
||||||
num-traits = "0.2"
|
num-traits = "0.2"
|
||||||
rand = "0.6.5"
|
rand = "0.6.5"
|
||||||
rayon = "1.1.0"
|
rayon = "1.2.0"
|
||||||
serde = "1.0.97"
|
serde = "1.0.101"
|
||||||
serde_derive = "1.0.97"
|
serde_derive = "1.0.101"
|
||||||
serde_json = "1.0.40"
|
serde_json = "1.0.41"
|
||||||
serde_yaml = "0.8.9"
|
serde_yaml = "0.8.11"
|
||||||
# solana-runtime = { path = "../solana/runtime"}
|
# solana-runtime = { path = "../solana/runtime"}
|
||||||
solana = { path = "../core", version = "0.17.0" }
|
solana-core = { path = "../core", version = "0.20.0" }
|
||||||
solana-client = { path = "../client", version = "0.17.0" }
|
solana-genesis = { path = "../genesis", version = "0.20.0" }
|
||||||
solana-drone = { path = "../drone", version = "0.17.0" }
|
solana-client = { path = "../client", version = "0.20.0" }
|
||||||
solana-exchange-api = { path = "../programs/exchange_api", version = "0.17.0" }
|
solana-drone = { path = "../drone", version = "0.20.0" }
|
||||||
solana-exchange-program = { path = "../programs/exchange_program", version = "0.17.0" }
|
solana-exchange-api = { path = "../programs/exchange_api", version = "0.20.0" }
|
||||||
solana-logger = { path = "../logger", version = "0.17.0" }
|
solana-exchange-program = { path = "../programs/exchange_program", version = "0.20.0" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.17.0" }
|
solana-logger = { path = "../logger", version = "0.20.0" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.17.0" }
|
solana-metrics = { path = "../metrics", version = "0.20.0" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.17.0" }
|
solana-netutil = { path = "../netutil", version = "0.20.0" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.17.0" }
|
solana-runtime = { path = "../runtime", version = "0.20.0" }
|
||||||
|
solana-sdk = { path = "../sdk", version = "0.20.0" }
|
||||||
untrusted = "0.7.0"
|
untrusted = "0.7.0"
|
||||||
ws = "0.8.1"
|
ws = "0.9.1"
|
||||||
|
|
||||||
[features]
|
|
||||||
cuda = ["solana/cuda"]
|
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ demo demonstrates one way to host an exchange on the Solana blockchain by
|
|||||||
emulating a currency exchange.
|
emulating a currency exchange.
|
||||||
|
|
||||||
The assets are virtual tokens held by investors who may post order requests to
|
The assets are virtual tokens held by investors who may post order requests to
|
||||||
the exchange. A Swapper monitors the exchange and posts swap requests for
|
the exchange. A Matcher monitors the exchange and posts swap requests for
|
||||||
matching orders. All the transactions can execute concurrently.
|
matching orders. All the transactions can execute concurrently.
|
||||||
|
|
||||||
## Premise
|
## Premise
|
||||||
@ -42,30 +42,26 @@ matching orders. All the transactions can execute concurrently.
|
|||||||
- A request to create a token account
|
- A request to create a token account
|
||||||
- Token request
|
- Token request
|
||||||
- A request to deposit tokens of a particular type into a token account.
|
- A request to deposit tokens of a particular type into a token account.
|
||||||
- Token pair
|
- Asset pair
|
||||||
- A unique ordered list of two tokens. For the four types of tokens used in
|
- A struct with fields Base and Quote, representing the two assets which make up a
|
||||||
this demo, the valid pairs are AB, AC, AD, BC, BD, CD.
|
trading pair, which themselves are Tokens. The Base or 'primary' asset is the
|
||||||
- Direction of trade
|
numerator and the Quote is the denominator for pricing purposes.
|
||||||
- Describes which token in the pair the investor wants to sell and buy and can
|
- Order side
|
||||||
be either "To" or "From". For example, if an investor issues a "To" trade
|
- Describes which side of the market an investor wants to place a trade on. Options
|
||||||
for "AB" then they which to exchange A tokens to B tokens. A "From" order
|
are "Bid" or "Ask", where a bid represents an offer to purchase the Base asset of
|
||||||
would read the other way, A tokens from B tokens.
|
the AssetPair for a sum of the Quote Asset and an Ask is an offer to sell Base asset
|
||||||
|
for the Quote asset.
|
||||||
- Price ratio
|
- Price ratio
|
||||||
- An expression of the relative prices of two tokens. They consist of the
|
- An expression of the relative prices of two tokens. Calculated with the Base
|
||||||
price of the primary token and the price of the secondary token. For
|
Asset as the numerator and the Quote Asset as the denominator. Ratios are
|
||||||
simplicity sake, the primary token's price is always 1, which forces the
|
represented as fixed point numbers. The fixed point scaler is defined in
|
||||||
secondary to be the common denominator. For example, if token A was worth
|
|
||||||
2 and token B was worth 6, the price ratio would be 1:3 or just 3. Price
|
|
||||||
ratios are represented as fixed point numbers. The fixed point scaler is
|
|
||||||
defined in
|
|
||||||
[exchange_state.rs](https://github.com/solana-labs/solana/blob/c2fdd1362a029dcf89c8907c562d2079d977df11/programs/exchange_api/src/exchange_state.rs#L7)
|
[exchange_state.rs](https://github.com/solana-labs/solana/blob/c2fdd1362a029dcf89c8907c562d2079d977df11/programs/exchange_api/src/exchange_state.rs#L7)
|
||||||
- Order request
|
- Order request
|
||||||
- A Solana transaction executed by the exchange requesting the trade of one
|
- A Solana transaction sent by a trader to the exchange to submit an order.
|
||||||
type of token for another. order requests are made up of the token pair,
|
Order requests are made up of the token pair, the order side (bid or ask),
|
||||||
the direction of the trade, quantity of the primary token, the price ratio,
|
quantity of the primary token, the price ratio, and the two token accounts
|
||||||
and the two token accounts to be credited/deducted. An example trade
|
to be credited/deducted. An example trade request looks like "T AB 5 2"
|
||||||
request looks like "T AB 5 2" which reads "Exchange 5 A tokens to B tokens
|
which reads "Exchange 5 A tokens to B tokens at a price ratio of 1:2" A fulfilled trade would result in 5 A tokens
|
||||||
at a price ratio of 1:2" A fulfilled trade would result in 5 A tokens
|
|
||||||
deducted and 10 B tokens credited to the trade initiator's token accounts.
|
deducted and 10 B tokens credited to the trade initiator's token accounts.
|
||||||
Successful order requests result in an order.
|
Successful order requests result in an order.
|
||||||
- Order
|
- Order
|
||||||
@ -75,59 +71,62 @@ matching orders. All the transactions can execute concurrently.
|
|||||||
contain the same information as the order request.
|
contain the same information as the order request.
|
||||||
- Price spread
|
- Price spread
|
||||||
- The difference between the two matching orders. The spread is the
|
- The difference between the two matching orders. The spread is the
|
||||||
profit of the Swapper initiating the swap request.
|
profit of the Matcher initiating the swap request.
|
||||||
- Swap requirements
|
- Match requirements
|
||||||
- Policies that result in a successful trade swap.
|
- Policies that result in a successful trade swap.
|
||||||
- Swap request
|
- Match request
|
||||||
- A request to exchange tokens between to orders
|
- A request to fill two complementary orders (bid/ask), resulting if successful,
|
||||||
- Trade swap
|
in a trade being created.
|
||||||
- A successful trade. A swap consists of two matching orders that meet
|
- Trade
|
||||||
swap requirements. A trade swap may not wholly satisfy one or both of the
|
- A successful trade is created from two matching orders that meet
|
||||||
orders in which case the orders are adjusted appropriately. As
|
swap requirements which are submitted in a Match Request by a Matcher and
|
||||||
long as the swap requirements are met there will be an exchange of tokens
|
executed by the exchange. A trade may not wholly satisfy one or both of the
|
||||||
between accounts. Any price spread is deposited into the Swapper's profit
|
orders in which case the orders are adjusted appropriately. Upon execution,
|
||||||
account. All trade swaps are recorded in a new account for posterity.
|
tokens are distributed to the traders' accounts and any overlap or
|
||||||
|
"negative spread" between orders is deposited into the Matcher's profit
|
||||||
|
account. All successful trades are recorded in the data of a new solana
|
||||||
|
account for posterity.
|
||||||
- Investor
|
- Investor
|
||||||
- Individual investors who hold a number of tokens and wish to trade them on
|
- Individual investors who hold a number of tokens and wish to trade them on
|
||||||
the exchange. Investors operate as Solana thin clients who own a set of
|
the exchange. Investors operate as Solana thin clients who own a set of
|
||||||
accounts containing tokens and/or order requests. Investors post
|
accounts containing tokens and/or order requests. Investors post
|
||||||
transactions to the exchange in order to request tokens and post or cancel
|
transactions to the exchange in order to request tokens and post or cancel
|
||||||
order requests.
|
order requests.
|
||||||
- Swapper
|
- Matcher
|
||||||
- An agent who facilitates trading between investors. Swappers operate as
|
- An agent who facilitates trading between investors. Matchers operate as
|
||||||
Solana thin clients who monitor all the orders looking for a trade
|
Solana thin clients who monitor all the orders looking for a trade
|
||||||
match. Once found, the Swapper issues a swap request to the exchange.
|
match. Once found, the Matcher issues a swap request to the exchange.
|
||||||
Swappers are the engine of the exchange and are rewarded for their efforts by
|
Matchers are the engine of the exchange and are rewarded for their efforts by
|
||||||
accumulating the price spreads of the swaps they initiate. Swappers also
|
accumulating the price spreads of the swaps they initiate. Matchers also
|
||||||
provide current bid/ask price and OHLCV (Open, High, Low, Close, Volume)
|
provide current bid/ask price and OHLCV (Open, High, Low, Close, Volume)
|
||||||
information on demand via a public network port.
|
information on demand via a public network port.
|
||||||
- Transaction fees
|
- Transaction fees
|
||||||
- Solana transaction fees are paid for by the transaction submitters who are
|
- Solana transaction fees are paid for by the transaction submitters who are
|
||||||
the Investors and Swappers.
|
the Investors and Matchers.
|
||||||
|
|
||||||
## Exchange startup
|
## Exchange startup
|
||||||
|
|
||||||
The exchange is up and running when it reaches a state where it can take
|
The exchange is up and running when it reaches a state where it can take
|
||||||
investor's trades and Swapper's swap requests. To achieve this state the
|
investors' trades and Matchers' match requests. To achieve this state the
|
||||||
following must occur in order:
|
following must occur in order:
|
||||||
|
|
||||||
- Start the Solana blockchain
|
- Start the Solana blockchain
|
||||||
- Start the Swapper thin-client
|
- Start the thin-client
|
||||||
- The Swapper subscribes to change notifications for all the accounts owned by
|
- The Matcher subscribes to change notifications for all the accounts owned by
|
||||||
the exchange program id. The subscription is managed via Solana's JSON RPC
|
the exchange program id. The subscription is managed via Solana's JSON RPC
|
||||||
interface.
|
interface.
|
||||||
- The Swapper starts responding to queries for bid/ask price and OHLCV
|
- The Matcher starts responding to queries for bid/ask price and OHLCV
|
||||||
|
|
||||||
The Swapper responding successfully to price and OHLCV requests is the signal to
|
The Matcher responding successfully to price and OHLCV requests is the signal to
|
||||||
the investors that trades submitted after that point will be analyzed. <!--This
|
the investors that trades submitted after that point will be analyzed. <!--This
|
||||||
is not ideal, and instead investors should be able to submit trades at any time,
|
is not ideal, and instead investors should be able to submit trades at any time,
|
||||||
and the Swapper could come and go without missing a trade. One way to achieve
|
and the Matcher could come and go without missing a trade. One way to achieve
|
||||||
this is for the Swapper to read the current state of all accounts looking for all
|
this is for the Matcher to read the current state of all accounts looking for all
|
||||||
open orders.-->
|
open orders.-->
|
||||||
|
|
||||||
Investors will initially query the exchange to discover their current balance
|
Investors will initially query the exchange to discover their current balance
|
||||||
for each type of token. If the investor does not already have an account for
|
for each type of token. If the investor does not already have an account for
|
||||||
each type of token, they will submit account requests. Swappers as well will
|
each type of token, they will submit account requests. Matcher as well will
|
||||||
request accounts to hold the tokens they earn by initiating trade swaps.
|
request accounts to hold the tokens they earn by initiating trade swaps.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
@ -165,7 +164,7 @@ pub struct TokenAccountInfo {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
For this demo investors or Swappers can request more tokens from the exchange at
|
For this demo investors or Matcher can request more tokens from the exchange at
|
||||||
any time by submitting token requests. In non-demos, an exchange of this type
|
any time by submitting token requests. In non-demos, an exchange of this type
|
||||||
would provide another way to exchange a 3rd party asset into tokens.
|
would provide another way to exchange a 3rd party asset into tokens.
|
||||||
|
|
||||||
@ -269,10 +268,10 @@ pub enum ExchangeInstruction {
|
|||||||
|
|
||||||
## Trade swaps
|
## Trade swaps
|
||||||
|
|
||||||
The Swapper is monitoring the accounts assigned to the exchange program and
|
The Matcher is monitoring the accounts assigned to the exchange program and
|
||||||
building a trade-order table. The order table is used to identify
|
building a trade-order table. The order table is used to identify
|
||||||
matching orders which could be fulfilled. When a match is found the
|
matching orders which could be fulfilled. When a match is found the
|
||||||
Swapper should issue a swap request. Swap requests may not satisfy the entirety
|
Matcher should issue a swap request. Swap requests may not satisfy the entirety
|
||||||
of either order, but the exchange will greedily fulfill it. Any leftover tokens
|
of either order, but the exchange will greedily fulfill it. Any leftover tokens
|
||||||
in either account will keep the order valid for further swap requests in
|
in either account will keep the order valid for further swap requests in
|
||||||
the future.
|
the future.
|
||||||
@ -310,14 +309,14 @@ whole for clarity.
|
|||||||
| 5 | 1 T AB 2 10 | 2 F AB 1 5 |
|
| 5 | 1 T AB 2 10 | 2 F AB 1 5 |
|
||||||
|
|
||||||
As part of a successful swap request, the exchange will credit tokens to the
|
As part of a successful swap request, the exchange will credit tokens to the
|
||||||
Swapper's account equal to the difference in the price ratios or the two orders.
|
Matcher's account equal to the difference in the price ratios or the two orders.
|
||||||
These tokens are considered the Swapper's profit for initiating the trade.
|
These tokens are considered the Matcher's profit for initiating the trade.
|
||||||
|
|
||||||
The Swapper would initiate the following swap on the order table above:
|
The Matcher would initiate the following swap on the order table above:
|
||||||
|
|
||||||
- Row 1, To: Investor 1 trades 2 A tokens to 8 B tokens
|
- Row 1, To: Investor 1 trades 2 A tokens to 8 B tokens
|
||||||
- Row 1, From: Investor 2 trades 2 A tokens from 8 B tokens
|
- Row 1, From: Investor 2 trades 2 A tokens from 8 B tokens
|
||||||
- Swapper takes 8 B tokens as profit
|
- Matcher takes 8 B tokens as profit
|
||||||
|
|
||||||
Both row 1 trades are fully realized, table becomes:
|
Both row 1 trades are fully realized, table becomes:
|
||||||
|
|
||||||
@ -328,11 +327,11 @@ Both row 1 trades are fully realized, table becomes:
|
|||||||
| 3 | 1 T AB 2 8 | 2 F AB 3 6 |
|
| 3 | 1 T AB 2 8 | 2 F AB 3 6 |
|
||||||
| 4 | 1 T AB 2 10 | 2 F AB 1 5 |
|
| 4 | 1 T AB 2 10 | 2 F AB 1 5 |
|
||||||
|
|
||||||
The Swapper would initiate the following swap:
|
The Matcher would initiate the following swap:
|
||||||
|
|
||||||
- Row 1, To: Investor 1 trades 1 A token to 4 B tokens
|
- Row 1, To: Investor 1 trades 1 A token to 4 B tokens
|
||||||
- Row 1, From: Investor 2 trades 1 A token from 4 B tokens
|
- Row 1, From: Investor 2 trades 1 A token from 4 B tokens
|
||||||
- Swapper takes 4 B tokens as profit
|
- Matcher takes 4 B tokens as profit
|
||||||
|
|
||||||
Row 1 From is not fully realized, table becomes:
|
Row 1 From is not fully realized, table becomes:
|
||||||
|
|
||||||
@ -343,11 +342,11 @@ Row 1 From is not fully realized, table becomes:
|
|||||||
| 3 | 1 T AB 2 10 | 2 F AB 3 6 |
|
| 3 | 1 T AB 2 10 | 2 F AB 3 6 |
|
||||||
| 4 | | 2 F AB 1 5 |
|
| 4 | | 2 F AB 1 5 |
|
||||||
|
|
||||||
The Swapper would initiate the following swap:
|
The Matcher would initiate the following swap:
|
||||||
|
|
||||||
- Row 1, To: Investor 1 trades 1 A token to 6 B tokens
|
- Row 1, To: Investor 1 trades 1 A token to 6 B tokens
|
||||||
- Row 1, From: Investor 2 trades 1 A token from 6 B tokens
|
- Row 1, From: Investor 2 trades 1 A token from 6 B tokens
|
||||||
- Swapper takes 2 B tokens as profit
|
- Matcher takes 2 B tokens as profit
|
||||||
|
|
||||||
Row 1 To is now fully realized, table becomes:
|
Row 1 To is now fully realized, table becomes:
|
||||||
|
|
||||||
@ -357,11 +356,11 @@ Row 1 To is now fully realized, table becomes:
|
|||||||
| 2 | 1 T AB 2 8 | 2 F AB 3 5 |
|
| 2 | 1 T AB 2 8 | 2 F AB 3 5 |
|
||||||
| 3 | 1 T AB 2 10 | 2 F AB 1 5 |
|
| 3 | 1 T AB 2 10 | 2 F AB 1 5 |
|
||||||
|
|
||||||
The Swapper would initiate the following last swap:
|
The Matcher would initiate the following last swap:
|
||||||
|
|
||||||
- Row 1, To: Investor 1 trades 2 A token to 12 B tokens
|
- Row 1, To: Investor 1 trades 2 A token to 12 B tokens
|
||||||
- Row 1, From: Investor 2 trades 2 A token from 12 B tokens
|
- Row 1, From: Investor 2 trades 2 A token from 12 B tokens
|
||||||
- Swapper takes 4 B tokens as profit
|
- Matcher takes 4 B tokens as profit
|
||||||
|
|
||||||
Table becomes:
|
Table becomes:
|
||||||
|
|
||||||
@ -383,7 +382,7 @@ pub enum ExchangeInstruction {
|
|||||||
/// key 3 - `From` order
|
/// key 3 - `From` order
|
||||||
/// key 4 - Token account associated with the To Trade
|
/// key 4 - Token account associated with the To Trade
|
||||||
/// key 5 - Token account associated with From trade
|
/// key 5 - Token account associated with From trade
|
||||||
/// key 6 - Token account in which to deposit the Swappers profit from the swap.
|
/// key 6 - Token account in which to deposit the Matcher profit from the swap.
|
||||||
SwapRequest,
|
SwapRequest,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,14 +441,14 @@ pub enum ExchangeInstruction {
|
|||||||
/// key 3 - `From` order
|
/// key 3 - `From` order
|
||||||
/// key 4 - Token account associated with the To Trade
|
/// key 4 - Token account associated with the To Trade
|
||||||
/// key 5 - Token account associated with From trade
|
/// key 5 - Token account associated with From trade
|
||||||
/// key 6 - Token account in which to deposit the Swappers profit from the swap.
|
/// key 6 - Token account in which to deposit the Matcher profit from the swap.
|
||||||
SwapRequest,
|
SwapRequest,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Quotes and OHLCV
|
## Quotes and OHLCV
|
||||||
|
|
||||||
The Swapper will provide current bid/ask price quotes based on trade actively and
|
The Matcher will provide current bid/ask price quotes based on trade actively and
|
||||||
also provide OHLCV based on some time window. The details of how the bid/ask
|
also provide OHLCV based on some time window. The details of how the bid/ask
|
||||||
price quotes are calculated are yet to be decided.
|
price quotes are calculated are yet to be decided.
|
||||||
|
|
||||||
|
@ -5,20 +5,21 @@ use itertools::izip;
|
|||||||
use log::*;
|
use log::*;
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use solana::gen_keys::GenKeys;
|
|
||||||
use solana_client::perf_utils::{sample_txs, SampleStats};
|
use solana_client::perf_utils::{sample_txs, SampleStats};
|
||||||
|
use solana_core::gen_keys::GenKeys;
|
||||||
use solana_drone::drone::request_airdrop_transaction;
|
use solana_drone::drone::request_airdrop_transaction;
|
||||||
use solana_exchange_api::exchange_instruction;
|
use solana_exchange_api::exchange_instruction;
|
||||||
use solana_exchange_api::exchange_state::*;
|
use solana_exchange_api::exchange_state::*;
|
||||||
use solana_exchange_api::id;
|
use solana_exchange_api::id;
|
||||||
|
use solana_genesis::Base64Account;
|
||||||
use solana_metrics::datapoint_info;
|
use solana_metrics::datapoint_info;
|
||||||
use solana_sdk::client::Client;
|
use solana_sdk::client::Client;
|
||||||
use solana_sdk::client::SyncClient;
|
use solana_sdk::client::SyncClient;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
use solana_sdk::system_instruction;
|
|
||||||
use solana_sdk::timing::{duration_as_ms, duration_as_s};
|
use solana_sdk::timing::{duration_as_ms, duration_as_s};
|
||||||
use solana_sdk::transaction::Transaction;
|
use solana_sdk::transaction::Transaction;
|
||||||
|
use solana_sdk::{system_instruction, system_program};
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
use std::collections::{HashMap, VecDeque};
|
use std::collections::{HashMap, VecDeque};
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
@ -88,7 +89,12 @@ pub fn create_client_accounts_file(
|
|||||||
keypairs.iter().for_each(|keypair| {
|
keypairs.iter().for_each(|keypair| {
|
||||||
accounts.insert(
|
accounts.insert(
|
||||||
serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap(),
|
serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap(),
|
||||||
fund_amount,
|
Base64Account {
|
||||||
|
balance: fund_amount,
|
||||||
|
executable: false,
|
||||||
|
owner: system_program::id().to_string(),
|
||||||
|
data: String::new(),
|
||||||
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -134,7 +140,7 @@ where
|
|||||||
let path = Path::new(&client_ids_and_stake_file);
|
let path = Path::new(&client_ids_and_stake_file);
|
||||||
let file = File::open(path).unwrap();
|
let file = File::open(path).unwrap();
|
||||||
|
|
||||||
let accounts: HashMap<String, u64> = serde_yaml::from_reader(file).unwrap();
|
let accounts: HashMap<String, Base64Account> = serde_yaml::from_reader(file).unwrap();
|
||||||
accounts
|
accounts
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(keypair, _)| {
|
.map(|(keypair, _)| {
|
||||||
@ -527,21 +533,21 @@ fn trader<T>(
|
|||||||
let mut trade_infos = vec![];
|
let mut trade_infos = vec![];
|
||||||
let start = account_group * batch_size as usize;
|
let start = account_group * batch_size as usize;
|
||||||
let end = account_group * batch_size as usize + batch_size as usize;
|
let end = account_group * batch_size as usize + batch_size as usize;
|
||||||
let mut direction = Direction::To;
|
let mut side = OrderSide::Ask;
|
||||||
for (signer, trade, src) in izip!(
|
for (signer, trade, src) in izip!(
|
||||||
signers[start..end].iter(),
|
signers[start..end].iter(),
|
||||||
trade_keys,
|
trade_keys,
|
||||||
srcs[start..end].iter(),
|
srcs[start..end].iter(),
|
||||||
) {
|
) {
|
||||||
direction = if direction == Direction::To {
|
side = if side == OrderSide::Ask {
|
||||||
Direction::From
|
OrderSide::Bid
|
||||||
} else {
|
} else {
|
||||||
Direction::To
|
OrderSide::Ask
|
||||||
};
|
};
|
||||||
let order_info = OrderInfo {
|
let order_info = OrderInfo {
|
||||||
/// Owner of the trade order
|
/// Owner of the trade order
|
||||||
owner: Pubkey::default(), // don't care
|
owner: Pubkey::default(), // don't care
|
||||||
direction,
|
side,
|
||||||
pair,
|
pair,
|
||||||
tokens,
|
tokens,
|
||||||
price,
|
price,
|
||||||
@ -551,7 +557,7 @@ fn trader<T>(
|
|||||||
trade_account: trade.pubkey(),
|
trade_account: trade.pubkey(),
|
||||||
order_info,
|
order_info,
|
||||||
});
|
});
|
||||||
trades.push((signer, trade.pubkey(), direction, src));
|
trades.push((signer, trade.pubkey(), side, src));
|
||||||
}
|
}
|
||||||
account_group = (account_group + 1) % account_groups as usize;
|
account_group = (account_group + 1) % account_groups as usize;
|
||||||
|
|
||||||
@ -562,7 +568,7 @@ fn trader<T>(
|
|||||||
trades.chunks(chunk_size).for_each(|chunk| {
|
trades.chunks(chunk_size).for_each(|chunk| {
|
||||||
let trades_txs: Vec<_> = chunk
|
let trades_txs: Vec<_> = chunk
|
||||||
.par_iter()
|
.par_iter()
|
||||||
.map(|(signer, trade, direction, src)| {
|
.map(|(signer, trade, side, src)| {
|
||||||
let s: &Keypair = &signer;
|
let s: &Keypair = &signer;
|
||||||
let owner = &signer.pubkey();
|
let owner = &signer.pubkey();
|
||||||
let space = mem::size_of::<ExchangeState>() as u64;
|
let space = mem::size_of::<ExchangeState>() as u64;
|
||||||
@ -571,7 +577,7 @@ fn trader<T>(
|
|||||||
vec![
|
vec![
|
||||||
system_instruction::create_account(owner, trade, 1, space, &id()),
|
system_instruction::create_account(owner, trade, 1, space, &id()),
|
||||||
exchange_instruction::trade_request(
|
exchange_instruction::trade_request(
|
||||||
owner, trade, *direction, pair, tokens, price, src,
|
owner, trade, *side, pair, tokens, price, src,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
blockhash,
|
blockhash,
|
||||||
@ -627,7 +633,7 @@ fn trader<T>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_transfer<T>(sync_client: &T, tx: &Transaction) -> bool
|
fn verify_transaction<T>(sync_client: &T, tx: &Transaction) -> bool
|
||||||
where
|
where
|
||||||
T: SyncClient + ?Sized,
|
T: SyncClient + ?Sized,
|
||||||
{
|
{
|
||||||
@ -651,16 +657,18 @@ fn verify_funding_transfer<T: SyncClient + ?Sized>(
|
|||||||
tx: &Transaction,
|
tx: &Transaction,
|
||||||
amount: u64,
|
amount: u64,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
|
if verify_transaction(client, tx) {
|
||||||
for a in &tx.message().account_keys[1..] {
|
for a in &tx.message().account_keys[1..] {
|
||||||
if client.get_balance(a).unwrap_or(0) >= amount {
|
if client.get_balance(a).unwrap_or(0) >= amount {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fund_keys(client: &Client, source: &Keypair, dests: &[Arc<Keypair>], lamports: u64) {
|
pub fn fund_keys(client: &dyn Client, source: &Keypair, dests: &[Arc<Keypair>], lamports: u64) {
|
||||||
let total = lamports * (dests.len() as u64 + 1);
|
let total = lamports * (dests.len() as u64 + 1);
|
||||||
let mut funded: Vec<(&Keypair, u64)> = vec![(source, total)];
|
let mut funded: Vec<(&Keypair, u64)> = vec![(source, total)];
|
||||||
let mut notfunded: Vec<&Arc<Keypair>> = dests.iter().collect();
|
let mut notfunded: Vec<&Arc<Keypair>> = dests.iter().collect();
|
||||||
@ -764,7 +772,7 @@ pub fn fund_keys(client: &Client, source: &Keypair, dests: &[Arc<Keypair>], lamp
|
|||||||
retries += 1;
|
retries += 1;
|
||||||
debug!(" Retry {:?}", retries);
|
debug!(" Retry {:?}", retries);
|
||||||
if retries >= 10 {
|
if retries >= 10 {
|
||||||
error!(" Too many retries, give up");
|
error!("fund_keys: Too many retries ({}), give up", retries);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -778,7 +786,7 @@ pub fn fund_keys(client: &Client, source: &Keypair, dests: &[Arc<Keypair>], lamp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_token_accounts(client: &Client, signers: &[Arc<Keypair>], accounts: &[Pubkey]) {
|
pub fn create_token_accounts(client: &dyn Client, signers: &[Arc<Keypair>], accounts: &[Pubkey]) {
|
||||||
let mut notfunded: Vec<(&Arc<Keypair>, &Pubkey)> = signers.iter().zip(accounts).collect();
|
let mut notfunded: Vec<(&Arc<Keypair>, &Pubkey)> = signers.iter().zip(accounts).collect();
|
||||||
|
|
||||||
while !notfunded.is_empty() {
|
while !notfunded.is_empty() {
|
||||||
@ -824,11 +832,11 @@ pub fn create_token_accounts(client: &Client, signers: &[Arc<Keypair>], accounts
|
|||||||
let mut waits = 0;
|
let mut waits = 0;
|
||||||
while !to_create_txs.is_empty() {
|
while !to_create_txs.is_empty() {
|
||||||
sleep(Duration::from_millis(200));
|
sleep(Duration::from_millis(200));
|
||||||
to_create_txs.retain(|(_, tx)| !verify_transfer(client, &tx));
|
to_create_txs.retain(|(_, tx)| !verify_transaction(client, &tx));
|
||||||
if to_create_txs.is_empty() {
|
if to_create_txs.is_empty() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
debug!(
|
info!(
|
||||||
" {} transactions outstanding, waits {:?}",
|
" {} transactions outstanding, waits {:?}",
|
||||||
to_create_txs.len(),
|
to_create_txs.len(),
|
||||||
waits
|
waits
|
||||||
@ -841,9 +849,12 @@ pub fn create_token_accounts(client: &Client, signers: &[Arc<Keypair>], accounts
|
|||||||
|
|
||||||
if !to_create_txs.is_empty() {
|
if !to_create_txs.is_empty() {
|
||||||
retries += 1;
|
retries += 1;
|
||||||
debug!(" Retry {:?}", retries);
|
info!(" Retry {:?} {} txes left", retries, to_create_txs.len());
|
||||||
if retries >= 20 {
|
if retries >= 20 {
|
||||||
error!(" Too many retries, give up");
|
error!(
|
||||||
|
"create_token_accounts: Too many retries ({}), give up",
|
||||||
|
retries
|
||||||
|
);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -908,7 +919,7 @@ fn generate_keypairs(num: u64) -> Vec<Keypair> {
|
|||||||
rnd.gen_n_keypairs(num)
|
rnd.gen_n_keypairs(num)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn airdrop_lamports(client: &Client, drone_addr: &SocketAddr, id: &Keypair, amount: u64) {
|
pub fn airdrop_lamports(client: &dyn Client, drone_addr: &SocketAddr, id: &Keypair, amount: u64) {
|
||||||
let balance = client.get_balance(&id.pubkey());
|
let balance = client.get_balance(&id.pubkey());
|
||||||
let balance = balance.unwrap_or(0);
|
let balance = balance.unwrap_or(0);
|
||||||
if balance >= amount {
|
if balance >= amount {
|
||||||
@ -953,109 +964,9 @@ pub fn airdrop_lamports(client: &Client, drone_addr: &SocketAddr, id: &Keypair,
|
|||||||
debug!(" Retry...");
|
debug!(" Retry...");
|
||||||
tries += 1;
|
tries += 1;
|
||||||
if tries > 50 {
|
if tries > 50 {
|
||||||
error!("Too many retries, give up");
|
error!("airdrop_lamports: Too many retries ({}), give up", tries);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
sleep(Duration::from_secs(2));
|
sleep(Duration::from_secs(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
use solana::gossip_service::{discover_cluster, get_multi_client};
|
|
||||||
use solana::local_cluster::{ClusterConfig, LocalCluster};
|
|
||||||
use solana::validator::ValidatorConfig;
|
|
||||||
use solana_drone::drone::run_local_drone;
|
|
||||||
use solana_exchange_api::exchange_processor::process_instruction;
|
|
||||||
use solana_runtime::bank::Bank;
|
|
||||||
use solana_runtime::bank_client::BankClient;
|
|
||||||
use solana_sdk::genesis_block::create_genesis_block;
|
|
||||||
use std::sync::mpsc::channel;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_exchange_local_cluster() {
|
|
||||||
solana_logger::setup();
|
|
||||||
|
|
||||||
const NUM_NODES: usize = 1;
|
|
||||||
|
|
||||||
let mut config = Config::default();
|
|
||||||
config.identity = Keypair::new();
|
|
||||||
config.duration = Duration::from_secs(1);
|
|
||||||
config.fund_amount = 100_000;
|
|
||||||
config.threads = 1;
|
|
||||||
config.transfer_delay = 20; // 15
|
|
||||||
config.batch_size = 100; // 1000;
|
|
||||||
config.chunk_size = 10; // 200;
|
|
||||||
config.account_groups = 1; // 10;
|
|
||||||
let Config {
|
|
||||||
fund_amount,
|
|
||||||
batch_size,
|
|
||||||
account_groups,
|
|
||||||
..
|
|
||||||
} = config;
|
|
||||||
let accounts_in_groups = batch_size * account_groups;
|
|
||||||
|
|
||||||
let cluster = LocalCluster::new(&ClusterConfig {
|
|
||||||
node_stakes: vec![100_000; NUM_NODES],
|
|
||||||
cluster_lamports: 100_000_000_000_000,
|
|
||||||
validator_configs: vec![ValidatorConfig::default(); NUM_NODES],
|
|
||||||
native_instruction_processors: [solana_exchange_program!()].to_vec(),
|
|
||||||
..ClusterConfig::default()
|
|
||||||
});
|
|
||||||
|
|
||||||
let drone_keypair = Keypair::new();
|
|
||||||
cluster.transfer(
|
|
||||||
&cluster.funding_keypair,
|
|
||||||
&drone_keypair.pubkey(),
|
|
||||||
2_000_000_000_000,
|
|
||||||
);
|
|
||||||
|
|
||||||
let (addr_sender, addr_receiver) = channel();
|
|
||||||
run_local_drone(drone_keypair, addr_sender, Some(1_000_000_000_000));
|
|
||||||
let drone_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap();
|
|
||||||
|
|
||||||
info!("Connecting to the cluster");
|
|
||||||
let (nodes, _) = discover_cluster(&cluster.entry_point_info.gossip, NUM_NODES)
|
|
||||||
.unwrap_or_else(|err| {
|
|
||||||
error!("Failed to discover {} nodes: {:?}", NUM_NODES, err);
|
|
||||||
exit(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
let (client, num_clients) = get_multi_client(&nodes);
|
|
||||||
|
|
||||||
info!("clients: {}", num_clients);
|
|
||||||
assert!(num_clients >= NUM_NODES);
|
|
||||||
|
|
||||||
const NUM_SIGNERS: u64 = 2;
|
|
||||||
airdrop_lamports(
|
|
||||||
&client,
|
|
||||||
&drone_addr,
|
|
||||||
&config.identity,
|
|
||||||
fund_amount * (accounts_in_groups + 1) as u64 * NUM_SIGNERS,
|
|
||||||
);
|
|
||||||
|
|
||||||
do_bench_exchange(vec![client], config);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_exchange_bank_client() {
|
|
||||||
solana_logger::setup();
|
|
||||||
let (genesis_block, identity) = create_genesis_block(100_000_000_000_000);
|
|
||||||
let mut bank = Bank::new(&genesis_block);
|
|
||||||
bank.add_instruction_processor(id(), process_instruction);
|
|
||||||
let clients = vec![BankClient::new(bank)];
|
|
||||||
|
|
||||||
let mut config = Config::default();
|
|
||||||
config.identity = identity;
|
|
||||||
config.duration = Duration::from_secs(1);
|
|
||||||
config.fund_amount = 100_000;
|
|
||||||
config.threads = 1;
|
|
||||||
config.transfer_delay = 20; // 0;
|
|
||||||
config.batch_size = 100; // 1500;
|
|
||||||
config.chunk_size = 10; // 1500;
|
|
||||||
config.account_groups = 1; // 50;
|
|
||||||
|
|
||||||
do_bench_exchange(clients, config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use clap::{crate_description, crate_name, crate_version, value_t, App, Arg, ArgMatches};
|
use clap::{crate_description, crate_name, crate_version, value_t, App, Arg, ArgMatches};
|
||||||
use solana::gen_keys::GenKeys;
|
use solana_core::gen_keys::GenKeys;
|
||||||
use solana_drone::drone::DRONE_PORT;
|
use solana_drone::drone::DRONE_PORT;
|
||||||
use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil};
|
use solana_sdk::signature::{read_keypair_file, Keypair, KeypairUtil};
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
@ -179,7 +179,7 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if matches.is_present("identity") {
|
if matches.is_present("identity") {
|
||||||
args.identity = read_keypair(matches.value_of("identity").unwrap())
|
args.identity = read_keypair_file(matches.value_of("identity").unwrap())
|
||||||
.expect("can't read client identity");
|
.expect("can't read client identity");
|
||||||
} else {
|
} else {
|
||||||
args.identity = {
|
args.identity = {
|
||||||
|
3
bench-exchange/src/lib.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
pub mod bench;
|
||||||
|
pub mod cli;
|
||||||
|
mod order_book;
|
@ -2,13 +2,9 @@ pub mod bench;
|
|||||||
mod cli;
|
mod cli;
|
||||||
pub mod order_book;
|
pub mod order_book;
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
#[macro_use]
|
|
||||||
extern crate solana_exchange_program;
|
|
||||||
|
|
||||||
use crate::bench::{airdrop_lamports, create_client_accounts_file, do_bench_exchange, Config};
|
use crate::bench::{airdrop_lamports, create_client_accounts_file, do_bench_exchange, Config};
|
||||||
use log::*;
|
use log::*;
|
||||||
use solana::gossip_service::{discover_cluster, get_multi_client};
|
use solana_core::gossip_service::{discover_cluster, get_multi_client};
|
||||||
use solana_sdk::signature::KeypairUtil;
|
use solana_sdk::signature::KeypairUtil;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
@ -58,7 +54,7 @@ fn main() {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
info!("Connecting to the cluster");
|
info!("Connecting to the cluster");
|
||||||
let (nodes, _replicators) =
|
let (nodes, _archivers) =
|
||||||
discover_cluster(&entrypoint_addr, num_nodes).unwrap_or_else(|_| {
|
discover_cluster(&entrypoint_addr, num_nodes).unwrap_or_else(|_| {
|
||||||
panic!("Failed to discover nodes");
|
panic!("Failed to discover nodes");
|
||||||
});
|
});
|
||||||
|
@ -96,12 +96,12 @@ impl OrderBook {
|
|||||||
// Ok(())
|
// Ok(())
|
||||||
// }
|
// }
|
||||||
pub fn push(&mut self, pubkey: Pubkey, info: OrderInfo) -> Result<(), Box<dyn error::Error>> {
|
pub fn push(&mut self, pubkey: Pubkey, info: OrderInfo) -> Result<(), Box<dyn error::Error>> {
|
||||||
check_trade(info.direction, info.tokens, info.price)?;
|
check_trade(info.side, info.tokens, info.price)?;
|
||||||
match info.direction {
|
match info.side {
|
||||||
Direction::To => {
|
OrderSide::Ask => {
|
||||||
self.to_ab.push(ToOrder { pubkey, info });
|
self.to_ab.push(ToOrder { pubkey, info });
|
||||||
}
|
}
|
||||||
Direction::From => {
|
OrderSide::Bid => {
|
||||||
self.from_ab.push(FromOrder { pubkey, info });
|
self.from_ab.push(FromOrder { pubkey, info });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,17 +2,13 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-bench-streamer"
|
name = "solana-bench-streamer"
|
||||||
version = "0.17.0"
|
version = "0.20.0"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.33.0"
|
clap = "2.33.0"
|
||||||
solana = { path = "../core", version = "0.17.0" }
|
solana-core = { path = "../core", version = "0.20.0" }
|
||||||
solana-logger = { path = "../logger", version = "0.17.0" }
|
solana-logger = { path = "../logger", version = "0.20.0" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.17.0" }
|
solana-netutil = { path = "../netutil", version = "0.20.0" }
|
||||||
|
|
||||||
[features]
|
|
||||||
cuda = ["solana/cuda"]
|
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
use clap::{crate_description, crate_name, crate_version, App, Arg};
|
use clap::{crate_description, crate_name, crate_version, App, Arg};
|
||||||
use solana::packet::PacketsRecycler;
|
use solana_core::packet::PacketsRecycler;
|
||||||
use solana::packet::{Packet, Packets, BLOB_SIZE, PACKET_DATA_SIZE};
|
use solana_core::packet::{Packet, Packets, BLOB_SIZE, PACKET_DATA_SIZE};
|
||||||
use solana::result::Result;
|
use solana_core::result::Result;
|
||||||
use solana::streamer::{receiver, PacketReceiver};
|
use solana_core::streamer::{receiver, PacketReceiver};
|
||||||
use std::cmp::max;
|
use std::cmp::max;
|
||||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr, UdpSocket};
|
use std::net::{IpAddr, Ipv4Addr, SocketAddr, UdpSocket};
|
||||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||||
|
@ -2,28 +2,37 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-bench-tps"
|
name = "solana-bench-tps"
|
||||||
version = "0.17.0"
|
version = "0.20.0"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
bincode = "1.2.0"
|
||||||
clap = "2.33.0"
|
clap = "2.33.0"
|
||||||
log = "0.4.7"
|
log = "0.4.8"
|
||||||
rayon = "1.1.0"
|
rayon = "1.2.0"
|
||||||
serde = "1.0.97"
|
serde = "1.0.101"
|
||||||
serde_derive = "1.0.97"
|
serde_derive = "1.0.101"
|
||||||
serde_json = "1.0.40"
|
serde_json = "1.0.41"
|
||||||
serde_yaml = "0.8.9"
|
serde_yaml = "0.8.11"
|
||||||
solana = { path = "../core", version = "0.17.0" }
|
solana-core = { path = "../core", version = "0.20.0" }
|
||||||
solana-client = { path = "../client", version = "0.17.0" }
|
solana-genesis = { path = "../genesis", version = "0.20.0" }
|
||||||
solana-drone = { path = "../drone", version = "0.17.0" }
|
solana-client = { path = "../client", version = "0.20.0" }
|
||||||
solana-logger = { path = "../logger", version = "0.17.0" }
|
solana-drone = { path = "../drone", version = "0.20.0" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.17.0" }
|
solana-librapay-api = { path = "../programs/librapay_api", version = "0.20.0", optional = true }
|
||||||
solana-netutil = { path = "../netutil", version = "0.17.0" }
|
solana-logger = { path = "../logger", version = "0.20.0" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.17.0" }
|
solana-metrics = { path = "../metrics", version = "0.20.0" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.17.0" }
|
solana-measure = { path = "../measure", version = "0.20.0" }
|
||||||
|
solana-netutil = { path = "../netutil", version = "0.20.0" }
|
||||||
|
solana-runtime = { path = "../runtime", version = "0.20.0" }
|
||||||
|
solana-sdk = { path = "../sdk", version = "0.20.0" }
|
||||||
|
solana-move-loader-program = { path = "../programs/move_loader_program", version = "0.20.0", optional = true }
|
||||||
|
solana-move-loader-api = { path = "../programs/move_loader_api", version = "0.20.0", optional = true }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
serial_test = "0.2.0"
|
||||||
|
serial_test_derive = "0.2.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
cuda = ["solana/cuda"]
|
move = ["solana-core/move", "solana-librapay-api", "solana-move-loader-program", "solana-move-loader-api"]
|
||||||
|
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
use std::net::SocketAddr;
|
|
||||||
use std::process::exit;
|
|
||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
use clap::{crate_description, crate_name, crate_version, App, Arg, ArgMatches};
|
use clap::{crate_description, crate_name, crate_version, App, Arg, ArgMatches};
|
||||||
use solana_drone::drone::DRONE_PORT;
|
use solana_drone::drone::DRONE_PORT;
|
||||||
use solana_sdk::fee_calculator::FeeCalculator;
|
use solana_sdk::fee_calculator::FeeCalculator;
|
||||||
use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil};
|
use solana_sdk::signature::{read_keypair_file, Keypair, KeypairUtil};
|
||||||
|
use std::{net::SocketAddr, process::exit, time::Duration};
|
||||||
|
|
||||||
|
const NUM_LAMPORTS_PER_ACCOUNT_DEFAULT: u64 = solana_sdk::native_token::SOL_LAMPORTS;
|
||||||
|
|
||||||
/// Holds the configuration for a single run of the benchmark
|
/// Holds the configuration for a single run of the benchmark
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
@ -22,6 +21,8 @@ pub struct Config {
|
|||||||
pub write_to_client_file: bool,
|
pub write_to_client_file: bool,
|
||||||
pub read_from_client_file: bool,
|
pub read_from_client_file: bool,
|
||||||
pub target_lamports_per_signature: u64,
|
pub target_lamports_per_signature: u64,
|
||||||
|
pub use_move: bool,
|
||||||
|
pub num_lamports_per_account: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
@ -33,13 +34,15 @@ impl Default for Config {
|
|||||||
threads: 4,
|
threads: 4,
|
||||||
num_nodes: 1,
|
num_nodes: 1,
|
||||||
duration: Duration::new(std::u64::MAX, 0),
|
duration: Duration::new(std::u64::MAX, 0),
|
||||||
tx_count: 500_000,
|
tx_count: 50_000,
|
||||||
thread_batch_sleep_ms: 0,
|
thread_batch_sleep_ms: 1000,
|
||||||
sustained: false,
|
sustained: false,
|
||||||
client_ids_and_stake_file: String::new(),
|
client_ids_and_stake_file: String::new(),
|
||||||
write_to_client_file: false,
|
write_to_client_file: false,
|
||||||
read_from_client_file: false,
|
read_from_client_file: false,
|
||||||
target_lamports_per_signature: FeeCalculator::default().target_lamports_per_signature,
|
target_lamports_per_signature: FeeCalculator::default().target_lamports_per_signature,
|
||||||
|
use_move: false,
|
||||||
|
num_lamports_per_account: NUM_LAMPORTS_PER_ACCOUNT_DEFAULT,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,6 +103,11 @@ pub fn build_args<'a, 'b>() -> App<'a, 'b> {
|
|||||||
.long("sustained")
|
.long("sustained")
|
||||||
.help("Use sustained performance mode vs. peak mode. This overlaps the tx generation with transfers."),
|
.help("Use sustained performance mode vs. peak mode. This overlaps the tx generation with transfers."),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("use-move")
|
||||||
|
.long("use-move")
|
||||||
|
.help("Use Move language transactions to perform transfers."),
|
||||||
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("tx_count")
|
Arg::with_name("tx_count")
|
||||||
.long("tx_count")
|
.long("tx_count")
|
||||||
@ -139,6 +147,15 @@ pub fn build_args<'a, 'b>() -> App<'a, 'b> {
|
|||||||
verification when the cluster is operating at target-signatures-per-slot",
|
verification when the cluster is operating at target-signatures-per-slot",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("num_lamports_per_account")
|
||||||
|
.long("num-lamports-per-account")
|
||||||
|
.value_name("LAMPORTS")
|
||||||
|
.takes_value(true)
|
||||||
|
.help(
|
||||||
|
"Number of lamports per account.",
|
||||||
|
),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parses a clap `ArgMatches` structure into a `Config`
|
/// Parses a clap `ArgMatches` structure into a `Config`
|
||||||
@ -164,7 +181,7 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if matches.is_present("identity") {
|
if matches.is_present("identity") {
|
||||||
args.id = read_keypair(matches.value_of("identity").unwrap())
|
args.id = read_keypair_file(matches.value_of("identity").unwrap())
|
||||||
.expect("can't read client identity");
|
.expect("can't read client identity");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,5 +228,11 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config {
|
|||||||
args.target_lamports_per_signature = v.to_string().parse().expect("can't parse lamports");
|
args.target_lamports_per_signature = v.to_string().parse().expect("can't parse lamports");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
args.use_move = matches.is_present("use-move");
|
||||||
|
|
||||||
|
if let Some(v) = matches.value_of("num_lamports_per_account") {
|
||||||
|
args.num_lamports_per_account = v.to_string().parse().expect("can't parse lamports");
|
||||||
|
}
|
||||||
|
|
||||||
args
|
args
|
||||||
}
|
}
|
||||||
|
2
bench-tps/src/lib.rs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
pub mod bench;
|
||||||
|
pub mod cli;
|
@ -1,23 +1,18 @@
|
|||||||
mod bench;
|
use log::*;
|
||||||
mod cli;
|
use solana_bench_tps::bench::{do_bench_tps, generate_and_fund_keypairs, generate_keypairs};
|
||||||
|
use solana_bench_tps::cli;
|
||||||
use crate::bench::{
|
use solana_core::gossip_service::{discover_cluster, get_multi_client};
|
||||||
do_bench_tps, generate_and_fund_keypairs, generate_keypairs, Config, NUM_LAMPORTS_PER_ACCOUNT,
|
use solana_genesis::Base64Account;
|
||||||
};
|
|
||||||
use solana::gossip_service::{discover_cluster, get_multi_client};
|
|
||||||
use solana_sdk::fee_calculator::FeeCalculator;
|
use solana_sdk::fee_calculator::FeeCalculator;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
use std::collections::HashMap;
|
use solana_sdk::system_program;
|
||||||
use std::fs::File;
|
use std::{collections::HashMap, fs::File, io::prelude::*, path::Path, process::exit};
|
||||||
use std::io::prelude::*;
|
|
||||||
use std::path::Path;
|
|
||||||
use std::process::exit;
|
|
||||||
|
|
||||||
/// Number of signatures for all transactions in ~1 week at ~100K TPS
|
/// Number of signatures for all transactions in ~1 week at ~100K TPS
|
||||||
pub const NUM_SIGNATURES_FOR_TXS: u64 = 100_000 * 60 * 60 * 24 * 7;
|
pub const NUM_SIGNATURES_FOR_TXS: u64 = 100_000 * 60 * 60 * 24 * 7;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
solana_logger::setup();
|
solana_logger::setup_with_filter("solana=info");
|
||||||
solana_metrics::set_panic_hook("bench-tps");
|
solana_metrics::set_panic_hook("bench-tps");
|
||||||
|
|
||||||
let matches = cli::build_args().get_matches();
|
let matches = cli::build_args().get_matches();
|
||||||
@ -27,33 +22,40 @@ fn main() {
|
|||||||
entrypoint_addr,
|
entrypoint_addr,
|
||||||
drone_addr,
|
drone_addr,
|
||||||
id,
|
id,
|
||||||
threads,
|
|
||||||
num_nodes,
|
num_nodes,
|
||||||
duration,
|
|
||||||
tx_count,
|
tx_count,
|
||||||
thread_batch_sleep_ms,
|
|
||||||
sustained,
|
|
||||||
client_ids_and_stake_file,
|
client_ids_and_stake_file,
|
||||||
write_to_client_file,
|
write_to_client_file,
|
||||||
read_from_client_file,
|
read_from_client_file,
|
||||||
target_lamports_per_signature,
|
target_lamports_per_signature,
|
||||||
} = cli_config;
|
use_move,
|
||||||
|
num_lamports_per_account,
|
||||||
|
..
|
||||||
|
} = &cli_config;
|
||||||
|
|
||||||
if write_to_client_file {
|
if *write_to_client_file {
|
||||||
let (keypairs, _) = generate_keypairs(&id, tx_count as u64 * 2);
|
info!("Generating {} keypairs", *tx_count * 2);
|
||||||
|
let (keypairs, _) = generate_keypairs(&id, *tx_count as u64 * 2);
|
||||||
let num_accounts = keypairs.len() as u64;
|
let num_accounts = keypairs.len() as u64;
|
||||||
let max_fee = FeeCalculator::new(target_lamports_per_signature).max_lamports_per_signature;
|
let max_fee =
|
||||||
|
FeeCalculator::new(*target_lamports_per_signature, 0).max_lamports_per_signature;
|
||||||
let num_lamports_per_account = (num_accounts - 1 + NUM_SIGNATURES_FOR_TXS * max_fee)
|
let num_lamports_per_account = (num_accounts - 1 + NUM_SIGNATURES_FOR_TXS * max_fee)
|
||||||
/ num_accounts
|
/ num_accounts
|
||||||
+ NUM_LAMPORTS_PER_ACCOUNT;
|
+ num_lamports_per_account;
|
||||||
let mut accounts = HashMap::new();
|
let mut accounts = HashMap::new();
|
||||||
keypairs.iter().for_each(|keypair| {
|
keypairs.iter().for_each(|keypair| {
|
||||||
accounts.insert(
|
accounts.insert(
|
||||||
serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap(),
|
serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap(),
|
||||||
num_lamports_per_account,
|
Base64Account {
|
||||||
|
balance: num_lamports_per_account,
|
||||||
|
executable: false,
|
||||||
|
owner: system_program::id().to_string(),
|
||||||
|
data: String::new(),
|
||||||
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
info!("Writing {}", client_ids_and_stake_file);
|
||||||
let serialized = serde_yaml::to_string(&accounts).unwrap();
|
let serialized = serde_yaml::to_string(&accounts).unwrap();
|
||||||
let path = Path::new(&client_ids_and_stake_file);
|
let path = Path::new(&client_ids_and_stake_file);
|
||||||
let mut file = File::create(path).unwrap();
|
let mut file = File::create(path).unwrap();
|
||||||
@ -61,9 +63,9 @@ fn main() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("Connecting to the cluster");
|
info!("Connecting to the cluster");
|
||||||
let (nodes, _replicators) =
|
let (nodes, _archivers) =
|
||||||
discover_cluster(&entrypoint_addr, num_nodes).unwrap_or_else(|err| {
|
discover_cluster(&entrypoint_addr, *num_nodes).unwrap_or_else(|err| {
|
||||||
eprintln!("Failed to discover {} nodes: {:?}", num_nodes, err);
|
eprintln!("Failed to discover {} nodes: {:?}", num_nodes, err);
|
||||||
exit(1);
|
exit(1);
|
||||||
});
|
});
|
||||||
@ -78,31 +80,45 @@ fn main() {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
let (keypairs, keypair_balance) = if read_from_client_file {
|
let (keypairs, move_keypairs, keypair_balance) = if *read_from_client_file && !use_move {
|
||||||
let path = Path::new(&client_ids_and_stake_file);
|
let path = Path::new(&client_ids_and_stake_file);
|
||||||
let file = File::open(path).unwrap();
|
let file = File::open(path).unwrap();
|
||||||
|
|
||||||
let accounts: HashMap<String, u64> = serde_yaml::from_reader(file).unwrap();
|
info!("Reading {}", client_ids_and_stake_file);
|
||||||
|
let accounts: HashMap<String, Base64Account> = serde_yaml::from_reader(file).unwrap();
|
||||||
let mut keypairs = vec![];
|
let mut keypairs = vec![];
|
||||||
let mut last_balance = 0;
|
let mut last_balance = 0;
|
||||||
|
|
||||||
accounts.into_iter().for_each(|(keypair, balance)| {
|
accounts
|
||||||
|
.into_iter()
|
||||||
|
.for_each(|(keypair, primordial_account)| {
|
||||||
let bytes: Vec<u8> = serde_json::from_str(keypair.as_str()).unwrap();
|
let bytes: Vec<u8> = serde_json::from_str(keypair.as_str()).unwrap();
|
||||||
keypairs.push(Keypair::from_bytes(&bytes).unwrap());
|
keypairs.push(Keypair::from_bytes(&bytes).unwrap());
|
||||||
last_balance = balance;
|
last_balance = primordial_account.balance;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if keypairs.len() < tx_count * 2 {
|
||||||
|
eprintln!(
|
||||||
|
"Expected {} accounts in {}, only received {} (--tx_count mismatch?)",
|
||||||
|
tx_count * 2,
|
||||||
|
client_ids_and_stake_file,
|
||||||
|
keypairs.len(),
|
||||||
|
);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
// Sort keypairs so that do_bench_tps() uses the same subset of accounts for each run.
|
// Sort keypairs so that do_bench_tps() uses the same subset of accounts for each run.
|
||||||
// This prevents the amount of storage needed for bench-tps accounts from creeping up
|
// This prevents the amount of storage needed for bench-tps accounts from creeping up
|
||||||
// across multiple runs.
|
// across multiple runs.
|
||||||
keypairs.sort_by(|x, y| x.pubkey().to_string().cmp(&y.pubkey().to_string()));
|
keypairs.sort_by(|x, y| x.pubkey().to_string().cmp(&y.pubkey().to_string()));
|
||||||
(keypairs, last_balance)
|
(keypairs, None, last_balance)
|
||||||
} else {
|
} else {
|
||||||
generate_and_fund_keypairs(
|
generate_and_fund_keypairs(
|
||||||
&client,
|
&client,
|
||||||
Some(drone_addr),
|
Some(*drone_addr),
|
||||||
&id,
|
&id,
|
||||||
tx_count,
|
*tx_count,
|
||||||
NUM_LAMPORTS_PER_ACCOUNT,
|
*num_lamports_per_account,
|
||||||
|
*use_move,
|
||||||
)
|
)
|
||||||
.unwrap_or_else(|e| {
|
.unwrap_or_else(|e| {
|
||||||
eprintln!("Error could not fund keys: {:?}", e);
|
eprintln!("Error could not fund keys: {:?}", e);
|
||||||
@ -110,14 +126,11 @@ fn main() {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
let config = Config {
|
do_bench_tps(
|
||||||
id,
|
vec![client],
|
||||||
threads,
|
cli_config,
|
||||||
thread_batch_sleep_ms,
|
keypairs,
|
||||||
duration,
|
keypair_balance,
|
||||||
tx_count,
|
move_keypairs,
|
||||||
sustained,
|
);
|
||||||
};
|
|
||||||
|
|
||||||
do_bench_tps(vec![client], config, keypairs, keypair_balance);
|
|
||||||
}
|
}
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
msc {
|
|
||||||
client,leader,verifier_a,verifier_b,verifier_c;
|
|
||||||
|
|
||||||
client=>leader [ label = "SUBMIT" ] ;
|
|
||||||
leader=>client [ label = "CONFIRMED" ] ;
|
|
||||||
leader=>verifier_a [ label = "CONFIRMED" ] ;
|
|
||||||
leader=>verifier_b [ label = "CONFIRMED" ] ;
|
|
||||||
leader=>verifier_c [ label = "CONFIRMED" ] ;
|
|
||||||
verifier_a=>leader [ label = "VERIFIED" ] ;
|
|
||||||
verifier_b=>leader [ label = "VERIFIED" ] ;
|
|
||||||
leader=>client [ label = "FINALIZED" ] ;
|
|
||||||
leader=>verifier_a [ label = "FINALIZED" ] ;
|
|
||||||
leader=>verifier_b [ label = "FINALIZED" ] ;
|
|
||||||
leader=>verifier_c [ label = "FINALIZED" ] ;
|
|
||||||
}
|
|
34
book/build-cli-usage.sh
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
usage=$(cargo -q run -p solana-cli -- -C ~/.foo --help | sed 's|'"$HOME"'|~|g')
|
||||||
|
|
||||||
|
out=${1:-src/api-reference/cli.md}
|
||||||
|
|
||||||
|
cat src/api-reference/.cli.md > "$out"
|
||||||
|
|
||||||
|
section() {
|
||||||
|
declare mark=${2:-"###"}
|
||||||
|
declare section=$1
|
||||||
|
read -r name rest <<<"$section"
|
||||||
|
|
||||||
|
printf '%s %s
|
||||||
|
' "$mark" "$name"
|
||||||
|
printf '```text
|
||||||
|
%s
|
||||||
|
```
|
||||||
|
|
||||||
|
' "$section"
|
||||||
|
}
|
||||||
|
|
||||||
|
section "$usage" >> "$out"
|
||||||
|
|
||||||
|
in_subcommands=0
|
||||||
|
while read -r subcommand rest; do
|
||||||
|
[[ $subcommand == "SUBCOMMANDS:" ]] && in_subcommands=1 && continue
|
||||||
|
if ((in_subcommands)); then
|
||||||
|
section "$(cargo -q run -p solana-cli -- help "$subcommand" | sed 's|'"$HOME"'|~|g')" "####" >> "$out"
|
||||||
|
fi
|
||||||
|
done <<<"$usage">>"$out"
|
13
book/build-svg.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
make -j"$(nproc)" -B svg
|
||||||
|
|
||||||
|
#TODO figure out why book wants to change, but local and CI differ
|
||||||
|
exit 0
|
||||||
|
if [[ -n $CI ]]; then
|
||||||
|
# In CI confirm that no svgs need to be built
|
||||||
|
git diff --exit-code
|
||||||
|
fi
|
@ -2,13 +2,15 @@ BOB_SRCS=$(wildcard art/*.bob)
|
|||||||
MSC_SRCS=$(wildcard art/*.msc)
|
MSC_SRCS=$(wildcard art/*.msc)
|
||||||
MD_SRCS=$(wildcard src/*.md)
|
MD_SRCS=$(wildcard src/*.md)
|
||||||
|
|
||||||
SVG_IMGS=$(BOB_SRCS:art/%.bob=src/img/%.svg) $(MSC_SRCS:art/%.msc=src/img/%.svg)
|
SVG_IMGS=$(BOB_SRCS:art/%.bob=src/.gitbook/assets/%.svg) $(MSC_SRCS:art/%.msc=src/.gitbook/assets/%.svg)
|
||||||
|
|
||||||
TARGET=html/index.html
|
TARGET=html/index.html
|
||||||
TEST_STAMP=src/tests.ok
|
TEST_STAMP=src/tests.ok
|
||||||
|
|
||||||
all: $(TARGET)
|
all: $(TARGET)
|
||||||
|
|
||||||
|
svg: $(SVG_IMGS)
|
||||||
|
|
||||||
test: $(TEST_STAMP)
|
test: $(TEST_STAMP)
|
||||||
|
|
||||||
open: $(TEST_STAMP)
|
open: $(TEST_STAMP)
|
||||||
@ -17,11 +19,11 @@ open: $(TEST_STAMP)
|
|||||||
watch: $(SVG_IMGS)
|
watch: $(SVG_IMGS)
|
||||||
mdbook watch
|
mdbook watch
|
||||||
|
|
||||||
src/img/%.svg: art/%.bob
|
src/.gitbook/assets/%.svg: art/%.bob
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
svgbob < $< > $@
|
svgbob < $< > $@
|
||||||
|
|
||||||
src/img/%.svg: art/%.msc
|
src/.gitbook/assets/%.svg: art/%.msc
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
mscgen -T svg -i $< -o $@
|
mscgen -T svg -i $< -o $@
|
||||||
|
|
||||||
|
192
book/src/.gitbook/assets/data-plane (1).svg
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="216" y2="280"/>
|
||||||
|
<line x1="4" x2="156" y1="216" y2="216"/>
|
||||||
|
<line x1="4" x2="172" y1="280" y2="280"/>
|
||||||
|
<line x1="156" x2="172" y1="216" y2="216"/>
|
||||||
|
<line x1="172" x2="172" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="168"/>
|
||||||
|
<line x1="124" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="156" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
||||||
|
<line x1="156" x2="204" y1="168" y2="168"/>
|
||||||
|
<line x1="204" x2="292" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
||||||
|
<line x1="204" x2="292" y1="168" y2="168"/>
|
||||||
|
<line x1="292" x2="292" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="216" y2="280"/>
|
||||||
|
<line x1="188" x2="204" y1="216" y2="216"/>
|
||||||
|
<line x1="188" x2="356" y1="280" y2="280"/>
|
||||||
|
<line x1="204" x2="356" y1="216" y2="216"/>
|
||||||
|
<line x1="356" x2="356" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
||||||
|
<line x1="204" x2="276" y1="40" y2="40"/>
|
||||||
|
<line x1="276" x2="276" y1="8" y2="40"/>
|
||||||
|
<line x1="276" x2="444" y1="8" y2="8"/>
|
||||||
|
<line x1="276" x2="276" y1="40" y2="72"/>
|
||||||
|
<line x1="276" x2="444" y1="72" y2="72"/>
|
||||||
|
<line x1="444" x2="444" y1="8" y2="40"/>
|
||||||
|
<line x1="444" x2="444" y1="40" y2="72"/>
|
||||||
|
<line x1="444" x2="532" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="380" x2="380" y1="216" y2="280"/>
|
||||||
|
<line x1="380" x2="532" y1="216" y2="216"/>
|
||||||
|
<line x1="380" x2="548" y1="280" y2="280"/>
|
||||||
|
<line x1="532" x2="548" y1="216" y2="216"/>
|
||||||
|
<line x1="548" x2="548" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="444" x2="444" y1="104" y2="168"/>
|
||||||
|
<line x1="444" x2="532" y1="104" y2="104"/>
|
||||||
|
<line x1="444" x2="532" y1="168" y2="168"/>
|
||||||
|
<line x1="532" x2="612" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
||||||
|
<line x1="532" x2="580" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
||||||
|
<line x1="580" x2="612" y1="168" y2="168"/>
|
||||||
|
<line x1="612" x2="612" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="564" x2="564" y1="216" y2="280"/>
|
||||||
|
<line x1="564" x2="580" y1="216" y2="216"/>
|
||||||
|
<line x1="564" x2="732" y1="280" y2="280"/>
|
||||||
|
<line x1="580" x2="732" y1="216" y2="216"/>
|
||||||
|
<line x1="732" x2="732" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="252">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="153" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="252">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="252">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="140">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="697" y="252">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
192
book/src/.gitbook/assets/data-plane (2).svg
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="216" y2="280"/>
|
||||||
|
<line x1="4" x2="156" y1="216" y2="216"/>
|
||||||
|
<line x1="4" x2="172" y1="280" y2="280"/>
|
||||||
|
<line x1="156" x2="172" y1="216" y2="216"/>
|
||||||
|
<line x1="172" x2="172" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="168"/>
|
||||||
|
<line x1="124" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="156" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
||||||
|
<line x1="156" x2="204" y1="168" y2="168"/>
|
||||||
|
<line x1="204" x2="292" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
||||||
|
<line x1="204" x2="292" y1="168" y2="168"/>
|
||||||
|
<line x1="292" x2="292" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="216" y2="280"/>
|
||||||
|
<line x1="188" x2="204" y1="216" y2="216"/>
|
||||||
|
<line x1="188" x2="356" y1="280" y2="280"/>
|
||||||
|
<line x1="204" x2="356" y1="216" y2="216"/>
|
||||||
|
<line x1="356" x2="356" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
||||||
|
<line x1="204" x2="276" y1="40" y2="40"/>
|
||||||
|
<line x1="276" x2="276" y1="8" y2="40"/>
|
||||||
|
<line x1="276" x2="444" y1="8" y2="8"/>
|
||||||
|
<line x1="276" x2="276" y1="40" y2="72"/>
|
||||||
|
<line x1="276" x2="444" y1="72" y2="72"/>
|
||||||
|
<line x1="444" x2="444" y1="8" y2="40"/>
|
||||||
|
<line x1="444" x2="444" y1="40" y2="72"/>
|
||||||
|
<line x1="444" x2="532" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="380" x2="380" y1="216" y2="280"/>
|
||||||
|
<line x1="380" x2="532" y1="216" y2="216"/>
|
||||||
|
<line x1="380" x2="548" y1="280" y2="280"/>
|
||||||
|
<line x1="532" x2="548" y1="216" y2="216"/>
|
||||||
|
<line x1="548" x2="548" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="444" x2="444" y1="104" y2="168"/>
|
||||||
|
<line x1="444" x2="532" y1="104" y2="104"/>
|
||||||
|
<line x1="444" x2="532" y1="168" y2="168"/>
|
||||||
|
<line x1="532" x2="612" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
||||||
|
<line x1="532" x2="580" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
||||||
|
<line x1="580" x2="612" y1="168" y2="168"/>
|
||||||
|
<line x1="612" x2="612" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="564" x2="564" y1="216" y2="280"/>
|
||||||
|
<line x1="564" x2="580" y1="216" y2="216"/>
|
||||||
|
<line x1="564" x2="732" y1="280" y2="280"/>
|
||||||
|
<line x1="580" x2="732" y1="216" y2="216"/>
|
||||||
|
<line x1="732" x2="732" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="252">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="153" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="252">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="252">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="140">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="697" y="252">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
192
book/src/.gitbook/assets/data-plane (3).svg
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="216" y2="280"/>
|
||||||
|
<line x1="4" x2="156" y1="216" y2="216"/>
|
||||||
|
<line x1="4" x2="172" y1="280" y2="280"/>
|
||||||
|
<line x1="156" x2="172" y1="216" y2="216"/>
|
||||||
|
<line x1="172" x2="172" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="168"/>
|
||||||
|
<line x1="124" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="156" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
||||||
|
<line x1="156" x2="204" y1="168" y2="168"/>
|
||||||
|
<line x1="204" x2="292" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
||||||
|
<line x1="204" x2="292" y1="168" y2="168"/>
|
||||||
|
<line x1="292" x2="292" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="216" y2="280"/>
|
||||||
|
<line x1="188" x2="204" y1="216" y2="216"/>
|
||||||
|
<line x1="188" x2="356" y1="280" y2="280"/>
|
||||||
|
<line x1="204" x2="356" y1="216" y2="216"/>
|
||||||
|
<line x1="356" x2="356" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
||||||
|
<line x1="204" x2="276" y1="40" y2="40"/>
|
||||||
|
<line x1="276" x2="276" y1="8" y2="40"/>
|
||||||
|
<line x1="276" x2="444" y1="8" y2="8"/>
|
||||||
|
<line x1="276" x2="276" y1="40" y2="72"/>
|
||||||
|
<line x1="276" x2="444" y1="72" y2="72"/>
|
||||||
|
<line x1="444" x2="444" y1="8" y2="40"/>
|
||||||
|
<line x1="444" x2="444" y1="40" y2="72"/>
|
||||||
|
<line x1="444" x2="532" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="380" x2="380" y1="216" y2="280"/>
|
||||||
|
<line x1="380" x2="532" y1="216" y2="216"/>
|
||||||
|
<line x1="380" x2="548" y1="280" y2="280"/>
|
||||||
|
<line x1="532" x2="548" y1="216" y2="216"/>
|
||||||
|
<line x1="548" x2="548" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="444" x2="444" y1="104" y2="168"/>
|
||||||
|
<line x1="444" x2="532" y1="104" y2="104"/>
|
||||||
|
<line x1="444" x2="532" y1="168" y2="168"/>
|
||||||
|
<line x1="532" x2="612" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
||||||
|
<line x1="532" x2="580" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
||||||
|
<line x1="580" x2="612" y1="168" y2="168"/>
|
||||||
|
<line x1="612" x2="612" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="564" x2="564" y1="216" y2="280"/>
|
||||||
|
<line x1="564" x2="580" y1="216" y2="216"/>
|
||||||
|
<line x1="564" x2="732" y1="280" y2="280"/>
|
||||||
|
<line x1="580" x2="732" y1="216" y2="216"/>
|
||||||
|
<line x1="732" x2="732" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="252">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="153" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="252">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="252">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="140">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="697" y="252">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
192
book/src/.gitbook/assets/data-plane (4).svg
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="216" y2="280"/>
|
||||||
|
<line x1="4" x2="156" y1="216" y2="216"/>
|
||||||
|
<line x1="4" x2="172" y1="280" y2="280"/>
|
||||||
|
<line x1="156" x2="172" y1="216" y2="216"/>
|
||||||
|
<line x1="172" x2="172" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="168"/>
|
||||||
|
<line x1="124" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="156" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
||||||
|
<line x1="156" x2="204" y1="168" y2="168"/>
|
||||||
|
<line x1="204" x2="292" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
||||||
|
<line x1="204" x2="292" y1="168" y2="168"/>
|
||||||
|
<line x1="292" x2="292" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="216" y2="280"/>
|
||||||
|
<line x1="188" x2="204" y1="216" y2="216"/>
|
||||||
|
<line x1="188" x2="356" y1="280" y2="280"/>
|
||||||
|
<line x1="204" x2="356" y1="216" y2="216"/>
|
||||||
|
<line x1="356" x2="356" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
||||||
|
<line x1="204" x2="276" y1="40" y2="40"/>
|
||||||
|
<line x1="276" x2="276" y1="8" y2="40"/>
|
||||||
|
<line x1="276" x2="444" y1="8" y2="8"/>
|
||||||
|
<line x1="276" x2="276" y1="40" y2="72"/>
|
||||||
|
<line x1="276" x2="444" y1="72" y2="72"/>
|
||||||
|
<line x1="444" x2="444" y1="8" y2="40"/>
|
||||||
|
<line x1="444" x2="444" y1="40" y2="72"/>
|
||||||
|
<line x1="444" x2="532" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="380" x2="380" y1="216" y2="280"/>
|
||||||
|
<line x1="380" x2="532" y1="216" y2="216"/>
|
||||||
|
<line x1="380" x2="548" y1="280" y2="280"/>
|
||||||
|
<line x1="532" x2="548" y1="216" y2="216"/>
|
||||||
|
<line x1="548" x2="548" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="444" x2="444" y1="104" y2="168"/>
|
||||||
|
<line x1="444" x2="532" y1="104" y2="104"/>
|
||||||
|
<line x1="444" x2="532" y1="168" y2="168"/>
|
||||||
|
<line x1="532" x2="612" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
||||||
|
<line x1="532" x2="580" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
||||||
|
<line x1="580" x2="612" y1="168" y2="168"/>
|
||||||
|
<line x1="612" x2="612" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="564" x2="564" y1="216" y2="280"/>
|
||||||
|
<line x1="564" x2="580" y1="216" y2="216"/>
|
||||||
|
<line x1="564" x2="732" y1="280" y2="280"/>
|
||||||
|
<line x1="580" x2="732" y1="216" y2="216"/>
|
||||||
|
<line x1="732" x2="732" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="252">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="153" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="252">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="252">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="140">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="697" y="252">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
210
book/src/.gitbook/assets/data-plane (5).svg
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
rect.backdrop {
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
text{
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
circle {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
line {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
path {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg_fill {
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.bg_fill {
|
||||||
|
fill: white;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect class="backdrop" height="288" width="736" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="216" y2="280"/>
|
||||||
|
<line x1="4" x2="156" y1="216" y2="216"/>
|
||||||
|
<line x1="4" x2="172" y1="280" y2="280"/>
|
||||||
|
<line x1="156" x2="172" y1="216" y2="216"/>
|
||||||
|
<line x1="172" x2="172" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="168"/>
|
||||||
|
<line x1="124" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="156" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
||||||
|
<line x1="156" x2="204" y1="168" y2="168"/>
|
||||||
|
<line x1="204" x2="292" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
||||||
|
<line x1="204" x2="292" y1="168" y2="168"/>
|
||||||
|
<line x1="292" x2="292" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="216" y2="280"/>
|
||||||
|
<line x1="188" x2="204" y1="216" y2="216"/>
|
||||||
|
<line x1="188" x2="356" y1="280" y2="280"/>
|
||||||
|
<line x1="204" x2="356" y1="216" y2="216"/>
|
||||||
|
<line x1="356" x2="356" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
||||||
|
<line x1="204" x2="276" y1="40" y2="40"/>
|
||||||
|
<line x1="276" x2="276" y1="8" y2="40"/>
|
||||||
|
<line x1="276" x2="444" y1="8" y2="8"/>
|
||||||
|
<line x1="276" x2="276" y1="40" y2="72"/>
|
||||||
|
<line x1="276" x2="444" y1="72" y2="72"/>
|
||||||
|
<line x1="444" x2="444" y1="8" y2="40"/>
|
||||||
|
<line x1="444" x2="444" y1="40" y2="72"/>
|
||||||
|
<line x1="444" x2="532" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="380" x2="380" y1="216" y2="280"/>
|
||||||
|
<line x1="380" x2="532" y1="216" y2="216"/>
|
||||||
|
<line x1="380" x2="548" y1="280" y2="280"/>
|
||||||
|
<line x1="532" x2="548" y1="216" y2="216"/>
|
||||||
|
<line x1="548" x2="548" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="444" x2="444" y1="104" y2="168"/>
|
||||||
|
<line x1="444" x2="532" y1="104" y2="104"/>
|
||||||
|
<line x1="444" x2="532" y1="168" y2="168"/>
|
||||||
|
<line x1="532" x2="612" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
||||||
|
<line x1="532" x2="580" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
||||||
|
<line x1="580" x2="612" y1="168" y2="168"/>
|
||||||
|
<line x1="612" x2="612" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="564" x2="564" y1="216" y2="280"/>
|
||||||
|
<line x1="564" x2="580" y1="216" y2="216"/>
|
||||||
|
<line x1="564" x2="732" y1="280" y2="280"/>
|
||||||
|
<line x1="580" x2="732" y1="216" y2="216"/>
|
||||||
|
<line x1="732" x2="732" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="252">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="153" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="252">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="252">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="140">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="697" y="252">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
192
book/src/.gitbook/assets/data-plane-3.svg
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="216" y2="280"/>
|
||||||
|
<line x1="4" x2="156" y1="216" y2="216"/>
|
||||||
|
<line x1="4" x2="172" y1="280" y2="280"/>
|
||||||
|
<line x1="156" x2="172" y1="216" y2="216"/>
|
||||||
|
<line x1="172" x2="172" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="168"/>
|
||||||
|
<line x1="124" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="156" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
||||||
|
<line x1="156" x2="204" y1="168" y2="168"/>
|
||||||
|
<line x1="204" x2="292" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
||||||
|
<line x1="204" x2="292" y1="168" y2="168"/>
|
||||||
|
<line x1="292" x2="292" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="216" y2="280"/>
|
||||||
|
<line x1="188" x2="204" y1="216" y2="216"/>
|
||||||
|
<line x1="188" x2="356" y1="280" y2="280"/>
|
||||||
|
<line x1="204" x2="356" y1="216" y2="216"/>
|
||||||
|
<line x1="356" x2="356" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
||||||
|
<line x1="204" x2="276" y1="40" y2="40"/>
|
||||||
|
<line x1="276" x2="276" y1="8" y2="40"/>
|
||||||
|
<line x1="276" x2="444" y1="8" y2="8"/>
|
||||||
|
<line x1="276" x2="276" y1="40" y2="72"/>
|
||||||
|
<line x1="276" x2="444" y1="72" y2="72"/>
|
||||||
|
<line x1="444" x2="444" y1="8" y2="40"/>
|
||||||
|
<line x1="444" x2="444" y1="40" y2="72"/>
|
||||||
|
<line x1="444" x2="532" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="380" x2="380" y1="216" y2="280"/>
|
||||||
|
<line x1="380" x2="532" y1="216" y2="216"/>
|
||||||
|
<line x1="380" x2="548" y1="280" y2="280"/>
|
||||||
|
<line x1="532" x2="548" y1="216" y2="216"/>
|
||||||
|
<line x1="548" x2="548" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="444" x2="444" y1="104" y2="168"/>
|
||||||
|
<line x1="444" x2="532" y1="104" y2="104"/>
|
||||||
|
<line x1="444" x2="532" y1="168" y2="168"/>
|
||||||
|
<line x1="532" x2="612" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
||||||
|
<line x1="532" x2="580" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
||||||
|
<line x1="580" x2="612" y1="168" y2="168"/>
|
||||||
|
<line x1="612" x2="612" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="564" x2="564" y1="216" y2="280"/>
|
||||||
|
<line x1="564" x2="580" y1="216" y2="216"/>
|
||||||
|
<line x1="564" x2="732" y1="280" y2="280"/>
|
||||||
|
<line x1="580" x2="732" y1="216" y2="216"/>
|
||||||
|
<line x1="732" x2="732" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="252">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="153" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="252">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="252">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="140">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="697" y="252">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
183
book/src/.gitbook/assets/data-plane-fanout (1).svg
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="184"/>
|
||||||
|
<line x1="4" x2="540" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="540" y1="184" y2="184"/>
|
||||||
|
<line x1="540" x2="540" y1="8" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="28" x2="28" y1="232" y2="296"/>
|
||||||
|
<line x1="28" x2="108" y1="232" y2="232"/>
|
||||||
|
<line x1="28" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="108" x2="164" y1="232" y2="232"/>
|
||||||
|
<line x1="164" x2="196" y1="232" y2="232"/>
|
||||||
|
<line x1="196" x2="196" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="40" y2="104"/>
|
||||||
|
<line x1="36" x2="180" y1="40" y2="40"/>
|
||||||
|
<line x1="36" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="108" x2="108" y1="104" y2="176"/>
|
||||||
|
<line x1="108" x2="124" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="136"/>
|
||||||
|
<line x1="124" x2="180" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="364" y1="136" y2="136"/>
|
||||||
|
<line x1="180" x2="180" y1="40" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="56" y2="88"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="88" y2="104"/>
|
||||||
|
<line x1="180" x2="184" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="176"/>
|
||||||
|
<line x1="364" x2="420" y1="152" y2="152"/>
|
||||||
|
<line x1="420" x2="420" y1="104" y2="152"/>
|
||||||
|
<line x1="420" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="436" y1="104" y2="176"/>
|
||||||
|
<line x1="436" x2="508" y1="104" y2="104"/>
|
||||||
|
<line x1="508" x2="508" y1="40" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="176"/>
|
||||||
|
<line x1="164" x2="364" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
||||||
|
<line x1="192" x2="364" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="56" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="88" y2="104"/>
|
||||||
|
<line x1="364" x2="420" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="232" y2="296"/>
|
||||||
|
<line x1="348" x2="364" y1="232" y2="232"/>
|
||||||
|
<line x1="348" x2="516" y1="296" y2="296"/>
|
||||||
|
<line x1="364" x2="436" y1="232" y2="232"/>
|
||||||
|
<line x1="436" x2="516" y1="232" y2="232"/>
|
||||||
|
<line x1="516" x2="516" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="40" y2="56"/>
|
||||||
|
<line x1="364" x2="508" y1="40" y2="40"/>
|
||||||
|
<line x1="364" x2="360" y1="56" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="57" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="76">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="268">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="76">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="481" y="268">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
201
book/src/.gitbook/assets/data-plane-fanout (2).svg
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
rect.backdrop {
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
text{
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
circle {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
line {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
path {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg_fill {
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.bg_fill {
|
||||||
|
fill: white;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect class="backdrop" height="304" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="184"/>
|
||||||
|
<line x1="4" x2="540" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="540" y1="184" y2="184"/>
|
||||||
|
<line x1="540" x2="540" y1="8" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="28" x2="28" y1="232" y2="296"/>
|
||||||
|
<line x1="28" x2="108" y1="232" y2="232"/>
|
||||||
|
<line x1="28" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="108" x2="164" y1="232" y2="232"/>
|
||||||
|
<line x1="164" x2="196" y1="232" y2="232"/>
|
||||||
|
<line x1="196" x2="196" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="40" y2="104"/>
|
||||||
|
<line x1="36" x2="180" y1="40" y2="40"/>
|
||||||
|
<line x1="36" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="108" x2="108" y1="104" y2="176"/>
|
||||||
|
<line x1="108" x2="124" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="136"/>
|
||||||
|
<line x1="124" x2="180" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="364" y1="136" y2="136"/>
|
||||||
|
<line x1="180" x2="180" y1="40" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="56" y2="88"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="88" y2="104"/>
|
||||||
|
<line x1="180" x2="184" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="176"/>
|
||||||
|
<line x1="364" x2="420" y1="152" y2="152"/>
|
||||||
|
<line x1="420" x2="420" y1="104" y2="152"/>
|
||||||
|
<line x1="420" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="436" y1="104" y2="176"/>
|
||||||
|
<line x1="436" x2="508" y1="104" y2="104"/>
|
||||||
|
<line x1="508" x2="508" y1="40" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="176"/>
|
||||||
|
<line x1="164" x2="364" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
||||||
|
<line x1="192" x2="364" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="56" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="88" y2="104"/>
|
||||||
|
<line x1="364" x2="420" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="232" y2="296"/>
|
||||||
|
<line x1="348" x2="364" y1="232" y2="232"/>
|
||||||
|
<line x1="348" x2="516" y1="296" y2="296"/>
|
||||||
|
<line x1="364" x2="436" y1="232" y2="232"/>
|
||||||
|
<line x1="436" x2="516" y1="232" y2="232"/>
|
||||||
|
<line x1="516" x2="516" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="40" y2="56"/>
|
||||||
|
<line x1="364" x2="508" y1="40" y2="40"/>
|
||||||
|
<line x1="364" x2="360" y1="56" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="57" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="76">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="268">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="76">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="481" y="268">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.7 KiB |
183
book/src/.gitbook/assets/data-plane-fanout (3).svg
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="184"/>
|
||||||
|
<line x1="4" x2="540" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="540" y1="184" y2="184"/>
|
||||||
|
<line x1="540" x2="540" y1="8" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="28" x2="28" y1="232" y2="296"/>
|
||||||
|
<line x1="28" x2="108" y1="232" y2="232"/>
|
||||||
|
<line x1="28" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="108" x2="164" y1="232" y2="232"/>
|
||||||
|
<line x1="164" x2="196" y1="232" y2="232"/>
|
||||||
|
<line x1="196" x2="196" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="40" y2="104"/>
|
||||||
|
<line x1="36" x2="180" y1="40" y2="40"/>
|
||||||
|
<line x1="36" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="108" x2="108" y1="104" y2="176"/>
|
||||||
|
<line x1="108" x2="124" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="136"/>
|
||||||
|
<line x1="124" x2="180" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="364" y1="136" y2="136"/>
|
||||||
|
<line x1="180" x2="180" y1="40" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="56" y2="88"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="88" y2="104"/>
|
||||||
|
<line x1="180" x2="184" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="176"/>
|
||||||
|
<line x1="364" x2="420" y1="152" y2="152"/>
|
||||||
|
<line x1="420" x2="420" y1="104" y2="152"/>
|
||||||
|
<line x1="420" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="436" y1="104" y2="176"/>
|
||||||
|
<line x1="436" x2="508" y1="104" y2="104"/>
|
||||||
|
<line x1="508" x2="508" y1="40" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="176"/>
|
||||||
|
<line x1="164" x2="364" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
||||||
|
<line x1="192" x2="364" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="56" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="88" y2="104"/>
|
||||||
|
<line x1="364" x2="420" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="232" y2="296"/>
|
||||||
|
<line x1="348" x2="364" y1="232" y2="232"/>
|
||||||
|
<line x1="348" x2="516" y1="296" y2="296"/>
|
||||||
|
<line x1="364" x2="436" y1="232" y2="232"/>
|
||||||
|
<line x1="436" x2="516" y1="232" y2="232"/>
|
||||||
|
<line x1="516" x2="516" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="40" y2="56"/>
|
||||||
|
<line x1="364" x2="508" y1="40" y2="40"/>
|
||||||
|
<line x1="364" x2="360" y1="56" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="57" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="76">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="268">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="76">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="481" y="268">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
183
book/src/.gitbook/assets/data-plane-fanout (4).svg
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="184"/>
|
||||||
|
<line x1="4" x2="540" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="540" y1="184" y2="184"/>
|
||||||
|
<line x1="540" x2="540" y1="8" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="28" x2="28" y1="232" y2="296"/>
|
||||||
|
<line x1="28" x2="108" y1="232" y2="232"/>
|
||||||
|
<line x1="28" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="108" x2="164" y1="232" y2="232"/>
|
||||||
|
<line x1="164" x2="196" y1="232" y2="232"/>
|
||||||
|
<line x1="196" x2="196" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="40" y2="104"/>
|
||||||
|
<line x1="36" x2="180" y1="40" y2="40"/>
|
||||||
|
<line x1="36" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="108" x2="108" y1="104" y2="176"/>
|
||||||
|
<line x1="108" x2="124" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="136"/>
|
||||||
|
<line x1="124" x2="180" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="364" y1="136" y2="136"/>
|
||||||
|
<line x1="180" x2="180" y1="40" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="56" y2="88"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="88" y2="104"/>
|
||||||
|
<line x1="180" x2="184" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="176"/>
|
||||||
|
<line x1="364" x2="420" y1="152" y2="152"/>
|
||||||
|
<line x1="420" x2="420" y1="104" y2="152"/>
|
||||||
|
<line x1="420" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="436" y1="104" y2="176"/>
|
||||||
|
<line x1="436" x2="508" y1="104" y2="104"/>
|
||||||
|
<line x1="508" x2="508" y1="40" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="176"/>
|
||||||
|
<line x1="164" x2="364" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
||||||
|
<line x1="192" x2="364" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="56" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="88" y2="104"/>
|
||||||
|
<line x1="364" x2="420" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="232" y2="296"/>
|
||||||
|
<line x1="348" x2="364" y1="232" y2="232"/>
|
||||||
|
<line x1="348" x2="516" y1="296" y2="296"/>
|
||||||
|
<line x1="364" x2="436" y1="232" y2="232"/>
|
||||||
|
<line x1="436" x2="516" y1="232" y2="232"/>
|
||||||
|
<line x1="516" x2="516" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="40" y2="56"/>
|
||||||
|
<line x1="364" x2="508" y1="40" y2="40"/>
|
||||||
|
<line x1="364" x2="360" y1="56" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="57" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="76">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="268">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="76">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="481" y="268">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
183
book/src/.gitbook/assets/data-plane-fanout (5).svg
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="184"/>
|
||||||
|
<line x1="4" x2="540" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="540" y1="184" y2="184"/>
|
||||||
|
<line x1="540" x2="540" y1="8" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="28" x2="28" y1="232" y2="296"/>
|
||||||
|
<line x1="28" x2="108" y1="232" y2="232"/>
|
||||||
|
<line x1="28" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="108" x2="164" y1="232" y2="232"/>
|
||||||
|
<line x1="164" x2="196" y1="232" y2="232"/>
|
||||||
|
<line x1="196" x2="196" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="40" y2="104"/>
|
||||||
|
<line x1="36" x2="180" y1="40" y2="40"/>
|
||||||
|
<line x1="36" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="108" x2="108" y1="104" y2="176"/>
|
||||||
|
<line x1="108" x2="124" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="136"/>
|
||||||
|
<line x1="124" x2="180" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="364" y1="136" y2="136"/>
|
||||||
|
<line x1="180" x2="180" y1="40" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="56" y2="88"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="88" y2="104"/>
|
||||||
|
<line x1="180" x2="184" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="176"/>
|
||||||
|
<line x1="364" x2="420" y1="152" y2="152"/>
|
||||||
|
<line x1="420" x2="420" y1="104" y2="152"/>
|
||||||
|
<line x1="420" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="436" y1="104" y2="176"/>
|
||||||
|
<line x1="436" x2="508" y1="104" y2="104"/>
|
||||||
|
<line x1="508" x2="508" y1="40" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="176"/>
|
||||||
|
<line x1="164" x2="364" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
||||||
|
<line x1="192" x2="364" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="56" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="88" y2="104"/>
|
||||||
|
<line x1="364" x2="420" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="232" y2="296"/>
|
||||||
|
<line x1="348" x2="364" y1="232" y2="232"/>
|
||||||
|
<line x1="348" x2="516" y1="296" y2="296"/>
|
||||||
|
<line x1="364" x2="436" y1="232" y2="232"/>
|
||||||
|
<line x1="436" x2="516" y1="232" y2="232"/>
|
||||||
|
<line x1="516" x2="516" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="40" y2="56"/>
|
||||||
|
<line x1="364" x2="508" y1="40" y2="40"/>
|
||||||
|
<line x1="364" x2="360" y1="56" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="57" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="76">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="268">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="76">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="481" y="268">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
183
book/src/.gitbook/assets/data-plane-fanout-3.svg
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="184"/>
|
||||||
|
<line x1="4" x2="540" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="540" y1="184" y2="184"/>
|
||||||
|
<line x1="540" x2="540" y1="8" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="28" x2="28" y1="232" y2="296"/>
|
||||||
|
<line x1="28" x2="108" y1="232" y2="232"/>
|
||||||
|
<line x1="28" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="108" x2="164" y1="232" y2="232"/>
|
||||||
|
<line x1="164" x2="196" y1="232" y2="232"/>
|
||||||
|
<line x1="196" x2="196" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="40" y2="104"/>
|
||||||
|
<line x1="36" x2="180" y1="40" y2="40"/>
|
||||||
|
<line x1="36" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="108" x2="108" y1="104" y2="176"/>
|
||||||
|
<line x1="108" x2="124" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="136"/>
|
||||||
|
<line x1="124" x2="180" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="364" y1="136" y2="136"/>
|
||||||
|
<line x1="180" x2="180" y1="40" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="56" y2="88"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="88" y2="104"/>
|
||||||
|
<line x1="180" x2="184" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="176"/>
|
||||||
|
<line x1="364" x2="420" y1="152" y2="152"/>
|
||||||
|
<line x1="420" x2="420" y1="104" y2="152"/>
|
||||||
|
<line x1="420" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="436" y1="104" y2="176"/>
|
||||||
|
<line x1="436" x2="508" y1="104" y2="104"/>
|
||||||
|
<line x1="508" x2="508" y1="40" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="176"/>
|
||||||
|
<line x1="164" x2="364" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
||||||
|
<line x1="192" x2="364" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="56" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="88" y2="104"/>
|
||||||
|
<line x1="364" x2="420" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="232" y2="296"/>
|
||||||
|
<line x1="348" x2="364" y1="232" y2="232"/>
|
||||||
|
<line x1="348" x2="516" y1="296" y2="296"/>
|
||||||
|
<line x1="364" x2="436" y1="232" y2="232"/>
|
||||||
|
<line x1="436" x2="516" y1="232" y2="232"/>
|
||||||
|
<line x1="516" x2="516" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="40" y2="56"/>
|
||||||
|
<line x1="364" x2="508" y1="40" y2="40"/>
|
||||||
|
<line x1="364" x2="360" y1="56" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="57" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="76">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="268">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="76">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="481" y="268">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
183
book/src/.gitbook/assets/data-plane-fanout.svg
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="184"/>
|
||||||
|
<line x1="4" x2="540" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="540" y1="184" y2="184"/>
|
||||||
|
<line x1="540" x2="540" y1="8" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="28" x2="28" y1="232" y2="296"/>
|
||||||
|
<line x1="28" x2="108" y1="232" y2="232"/>
|
||||||
|
<line x1="28" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="108" x2="164" y1="232" y2="232"/>
|
||||||
|
<line x1="164" x2="196" y1="232" y2="232"/>
|
||||||
|
<line x1="196" x2="196" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="40" y2="104"/>
|
||||||
|
<line x1="36" x2="180" y1="40" y2="40"/>
|
||||||
|
<line x1="36" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="108" x2="108" y1="104" y2="176"/>
|
||||||
|
<line x1="108" x2="124" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="136"/>
|
||||||
|
<line x1="124" x2="180" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="364" y1="136" y2="136"/>
|
||||||
|
<line x1="180" x2="180" y1="40" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="56" y2="88"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
||||||
|
<line x1="180" x2="180" y1="88" y2="104"/>
|
||||||
|
<line x1="180" x2="184" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="176"/>
|
||||||
|
<line x1="364" x2="420" y1="152" y2="152"/>
|
||||||
|
<line x1="420" x2="420" y1="104" y2="152"/>
|
||||||
|
<line x1="420" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="436" y1="104" y2="176"/>
|
||||||
|
<line x1="436" x2="508" y1="104" y2="104"/>
|
||||||
|
<line x1="508" x2="508" y1="40" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="176"/>
|
||||||
|
<line x1="164" x2="364" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
||||||
|
<line x1="192" x2="364" y1="88" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="56" y2="88"/>
|
||||||
|
<line x1="364" x2="364" y1="88" y2="104"/>
|
||||||
|
<line x1="364" x2="420" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="232" y2="296"/>
|
||||||
|
<line x1="348" x2="364" y1="232" y2="232"/>
|
||||||
|
<line x1="348" x2="516" y1="296" y2="296"/>
|
||||||
|
<line x1="364" x2="436" y1="232" y2="232"/>
|
||||||
|
<line x1="436" x2="516" y1="232" y2="232"/>
|
||||||
|
<line x1="516" x2="516" y1="232" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="40" y2="56"/>
|
||||||
|
<line x1="364" x2="508" y1="40" y2="40"/>
|
||||||
|
<line x1="364" x2="360" y1="56" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="57" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="76">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="268">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="76">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="481" y="268">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
340
book/src/.gitbook/assets/data-plane-neighborhood (1).svg
Normal file
@ -0,0 +1,340 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
rect.backdrop {
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
text{
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
circle {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
line {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
path {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg_fill {
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.bg_fill {
|
||||||
|
fill: white;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect class="backdrop" height="400" width="856" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="152"/>
|
||||||
|
<line x1="4" x2="852" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="852" y1="152" y2="152"/>
|
||||||
|
<line x1="852" x2="852" y1="8" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="248" y2="392"/>
|
||||||
|
<line x1="4" x2="852" y1="248" y2="248"/>
|
||||||
|
<line x1="4" x2="852" y1="392" y2="392"/>
|
||||||
|
<line x1="852" x2="852" y1="248" y2="392"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="56" y2="120"/>
|
||||||
|
<line x1="60" x2="196" y1="56" y2="56"/>
|
||||||
|
<line x1="60" x2="84" y1="120" y2="120"/>
|
||||||
|
<line x1="84" x2="84" y1="120" y2="144"/>
|
||||||
|
<line x1="84" x2="196" y1="120" y2="120"/>
|
||||||
|
<line x1="196" x2="196" y1="56" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="104" y2="120"/>
|
||||||
|
<line x1="196" x2="200" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="296" y2="360"/>
|
||||||
|
<line x1="60" x2="84" y1="296" y2="296"/>
|
||||||
|
<line x1="60" x2="196" y1="360" y2="360"/>
|
||||||
|
<line x1="84" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="196" x2="196" y1="296" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="344" y2="360"/>
|
||||||
|
<line x1="196" x2="200" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="84" x2="84" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="208" x2="260" y1="104" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="72" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="104" y2="120"/>
|
||||||
|
<line x1="260" x2="284" y1="120" y2="120"/>
|
||||||
|
<line x1="284" x2="284" y1="120" y2="144"/>
|
||||||
|
<line x1="284" x2="396" y1="120" y2="120"/>
|
||||||
|
<line x1="396" x2="396" y1="104" y2="120"/>
|
||||||
|
<line x1="396" x2="400" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
||||||
|
<line x1="208" x2="260" y1="344" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="312" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="344" y2="360"/>
|
||||||
|
<line x1="260" x2="396" y1="360" y2="360"/>
|
||||||
|
<line x1="396" x2="396" y1="344" y2="360"/>
|
||||||
|
<line x1="396" x2="400" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="56" y2="72"/>
|
||||||
|
<line x1="260" x2="396" y1="56" y2="56"/>
|
||||||
|
<line x1="260" x2="256" y1="72" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="56" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="296" y2="312"/>
|
||||||
|
<line x1="260" x2="284" y1="296" y2="296"/>
|
||||||
|
<line x1="260" x2="256" y1="312" y2="312"/>
|
||||||
|
<line x1="284" x2="396" y1="296" y2="296"/>
|
||||||
|
<line x1="396" x2="396" y1="296" y2="312"/>
|
||||||
|
<line x1="396" x2="396" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="284" x2="284" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
||||||
|
<line x1="408" x2="460" y1="104" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="72" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="104" y2="120"/>
|
||||||
|
<line x1="460" x2="508" y1="120" y2="120"/>
|
||||||
|
<line x1="508" x2="508" y1="120" y2="144"/>
|
||||||
|
<line x1="508" x2="596" y1="120" y2="120"/>
|
||||||
|
<line x1="596" x2="596" y1="104" y2="120"/>
|
||||||
|
<line x1="596" x2="600" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
||||||
|
<line x1="408" x2="460" y1="344" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="312" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="344" y2="360"/>
|
||||||
|
<line x1="460" x2="596" y1="360" y2="360"/>
|
||||||
|
<line x1="596" x2="596" y1="344" y2="360"/>
|
||||||
|
<line x1="596" x2="600" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="56" y2="72"/>
|
||||||
|
<line x1="460" x2="596" y1="56" y2="56"/>
|
||||||
|
<line x1="460" x2="456" y1="72" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="56" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="296" y2="312"/>
|
||||||
|
<line x1="460" x2="508" y1="296" y2="296"/>
|
||||||
|
<line x1="460" x2="456" y1="312" y2="312"/>
|
||||||
|
<line x1="508" x2="596" y1="296" y2="296"/>
|
||||||
|
<line x1="596" x2="596" y1="296" y2="312"/>
|
||||||
|
<line x1="596" x2="596" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="508" x2="508" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
||||||
|
<line x1="608" x2="660" y1="104" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="72" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="104" y2="120"/>
|
||||||
|
<line x1="660" x2="684" y1="120" y2="120"/>
|
||||||
|
<line x1="684" x2="684" y1="120" y2="144"/>
|
||||||
|
<line x1="684" x2="796" y1="120" y2="120"/>
|
||||||
|
<line x1="796" x2="796" y1="56" y2="120"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
||||||
|
<line x1="608" x2="660" y1="344" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="312" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="344" y2="360"/>
|
||||||
|
<line x1="660" x2="796" y1="360" y2="360"/>
|
||||||
|
<line x1="796" x2="796" y1="296" y2="360"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="56" y2="72"/>
|
||||||
|
<line x1="660" x2="796" y1="56" y2="56"/>
|
||||||
|
<line x1="660" x2="656" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="296" y2="312"/>
|
||||||
|
<line x1="660" x2="684" y1="296" y2="296"/>
|
||||||
|
<line x1="660" x2="656" y1="312" y2="312"/>
|
||||||
|
<line x1="684" x2="796" y1="296" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="684" x2="684" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="92">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="332">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="28">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="92">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="332">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="28">
|
||||||
|
Above
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="268">
|
||||||
|
Below
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="92">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="332">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="92">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="332">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
322
book/src/.gitbook/assets/data-plane-neighborhood (2).svg
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="152"/>
|
||||||
|
<line x1="4" x2="852" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="852" y1="152" y2="152"/>
|
||||||
|
<line x1="852" x2="852" y1="8" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="248" y2="392"/>
|
||||||
|
<line x1="4" x2="852" y1="248" y2="248"/>
|
||||||
|
<line x1="4" x2="852" y1="392" y2="392"/>
|
||||||
|
<line x1="852" x2="852" y1="248" y2="392"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="56" y2="120"/>
|
||||||
|
<line x1="60" x2="196" y1="56" y2="56"/>
|
||||||
|
<line x1="60" x2="84" y1="120" y2="120"/>
|
||||||
|
<line x1="84" x2="84" y1="120" y2="144"/>
|
||||||
|
<line x1="84" x2="196" y1="120" y2="120"/>
|
||||||
|
<line x1="196" x2="196" y1="56" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="104" y2="120"/>
|
||||||
|
<line x1="196" x2="200" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="296" y2="360"/>
|
||||||
|
<line x1="60" x2="84" y1="296" y2="296"/>
|
||||||
|
<line x1="60" x2="196" y1="360" y2="360"/>
|
||||||
|
<line x1="84" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="196" x2="196" y1="296" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="344" y2="360"/>
|
||||||
|
<line x1="196" x2="200" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="84" x2="84" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="208" x2="260" y1="104" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="72" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="104" y2="120"/>
|
||||||
|
<line x1="260" x2="284" y1="120" y2="120"/>
|
||||||
|
<line x1="284" x2="284" y1="120" y2="144"/>
|
||||||
|
<line x1="284" x2="396" y1="120" y2="120"/>
|
||||||
|
<line x1="396" x2="396" y1="104" y2="120"/>
|
||||||
|
<line x1="396" x2="400" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
||||||
|
<line x1="208" x2="260" y1="344" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="312" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="344" y2="360"/>
|
||||||
|
<line x1="260" x2="396" y1="360" y2="360"/>
|
||||||
|
<line x1="396" x2="396" y1="344" y2="360"/>
|
||||||
|
<line x1="396" x2="400" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="56" y2="72"/>
|
||||||
|
<line x1="260" x2="396" y1="56" y2="56"/>
|
||||||
|
<line x1="260" x2="256" y1="72" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="56" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="296" y2="312"/>
|
||||||
|
<line x1="260" x2="284" y1="296" y2="296"/>
|
||||||
|
<line x1="260" x2="256" y1="312" y2="312"/>
|
||||||
|
<line x1="284" x2="396" y1="296" y2="296"/>
|
||||||
|
<line x1="396" x2="396" y1="296" y2="312"/>
|
||||||
|
<line x1="396" x2="396" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="284" x2="284" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
||||||
|
<line x1="408" x2="460" y1="104" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="72" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="104" y2="120"/>
|
||||||
|
<line x1="460" x2="508" y1="120" y2="120"/>
|
||||||
|
<line x1="508" x2="508" y1="120" y2="144"/>
|
||||||
|
<line x1="508" x2="596" y1="120" y2="120"/>
|
||||||
|
<line x1="596" x2="596" y1="104" y2="120"/>
|
||||||
|
<line x1="596" x2="600" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
||||||
|
<line x1="408" x2="460" y1="344" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="312" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="344" y2="360"/>
|
||||||
|
<line x1="460" x2="596" y1="360" y2="360"/>
|
||||||
|
<line x1="596" x2="596" y1="344" y2="360"/>
|
||||||
|
<line x1="596" x2="600" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="56" y2="72"/>
|
||||||
|
<line x1="460" x2="596" y1="56" y2="56"/>
|
||||||
|
<line x1="460" x2="456" y1="72" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="56" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="296" y2="312"/>
|
||||||
|
<line x1="460" x2="508" y1="296" y2="296"/>
|
||||||
|
<line x1="460" x2="456" y1="312" y2="312"/>
|
||||||
|
<line x1="508" x2="596" y1="296" y2="296"/>
|
||||||
|
<line x1="596" x2="596" y1="296" y2="312"/>
|
||||||
|
<line x1="596" x2="596" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="508" x2="508" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
||||||
|
<line x1="608" x2="660" y1="104" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="72" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="104" y2="120"/>
|
||||||
|
<line x1="660" x2="684" y1="120" y2="120"/>
|
||||||
|
<line x1="684" x2="684" y1="120" y2="144"/>
|
||||||
|
<line x1="684" x2="796" y1="120" y2="120"/>
|
||||||
|
<line x1="796" x2="796" y1="56" y2="120"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
||||||
|
<line x1="608" x2="660" y1="344" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="312" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="344" y2="360"/>
|
||||||
|
<line x1="660" x2="796" y1="360" y2="360"/>
|
||||||
|
<line x1="796" x2="796" y1="296" y2="360"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="56" y2="72"/>
|
||||||
|
<line x1="660" x2="796" y1="56" y2="56"/>
|
||||||
|
<line x1="660" x2="656" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="296" y2="312"/>
|
||||||
|
<line x1="660" x2="684" y1="296" y2="296"/>
|
||||||
|
<line x1="660" x2="656" y1="312" y2="312"/>
|
||||||
|
<line x1="684" x2="796" y1="296" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="684" x2="684" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="92">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="332">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="28">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="92">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="332">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="28">
|
||||||
|
Above
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="268">
|
||||||
|
Below
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="92">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="332">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="92">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="332">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
322
book/src/.gitbook/assets/data-plane-neighborhood (3).svg
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="152"/>
|
||||||
|
<line x1="4" x2="852" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="852" y1="152" y2="152"/>
|
||||||
|
<line x1="852" x2="852" y1="8" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="248" y2="392"/>
|
||||||
|
<line x1="4" x2="852" y1="248" y2="248"/>
|
||||||
|
<line x1="4" x2="852" y1="392" y2="392"/>
|
||||||
|
<line x1="852" x2="852" y1="248" y2="392"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="56" y2="120"/>
|
||||||
|
<line x1="60" x2="196" y1="56" y2="56"/>
|
||||||
|
<line x1="60" x2="84" y1="120" y2="120"/>
|
||||||
|
<line x1="84" x2="84" y1="120" y2="144"/>
|
||||||
|
<line x1="84" x2="196" y1="120" y2="120"/>
|
||||||
|
<line x1="196" x2="196" y1="56" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="104" y2="120"/>
|
||||||
|
<line x1="196" x2="200" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="296" y2="360"/>
|
||||||
|
<line x1="60" x2="84" y1="296" y2="296"/>
|
||||||
|
<line x1="60" x2="196" y1="360" y2="360"/>
|
||||||
|
<line x1="84" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="196" x2="196" y1="296" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="344" y2="360"/>
|
||||||
|
<line x1="196" x2="200" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="84" x2="84" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="208" x2="260" y1="104" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="72" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="104" y2="120"/>
|
||||||
|
<line x1="260" x2="284" y1="120" y2="120"/>
|
||||||
|
<line x1="284" x2="284" y1="120" y2="144"/>
|
||||||
|
<line x1="284" x2="396" y1="120" y2="120"/>
|
||||||
|
<line x1="396" x2="396" y1="104" y2="120"/>
|
||||||
|
<line x1="396" x2="400" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
||||||
|
<line x1="208" x2="260" y1="344" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="312" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="344" y2="360"/>
|
||||||
|
<line x1="260" x2="396" y1="360" y2="360"/>
|
||||||
|
<line x1="396" x2="396" y1="344" y2="360"/>
|
||||||
|
<line x1="396" x2="400" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="56" y2="72"/>
|
||||||
|
<line x1="260" x2="396" y1="56" y2="56"/>
|
||||||
|
<line x1="260" x2="256" y1="72" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="56" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="296" y2="312"/>
|
||||||
|
<line x1="260" x2="284" y1="296" y2="296"/>
|
||||||
|
<line x1="260" x2="256" y1="312" y2="312"/>
|
||||||
|
<line x1="284" x2="396" y1="296" y2="296"/>
|
||||||
|
<line x1="396" x2="396" y1="296" y2="312"/>
|
||||||
|
<line x1="396" x2="396" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="284" x2="284" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
||||||
|
<line x1="408" x2="460" y1="104" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="72" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="104" y2="120"/>
|
||||||
|
<line x1="460" x2="508" y1="120" y2="120"/>
|
||||||
|
<line x1="508" x2="508" y1="120" y2="144"/>
|
||||||
|
<line x1="508" x2="596" y1="120" y2="120"/>
|
||||||
|
<line x1="596" x2="596" y1="104" y2="120"/>
|
||||||
|
<line x1="596" x2="600" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
||||||
|
<line x1="408" x2="460" y1="344" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="312" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="344" y2="360"/>
|
||||||
|
<line x1="460" x2="596" y1="360" y2="360"/>
|
||||||
|
<line x1="596" x2="596" y1="344" y2="360"/>
|
||||||
|
<line x1="596" x2="600" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="56" y2="72"/>
|
||||||
|
<line x1="460" x2="596" y1="56" y2="56"/>
|
||||||
|
<line x1="460" x2="456" y1="72" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="56" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="296" y2="312"/>
|
||||||
|
<line x1="460" x2="508" y1="296" y2="296"/>
|
||||||
|
<line x1="460" x2="456" y1="312" y2="312"/>
|
||||||
|
<line x1="508" x2="596" y1="296" y2="296"/>
|
||||||
|
<line x1="596" x2="596" y1="296" y2="312"/>
|
||||||
|
<line x1="596" x2="596" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="508" x2="508" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
||||||
|
<line x1="608" x2="660" y1="104" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="72" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="104" y2="120"/>
|
||||||
|
<line x1="660" x2="684" y1="120" y2="120"/>
|
||||||
|
<line x1="684" x2="684" y1="120" y2="144"/>
|
||||||
|
<line x1="684" x2="796" y1="120" y2="120"/>
|
||||||
|
<line x1="796" x2="796" y1="56" y2="120"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
||||||
|
<line x1="608" x2="660" y1="344" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="312" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="344" y2="360"/>
|
||||||
|
<line x1="660" x2="796" y1="360" y2="360"/>
|
||||||
|
<line x1="796" x2="796" y1="296" y2="360"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="56" y2="72"/>
|
||||||
|
<line x1="660" x2="796" y1="56" y2="56"/>
|
||||||
|
<line x1="660" x2="656" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="296" y2="312"/>
|
||||||
|
<line x1="660" x2="684" y1="296" y2="296"/>
|
||||||
|
<line x1="660" x2="656" y1="312" y2="312"/>
|
||||||
|
<line x1="684" x2="796" y1="296" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="684" x2="684" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="92">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="332">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="28">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="92">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="332">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="28">
|
||||||
|
Above
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="268">
|
||||||
|
Below
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="92">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="332">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="92">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="332">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
322
book/src/.gitbook/assets/data-plane-neighborhood (4).svg
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="152"/>
|
||||||
|
<line x1="4" x2="852" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="852" y1="152" y2="152"/>
|
||||||
|
<line x1="852" x2="852" y1="8" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="248" y2="392"/>
|
||||||
|
<line x1="4" x2="852" y1="248" y2="248"/>
|
||||||
|
<line x1="4" x2="852" y1="392" y2="392"/>
|
||||||
|
<line x1="852" x2="852" y1="248" y2="392"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="56" y2="120"/>
|
||||||
|
<line x1="60" x2="196" y1="56" y2="56"/>
|
||||||
|
<line x1="60" x2="84" y1="120" y2="120"/>
|
||||||
|
<line x1="84" x2="84" y1="120" y2="144"/>
|
||||||
|
<line x1="84" x2="196" y1="120" y2="120"/>
|
||||||
|
<line x1="196" x2="196" y1="56" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="104" y2="120"/>
|
||||||
|
<line x1="196" x2="200" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="296" y2="360"/>
|
||||||
|
<line x1="60" x2="84" y1="296" y2="296"/>
|
||||||
|
<line x1="60" x2="196" y1="360" y2="360"/>
|
||||||
|
<line x1="84" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="196" x2="196" y1="296" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="344" y2="360"/>
|
||||||
|
<line x1="196" x2="200" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="84" x2="84" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="208" x2="260" y1="104" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="72" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="104" y2="120"/>
|
||||||
|
<line x1="260" x2="284" y1="120" y2="120"/>
|
||||||
|
<line x1="284" x2="284" y1="120" y2="144"/>
|
||||||
|
<line x1="284" x2="396" y1="120" y2="120"/>
|
||||||
|
<line x1="396" x2="396" y1="104" y2="120"/>
|
||||||
|
<line x1="396" x2="400" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
||||||
|
<line x1="208" x2="260" y1="344" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="312" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="344" y2="360"/>
|
||||||
|
<line x1="260" x2="396" y1="360" y2="360"/>
|
||||||
|
<line x1="396" x2="396" y1="344" y2="360"/>
|
||||||
|
<line x1="396" x2="400" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="56" y2="72"/>
|
||||||
|
<line x1="260" x2="396" y1="56" y2="56"/>
|
||||||
|
<line x1="260" x2="256" y1="72" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="56" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="296" y2="312"/>
|
||||||
|
<line x1="260" x2="284" y1="296" y2="296"/>
|
||||||
|
<line x1="260" x2="256" y1="312" y2="312"/>
|
||||||
|
<line x1="284" x2="396" y1="296" y2="296"/>
|
||||||
|
<line x1="396" x2="396" y1="296" y2="312"/>
|
||||||
|
<line x1="396" x2="396" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="284" x2="284" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
||||||
|
<line x1="408" x2="460" y1="104" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="72" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="104" y2="120"/>
|
||||||
|
<line x1="460" x2="508" y1="120" y2="120"/>
|
||||||
|
<line x1="508" x2="508" y1="120" y2="144"/>
|
||||||
|
<line x1="508" x2="596" y1="120" y2="120"/>
|
||||||
|
<line x1="596" x2="596" y1="104" y2="120"/>
|
||||||
|
<line x1="596" x2="600" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
||||||
|
<line x1="408" x2="460" y1="344" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="312" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="344" y2="360"/>
|
||||||
|
<line x1="460" x2="596" y1="360" y2="360"/>
|
||||||
|
<line x1="596" x2="596" y1="344" y2="360"/>
|
||||||
|
<line x1="596" x2="600" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="56" y2="72"/>
|
||||||
|
<line x1="460" x2="596" y1="56" y2="56"/>
|
||||||
|
<line x1="460" x2="456" y1="72" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="56" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="296" y2="312"/>
|
||||||
|
<line x1="460" x2="508" y1="296" y2="296"/>
|
||||||
|
<line x1="460" x2="456" y1="312" y2="312"/>
|
||||||
|
<line x1="508" x2="596" y1="296" y2="296"/>
|
||||||
|
<line x1="596" x2="596" y1="296" y2="312"/>
|
||||||
|
<line x1="596" x2="596" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="508" x2="508" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
||||||
|
<line x1="608" x2="660" y1="104" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="72" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="104" y2="120"/>
|
||||||
|
<line x1="660" x2="684" y1="120" y2="120"/>
|
||||||
|
<line x1="684" x2="684" y1="120" y2="144"/>
|
||||||
|
<line x1="684" x2="796" y1="120" y2="120"/>
|
||||||
|
<line x1="796" x2="796" y1="56" y2="120"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
||||||
|
<line x1="608" x2="660" y1="344" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="312" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="344" y2="360"/>
|
||||||
|
<line x1="660" x2="796" y1="360" y2="360"/>
|
||||||
|
<line x1="796" x2="796" y1="296" y2="360"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="56" y2="72"/>
|
||||||
|
<line x1="660" x2="796" y1="56" y2="56"/>
|
||||||
|
<line x1="660" x2="656" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="296" y2="312"/>
|
||||||
|
<line x1="660" x2="684" y1="296" y2="296"/>
|
||||||
|
<line x1="660" x2="656" y1="312" y2="312"/>
|
||||||
|
<line x1="684" x2="796" y1="296" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="684" x2="684" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="92">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="332">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="28">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="92">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="332">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="28">
|
||||||
|
Above
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="268">
|
||||||
|
Below
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="92">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="332">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="92">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="332">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
322
book/src/.gitbook/assets/data-plane-neighborhood (5).svg
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="152"/>
|
||||||
|
<line x1="4" x2="852" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="852" y1="152" y2="152"/>
|
||||||
|
<line x1="852" x2="852" y1="8" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="248" y2="392"/>
|
||||||
|
<line x1="4" x2="852" y1="248" y2="248"/>
|
||||||
|
<line x1="4" x2="852" y1="392" y2="392"/>
|
||||||
|
<line x1="852" x2="852" y1="248" y2="392"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="56" y2="120"/>
|
||||||
|
<line x1="60" x2="196" y1="56" y2="56"/>
|
||||||
|
<line x1="60" x2="84" y1="120" y2="120"/>
|
||||||
|
<line x1="84" x2="84" y1="120" y2="144"/>
|
||||||
|
<line x1="84" x2="196" y1="120" y2="120"/>
|
||||||
|
<line x1="196" x2="196" y1="56" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="104" y2="120"/>
|
||||||
|
<line x1="196" x2="200" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="296" y2="360"/>
|
||||||
|
<line x1="60" x2="84" y1="296" y2="296"/>
|
||||||
|
<line x1="60" x2="196" y1="360" y2="360"/>
|
||||||
|
<line x1="84" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="196" x2="196" y1="296" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="344" y2="360"/>
|
||||||
|
<line x1="196" x2="200" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="84" x2="84" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="208" x2="260" y1="104" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="72" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="104" y2="120"/>
|
||||||
|
<line x1="260" x2="284" y1="120" y2="120"/>
|
||||||
|
<line x1="284" x2="284" y1="120" y2="144"/>
|
||||||
|
<line x1="284" x2="396" y1="120" y2="120"/>
|
||||||
|
<line x1="396" x2="396" y1="104" y2="120"/>
|
||||||
|
<line x1="396" x2="400" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
||||||
|
<line x1="208" x2="260" y1="344" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="312" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="344" y2="360"/>
|
||||||
|
<line x1="260" x2="396" y1="360" y2="360"/>
|
||||||
|
<line x1="396" x2="396" y1="344" y2="360"/>
|
||||||
|
<line x1="396" x2="400" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="56" y2="72"/>
|
||||||
|
<line x1="260" x2="396" y1="56" y2="56"/>
|
||||||
|
<line x1="260" x2="256" y1="72" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="56" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="296" y2="312"/>
|
||||||
|
<line x1="260" x2="284" y1="296" y2="296"/>
|
||||||
|
<line x1="260" x2="256" y1="312" y2="312"/>
|
||||||
|
<line x1="284" x2="396" y1="296" y2="296"/>
|
||||||
|
<line x1="396" x2="396" y1="296" y2="312"/>
|
||||||
|
<line x1="396" x2="396" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="284" x2="284" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
||||||
|
<line x1="408" x2="460" y1="104" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="72" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="104" y2="120"/>
|
||||||
|
<line x1="460" x2="508" y1="120" y2="120"/>
|
||||||
|
<line x1="508" x2="508" y1="120" y2="144"/>
|
||||||
|
<line x1="508" x2="596" y1="120" y2="120"/>
|
||||||
|
<line x1="596" x2="596" y1="104" y2="120"/>
|
||||||
|
<line x1="596" x2="600" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
||||||
|
<line x1="408" x2="460" y1="344" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="312" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="344" y2="360"/>
|
||||||
|
<line x1="460" x2="596" y1="360" y2="360"/>
|
||||||
|
<line x1="596" x2="596" y1="344" y2="360"/>
|
||||||
|
<line x1="596" x2="600" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="56" y2="72"/>
|
||||||
|
<line x1="460" x2="596" y1="56" y2="56"/>
|
||||||
|
<line x1="460" x2="456" y1="72" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="56" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="296" y2="312"/>
|
||||||
|
<line x1="460" x2="508" y1="296" y2="296"/>
|
||||||
|
<line x1="460" x2="456" y1="312" y2="312"/>
|
||||||
|
<line x1="508" x2="596" y1="296" y2="296"/>
|
||||||
|
<line x1="596" x2="596" y1="296" y2="312"/>
|
||||||
|
<line x1="596" x2="596" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="508" x2="508" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
||||||
|
<line x1="608" x2="660" y1="104" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="72" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="104" y2="120"/>
|
||||||
|
<line x1="660" x2="684" y1="120" y2="120"/>
|
||||||
|
<line x1="684" x2="684" y1="120" y2="144"/>
|
||||||
|
<line x1="684" x2="796" y1="120" y2="120"/>
|
||||||
|
<line x1="796" x2="796" y1="56" y2="120"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
||||||
|
<line x1="608" x2="660" y1="344" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="312" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="344" y2="360"/>
|
||||||
|
<line x1="660" x2="796" y1="360" y2="360"/>
|
||||||
|
<line x1="796" x2="796" y1="296" y2="360"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="56" y2="72"/>
|
||||||
|
<line x1="660" x2="796" y1="56" y2="56"/>
|
||||||
|
<line x1="660" x2="656" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="296" y2="312"/>
|
||||||
|
<line x1="660" x2="684" y1="296" y2="296"/>
|
||||||
|
<line x1="660" x2="656" y1="312" y2="312"/>
|
||||||
|
<line x1="684" x2="796" y1="296" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="684" x2="684" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="92">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="332">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="28">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="92">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="332">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="28">
|
||||||
|
Above
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="268">
|
||||||
|
Below
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="92">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="332">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="92">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="332">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
322
book/src/.gitbook/assets/data-plane-neighborhood-3.svg
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="152"/>
|
||||||
|
<line x1="4" x2="852" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="852" y1="152" y2="152"/>
|
||||||
|
<line x1="852" x2="852" y1="8" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="248" y2="392"/>
|
||||||
|
<line x1="4" x2="852" y1="248" y2="248"/>
|
||||||
|
<line x1="4" x2="852" y1="392" y2="392"/>
|
||||||
|
<line x1="852" x2="852" y1="248" y2="392"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="56" y2="120"/>
|
||||||
|
<line x1="60" x2="196" y1="56" y2="56"/>
|
||||||
|
<line x1="60" x2="84" y1="120" y2="120"/>
|
||||||
|
<line x1="84" x2="84" y1="120" y2="144"/>
|
||||||
|
<line x1="84" x2="196" y1="120" y2="120"/>
|
||||||
|
<line x1="196" x2="196" y1="56" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="104" y2="120"/>
|
||||||
|
<line x1="196" x2="200" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="296" y2="360"/>
|
||||||
|
<line x1="60" x2="84" y1="296" y2="296"/>
|
||||||
|
<line x1="60" x2="196" y1="360" y2="360"/>
|
||||||
|
<line x1="84" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="196" x2="196" y1="296" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="344" y2="360"/>
|
||||||
|
<line x1="196" x2="200" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="84" x2="84" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="208" x2="260" y1="104" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="72" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="104" y2="120"/>
|
||||||
|
<line x1="260" x2="284" y1="120" y2="120"/>
|
||||||
|
<line x1="284" x2="284" y1="120" y2="144"/>
|
||||||
|
<line x1="284" x2="396" y1="120" y2="120"/>
|
||||||
|
<line x1="396" x2="396" y1="104" y2="120"/>
|
||||||
|
<line x1="396" x2="400" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
||||||
|
<line x1="208" x2="260" y1="344" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="312" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="344" y2="360"/>
|
||||||
|
<line x1="260" x2="396" y1="360" y2="360"/>
|
||||||
|
<line x1="396" x2="396" y1="344" y2="360"/>
|
||||||
|
<line x1="396" x2="400" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="56" y2="72"/>
|
||||||
|
<line x1="260" x2="396" y1="56" y2="56"/>
|
||||||
|
<line x1="260" x2="256" y1="72" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="56" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="296" y2="312"/>
|
||||||
|
<line x1="260" x2="284" y1="296" y2="296"/>
|
||||||
|
<line x1="260" x2="256" y1="312" y2="312"/>
|
||||||
|
<line x1="284" x2="396" y1="296" y2="296"/>
|
||||||
|
<line x1="396" x2="396" y1="296" y2="312"/>
|
||||||
|
<line x1="396" x2="396" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="284" x2="284" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
||||||
|
<line x1="408" x2="460" y1="104" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="72" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="104" y2="120"/>
|
||||||
|
<line x1="460" x2="508" y1="120" y2="120"/>
|
||||||
|
<line x1="508" x2="508" y1="120" y2="144"/>
|
||||||
|
<line x1="508" x2="596" y1="120" y2="120"/>
|
||||||
|
<line x1="596" x2="596" y1="104" y2="120"/>
|
||||||
|
<line x1="596" x2="600" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
||||||
|
<line x1="408" x2="460" y1="344" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="312" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="344" y2="360"/>
|
||||||
|
<line x1="460" x2="596" y1="360" y2="360"/>
|
||||||
|
<line x1="596" x2="596" y1="344" y2="360"/>
|
||||||
|
<line x1="596" x2="600" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="56" y2="72"/>
|
||||||
|
<line x1="460" x2="596" y1="56" y2="56"/>
|
||||||
|
<line x1="460" x2="456" y1="72" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="56" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="296" y2="312"/>
|
||||||
|
<line x1="460" x2="508" y1="296" y2="296"/>
|
||||||
|
<line x1="460" x2="456" y1="312" y2="312"/>
|
||||||
|
<line x1="508" x2="596" y1="296" y2="296"/>
|
||||||
|
<line x1="596" x2="596" y1="296" y2="312"/>
|
||||||
|
<line x1="596" x2="596" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="508" x2="508" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
||||||
|
<line x1="608" x2="660" y1="104" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="72" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="104" y2="120"/>
|
||||||
|
<line x1="660" x2="684" y1="120" y2="120"/>
|
||||||
|
<line x1="684" x2="684" y1="120" y2="144"/>
|
||||||
|
<line x1="684" x2="796" y1="120" y2="120"/>
|
||||||
|
<line x1="796" x2="796" y1="56" y2="120"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
||||||
|
<line x1="608" x2="660" y1="344" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="312" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="344" y2="360"/>
|
||||||
|
<line x1="660" x2="796" y1="360" y2="360"/>
|
||||||
|
<line x1="796" x2="796" y1="296" y2="360"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="56" y2="72"/>
|
||||||
|
<line x1="660" x2="796" y1="56" y2="56"/>
|
||||||
|
<line x1="660" x2="656" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="296" y2="312"/>
|
||||||
|
<line x1="660" x2="684" y1="296" y2="296"/>
|
||||||
|
<line x1="660" x2="656" y1="312" y2="312"/>
|
||||||
|
<line x1="684" x2="796" y1="296" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="684" x2="684" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="92">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="332">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="28">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="92">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="332">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="28">
|
||||||
|
Above
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="268">
|
||||||
|
Below
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="92">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="332">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="92">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="332">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
322
book/src/.gitbook/assets/data-plane-neighborhood.svg
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="8" y2="152"/>
|
||||||
|
<line x1="4" x2="852" y1="8" y2="8"/>
|
||||||
|
<line x1="4" x2="852" y1="152" y2="152"/>
|
||||||
|
<line x1="852" x2="852" y1="8" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="248" y2="392"/>
|
||||||
|
<line x1="4" x2="852" y1="248" y2="248"/>
|
||||||
|
<line x1="4" x2="852" y1="392" y2="392"/>
|
||||||
|
<line x1="852" x2="852" y1="248" y2="392"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="56" y2="120"/>
|
||||||
|
<line x1="60" x2="196" y1="56" y2="56"/>
|
||||||
|
<line x1="60" x2="84" y1="120" y2="120"/>
|
||||||
|
<line x1="84" x2="84" y1="120" y2="144"/>
|
||||||
|
<line x1="84" x2="196" y1="120" y2="120"/>
|
||||||
|
<line x1="196" x2="196" y1="56" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
||||||
|
<line x1="196" x2="196" y1="104" y2="120"/>
|
||||||
|
<line x1="196" x2="200" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="60" x2="60" y1="296" y2="360"/>
|
||||||
|
<line x1="60" x2="84" y1="296" y2="296"/>
|
||||||
|
<line x1="60" x2="196" y1="360" y2="360"/>
|
||||||
|
<line x1="84" x2="196" y1="296" y2="296"/>
|
||||||
|
<line x1="196" x2="196" y1="296" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
||||||
|
<line x1="196" x2="196" y1="344" y2="360"/>
|
||||||
|
<line x1="196" x2="200" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="84" x2="84" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="208" x2="260" y1="104" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="72" y2="104"/>
|
||||||
|
<line x1="260" x2="260" y1="104" y2="120"/>
|
||||||
|
<line x1="260" x2="284" y1="120" y2="120"/>
|
||||||
|
<line x1="284" x2="284" y1="120" y2="144"/>
|
||||||
|
<line x1="284" x2="396" y1="120" y2="120"/>
|
||||||
|
<line x1="396" x2="396" y1="104" y2="120"/>
|
||||||
|
<line x1="396" x2="400" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
||||||
|
<line x1="208" x2="260" y1="344" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="312" y2="344"/>
|
||||||
|
<line x1="260" x2="260" y1="344" y2="360"/>
|
||||||
|
<line x1="260" x2="396" y1="360" y2="360"/>
|
||||||
|
<line x1="396" x2="396" y1="344" y2="360"/>
|
||||||
|
<line x1="396" x2="400" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="56" y2="72"/>
|
||||||
|
<line x1="260" x2="396" y1="56" y2="56"/>
|
||||||
|
<line x1="260" x2="256" y1="72" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="56" y2="72"/>
|
||||||
|
<line x1="396" x2="396" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="296" y2="312"/>
|
||||||
|
<line x1="260" x2="284" y1="296" y2="296"/>
|
||||||
|
<line x1="260" x2="256" y1="312" y2="312"/>
|
||||||
|
<line x1="284" x2="396" y1="296" y2="296"/>
|
||||||
|
<line x1="396" x2="396" y1="296" y2="312"/>
|
||||||
|
<line x1="396" x2="396" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="284" x2="284" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
||||||
|
<line x1="408" x2="460" y1="104" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="72" y2="104"/>
|
||||||
|
<line x1="460" x2="460" y1="104" y2="120"/>
|
||||||
|
<line x1="460" x2="508" y1="120" y2="120"/>
|
||||||
|
<line x1="508" x2="508" y1="120" y2="144"/>
|
||||||
|
<line x1="508" x2="596" y1="120" y2="120"/>
|
||||||
|
<line x1="596" x2="596" y1="104" y2="120"/>
|
||||||
|
<line x1="596" x2="600" y1="104" y2="104"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
||||||
|
<line x1="408" x2="460" y1="344" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="312" y2="344"/>
|
||||||
|
<line x1="460" x2="460" y1="344" y2="360"/>
|
||||||
|
<line x1="460" x2="596" y1="360" y2="360"/>
|
||||||
|
<line x1="596" x2="596" y1="344" y2="360"/>
|
||||||
|
<line x1="596" x2="600" y1="344" y2="344"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="56" y2="72"/>
|
||||||
|
<line x1="460" x2="596" y1="56" y2="56"/>
|
||||||
|
<line x1="460" x2="456" y1="72" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="56" y2="72"/>
|
||||||
|
<line x1="596" x2="596" y1="72" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="296" y2="312"/>
|
||||||
|
<line x1="460" x2="508" y1="296" y2="296"/>
|
||||||
|
<line x1="460" x2="456" y1="312" y2="312"/>
|
||||||
|
<line x1="508" x2="596" y1="296" y2="296"/>
|
||||||
|
<line x1="596" x2="596" y1="296" y2="312"/>
|
||||||
|
<line x1="596" x2="596" y1="312" y2="344"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="508" x2="508" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
||||||
|
<line x1="608" x2="660" y1="104" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="72" y2="104"/>
|
||||||
|
<line x1="660" x2="660" y1="104" y2="120"/>
|
||||||
|
<line x1="660" x2="684" y1="120" y2="120"/>
|
||||||
|
<line x1="684" x2="684" y1="120" y2="144"/>
|
||||||
|
<line x1="684" x2="796" y1="120" y2="120"/>
|
||||||
|
<line x1="796" x2="796" y1="56" y2="120"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
||||||
|
<line x1="608" x2="660" y1="344" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="312" y2="344"/>
|
||||||
|
<line x1="660" x2="660" y1="344" y2="360"/>
|
||||||
|
<line x1="660" x2="796" y1="360" y2="360"/>
|
||||||
|
<line x1="796" x2="796" y1="296" y2="360"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="56" y2="72"/>
|
||||||
|
<line x1="660" x2="796" y1="56" y2="56"/>
|
||||||
|
<line x1="660" x2="656" y1="72" y2="72"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="660" x2="660" y1="296" y2="312"/>
|
||||||
|
<line x1="660" x2="684" y1="296" y2="296"/>
|
||||||
|
<line x1="660" x2="656" y1="312" y2="312"/>
|
||||||
|
<line x1="684" x2="796" y1="296" y2="296"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="684" x2="684" y1="160" y2="240"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="92">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="161" y="332">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="28">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="353" y="268">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="92">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="332">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="28">
|
||||||
|
Above
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="457" y="268">
|
||||||
|
Below
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="489" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="92">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="561" y="332">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="92">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="689" y="332">
|
||||||
|
Neighbor
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="92">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="761" y="332">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
138
book/src/.gitbook/assets/data-plane-seeding (1).svg
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="104" y2="232"/>
|
||||||
|
<line x1="4" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="4" x2="540" y1="232" y2="232"/>
|
||||||
|
<line x1="108" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="540" y1="104" y2="104"/>
|
||||||
|
<line x1="540" x2="540" y1="104" y2="232"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="136" y2="200"/>
|
||||||
|
<line x1="36" x2="180" y1="136" y2="136"/>
|
||||||
|
<line x1="36" x2="180" y1="200" y2="200"/>
|
||||||
|
<line x1="180" x2="180" y1="136" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="152" y2="184"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="184" y2="200"/>
|
||||||
|
<line x1="180" x2="184" y1="184" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
||||||
|
<line x1="108" x2="212" y1="40" y2="40"/>
|
||||||
|
<line x1="212" x2="212" y1="8" y2="40"/>
|
||||||
|
<line x1="212" x2="332" y1="8" y2="8"/>
|
||||||
|
<line x1="212" x2="212" y1="40" y2="72"/>
|
||||||
|
<line x1="212" x2="332" y1="72" y2="72"/>
|
||||||
|
<line x1="332" x2="332" y1="8" y2="40"/>
|
||||||
|
<line x1="332" x2="332" y1="40" y2="72"/>
|
||||||
|
<line x1="332" x2="436" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
||||||
|
<line x1="192" x2="364" y1="184" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="184" y2="200"/>
|
||||||
|
<line x1="364" x2="508" y1="200" y2="200"/>
|
||||||
|
<line x1="508" x2="508" y1="136" y2="200"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="508" y1="136" y2="136"/>
|
||||||
|
<line x1="364" x2="360" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="172">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="44">
|
||||||
|
Leader
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="140">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="172">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
138
book/src/.gitbook/assets/data-plane-seeding (2).svg
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="104" y2="232"/>
|
||||||
|
<line x1="4" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="4" x2="540" y1="232" y2="232"/>
|
||||||
|
<line x1="108" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="540" y1="104" y2="104"/>
|
||||||
|
<line x1="540" x2="540" y1="104" y2="232"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="136" y2="200"/>
|
||||||
|
<line x1="36" x2="180" y1="136" y2="136"/>
|
||||||
|
<line x1="36" x2="180" y1="200" y2="200"/>
|
||||||
|
<line x1="180" x2="180" y1="136" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="152" y2="184"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="184" y2="200"/>
|
||||||
|
<line x1="180" x2="184" y1="184" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
||||||
|
<line x1="108" x2="212" y1="40" y2="40"/>
|
||||||
|
<line x1="212" x2="212" y1="8" y2="40"/>
|
||||||
|
<line x1="212" x2="332" y1="8" y2="8"/>
|
||||||
|
<line x1="212" x2="212" y1="40" y2="72"/>
|
||||||
|
<line x1="212" x2="332" y1="72" y2="72"/>
|
||||||
|
<line x1="332" x2="332" y1="8" y2="40"/>
|
||||||
|
<line x1="332" x2="332" y1="40" y2="72"/>
|
||||||
|
<line x1="332" x2="436" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
||||||
|
<line x1="192" x2="364" y1="184" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="184" y2="200"/>
|
||||||
|
<line x1="364" x2="508" y1="200" y2="200"/>
|
||||||
|
<line x1="508" x2="508" y1="136" y2="200"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="508" y1="136" y2="136"/>
|
||||||
|
<line x1="364" x2="360" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="172">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="44">
|
||||||
|
Leader
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="140">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="172">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
156
book/src/.gitbook/assets/data-plane-seeding (3).svg
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
rect.backdrop {
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
text{
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
circle {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
line {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
path {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg_fill {
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.bg_fill {
|
||||||
|
fill: white;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect class="backdrop" height="240" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="104" y2="232"/>
|
||||||
|
<line x1="4" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="4" x2="540" y1="232" y2="232"/>
|
||||||
|
<line x1="108" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="540" y1="104" y2="104"/>
|
||||||
|
<line x1="540" x2="540" y1="104" y2="232"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="136" y2="200"/>
|
||||||
|
<line x1="36" x2="180" y1="136" y2="136"/>
|
||||||
|
<line x1="36" x2="180" y1="200" y2="200"/>
|
||||||
|
<line x1="180" x2="180" y1="136" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="152" y2="184"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="184" y2="200"/>
|
||||||
|
<line x1="180" x2="184" y1="184" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
||||||
|
<line x1="108" x2="212" y1="40" y2="40"/>
|
||||||
|
<line x1="212" x2="212" y1="8" y2="40"/>
|
||||||
|
<line x1="212" x2="332" y1="8" y2="8"/>
|
||||||
|
<line x1="212" x2="212" y1="40" y2="72"/>
|
||||||
|
<line x1="212" x2="332" y1="72" y2="72"/>
|
||||||
|
<line x1="332" x2="332" y1="8" y2="40"/>
|
||||||
|
<line x1="332" x2="332" y1="40" y2="72"/>
|
||||||
|
<line x1="332" x2="436" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
||||||
|
<line x1="192" x2="364" y1="184" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="184" y2="200"/>
|
||||||
|
<line x1="364" x2="508" y1="200" y2="200"/>
|
||||||
|
<line x1="508" x2="508" y1="136" y2="200"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="508" y1="136" y2="136"/>
|
||||||
|
<line x1="364" x2="360" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="172">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="44">
|
||||||
|
Leader
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="140">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="172">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
138
book/src/.gitbook/assets/data-plane-seeding (4).svg
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="104" y2="232"/>
|
||||||
|
<line x1="4" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="4" x2="540" y1="232" y2="232"/>
|
||||||
|
<line x1="108" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="540" y1="104" y2="104"/>
|
||||||
|
<line x1="540" x2="540" y1="104" y2="232"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="136" y2="200"/>
|
||||||
|
<line x1="36" x2="180" y1="136" y2="136"/>
|
||||||
|
<line x1="36" x2="180" y1="200" y2="200"/>
|
||||||
|
<line x1="180" x2="180" y1="136" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="152" y2="184"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="184" y2="200"/>
|
||||||
|
<line x1="180" x2="184" y1="184" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
||||||
|
<line x1="108" x2="212" y1="40" y2="40"/>
|
||||||
|
<line x1="212" x2="212" y1="8" y2="40"/>
|
||||||
|
<line x1="212" x2="332" y1="8" y2="8"/>
|
||||||
|
<line x1="212" x2="212" y1="40" y2="72"/>
|
||||||
|
<line x1="212" x2="332" y1="72" y2="72"/>
|
||||||
|
<line x1="332" x2="332" y1="8" y2="40"/>
|
||||||
|
<line x1="332" x2="332" y1="40" y2="72"/>
|
||||||
|
<line x1="332" x2="436" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
||||||
|
<line x1="192" x2="364" y1="184" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="184" y2="200"/>
|
||||||
|
<line x1="364" x2="508" y1="200" y2="200"/>
|
||||||
|
<line x1="508" x2="508" y1="136" y2="200"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="508" y1="136" y2="136"/>
|
||||||
|
<line x1="364" x2="360" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="172">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="44">
|
||||||
|
Leader
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="140">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="172">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
138
book/src/.gitbook/assets/data-plane-seeding (5).svg
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="104" y2="232"/>
|
||||||
|
<line x1="4" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="4" x2="540" y1="232" y2="232"/>
|
||||||
|
<line x1="108" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="540" y1="104" y2="104"/>
|
||||||
|
<line x1="540" x2="540" y1="104" y2="232"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="136" y2="200"/>
|
||||||
|
<line x1="36" x2="180" y1="136" y2="136"/>
|
||||||
|
<line x1="36" x2="180" y1="200" y2="200"/>
|
||||||
|
<line x1="180" x2="180" y1="136" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="152" y2="184"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="184" y2="200"/>
|
||||||
|
<line x1="180" x2="184" y1="184" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
||||||
|
<line x1="108" x2="212" y1="40" y2="40"/>
|
||||||
|
<line x1="212" x2="212" y1="8" y2="40"/>
|
||||||
|
<line x1="212" x2="332" y1="8" y2="8"/>
|
||||||
|
<line x1="212" x2="212" y1="40" y2="72"/>
|
||||||
|
<line x1="212" x2="332" y1="72" y2="72"/>
|
||||||
|
<line x1="332" x2="332" y1="8" y2="40"/>
|
||||||
|
<line x1="332" x2="332" y1="40" y2="72"/>
|
||||||
|
<line x1="332" x2="436" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
||||||
|
<line x1="192" x2="364" y1="184" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="184" y2="200"/>
|
||||||
|
<line x1="364" x2="508" y1="200" y2="200"/>
|
||||||
|
<line x1="508" x2="508" y1="136" y2="200"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="508" y1="136" y2="136"/>
|
||||||
|
<line x1="364" x2="360" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="172">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="44">
|
||||||
|
Leader
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="140">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="172">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
138
book/src/.gitbook/assets/data-plane-seeding.svg
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="104" y2="232"/>
|
||||||
|
<line x1="4" x2="108" y1="104" y2="104"/>
|
||||||
|
<line x1="4" x2="540" y1="232" y2="232"/>
|
||||||
|
<line x1="108" x2="436" y1="104" y2="104"/>
|
||||||
|
<line x1="436" x2="540" y1="104" y2="104"/>
|
||||||
|
<line x1="540" x2="540" y1="104" y2="232"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="36" x2="36" y1="136" y2="200"/>
|
||||||
|
<line x1="36" x2="180" y1="136" y2="136"/>
|
||||||
|
<line x1="36" x2="180" y1="200" y2="200"/>
|
||||||
|
<line x1="180" x2="180" y1="136" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="152" y2="184"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
||||||
|
<line x1="180" x2="180" y1="184" y2="200"/>
|
||||||
|
<line x1="180" x2="184" y1="184" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
||||||
|
<line x1="108" x2="212" y1="40" y2="40"/>
|
||||||
|
<line x1="212" x2="212" y1="8" y2="40"/>
|
||||||
|
<line x1="212" x2="332" y1="8" y2="8"/>
|
||||||
|
<line x1="212" x2="212" y1="40" y2="72"/>
|
||||||
|
<line x1="212" x2="332" y1="72" y2="72"/>
|
||||||
|
<line x1="332" x2="332" y1="8" y2="40"/>
|
||||||
|
<line x1="332" x2="332" y1="40" y2="72"/>
|
||||||
|
<line x1="332" x2="436" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
||||||
|
<line x1="192" x2="364" y1="184" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="152" y2="184"/>
|
||||||
|
<line x1="364" x2="364" y1="184" y2="200"/>
|
||||||
|
<line x1="364" x2="508" y1="200" y2="200"/>
|
||||||
|
<line x1="508" x2="508" y1="136" y2="200"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="364" x2="364" y1="136" y2="152"/>
|
||||||
|
<line x1="364" x2="508" y1="136" y2="136"/>
|
||||||
|
<line x1="364" x2="360" y1="152" y2="152"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="145" y="172">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="44">
|
||||||
|
Leader
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="140">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="172">
|
||||||
|
Validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="172">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
192
book/src/.gitbook/assets/data-plane.svg
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="4" x2="4" y1="216" y2="280"/>
|
||||||
|
<line x1="4" x2="156" y1="216" y2="216"/>
|
||||||
|
<line x1="4" x2="172" y1="280" y2="280"/>
|
||||||
|
<line x1="156" x2="172" y1="216" y2="216"/>
|
||||||
|
<line x1="172" x2="172" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="104" y2="168"/>
|
||||||
|
<line x1="124" x2="204" y1="104" y2="104"/>
|
||||||
|
<line x1="124" x2="156" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
||||||
|
<line x1="156" x2="204" y1="168" y2="168"/>
|
||||||
|
<line x1="204" x2="292" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
||||||
|
<line x1="204" x2="292" y1="168" y2="168"/>
|
||||||
|
<line x1="292" x2="292" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="216" y2="280"/>
|
||||||
|
<line x1="188" x2="204" y1="216" y2="216"/>
|
||||||
|
<line x1="188" x2="356" y1="280" y2="280"/>
|
||||||
|
<line x1="204" x2="356" y1="216" y2="216"/>
|
||||||
|
<line x1="356" x2="356" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
||||||
|
<line x1="204" x2="276" y1="40" y2="40"/>
|
||||||
|
<line x1="276" x2="276" y1="8" y2="40"/>
|
||||||
|
<line x1="276" x2="444" y1="8" y2="8"/>
|
||||||
|
<line x1="276" x2="276" y1="40" y2="72"/>
|
||||||
|
<line x1="276" x2="444" y1="72" y2="72"/>
|
||||||
|
<line x1="444" x2="444" y1="8" y2="40"/>
|
||||||
|
<line x1="444" x2="444" y1="40" y2="72"/>
|
||||||
|
<line x1="444" x2="532" y1="40" y2="40"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="380" x2="380" y1="216" y2="280"/>
|
||||||
|
<line x1="380" x2="532" y1="216" y2="216"/>
|
||||||
|
<line x1="380" x2="548" y1="280" y2="280"/>
|
||||||
|
<line x1="532" x2="548" y1="216" y2="216"/>
|
||||||
|
<line x1="548" x2="548" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="444" x2="444" y1="104" y2="168"/>
|
||||||
|
<line x1="444" x2="532" y1="104" y2="104"/>
|
||||||
|
<line x1="444" x2="532" y1="168" y2="168"/>
|
||||||
|
<line x1="532" x2="612" y1="104" y2="104"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
||||||
|
<line x1="532" x2="580" y1="168" y2="168"/>
|
||||||
|
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
||||||
|
<line x1="580" x2="612" y1="168" y2="168"/>
|
||||||
|
<line x1="612" x2="612" y1="104" y2="168"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="564" x2="564" y1="216" y2="280"/>
|
||||||
|
<line x1="564" x2="580" y1="216" y2="216"/>
|
||||||
|
<line x1="564" x2="732" y1="280" y2="280"/>
|
||||||
|
<line x1="580" x2="732" y1="216" y2="216"/>
|
||||||
|
<line x1="732" x2="732" y1="216" y2="280"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="252">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="153" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="217" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="44">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="321" y="252">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="44">
|
||||||
|
0
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="473" y="140">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="252">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="140">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="252">
|
||||||
|
Neighborhood
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="697" y="252">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
330
book/src/.gitbook/assets/fork-generation (1).svg
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="24" y2="56"/>
|
||||||
|
<line x1="124" x2="164" y1="24" y2="24"/>
|
||||||
|
<line x1="124" x2="124" y1="56" y2="88"/>
|
||||||
|
<line x1="124" x2="164" y1="56" y2="56"/>
|
||||||
|
<line x1="124" x2="124" y1="88" y2="120"/>
|
||||||
|
<line x1="124" x2="164" y1="88" y2="88"/>
|
||||||
|
<line x1="124" x2="124" y1="120" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="120" y2="120"/>
|
||||||
|
<line x1="124" x2="124" y1="152" y2="184"/>
|
||||||
|
<line x1="124" x2="164" y1="152" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="184" y2="184"/>
|
||||||
|
<line x1="164" x2="164" y1="24" y2="56"/>
|
||||||
|
<line x1="164" x2="164" y1="56" y2="88"/>
|
||||||
|
<line x1="164" x2="164" y1="88" y2="120"/>
|
||||||
|
<line x1="164" x2="164" y1="120" y2="152"/>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="200" x2="208" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="224" x2="236" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="232" x2="240" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="236" x2="236" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="264" x2="272" y1="64" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="304" x2="316" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="316" x2="316" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="360" y1="136" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="368" x2="376" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="384" y1="48" y2="64"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="388" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="388" x2="388" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="416" x2="424" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="420" x2="420" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="436" x2="420" y1="104" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="448" x2="460" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="512" x2="640" y1="24" y2="24"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="108">
|
||||||
|
time
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="44">
|
||||||
|
L1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="76">
|
||||||
|
L2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="108">
|
||||||
|
L3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="140">
|
||||||
|
L4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="172">
|
||||||
|
L5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="140">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="209" y="108">
|
||||||
|
E3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="225" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="76">
|
||||||
|
E2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="108">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="172">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="313" y="44">
|
||||||
|
E1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="337" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="108">
|
||||||
|
E3'
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="449" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="12">
|
||||||
|
validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="60">
|
||||||
|
vote(E1)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="92">
|
||||||
|
vote(E2)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="124">
|
||||||
|
slash(E3)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="156">
|
||||||
|
vote(E4)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="188">
|
||||||
|
hang
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="553" y="188">
|
||||||
|
on
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="188">
|
||||||
|
to
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="12">
|
||||||
|
action
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="601" y="188">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="625" y="188">
|
||||||
|
and
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="657" y="188">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="681" y="188">
|
||||||
|
for
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="713" y="188">
|
||||||
|
more...
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
330
book/src/.gitbook/assets/fork-generation (2).svg
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="24" y2="56"/>
|
||||||
|
<line x1="124" x2="164" y1="24" y2="24"/>
|
||||||
|
<line x1="124" x2="124" y1="56" y2="88"/>
|
||||||
|
<line x1="124" x2="164" y1="56" y2="56"/>
|
||||||
|
<line x1="124" x2="124" y1="88" y2="120"/>
|
||||||
|
<line x1="124" x2="164" y1="88" y2="88"/>
|
||||||
|
<line x1="124" x2="124" y1="120" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="120" y2="120"/>
|
||||||
|
<line x1="124" x2="124" y1="152" y2="184"/>
|
||||||
|
<line x1="124" x2="164" y1="152" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="184" y2="184"/>
|
||||||
|
<line x1="164" x2="164" y1="24" y2="56"/>
|
||||||
|
<line x1="164" x2="164" y1="56" y2="88"/>
|
||||||
|
<line x1="164" x2="164" y1="88" y2="120"/>
|
||||||
|
<line x1="164" x2="164" y1="120" y2="152"/>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="200" x2="208" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="224" x2="236" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="232" x2="240" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="236" x2="236" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="264" x2="272" y1="64" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="304" x2="316" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="316" x2="316" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="360" y1="136" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="368" x2="376" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="384" y1="48" y2="64"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="388" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="388" x2="388" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="416" x2="424" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="420" x2="420" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="436" x2="420" y1="104" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="448" x2="460" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="512" x2="640" y1="24" y2="24"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="108">
|
||||||
|
time
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="44">
|
||||||
|
L1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="76">
|
||||||
|
L2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="108">
|
||||||
|
L3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="140">
|
||||||
|
L4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="172">
|
||||||
|
L5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="140">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="209" y="108">
|
||||||
|
E3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="225" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="76">
|
||||||
|
E2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="108">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="172">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="313" y="44">
|
||||||
|
E1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="337" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="108">
|
||||||
|
E3'
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="449" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="12">
|
||||||
|
validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="60">
|
||||||
|
vote(E1)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="92">
|
||||||
|
vote(E2)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="124">
|
||||||
|
slash(E3)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="156">
|
||||||
|
vote(E4)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="188">
|
||||||
|
hang
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="553" y="188">
|
||||||
|
on
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="188">
|
||||||
|
to
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="12">
|
||||||
|
action
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="601" y="188">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="625" y="188">
|
||||||
|
and
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="657" y="188">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="681" y="188">
|
||||||
|
for
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="713" y="188">
|
||||||
|
more...
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
330
book/src/.gitbook/assets/fork-generation (3).svg
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="24" y2="56"/>
|
||||||
|
<line x1="124" x2="164" y1="24" y2="24"/>
|
||||||
|
<line x1="124" x2="124" y1="56" y2="88"/>
|
||||||
|
<line x1="124" x2="164" y1="56" y2="56"/>
|
||||||
|
<line x1="124" x2="124" y1="88" y2="120"/>
|
||||||
|
<line x1="124" x2="164" y1="88" y2="88"/>
|
||||||
|
<line x1="124" x2="124" y1="120" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="120" y2="120"/>
|
||||||
|
<line x1="124" x2="124" y1="152" y2="184"/>
|
||||||
|
<line x1="124" x2="164" y1="152" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="184" y2="184"/>
|
||||||
|
<line x1="164" x2="164" y1="24" y2="56"/>
|
||||||
|
<line x1="164" x2="164" y1="56" y2="88"/>
|
||||||
|
<line x1="164" x2="164" y1="88" y2="120"/>
|
||||||
|
<line x1="164" x2="164" y1="120" y2="152"/>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="200" x2="208" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="224" x2="236" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="232" x2="240" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="236" x2="236" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="264" x2="272" y1="64" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="304" x2="316" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="316" x2="316" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="360" y1="136" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="368" x2="376" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="384" y1="48" y2="64"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="388" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="388" x2="388" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="416" x2="424" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="420" x2="420" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="436" x2="420" y1="104" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="448" x2="460" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="512" x2="640" y1="24" y2="24"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="108">
|
||||||
|
time
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="44">
|
||||||
|
L1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="76">
|
||||||
|
L2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="108">
|
||||||
|
L3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="140">
|
||||||
|
L4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="172">
|
||||||
|
L5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="140">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="209" y="108">
|
||||||
|
E3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="225" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="76">
|
||||||
|
E2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="108">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="172">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="313" y="44">
|
||||||
|
E1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="337" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="108">
|
||||||
|
E3'
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="449" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="12">
|
||||||
|
validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="60">
|
||||||
|
vote(E1)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="92">
|
||||||
|
vote(E2)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="124">
|
||||||
|
slash(E3)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="156">
|
||||||
|
vote(E4)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="188">
|
||||||
|
hang
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="553" y="188">
|
||||||
|
on
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="188">
|
||||||
|
to
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="12">
|
||||||
|
action
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="601" y="188">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="625" y="188">
|
||||||
|
and
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="657" y="188">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="681" y="188">
|
||||||
|
for
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="713" y="188">
|
||||||
|
more...
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
348
book/src/.gitbook/assets/fork-generation (4).svg
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
rect.backdrop {
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
text{
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
circle {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
line {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
path {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg_fill {
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.bg_fill {
|
||||||
|
fill: white;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect class="backdrop" height="208" width="768" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="24" y2="56"/>
|
||||||
|
<line x1="124" x2="164" y1="24" y2="24"/>
|
||||||
|
<line x1="124" x2="124" y1="56" y2="88"/>
|
||||||
|
<line x1="124" x2="164" y1="56" y2="56"/>
|
||||||
|
<line x1="124" x2="124" y1="88" y2="120"/>
|
||||||
|
<line x1="124" x2="164" y1="88" y2="88"/>
|
||||||
|
<line x1="124" x2="124" y1="120" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="120" y2="120"/>
|
||||||
|
<line x1="124" x2="124" y1="152" y2="184"/>
|
||||||
|
<line x1="124" x2="164" y1="152" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="184" y2="184"/>
|
||||||
|
<line x1="164" x2="164" y1="24" y2="56"/>
|
||||||
|
<line x1="164" x2="164" y1="56" y2="88"/>
|
||||||
|
<line x1="164" x2="164" y1="88" y2="120"/>
|
||||||
|
<line x1="164" x2="164" y1="120" y2="152"/>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="200" x2="208" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="224" x2="236" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="232" x2="240" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="236" x2="236" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="264" x2="272" y1="64" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="304" x2="316" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="316" x2="316" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="360" y1="136" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="368" x2="376" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="384" y1="48" y2="64"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="388" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="388" x2="388" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="416" x2="424" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="420" x2="420" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="436" x2="420" y1="104" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="448" x2="460" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="512" x2="640" y1="24" y2="24"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="108">
|
||||||
|
time
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="44">
|
||||||
|
L1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="76">
|
||||||
|
L2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="108">
|
||||||
|
L3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="140">
|
||||||
|
L4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="172">
|
||||||
|
L5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="140">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="209" y="108">
|
||||||
|
E3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="225" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="76">
|
||||||
|
E2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="108">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="172">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="313" y="44">
|
||||||
|
E1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="337" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="108">
|
||||||
|
E3'
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="449" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="12">
|
||||||
|
validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="60">
|
||||||
|
vote(E1)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="92">
|
||||||
|
vote(E2)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="124">
|
||||||
|
slash(E3)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="156">
|
||||||
|
vote(E4)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="188">
|
||||||
|
hang
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="553" y="188">
|
||||||
|
on
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="188">
|
||||||
|
to
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="12">
|
||||||
|
action
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="601" y="188">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="625" y="188">
|
||||||
|
and
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="657" y="188">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="681" y="188">
|
||||||
|
for
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="713" y="188">
|
||||||
|
more...
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.4 KiB |
330
book/src/.gitbook/assets/fork-generation (5).svg
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="24" y2="56"/>
|
||||||
|
<line x1="124" x2="164" y1="24" y2="24"/>
|
||||||
|
<line x1="124" x2="124" y1="56" y2="88"/>
|
||||||
|
<line x1="124" x2="164" y1="56" y2="56"/>
|
||||||
|
<line x1="124" x2="124" y1="88" y2="120"/>
|
||||||
|
<line x1="124" x2="164" y1="88" y2="88"/>
|
||||||
|
<line x1="124" x2="124" y1="120" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="120" y2="120"/>
|
||||||
|
<line x1="124" x2="124" y1="152" y2="184"/>
|
||||||
|
<line x1="124" x2="164" y1="152" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="184" y2="184"/>
|
||||||
|
<line x1="164" x2="164" y1="24" y2="56"/>
|
||||||
|
<line x1="164" x2="164" y1="56" y2="88"/>
|
||||||
|
<line x1="164" x2="164" y1="88" y2="120"/>
|
||||||
|
<line x1="164" x2="164" y1="120" y2="152"/>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="200" x2="208" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="224" x2="236" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="232" x2="240" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="236" x2="236" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="264" x2="272" y1="64" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="304" x2="316" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="316" x2="316" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="360" y1="136" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="368" x2="376" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="384" y1="48" y2="64"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="388" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="388" x2="388" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="416" x2="424" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="420" x2="420" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="436" x2="420" y1="104" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="448" x2="460" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="512" x2="640" y1="24" y2="24"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="108">
|
||||||
|
time
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="44">
|
||||||
|
L1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="76">
|
||||||
|
L2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="108">
|
||||||
|
L3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="140">
|
||||||
|
L4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="172">
|
||||||
|
L5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="140">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="209" y="108">
|
||||||
|
E3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="225" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="76">
|
||||||
|
E2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="108">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="172">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="313" y="44">
|
||||||
|
E1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="337" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="108">
|
||||||
|
E3'
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="449" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="12">
|
||||||
|
validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="60">
|
||||||
|
vote(E1)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="92">
|
||||||
|
vote(E2)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="124">
|
||||||
|
slash(E3)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="156">
|
||||||
|
vote(E4)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="188">
|
||||||
|
hang
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="553" y="188">
|
||||||
|
on
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="188">
|
||||||
|
to
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="12">
|
||||||
|
action
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="601" y="188">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="625" y="188">
|
||||||
|
and
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="657" y="188">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="681" y="188">
|
||||||
|
for
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="713" y="188">
|
||||||
|
more...
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
330
book/src/.gitbook/assets/fork-generation-3.svg
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="24" y2="56"/>
|
||||||
|
<line x1="124" x2="164" y1="24" y2="24"/>
|
||||||
|
<line x1="124" x2="124" y1="56" y2="88"/>
|
||||||
|
<line x1="124" x2="164" y1="56" y2="56"/>
|
||||||
|
<line x1="124" x2="124" y1="88" y2="120"/>
|
||||||
|
<line x1="124" x2="164" y1="88" y2="88"/>
|
||||||
|
<line x1="124" x2="124" y1="120" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="120" y2="120"/>
|
||||||
|
<line x1="124" x2="124" y1="152" y2="184"/>
|
||||||
|
<line x1="124" x2="164" y1="152" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="184" y2="184"/>
|
||||||
|
<line x1="164" x2="164" y1="24" y2="56"/>
|
||||||
|
<line x1="164" x2="164" y1="56" y2="88"/>
|
||||||
|
<line x1="164" x2="164" y1="88" y2="120"/>
|
||||||
|
<line x1="164" x2="164" y1="120" y2="152"/>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="200" x2="208" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="224" x2="236" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="232" x2="240" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="236" x2="236" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="264" x2="272" y1="64" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="304" x2="316" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="316" x2="316" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="360" y1="136" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="368" x2="376" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="384" y1="48" y2="64"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="388" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="388" x2="388" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="416" x2="424" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="420" x2="420" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="436" x2="420" y1="104" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="448" x2="460" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="512" x2="640" y1="24" y2="24"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="108">
|
||||||
|
time
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="44">
|
||||||
|
L1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="76">
|
||||||
|
L2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="108">
|
||||||
|
L3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="140">
|
||||||
|
L4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="172">
|
||||||
|
L5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="140">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="209" y="108">
|
||||||
|
E3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="225" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="76">
|
||||||
|
E2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="108">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="172">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="313" y="44">
|
||||||
|
E1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="337" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="108">
|
||||||
|
E3'
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="449" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="12">
|
||||||
|
validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="60">
|
||||||
|
vote(E1)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="92">
|
||||||
|
vote(E2)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="124">
|
||||||
|
slash(E3)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="156">
|
||||||
|
vote(E4)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="188">
|
||||||
|
hang
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="553" y="188">
|
||||||
|
on
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="188">
|
||||||
|
to
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="12">
|
||||||
|
action
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="601" y="188">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="625" y="188">
|
||||||
|
and
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="657" y="188">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="681" y="188">
|
||||||
|
for
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="713" y="188">
|
||||||
|
more...
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
330
book/src/.gitbook/assets/fork-generation.svg
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="124" x2="124" y1="24" y2="56"/>
|
||||||
|
<line x1="124" x2="164" y1="24" y2="24"/>
|
||||||
|
<line x1="124" x2="124" y1="56" y2="88"/>
|
||||||
|
<line x1="124" x2="164" y1="56" y2="56"/>
|
||||||
|
<line x1="124" x2="124" y1="88" y2="120"/>
|
||||||
|
<line x1="124" x2="164" y1="88" y2="88"/>
|
||||||
|
<line x1="124" x2="124" y1="120" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="120" y2="120"/>
|
||||||
|
<line x1="124" x2="124" y1="152" y2="184"/>
|
||||||
|
<line x1="124" x2="164" y1="152" y2="152"/>
|
||||||
|
<line x1="124" x2="164" y1="184" y2="184"/>
|
||||||
|
<line x1="164" x2="164" y1="24" y2="56"/>
|
||||||
|
<line x1="164" x2="164" y1="56" y2="88"/>
|
||||||
|
<line x1="164" x2="164" y1="88" y2="120"/>
|
||||||
|
<line x1="164" x2="164" y1="120" y2="152"/>
|
||||||
|
<line x1="164" x2="164" y1="152" y2="184"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="188" x2="188" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="200" x2="208" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="224" x2="236" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="232" x2="240" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="236" x2="236" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="260" x2="260" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="264" x2="272" y1="64" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="272" x2="280" y1="128" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="304" x2="316" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="316" x2="316" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="360" y1="136" y2="112"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="348" x2="348" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="368" x2="376" y1="96" y2="80"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="384" y1="48" y2="64"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="376" x2="388" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="388" x2="388" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="416" x2="424" y1="80" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="420" x2="420" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="436" x2="420" y1="104" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="448" x2="460" y1="112" y2="136"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="460" x2="460" y1="144" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="512" x2="640" y1="24" y2="24"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="108">
|
||||||
|
time
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="44">
|
||||||
|
L1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="76">
|
||||||
|
L2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="108">
|
||||||
|
L3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="140">
|
||||||
|
L4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="137" y="172">
|
||||||
|
L5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="140">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="185" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="209" y="108">
|
||||||
|
E3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="225" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="249" y="76">
|
||||||
|
E2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="140">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="257" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="289" y="108">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="305" y="172">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="313" y="44">
|
||||||
|
E1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="337" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="361" y="108">
|
||||||
|
E3'
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="377" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="393" y="76">
|
||||||
|
x
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="409" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="449" y="172">
|
||||||
|
xx
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="12">
|
||||||
|
validator
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="60">
|
||||||
|
vote(E1)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="92">
|
||||||
|
vote(E2)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="124">
|
||||||
|
slash(E3)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="156">
|
||||||
|
vote(E4)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="513" y="188">
|
||||||
|
hang
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="553" y="188">
|
||||||
|
on
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="577" y="188">
|
||||||
|
to
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="593" y="12">
|
||||||
|
action
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="601" y="188">
|
||||||
|
E4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="625" y="188">
|
||||||
|
and
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="657" y="188">
|
||||||
|
E5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="681" y="188">
|
||||||
|
for
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="713" y="188">
|
||||||
|
more...
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
122
book/src/.gitbook/assets/forks (1).svg
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="48" x2="64" y1="16" y2="48"/>
|
||||||
|
<line x1="68" x2="64" y1="56" y2="48"/>
|
||||||
|
<line x1="68" x2="68" y1="64" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="68" x2="68" y1="80" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="72" x2="80" y1="80" y2="96"/>
|
||||||
|
<line x1="80" x2="88" y1="96" y2="112"/>
|
||||||
|
<line x1="92" x2="88" y1="120" y2="112"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="120"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="192"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="204">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
140
book/src/.gitbook/assets/forks (2).svg
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
rect.backdrop {
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
text{
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
circle {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
line {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
path {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg_fill {
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.bg_fill {
|
||||||
|
fill: white;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect class="backdrop" height="208" width="96" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="48" x2="64" y1="16" y2="48"/>
|
||||||
|
<line x1="68" x2="64" y1="56" y2="48"/>
|
||||||
|
<line x1="68" x2="68" y1="64" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="68" x2="68" y1="80" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="72" x2="80" y1="80" y2="96"/>
|
||||||
|
<line x1="80" x2="88" y1="96" y2="112"/>
|
||||||
|
<line x1="92" x2="88" y1="120" y2="112"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="120"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="192"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="204">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
122
book/src/.gitbook/assets/forks (3).svg
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="48" x2="64" y1="16" y2="48"/>
|
||||||
|
<line x1="68" x2="64" y1="56" y2="48"/>
|
||||||
|
<line x1="68" x2="68" y1="64" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="68" x2="68" y1="80" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="72" x2="80" y1="80" y2="96"/>
|
||||||
|
<line x1="80" x2="88" y1="96" y2="112"/>
|
||||||
|
<line x1="92" x2="88" y1="120" y2="112"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="120"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="192"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="204">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
122
book/src/.gitbook/assets/forks (4).svg
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="48" x2="64" y1="16" y2="48"/>
|
||||||
|
<line x1="68" x2="64" y1="56" y2="48"/>
|
||||||
|
<line x1="68" x2="68" y1="64" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="68" x2="68" y1="80" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="72" x2="80" y1="80" y2="96"/>
|
||||||
|
<line x1="80" x2="88" y1="96" y2="112"/>
|
||||||
|
<line x1="92" x2="88" y1="120" y2="112"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="120"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="192"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="204">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
122
book/src/.gitbook/assets/forks (5).svg
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="48" x2="64" y1="16" y2="48"/>
|
||||||
|
<line x1="68" x2="64" y1="56" y2="48"/>
|
||||||
|
<line x1="68" x2="68" y1="64" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="68" x2="68" y1="80" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="72" x2="80" y1="80" y2="96"/>
|
||||||
|
<line x1="80" x2="88" y1="96" y2="112"/>
|
||||||
|
<line x1="92" x2="88" y1="120" y2="112"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="120"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="192"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="204">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
92
book/src/.gitbook/assets/forks-pruned (1).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned (2).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned (3).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned (4).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned (5).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned-3.svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned.svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned2 (1).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="48" y2="128"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="16" x2="32" y1="48" y2="80"/>
|
||||||
|
<line x1="36" x2="32" y1="88" y2="80"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="88"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="44">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="140">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="172">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned2 (2).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="48" y2="128"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="16" x2="32" y1="48" y2="80"/>
|
||||||
|
<line x1="36" x2="32" y1="88" y2="80"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="88"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="44">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="140">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="172">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned2 (3).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="48" y2="128"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="16" x2="32" y1="48" y2="80"/>
|
||||||
|
<line x1="36" x2="32" y1="88" y2="80"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="88"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="44">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="140">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="172">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
110
book/src/.gitbook/assets/forks-pruned2 (4).svg
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
rect.backdrop {
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
text{
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
circle {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
line {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
path {
|
||||||
|
fill: none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg_fill {
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.bg_fill {
|
||||||
|
fill: white;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect class="backdrop" height="176" width="40" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="48" y2="128"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="16" x2="32" y1="48" y2="80"/>
|
||||||
|
<line x1="36" x2="32" y1="88" y2="80"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="88"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="44">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="140">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="172">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
92
book/src/.gitbook/assets/forks-pruned2 (5).svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="48" y2="128"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="16" x2="32" y1="48" y2="80"/>
|
||||||
|
<line x1="36" x2="32" y1="88" y2="80"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="88"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="44">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="140">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="172">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned2-1.svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="48" y2="128"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="16" x2="32" y1="48" y2="80"/>
|
||||||
|
<line x1="36" x2="32" y1="88" y2="80"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="88"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="44">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="140">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="172">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
92
book/src/.gitbook/assets/forks-pruned2.svg
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="12" x2="12" y1="48" y2="128"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="16" x2="32" y1="48" y2="80"/>
|
||||||
|
<line x1="36" x2="32" y1="88" y2="80"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="88"/>
|
||||||
|
<line x1="36" x2="36" y1="96" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="44">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="9" y="140">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="33" y="172">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
122
book/src/.gitbook/assets/forks.svg
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||||
|
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
||||||
|
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="black" r="8"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
||||||
|
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
||||||
|
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
line,path {
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
line.dashed {
|
||||||
|
stroke-dasharray: 5;
|
||||||
|
}
|
||||||
|
circle.solid {
|
||||||
|
fill:black;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
circle.open {
|
||||||
|
fill:none;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-opacity: 1;
|
||||||
|
fill-opacity: 1;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: miter;
|
||||||
|
}
|
||||||
|
tspan.head{
|
||||||
|
fill: none;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
||||||
|
<g>
|
||||||
|
<line x1="20" x2="24" y1="88" y2="80"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="88"/>
|
||||||
|
<line x1="20" x2="20" y1="96" y2="128"/>
|
||||||
|
<line x1="24" x2="40" y1="80" y2="48"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="16" y2="32"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="44" x2="44" y1="48" y2="96"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="48" x2="64" y1="16" y2="48"/>
|
||||||
|
<line x1="68" x2="64" y1="56" y2="48"/>
|
||||||
|
<line x1="68" x2="68" y1="64" y2="56"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="68" x2="68" y1="80" y2="160"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<line x1="72" x2="80" y1="80" y2="96"/>
|
||||||
|
<line x1="80" x2="88" y1="96" y2="112"/>
|
||||||
|
<line x1="92" x2="88" y1="120" y2="112"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="120"/>
|
||||||
|
<line x1="92" x2="92" y1="128" y2="192"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="17" y="140">
|
||||||
|
5
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="12">
|
||||||
|
1
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="44">
|
||||||
|
2
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="41" y="108">
|
||||||
|
4
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="76">
|
||||||
|
3
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="65" y="172">
|
||||||
|
6
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<text x="89" y="204">
|
||||||
|
7
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule (1).png
Normal file
After Width: | Height: | Size: 256 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule (2).png
Normal file
After Width: | Height: | Size: 256 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule (3).png
Normal file
After Width: | Height: | Size: 256 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule (4).png
Normal file
After Width: | Height: | Size: 256 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule (5).png
Normal file
After Width: | Height: | Size: 256 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule (6).png
Normal file
After Width: | Height: | Size: 256 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule (7).png
Normal file
After Width: | Height: | Size: 256 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule-3 (1).png
Normal file
After Width: | Height: | Size: 256 KiB |
BIN
book/src/.gitbook/assets/p_ex_schedule-3.png
Normal file
After Width: | Height: | Size: 256 KiB |