Radish alpha
r
rad:z371PVmDHdjJucejRoRYJcDEvD5pp
Radicle website including documentation and guides
Radicle
Git
Initial commit
Alexis Sellier committed 2 years ago
commit 78475412bb1b58c8ea1e715cbe5d27fe9afd1919
27 files changed +2362 -0
added .gitignore
@@ -0,0 +1,8 @@
+
_site/
+
.jekyll-cache/
+
_cache/
+
.DS_Store
+
node_modules/
+
vendor/
+
notes/
+
.vercel
added Gemfile
@@ -0,0 +1,5 @@
+
source "https://rubygems.org"
+

+
gem "jekyll", "~> 4.2"
+
gem "webrick"
+
gem "rouge"
added Gemfile.lock
@@ -0,0 +1,72 @@
+
GEM
+
  remote: https://rubygems.org/
+
  specs:
+
    addressable (2.8.6)
+
      public_suffix (>= 2.0.2, < 6.0)
+
    colorator (1.1.0)
+
    concurrent-ruby (1.2.3)
+
    em-websocket (0.5.3)
+
      eventmachine (>= 0.12.9)
+
      http_parser.rb (~> 0)
+
    eventmachine (1.2.7)
+
    ffi (1.16.3)
+
    forwardable-extended (2.6.0)
+
    google-protobuf (3.25.2-x86_64-linux)
+
    http_parser.rb (0.8.0)
+
    i18n (1.14.1)
+
      concurrent-ruby (~> 1.0)
+
    jekyll (4.3.3)
+
      addressable (~> 2.4)
+
      colorator (~> 1.0)
+
      em-websocket (~> 0.5)
+
      i18n (~> 1.0)
+
      jekyll-sass-converter (>= 2.0, < 4.0)
+
      jekyll-watch (~> 2.0)
+
      kramdown (~> 2.3, >= 2.3.1)
+
      kramdown-parser-gfm (~> 1.0)
+
      liquid (~> 4.0)
+
      mercenary (>= 0.3.6, < 0.5)
+
      pathutil (~> 0.9)
+
      rouge (>= 3.0, < 5.0)
+
      safe_yaml (~> 1.0)
+
      terminal-table (>= 1.8, < 4.0)
+
      webrick (~> 1.7)
+
    jekyll-sass-converter (3.0.0)
+
      sass-embedded (~> 1.54)
+
    jekyll-watch (2.2.1)
+
      listen (~> 3.0)
+
    kramdown (2.4.0)
+
      rexml
+
    kramdown-parser-gfm (1.1.0)
+
      kramdown (~> 2.0)
+
    liquid (4.0.4)
+
    listen (3.8.0)
+
      rb-fsevent (~> 0.10, >= 0.10.3)
+
      rb-inotify (~> 0.9, >= 0.9.10)
+
    mercenary (0.4.0)
+
    pathutil (0.16.2)
+
      forwardable-extended (~> 2.6)
+
    public_suffix (5.0.4)
+
    rb-fsevent (0.11.2)
+
    rb-inotify (0.10.1)
+
      ffi (~> 1.0)
+
    rexml (3.2.6)
+
    rouge (4.2.0)
+
    safe_yaml (1.0.5)
+
    sass-embedded (1.69.5-x86_64-linux-gnu)
+
      google-protobuf (~> 3.23)
+
    terminal-table (3.0.2)
+
      unicode-display_width (>= 1.1.1, < 3)
+
    unicode-display_width (2.5.0)
+
    webrick (1.8.1)
+

+
PLATFORMS
+
  x86_64-linux-gnu
+

+
DEPENDENCIES
+
  jekyll (~> 4.2)
+
  rouge
+
  webrick
+

+
BUNDLED WITH
+
   2.5.4
added Makefile
@@ -0,0 +1,16 @@
+
default: _site
+
	jekyll build
+

+
serve:
+
	jekyll serve --port 3000
+

+
dependencies:
+
	gem install jekyll bundler aws-sdk-s3
+

+
svgs:
+
	scripts/cleanup-svgs.sh assets/images/*.svg
+

+
publish:
+
	vercel --prod
+

+
.PHONY: publish
added _config.yml
@@ -0,0 +1,11 @@
+
url: "https://docs.radicle.xyz"
+
baseurl: "/"
+
title: "docs.radicle.xyz"
+
highlighter: rouge
+
markdown: kramdown
+
kramdown:
+
  syntax_highlighter: rouge
+
collections:
+
  guides:
+
    output: true
+
    permalink: /guides/:path/
added _guides/protocol.md
@@ -0,0 +1,812 @@
+
---
+
title: Radicle Protocol Guide
+
subtitle: How Radicle works under the hood
+
layout: guide
+
---
+

+
Heartwood, the latest release of the [Radicle][] protocol establishes a
+
sovereign data network for code collaboration and publishing, built on top of
+
[Git][]. In Radicle, users maintain local copies of their interested
+
repositories and related social artifacts such as issues and patches. Instead
+
of depending on a centralized service like GitHub, each participant in Radicle
+
operates a node that is capable of running on a personal computer, and is
+
connected via a peer-to-peer network.
+

+
Nodes, identified by [public keys][pkc], host and synchronize Git repositories
+
across the network, using a novel gossip protocol for peer and repository
+
discovery, alongside Git's [protocol][git-v2] for data replication. In
+
combination, this allows nodes to locate, replicate, and verify any repository
+
published to the network, provided at least one other peer seeding the
+
repository is online. Since Radicle is built on Git, it can easily interoperate
+
with existing tools and workflows.
+

+
Radicle's architecture is [local-first][], ensuring continuous access to one's
+
repositories directly from their device, regardless of internet connectivity.
+
Repositories have unique identifiers and are self-certifying, meaning all
+
actions, from committing code to adding a comment to an issue, are performed
+
locally and [cryptographically signed][signing], allowing peers to verify
+
authenticity and data provenance once propagated to the network. This allows
+
trust to be established without reliance on a centralized authority.
+

+
Radicle is designed for extensibility, allowing for diverse use cases without
+
necessitating modifications at the protocol level. This guide delves into the
+
capabilities of Radicle’s initial release, which has a focus on code
+
collaboration and code publishing. Nonetheless, a range of other applications
+
is foreseen in the future and possible today, including knowledge sharing,
+
project coordination, and data set collaboration.
+

+
## Introduction
+

+
Git, the most widely-used distributed version control system, enables users to
+
maintain and modify personal copies of data repositories, commonly for source
+
code control. Its structure for direct user-to-user collaboration, while
+
feasible, is often cumbersome due to Git's primary focus on version control
+
rather than collaboration. As a result, users frequently opt for centralized
+
[forges][] like GitHub or GitLab, which offer enhanced interfaces and
+
collaborative tools on top of Git, such as project management and code review.
+
This dependency, however, can result in vendor lock-in since it places a
+
project's social artifacts (e.g. issues, comments, pull requests) out of user
+
control, potentially compromising data sovereignty and other user freedoms.
+

+
Traditional self-hosted options like [Gitea][] or [Forgejo][] provide more
+
sovereignty but often lead to fragmented collaboration environments, as users
+
must create separate profiles for each hosted instance. This simultaneously
+
limits a project's exposure to the wider open source community, a key advantage
+
of platforms like GitHub, which have grown significantly due to network
+
effects. This isolation can impact the visibility and collaborative potential
+
of projects that choose traditional self-hosted solutions.
+

+
The Radicle protocol, in contrast, extends Git's capabilities with a
+
decentralized identity system, novel gossip protocol, and integrated social
+
artifacts, forming a *self-hosted network for code collaboration*. Radicle
+
locates, serves, and replicates Git repositories across a [peer-to-peer][]
+
network while maintaining data authenticity via cryptographic signatures, so
+
peers can directly exchange data without the need for a trusted third party.
+
This enables communities to both self-host and share their repositories across
+
a distributed protocol, contributing to the emergence of a new sovereign
+
network for code collaboration and more.
+

+
## Nodes
+

+
Radicle is a [peer-to-peer][] system, which means that there is no traditional
+
client-server model. Peers on the Radicle network are referred to as *nodes*,
+
and are indistinguishable from users at the protocol level. Nodes, identified
+
by their [Node ID](#node-identifier-nid) (NID)---an [Ed25519][] public key---are
+
responsible for seeding Git repositories, each identified by a unique
+
[Repository ID](#repository-identifier-rid) (RID). The seeding process involves
+
both hosting the repository data and synchronizing changes with other nodes.
+
Every Radicle user, irrespective of their role or activity, operates a node by
+
installing a [Radicle Node](#Radicle-Node) on their device. No specialized
+
equipment is necessary for operating a node as a typical end-user; nodes can
+
run on a personal computer without requiring an always-on server.
+

+
<aside> In the peer-to-peer model, nodes act as <em>both clients and
+
servers</em>. </aside>
+

+
<img src="#" class="placeholder" />
+

+
### Seeding Repositories
+

+
Users configure nodes with a *seeding policy* which specifies the list of
+
repositories they are interested in seeding, in addition to retention rules.
+
This means that nodes aren't just seeding random repositories, users have an
+
active role in deciding which repositories should be stored on their device.
+

+
The typical end-user may choose to only seed the repositories they are actively
+
collaborating on. However, more dedicated users may opt to run an always-on
+
**seed node**, offering their infrastructure to the wider
+
Radicle network or to their community. Seed nodes significantly enhance the
+
network's capacity to provide continuous access to a broad range of
+
repositories. They can vary in their seeding policies, from *public seed nodes*
+
that openly seed all repositories to *community seed nodes* that selectively
+
seed repositories from a group of trusted peers.
+

+
<aside> For more details on how to run a seed node, refer to the <a
+
href="https://docs.radicle.xyz/guides/seeder">Radicle Seeder's Guide</a>
+
</aside>
+

+
### Node Identifiers (NIDs)
+

+
<aside class="kicker"> DIDs are a new identifier standard established by the
+
W3C. </aside>
+

+
Radicle node identity is based on [public-key cryptography][pkc], which makes
+
it easy to verify the authenticity of messages within the network through
+
[digital signatures][signing]. This also allows for consistent identification
+
even as a user's physical address varies. When setting up a node, users
+
generate their unique key pair, an [Ed25519][] public and private key, the
+
public part of which is encoded and shared as a [Decentralized Identifier][did]
+
(DID). Creating a node identity requires no permission or coordination: the key
+
pair can be created while offline without providing an email address or any
+
personal identifying information.
+

+
<aside> DIDs enable verifiable, self-sovereign digital identities that are
+
fully under the control of the DID subject, independent of any centralized
+
registry, identity provider, or certificate authority. </aside>
+

+
<figure>
+
  <pre class="center">did:key:<span class="highlight">z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK</span></pre>
+
  <figcaption>Example Node ID encoded as a DID using the <a
+
  href="https://w3c-ccg.github.io/did-method-key/"><code>did:key</code>
+
  method</a>.</figcaption>
+
</figure>
+

+
It is important to safeguard one's private key, as if it is either lost or
+
compromised, one will have to generate a new node identity. A changeable,
+
non-unique **alias** can optionally be associated to each node, for easier
+
human identification across the network.
+

+
<aside> In the Radicle protocol, the terms "Node ID", "Peer ID", and "Public
+
Key" all refer to the same thing and can be used interchangeably. </aside>
+

+
### Running a Node
+

+
To run a node and connect to the network, users install a Radicle *client*.
+
Client software is lightweight and suitable for use on both end-user devices
+
and seed nodes. The reference implementation can be found in the Radicle
+
[heartwood][] repository, and is actively maintained by a small team of
+
engineers.
+

+
<aside> Radicle's reference implementation is written in <a
+
href="https://www.rust-lang.org/">Rust</a>, a high-performance, memory-safe
+
language. </aside>
+

+
The Radicle *stack* is comprised of both the network client and a command line
+
interface (CLI), which can be optionally supplemented with a web frontend.
+
Radicle is released under the open source MIT and Apache 2.0 licenses, to
+
encourage the development of diverse clients and applications. All client
+
software adheres to the Radicle protocol specification, as outlined in the
+
[Radicle Improvement Proposals][rips] (RIPs) repository, ensuring consistent
+
functionality across implementations.
+

+
<aside> For a guided install of the Radicle stack, check out the <a
+
href="#">user guide</a>. </aside>
+

+
## Peer-to-peer Protocol
+

+
Radicle adopts a local-first, peer-to-peer (P2P) architecture, which draws
+
inspiration from Secure Scuttlebutt (SSB) and Bitcoin's [Lightning
+
Network][ln].
+

+
Nodes on the Radicle network subscribe to repository data they are interested
+
in, and peers announce updates that in turn trigger fetches for the underlying
+
content. Just like SSB and Lightning, updates are [gossiped][gossip] on the
+
network until they reach all interested peers.
+

+
Peer connections in Radicle are secured thanks to a [Noise protocol][noise]
+
handshake. Radicle uses the [Noise XK][noise-xk] pattern specifically, just
+
like the Lightning Network with the Node ID as the *static key*. This requires
+
nodes to know the Node IDs of their peers before connecting to them, which
+
takes place through the exchange of peer information over the gossip protocol.
+

+
Unlike SSB's focus on social networking via append-only logs, Radicle focuses
+
on code collaboration by incorporating Git's [object model][git-odb] and
+
[transfer protocol][git-pack] into a peer-to-peer context. This architecture
+
not only leverages Git's proven efficiency and reliability but also gives users
+
complete autonomy over their social artifacts. Radicle's peer-to-peer
+
architecture, in contrast to federated systems, ensures no centralized points
+
of failure, allowing the network to persist as long as users operate nodes.
+

+
<figure class="diagram">
+
  <object type="image/svg+xml" data="/assets/images/p2p-network.svg"></object>
+
  <figcaption>A set of connected peers forming a gossip network.</figcaption>
+
</figure>
+

+
### Gossip Protocol
+

+
The Radicle networking layer is designed as a gossip protocol, where messages
+
are sent relayed between peers to build routing tables that aid in repository
+
discovery and replication. The core functionality is achieved with three
+
message types, each fulfulling a distinct role:
+

+
1. **Node Announcements** are used for broadcasting Node IDs and physical
+
   addresses on which a node is publicly reachable, to facilitate peer
+
   discovery.
+
2. **Inventory Announcements** are used for broadcasting repository inventories
+
   and constructing the routing table which maps out what repositories are
+
   hosted where.
+
3. **Reference Announcements** are used for broadcasting updates to
+
   repositories, relayed only to nodes interested in the relevant repository.
+

+
To prevent endless propagation, nodes drop any message already encountered.
+
However, for the sake of broadcasting messages to new nodes, gossip messages
+
may be temporarily stored and replayed to nodes joining the network for the
+
first time, or after a long period of being offline.
+

+
> **Tip**: Refer to [RIP-1][rip-1] to learn more details about Radicle's
+
> networking protocol.
+

+
Each announcement includes the originating *Node ID* along with a
+
*cryptographic signature* and *timestamp*, allowing network participants to
+
verify the authenticity of messages before relaying them to peers.
+

+
<figure>
+
  <img src="#" class="placeholder" />
+
  <figcaption>The three gossip message types.</figcaption>
+
</figure>
+

+
### Transport Encryption & Privacy
+

+
Connections between peers in the Radicle network are encrypted using the Noise
+
protocol. This begins with two peers performing a [Diffie-Hellman][ecdh] key
+
exchange to agree on a shared session key that is used for the duration
+
of the connection.
+

+
<figure>
+
  <img src="#" class="placeholder" />
+
  <figcaption>Noise XK handshake example.</figcaption>
+
</figure>
+

+
After the handshake phase is completed, all data exchanged between peers is
+
fully encrypted and benefits from strong [forward secrecy][fs], ensuring
+
secure and private communications across the network.
+

+
> **Tip**: Radicle also supports [Tor][] addresses. Users can leverage Tor to
+
> hide their IP address from peers, and connect to `.onion` addresses on the
+
> Tor network.
+

+
### Replication via Git
+

+
While gossip is used to exchange metadata, actual repository data is
+
transferred via replication using the [Git protocol][git-pack]. The process
+
begins with a node establishing a secure connection to one or more of the
+
repository's seeds, upon receiving a *reference* or *inventory* announcement of
+
interest.
+

+
Once connected, the node initiates a Git *fetch* protocol, which involves
+
negotiating which objects should be sent or skipped by the remote node. The
+
objects are then downloaded into the node's storage, making them accessible to
+
other nodes via the same process.
+

+
Since Radicle uses a [framing][] protocol for all its sessions, the fetch
+
protocol is able to take place over the same physical connection between nodes
+
as the gossip protocol. This allows for a more efficient use of resources
+
and avoids certain problems with [NATs][nat]. Although Git's protocols are
+
typically connection-based, Radicle's design allows for multiple concurrent
+
Git fetches to take place over a single connection.
+

+
<aside> The idea of re-using a network connection for multiple concurrent
+
protocols is called <a
+
href="https://en.wikipedia.org/wiki/Multiplexing">multiplexing</a>. </aside>
+

+
<figure class="diagram">
+
  <object type="image/svg+xml" data="/assets/images/multiplexing.svg"></object>
+
  <figcaption>Connection multiplexing in Radicle.</figcaption>
+
</figure>
+

+
### Bootstrap Nodes
+

+
A node joining the network for the first time will not know any peers. Hence,
+
it's useful to pre-configure network clients with addresses of well-known nodes
+
that can be used to bootstrap the peer discovery process and build an address
+
book.
+

+
Radicle's reference implementation is pre-configured with two [bootstrap
+
nodes][bootstrap] that are connected to if the address book is empty:
+
[seed.radicle.garden][] and [seed.radicle.xyz][]. These are nodes run by the
+
Radicle team and have large address books that are shared with connecting
+
peers.
+

+
In the bootstrapping process, nodes connect to an initial set of bootrap nodes
+
and once they establish a connection, use the regular peer discovery mechanism
+
to find more peers.
+

+
<figure>
+
  <img src="#" class="placeholder" />
+
  <figcaption>Bootstrapping process.</figcaption>
+
</figure>
+

+
[bootstrap]: https://en.wikipedia.org/wiki/Bootstrapping_node
+

+
### Federation vs. Peer-to-peer
+

+
Federation allows for a degree of sovereignty, as each node can set its content
+
policies, but user experience and identity are ultimately tied and mediated by
+
these nodes' administrators rather than by the users themselves.
+

+
> **federation** /ˌfɛdəˈreɪʃn/ *n.*
+
>
+
> *(Computing)* A system architecture where multiple independent servers or
+
> nodes operate under a common set of standards and protocols, allowing them to
+
> share data, resources, and functionalities across boundaries while
+
> maintaining autonomy. This model enables interoperability and collective
+
> services among diverse systems without fully centralizing control, thereby
+
> enhancing privacy, scalability, and resilience. Each node in a federated
+
> network can set its policies, manage its users, and control its data.
+

+
<aside> Examples of federated systems include <a href="https://atproto.com">AT
+
Protocol</a>, <a href="https://joinmastodon.org/">Mastodon</a> and plain old
+
E-mail. </aside>
+

+
Although federated models promote a level of decentralization, they face unique
+
challenges, such as when node operators decide to block other nodes, taking
+
that choice away from its users and restricting the free flow of information.
+

+
Federated systems also face challenges related to incentives; specifically,
+
when the operational costs of maintaining a node exceed the perceived benefits,
+
node operators are often compelled to shut down. This can disrupt access for
+
users, undermining the platform's reliability and the continuity of service.
+

+
While Radicle seed nodes face similar challenges, this has little bearing on
+
the end user: seed nodes are interchangeable and offer an undifferentiated
+
service; they are not tied to a user's identity or access to the network.
+

+
<figure class="diagram">
+
  <object type="image/svg+xml" data="/assets/images/federation-vs-p2p.svg"></object>
+
  <figcaption>Federation (left) vs. peer-to-peer (right).</figcaption>
+
</figure>
+

+
## Repositories
+

+
**Repositories** are central to the Radicle network, serving as the primary
+
data abstraction and object shared between peers. A repository in Radicle is
+
fundamentally a Git repository, supplemented with a unique repository
+
identifier (RID) and metadata essential for validating the authenticity of its
+
contents.
+

+
Radicle repositories, which can be either public or private, can accommodate
+
diverse content including source code, documentation, and arbitrary data sets.
+
All repositories are initialized with an [identity
+
document](#identity-document) from which a unique Repository ID (RID) is
+
derived.
+

+
The identity document is where repository permissions and ownership are defined,
+
as well as identifying metadata such as name and description.
+

+
### Delegates
+

+
Repositories are managed and owned by what are called *delegates*. A delegate
+
is an individual, group, or bot, identified by a [DID][did]. Delegates are
+
responsible for critical tasks such as merging patches, addressing issues, and
+
modifying repository permissions. A repository always begins with one delegate,
+
its creator, and can eventually grow to multiple delegates.
+

+
### Identity Document
+

+
Before a repository can be published on Radicle, it needs to be initialized
+
with an *identity document*. This JSON document, stored under the `refs/rad/id`
+
reference in Git, encapsulates key metadata such as the repository’s name,
+
description, and default branch. It also includes the DIDs of the
+
repository's delegates and the *threshold* of delegate signatures required to
+
authorize changes to the repository's default branch.
+

+
<aside> The identity document is stored in Canonical JSON form. Canonical JSON
+
form standardizes JSON encoding to ensure identical byte representation for the
+
same data structures, making it particularly useful for cryptographic
+
operations like hashing. </aside>
+

+
Here's an example of the identity document for the [heartwood][] repository:
+

+
```json
+
{
+
  "delegates": ["did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi"],
+
  "threshold": 1,
+
  "payload": {
+
    "xyz.radicle.project": {
+
      "name": "heartwood",
+
      "description": "Radicle Heartwood Protocol & Stack ❤️🪵",
+
      "defaultBranch": "master"
+
    }
+
  }
+
}
+
```
+
### Private Repositories
+

+
Radicle supports **private repositories** where access is restricted to a
+
designated group of trusted peers. This is achieved by setting the `visibility`
+
attribute in the identity document. For example, the following snippet sets
+
the visibility to *private*, while also allowing a specific peer to have
+
access to the repository.
+

+
```json
+
{
+
  ...
+
  "visibility": {
+
    "type": "private",
+
    "allow": ["did:key:z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk"]
+
  }
+
}
+
```
+

+
This ensures only nodes in the privacy set can replicate and access the data,
+
maintaining confidentiality. While the data is not encrypted at rest, these
+
repositories rely on selective replication through the *allow list* for
+
privacy, which renders them invisible and inaccessible to other nodes in the
+
Radicle network.
+

+
Note that repository delegates *always* have access to their private
+
repositories.
+

+
### Repository Identifier (RID)
+

+
To ensure uniqueness and easy identification of repositories, a stable and
+
globally unique identifier, known as the Repository Identifier (RID), is
+
assigned to each repository. The RID is deterministically derived from the
+
initial version of the repository's identity document. This process involves
+
using Git’s `hash-object` function to produce a 160-bit SHA-1 digest of the
+
document. This is then encoded using [multibase][mb] encoding with the
+
`base-58-btc` alphabet, and prefixed with `rad:`, making it a valid [URN][urn]:
+

+
<figure>
+
  <pre class="center">rad:<span class="highlight">z3gqcJUoA1n9HaHKufZs5FCSGazv5</span></pre>
+
  <figcaption>Example Repository ID for the heartwood project.</figcaption>
+
</figure>
+

+
Since the RID is derived from the *initial* verison of the repository's identity
+
document, the document is able to change while the RID remains the same.
+

+
[urn]: https://datatracker.ietf.org/doc/html/rfc8141
+
[mb]: https://w3c-ccg.github.io/multibase/
+

+
> **Tip**: Refer to [RIP-2][rip-2] for more details about how repository
+
> identity works in the Radicle protocol.
+

+
<!-- TODO: Add info about self-certifying updates -->
+

+
## Local-First Storage
+

+
Storage is designed in such a way that it's easy to transfer data between peers
+
over the network using an unmodified Git protocol. Radicle repositories are
+
simply Git repositories stored in a special location on disk. Peer data
+
is stored within the same repository using Git [namespaces][gns], where Node
+
IDs are used as the namespace. This allows storage to be managed through a
+
partitioned approach where each user maintains their own *local fork* of a
+
repository, as well as any other forks they have an interest in, all within the
+
same Git repository. These forks are then shared among users across the
+
network.
+

+
Each repository fork has a *single owner and writer*, and users are only
+
permitted to make changes to their respective forks.
+

+
### Working vs. Stored Copy
+

+
Storage is accessed directly by the node to report its inventory to other
+
nodes, and by the end user through either specialized tooling or the `git`
+
command line tool. Users are typically interacting with two repository copies:
+
the *working copy*, and a remote "stored" copy that is interacted with via `git
+
push` and `git fetch`, using Radicle's [git-remote-helper][grh].
+

+
This workflow is akin to what most developers are used to, when synchronizing
+
changes between their working copy, and the `origin` remote, which is typically
+
a repository on a hosted Git forge.
+

+
Changes to the stored copy are automatically propagated to the network when the
+
user is connected to the internet, but can also be made while offline. This
+
local-first design not only enhances the user experience by making offline work
+
frictionless, but also eliminates the need for centralized servers.
+

+
<figure class="diagram">
+
  <object type="image/svg+xml" data="/assets/images/working-vs-stored.svg"></object>
+
  <figcaption>Synchronizing the working copy with the stored copy of a repository.</figcaption>
+
</figure>
+

+

+
### Storage Layout
+

+
Radicle's storage layout is designed to support multiple repositories and
+
multiple peers per repository. Each repository is a *bare* Git repository,
+
stored under a common base directory, identified uniquely with its Repository
+
ID or RID. Instead of each of the repository's peers storing data in a separate
+
Git repository with a separate [object database][git-odb] (ODB), peer data is
+
stored within the same Git repository using Git [namespaces][gns].
+

+
<aside> A <em>bare</em> Git repository is a repository stripped of its working
+
directory, containing only the version history (the contents of the
+
<code>.git</code> directory). It's used primarily as a remote repository that
+
developers can push to and pull from, but cannot directly edit files or commit
+
changes in. </aside>
+

+
For each peer, including the local peer, their unique Node ID (NID) is used as
+
the namespace. Thus, each peer has its own namespaced references (eg.
+
`refs/heads`, and `refs/tags`), while sharing the underlying objects (i.e.
+
commits and blobs) with other namespaces via a shared object database. This
+
design ensures only one copy of each object is stored across all repository
+
forks.
+

+
Since the underlying storage uses Git, the storage layout below is represented
+
as a file tree on the file-system, with `<storage>` representing the storage
+
root, or top-level directory under which all repositories are stored on a
+
user's device. For every repository, each peer associated with that repository
+
must have a separate, logical Git source tree -- which contains all the usual
+
reference categories. This *logical repository* is also known as the repository
+
*fork* or *view*, and allows nodes to maintain local data for all peers in the
+
same physical repository.
+

+
```
+
<storage>                     # Storage root containing all repositories
+
├─ <rid>                      # Storage for first repository
+
│  └─ refs                    # All Git references locally stored
+
│     └─ namespaces           # All peer source trees or "forks"
+
│        ├─ <nid>             # First node's source tree
+
│        │  └─ refs           # First node's Git references
+
│        │     ├─ heads       # First node's branches
+
│        │     │   └─ master  # First node's master branch
+
│        │     └─ tags        # First node's tags
+
│        │
+
│        └─ <nid>             # Second node's source tree
+
│           ├─ refs           # Second node's references
+
│           └─ ...
+
├─ <rid>                      # Storage for second repository
+
│   ...
+
└─ <rid>                      # etc.
+
    ...
+
```
+

+

+
Though this storage tree is browsable by the user with standard file system
+
commands, it is not meant to be interacted with directly by users, for risk of
+
corrupting the data. Additionally, Git is free to pack the objects, which means
+
they may not always appear as individual files.
+

+
> **Tip**: Refer to [RIP-3][rip-3] to learn more about storage in the Radicle
+
> protocol.
+

+
### Git URL Scheme
+

+
The Radicle protocol uses its own URL scheme to point to specific repository
+
forks in the network. This allows the Git `fetch` and `push` commands to
+
operate on the correct namespace when fetching or pushing code.
+

+
<figure>
+
  <pre class="center">rad://<span class="highlight">z42hL2jL4XNk6K8oHQaSWfMgCL7ji</span>/<span class="highlight-secondary">z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi</span></pre>
+
  <figcaption> Example URL for repository <code>z42hL2jL4XNk6K8oHQaSWfMgCL7ji</code> and
+
  peer <code>z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi</code>. </figcaption>
+
</figure>
+

+
The Radicle [remote helper][grh] is what allows Git to interpret URLs with the
+
`rad://` scheme. By using this scheme, the user instructs Git to
+
invoke the `git-remote-rad` executable during `git push` or `git fetch`, which
+
allows the user to interact with the network through the storage layer.
+

+
For example, the above URL would map a push to the `master` branch to the following
+
path under the local storage root:
+

+
<pre>
+
/<span class="highlight">z42hL2jL4XNk6K8oHQaSWfMgCL7ji</span>/refs/namespaces/<span class="highlight-secondary">z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi</span>/refs/heads/master
+
</pre>
+

+
If a Node ID is not specified in the URL, Git will interact with the
+
repository's [canonical references](#Canonical-Repository-Version), also know
+
as the authoritative repository state. This is the state agreed on by the
+
repository [delegates](#delegates).
+

+
<figure>
+
  <pre class="center">rad://<span class="highlight">z42hL2jL4XNk6K8oHQaSWfMgCL7ji</span></pre>
+
  <figcaption> Example URL for repository
+
  <code>z42hL2jL4XNk6K8oHQaSWfMgCL7ji</code>'s canonical
+
  references.</figcaption>
+
</figure>
+

+

+
## Trust through Self-Certification
+

+
Unlike centralized forges such as GitHub, where repositories are deemed
+
authentic based on their location (e.g. `https://github.com/bitcoin/bitcoin`),
+
in a decentralized network like Radicle, location is not enough. Instead, we
+
need a way to automatically verify the data we get from *any given location*.
+
This is because peers in a decentralized network may be dishonest. Radicle's
+
approach hinges on the self-certifying nature of its repositories, anchored in
+
the repository [identity document](#identity-document).
+

+
### Canonical Branches
+

+
When repositories are hosted in a known, trusted location, updating the
+
repository's canonical branch (eg. `master`) is simply a matter of pushing
+
to that repository's branch. Permission to push is granted to a small set
+
of maintainers, and any one maintainer is allowed to update the branch.
+

+
In Radicle, lacking a central location where repositories are hosted, the
+
canonical branch is established *dynamically* based on the signature
+
**threshold** defined in the repository's identity document. For example, if a
+
threshold of two out of three delegates is set, with the default branch set to
+
`master`, and two delegates have pushed the same commit to their `master`
+
branches, that commit is recognized as the authoritative, canonical state of
+
the repository.
+

+
> **Note**: Currently, only the branch specified under the `defaultBranch`
+
> attribute of the identity document is set automatically based on a signature
+
> threshold. In the future, additional branches may be supported.
+

+
### Self-certifying Repositories
+

+
Together, a repository's RID and its identity document create a cryptographic
+
proof that serves as the basis for verifying all repository states leading
+
up to its current state. For this reason, we say that Radicle repositories
+
are *self-certifying*: the process of verification doesn't require any
+
inputs other than the repository itself.
+

+
For repositories to be self-certifying, delegates authenticate every change to
+
the repository data and metadata via cryptographic signatures. This includes
+
all Git references published to the network.
+

+
<!-- TODO: Copy section from RIP-2 -->
+

+
#### Signed Refs
+

+
To enable the verification of Git references beyond commits to the source code,
+
Radicle automatically signs the entirety of a node's references everytime they
+
change. This signature is then placed in a Git blob under a special branch
+
referenced under `refs/rad/sigrefs`, along with the references that were signed.
+

+
<figure>
+
  <pre>9767b485c2aad1e23097d2b5165287ba84cfa452 refs/heads/master
+
f3eaa7454e3a4714885905ae99f616fc7895b5fa refs/cobs/xyz.radicle.patch/fe31d5b6049583a42c21a543545d182b893aa4a0
+
0590b78ee42b39087983e4de04164065e5aa11bc refs/cobs/xyz.radicle.patch/ffbb812ad6e7fe1c5c610b1246ca5ca9d7d16027</pre>
+
  <figcaption>Example <code>refs</code> blob under a user's <code>refs/rad/sigrefs</code> branch.
+
  </figcaption>
+
</figure>
+

+
<aside> The signed references are in the same format as the <code>git
+
show-ref</code> command. </aside>
+

+
Signed refs are key to establishing a repository's canonical state and are
+
updated whenever there are changes to a repository.
+

+
Given an RID and a Radicle repository clone, anyone can retrieve the initial
+
identity document and authenticate all subsequent repository updates without a
+
trusted third party. This verification model draws inspiration from [The Update
+
Framework][tuf] (TUF), a framework designed to secure software update systems.
+

+
## Collaborative Objects
+

+
In the Radicle protocol, Collaborative Objects (COBs) play an important role in
+
supplementing Git with social artifacts such as issues, code reviews and
+
discussions, which are not inherently supported by Git. Typically, these
+
artifacts are only found on centralized platforms like GitHub or GitLab, or
+
their self-hosted counterparts.
+

+
In Radicle, COBs allow for social artifacts to be stored directly inside
+
repository, and replicated between peers. This means that social artifacts
+
inherit the same properties as source code: they are local-first, user-owned,
+
and cryptographically signed.
+

+
Radicle includes three predefined collaborative object types to support code
+
collaboration: *Issues*, *Patches*, and *Identities*, but users have full
+
control to customize them or extend Radicle with entirely new COB types.
+

+
* **Issues** (`xyz.radicle.issue`) are used for tracking bugs or feature
+
  requests, and support discussions, labeling and assigning.
+
* **Patches** (`xyz.radicle.patch`) are used to propose changes to a
+
  branch, and support reviews, versioning of changes and discussions.
+
* **Identities** (`xyz.radicle.id`) are used to represent identity documents.
+

+
<aside> The repository's identity document is entirely defined and managed
+
through an <em>id</em> COB. </aside>
+

+
COBs are identified by a unique type name in [reverse domain name
+
notation][reverse-dns] and a unique Object ID.
+

+
### Concurrency & Consistency
+

+
In a system with no central server, operation concurrency is the norm. If
+
two users comment on an issue at the same time, those comments will reach
+
peers in the network at different times and in different orders. To maintain
+
a good user experience, it's important that these factors don't determine
+
the issue's final state. All users must eventually converge to the same exact
+
state and see the same thing.
+

+
To achieve this, Radicle makes use of Git's native synchronization primitives,
+
and encodes COBs as a set of commits in a [directed acyclic graph][dag] (DAG).
+
Each issue, patch or identity document is represented by one such commit graph
+
that is disjoint from any other COB or source code branch.
+

+
This representation gives Radicle a few things for free:
+

+
1. Data integrity is guaranteed by Git.
+
2. Synchronization is handled by Git.
+
3. Causal dependencies can be modeled as commit parent-child relationships.
+

+
It may be useful to think of Radicle's usage of Git commit histories as a
+
form of [conflict-free replicated data type][crdt] (CRDT). When the histories
+
of two peers are synchronized, the commit graphs are simplied *unioned* with
+
each other in a non-destructive, idempotent way.
+

+
<figure class="diagram tall">
+
  <object type="image/svg+xml" data="/assets/images/cob-dag.svg"></object>
+
</figure>
+

+
<aside class="diagram">
+
  <p>
+
    Git DAG representing an Issue COB. Each box represents a
+
    commit object with a change to the COB.
+
  </p>
+
  <p>
+
    The different colors represent different
+
    commit authors and the arrows represent commit parents, or causal
+
    dependencies.
+
  </p>
+
</aside>
+

+
Then, to materialize the state that is displayed to the user, this new graph is
+
*reduced* in [topological order][topo], starting from the root of the graph and
+
going up to the tips. This ordering happens to be [causally
+
consistent][causality], ensuring that changes that have observed other changes
+
are traversed in causal order. Since topological ordering may yield *partial*
+
orders in the face of concurrency, a merge function is also defined, the
+
simplest of which is to traverse the partially-ordered graph vertices sorted by
+
their commit hash. If a merge function cannot be defined, a COB may be
+
configured to treat this as a *conflict* which can be bubbled up to the user.
+

+
<aside> A <em>reduce</em> or <em>fold</em> operation is a way of getting a
+
single value by applying a function to a list of values. </aside>
+

+
In summary, this mechanism supports multiple users independently interacting
+
without coordination. Each COB records the initial version of an object and
+
tracks all subsequent modifications made across the network. Each modification
+
is stored as a separate Git *commit* object to ensure that the CRDT change
+
graph is compatible with Git's fetch protocol. To retrieve the current state of
+
an object, the system replays all the changes to the object in a deterministic
+
and causally-consistent order.
+

+
### Extending COBs
+

+
Radicle's predefined COB types are stored under the `refs/cobs` hierarchy.
+
These are associated with unique namespaces, such as `xyz.radicle.issue` and
+
`xyz.radicle.patch`, to prevent naming collisions.
+

+
For example, if a user or organization were to define a new COB type under
+
their domain, it might look something like `com.acme.task`, for some
+
hypothetical "task" COB under the `acme.com` domain.
+

+
COBs are stored under the `refs/cobs` hierarchy, where Radicle's built-in COBs
+
co-exist with user-defined COBs. This extensibility allows for an unlimited set
+
of new collaboration primitives to be defined by users, without requiring
+
coordination with the broader network or user-base.
+

+
## Conclusion
+

+
The Radicle Heartwood protocol introduces a new approach to code collaboration
+
and hosting rooted in sovereignty. Built upon Git's well-established protocol,
+
Radicle can easily interoperate with existing systems and workflows that are
+
already familiar. Users have full control and ownership over their identity and
+
data. Repositories are self-certifying data structures, meaning updates are
+
cryptographically signed and can be verified by anyone, without needing a
+
trusted third party. Every user in Radicle is self-hosting while remaining
+
connected to a wider network. Radicle is highly extensible with its
+
Collaborative Objects that enable full control and customization over workflows
+
and datatypes, while also opening the possibility for Radicle to support a
+
wider range of functionalities, potentially extending far beyond code
+
collaboration.
+

+
<!-- References -->
+

+
[Gitea]: https://about.gitea.com/
+
[Forgejo]: https://forgejo.org/
+
[Radicle]: https://radicle.xyz/
+
[Git]: https://git-scm.com/
+
[gns]: https://git-scm.com/docs/gitnamespaces
+
[grh]: https://git-scm.com/docs/gitremote-helpers
+
[git-pack]: https://git-scm.com/docs/pack-protocol/en
+
[git-odb]: https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
+
[git-v2]: https://git-scm.com/docs/protocol-v2
+
[Tor]: https://torproject.org/
+
[Ed25519]: https://ed25519.cr.yp.to/
+
[seed.radicle.garden]: https://app.radicle.xyz/nodes/seed.radicle.garden
+
[seed.radicle.xyz]: https://app.radicle.xyz/nodes/seed.radicle.xyz
+
[reverse-dns]: https://en.wikipedia.org/wiki/Reverse_domain_name_notation
+
[tuf]: https://theupdateframework.github.io/specification/latest/
+
[noise]: http://www.noiseprotocol.org/noise.html
+
[noise-xk]: https://noiseexplorer.com/patterns/XK/
+
[ssb]: https://en.wikipedia.org/wiki/Secure_Scuttlebutt
+
[ln]: https://en.wikipedia.org/wiki/Lightning_Network
+
[gossip]: https://en.wikipedia.org/wiki/Gossip_protocol
+
[causality]: https://en.wikipedia.org/wiki/Causal_consistency
+
[dag]: https://en.wikipedia.org/wiki/Directed_acyclic_graph
+
[topo]: https://en.wikipedia.org/wiki/Topological_sorting
+
[rip-1]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0001-heartwood.md
+
[rip-2]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0002-identity.md
+
[rip-3]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0003-storage-layout.md
+
[nat]: https://en.wikipedia.org/wiki/Network_address_translation
+
[framing]: https://en.wikipedia.org/wiki/Frame_(networking)
+
[fs]: https://en.wikipedia.org/wiki/Forward_secrecy
+
[ecdh]: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
+
[rips]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82
+
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
+
[did]: https://www.w3.org/TR/did-core/
+
[seed]: https://docs.radicle.xyz/guides/seeder/
+
[peer-to-peer]: https://en.wikipedia.org/wiki/Peer-to-peer
+
[forges]: https://en.wikipedia.org/wiki/Forge_(software)
+
[local-first]: https://www.inkandswitch.com/local-first/
+
[signing]: https://en.wikipedia.org/wiki/Digital_signature
+
[pkc]: https://en.wikipedia.org/wiki/Public-key_cryptography
+
[crdt]: https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type
added _includes/toc.html
@@ -0,0 +1,169 @@
+
{% capture tocWorkspace %}
+
  {% comment %}
+
    Copyright (c) 2017 Vladimir "allejo" Jimenez
+

+
    Permission is hereby granted, free of charge, to any person
+
    obtaining a copy of this software and associated documentation
+
    files (the "Software"), to deal in the Software without
+
    restriction, including without limitation the rights to use,
+
    copy, modify, merge, publish, distribute, sublicense, and/or sell
+
    copies of the Software, and to permit persons to whom the
+
    Software is furnished to do so, subject to the following
+
    conditions:
+

+
    The above copyright notice and this permission notice shall be
+
    included in all copies or substantial portions of the Software.
+

+
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+
    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+
    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+
    OTHER DEALINGS IN THE SOFTWARE.
+
  {% endcomment %}
+
  {% comment %}
+
    Version 1.2.1
+
      https://github.com/allejo/jekyll-toc
+

+
    "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
+

+
    Usage:
+
        {% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
+

+
    Parameters:
+
        * html         (string) - the HTML of compiled markdown generated by kramdown in Jekyll
+

+
    Optional Parameters:
+
        * sanitize      (bool)   : false  - when set to true, the headers will be stripped of any HTML in the TOC
+
        * class         (string) :   ''   - a CSS class assigned to the TOC
+
        * id            (string) :   ''   - an ID to assigned to the TOC
+
        * h_min         (int)    :   1    - the minimum TOC header level to use; any header lower than this value will be ignored
+
        * h_max         (int)    :   6    - the maximum TOC header level to use; any header greater than this value will be ignored
+
        * ordered       (bool)   : false  - when set to true, an ordered list will be outputted instead of an unordered list
+
        * item_class    (string) :   ''   - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
+
        * submenu_class (string) :   ''   - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level
+
        * base_url      (string) :   ''   - add a base url to the TOC links for when your TOC is on another page than the actual content
+
        * anchor_class  (string) :   ''   - add custom class(es) for each anchor element
+

+
    Output:
+
        An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
+
        generate the table of contents and will NOT output the markdown given to it
+
  {% endcomment %}
+

+
  {% capture newline %}
+
  {% endcapture %}
+
  {% assign newline = newline | rstrip %} <!-- Remove the extra spacing but preserve the newline -->
+

+
  {% capture jekyll_toc %}{% endcapture %}
+
  {% assign orderedList = include.ordered | default: false %}
+
  {% assign baseURL = include.base_url | default: include.baseurl | default: '' %}
+
  {% assign minHeader = include.h_min | default: 1 %}
+
  {% assign maxHeader = include.h_max | default: 6 %}
+
  {% assign nodes = include.html | strip | split: '<h' %}
+

+
  {% assign firstHeader = true %}
+
  {% assign currLevel = 0 %}
+
  {% assign lastLevel = 0 %}
+

+
  {% capture listModifier %}{% if orderedList %}ol{% else %}ul{% endif %}{% endcapture %}
+

+
  {% for node in nodes %}
+
    {% if node == "" %}
+
      {% continue %}
+
    {% endif %}
+

+
    {% assign currLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
+

+
    {% if currLevel < minHeader or currLevel > maxHeader %}
+
      {% continue %}
+
    {% endif %}
+

+
    {% assign _workspace = node | split: '</h' %}
+

+
    {% assign _idWorkspace = _workspace[0] | split: 'id="' %}
+
    {% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
+
    {% assign htmlID = _idWorkspace[0] %}
+

+
    {% assign _classWorkspace = _workspace[0] | split: 'class="' %}
+
    {% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
+
    {% assign htmlClass = _classWorkspace[0] %}
+

+
    {% if htmlClass contains "no_toc" %}
+
      {% continue %}
+
    {% endif %}
+

+
    {% if firstHeader %}
+
      {% assign minHeader = currLevel %}
+
    {% endif %}
+

+
    {% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
+
    {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
+

+
    {% if include.item_class and include.item_class != blank %}
+
      {% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %}
+
    {% endif %}
+

+
    {% if include.submenu_class and include.submenu_class != blank %}
+
      {% assign subMenuLevel = currLevel | minus: 1 %}
+
      {% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %}
+
    {% endif %}
+

+
    {% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}
+

+
    {% if htmlID %}
+
      {% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %}
+

+
      {% if include.anchor_class %}
+
        {% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %}
+
      {% endif %}
+

+
      {% capture listItem %}<a{{ anchorAttributes }}>{{ anchorBody }}</a>{% endcapture %}
+
    {% else %}
+
      {% capture listItem %}{{ anchorBody }}{% endcapture %}
+
    {% endif %}
+

+
    {% if currLevel > lastLevel %}
+
      {% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}
+
    {% elsif currLevel < lastLevel %}
+
      {% assign repeatCount = lastLevel | minus: currLevel %}
+

+
      {% for i in (1..repeatCount) %}
+
        {% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
+
      {% endfor %}
+

+
      {% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
+
    {% else %}
+
      {% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
+
    {% endif %}
+

+
    {% capture jekyll_toc %}{{ jekyll_toc }}<li{{ listItemClass }}>{{ listItem }}{% endcapture %}
+

+
    {% assign lastLevel = currLevel %}
+
    {% assign firstHeader = false %}
+
  {% endfor %}
+

+
  {% assign repeatCount = minHeader | minus: 1 %}
+
  {% assign repeatCount = lastLevel | minus: repeatCount %}
+

+
  {% for i in (1..repeatCount) %}
+
    {% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
+
  {% endfor %}
+

+
  {% if jekyll_toc != '' %}
+
    {% assign rootAttributes = '' %}
+
    {% if include.class and include.class != blank %}
+
      {% capture rootAttributes %} class="{{ include.class | split: '.' | join: ' ' }}"{% endcapture %}
+
    {% endif %}
+

+
    {% if include.id and include.id != blank %}
+
      {% capture rootAttributes %}{{ rootAttributes }} id="{{ include.id }}"{% endcapture %}
+
    {% endif %}
+

+
    {% if rootAttributes %}
+
      {% assign nodes = jekyll_toc | split: '>' %}
+
      {% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %}
+
    {% endif %}
+
  {% endif %}
+
{% endcapture %}{% assign tocWorkspace = '' %}{{ jekyll_toc -}}
added _layouts/guide.html
@@ -0,0 +1,42 @@
+
<!DOCTYPE html>
+
<html lang="{{ site.lang | default: "en-US" }}">
+
  <head>
+
    <title>
+
      {% if page.title %}
+
        {{ page.title }}
+
      {% else %}
+
        {{ site.title }}
+
      {% endif %}
+
    </title>
+
    <meta name="viewport" content="width=device-width, initial-scale=1">
+
    <meta charset="utf-8">
+
    <meta name="twitter:site" content="@radicle" />
+
    <meta name="twitter:creator" content="@radicle" />
+
    <link rel="shortcut icon" href="/assets/images/radicle.svg"/>
+
    <link rel="stylesheet" href="{{ "/assets/css/fonts.css" | relative_url }}">
+
    <link rel="stylesheet" href="{{ "/assets/css/main.css" | relative_url }}">
+
    <link rel="stylesheet" href="{{ "/assets/css/monokai.css" | relative_url }}">
+
  </head>
+
  <body>
+
    <header>
+
      <div class="title">
+
        <a href="{{ "/" | relative_url }}">
+
          <img src="{{ "/assets/images/radicle.svg" | relative_url }}" alt="" />
+
        </a>
+
      </div>
+
      <nav>
+
      </nav>
+
    </header>
+
    <main>
+
      <h1>{{ page.title }}</h1>
+
      <p class="subtitle">{{ page.subtitle }}</p>
+
      <hr />
+
      {% include toc.html html=content class="toc" item_class="toc-h%level%" %}
+
      <hr />
+
      {{ content }}
+
    </main>
+
    <footer>
+
      &copy; The Radicle Team
+
    </footer>
+
  </body>
+
</html>
added assets/css/fonts.css
@@ -0,0 +1,85 @@
+
@font-face {
+
  font-family: "Inter";
+
  font-style: normal;
+
  font-weight: 400;
+
  font-display: swap;
+
  src: url("/assets/fonts/Inter-Regular.woff2");
+
}
+

+
@font-face {
+
  font-family: "Inter";
+
  font-weight: 500;
+
  font-display: swap;
+
  src: url("/assets/fonts/Inter-Medium.woff2");
+
}
+

+
@font-face {
+
  font-family: "Inter";
+
  font-weight: 600;
+
  font-display: swap;
+
  src: url("/assets/fonts/Inter-SemiBold.woff2");
+
}
+

+
@font-face {
+
  font-family: "Inter";
+
  font-weight: 700;
+
  font-display: swap;
+
  src: url("/assets/fonts/Inter-Bold.woff2");
+
}
+

+
@font-face {
+
  font-family: "JetBrains Mono";
+
  font-style: normal;
+
  font-weight: 400;
+
  font-display: swap;
+
  src: url("/assets/fonts/JetBrainsMono-Regular.woff2");
+
}
+

+
@font-face {
+
  font-family: "JetBrains Mono";
+
  font-style: normal;
+
  font-weight: 500;
+
  font-display: swap;
+
  src: url("/assets/fonts/JetBrainsMono-Medium.woff2");
+
}
+

+
@font-face {
+
  font-family: "JetBrains Mono";
+
  font-weight: 600;
+
  font-display: swap;
+
  src: url("/assets/fonts/JetBrainsMono-SemiBold.woff2");
+
}
+

+
@font-face {
+
  font-family: "JetBrains Mono";
+
  font-weight: 700;
+
  font-display: swap;
+
  src: url("/assets/fonts/JetBrainsMono-Bold.woff2");
+
}
+

+
:root {
+
  --font-family-default: "Inter", sans-serif;
+
  --font-family-code: "JetBrains Mono", monospace;
+
  --font-weight-regular: 400;
+
  --font-weight-medium: 500;
+
  --font-weight-semibold: 600;
+
  --font-weight-bold: 700;
+
  --font-size-tiny: 0.75rem; /* 12px */
+
  --font-size-small: 0.875rem; /* 14px */
+
  --font-size-regular: 1rem; /* 16px */
+
  --font-size-medium: 1.125rem; /* 18px */
+
  --font-size-large: 1.5rem; /* 24px */
+
  --font-size-x-large: 2rem; /* 32px */
+
  --font-size-xx-large: 3rem; /* 48px */
+
}
+

+
html {
+
  -ms-text-size-adjust: 100%;
+
  -webkit-font-smoothing: antialiased;
+
  -webkit-text-size-adjust: 100%;
+
  font-family: var(--font-family-default);
+
  font-feature-settings: "zero";
+
  font-size: 16px;
+
  font-weight: var(--font-weight-regular);
+
  line-height: 1.6;
+
}
added assets/css/main.css
@@ -0,0 +1,345 @@
+
@charset "utf-8";
+

+
:root {
+
  --color-bg-dark: #0a0d10;
+
  --color-bg-light: #f4f4f4;
+
  --color-fg-dim-0: #444;
+
  --color-fg-dim-1: #666;
+
  --color-fg-dim-2: #999;
+
  --color-fg-dim-3: #ccc;
+
  --color-fg-dim-4: #eee;
+
  --color-fg: #1a1a1a;
+
  --color-yellow: #ffff88;
+
  --color-fg-highlight: #5555bb;
+
  --color-fg-highlight-secondary: #229944;
+
  --color-border-highlight: #aaaaee;
+
  --color-bg-highlight: #eeeeff;
+
}
+

+
::selection {
+
  background-color: var(--color-yellow);
+
}
+

+
* {
+
  box-sizing: border-box;
+
}
+

+
html {
+
  font-family: var(--font-family-default);
+
  color: var(--color-fg);
+
  min-width: 1280px;
+
}
+

+
body {
+
  margin: 0;
+
}
+

+
header, main, footer {
+
  display: grid;
+
  align-items: start;
+
  grid-column-gap: 2rem;
+
  grid-template-columns:
+
    [screen-start] 1fr
+
    [page-start kicker-start left-start] 6rem 6rem
+
    [text-start kicker-end] 3rem 5rem 3rem 3rem
+
    [left-end right-start] 3rem 5rem 3rem 3rem
+
    [text-end gutter-start] 6rem 6rem
+
    [page-end gutter-end right-end] 1fr [screen-end];
+
}
+

+
main {
+
  align-items: first baseline;
+
  padding-bottom: 8rem;
+
}
+

+
header, footer {
+
  color: rgba(255, 255, 255, 0.8);
+
  font-weight: 300;
+
}
+

+
header {
+
  background-color: var(--color-bg-dark);
+
  height: 4rem;
+
  align-items: stretch;
+
}
+

+
footer {
+
  padding: 4rem 0;
+
}
+

+
nav {
+
  display: grid;
+
  grid-column: right;
+
  grid-auto-flow: column;
+
  grid-gap: 1.5rem;
+
  align-items: stretch;
+
  justify-self: end;
+
  text-transform: uppercase;
+
}
+

+
header a {
+
  display: flex;
+
  align-items: center;
+
}
+

+
main > *, footer > * {
+
  grid-column: text;
+
}
+

+
footer > *:last-child {
+
  margin-bottom: 0;
+
}
+

+
strong {
+
  font-weight: 600;
+
}
+

+
h1 {
+
  font-size: var(--font-size-xx-large);
+
  font-weight: var(--font-weight-semibold);
+
  margin: 4rem 0 0.5rem;
+
  line-height: 1.1;
+
}
+

+
h2 {
+
  font-size: var(--font-size-x-large);
+
  font-weight: var(--font-weight-semibold);
+
  margin: 3.75rem 0 1.5rem;
+
  padding-bottom: 1rem;
+
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+
}
+

+
h3 {
+
  font-size: var(--font-size-large);
+
  font-weight: var(--font-weight-semibold);
+
  margin: 2rem 0 1.5rem;
+
}
+

+
h4 {
+
  font-size: var(--font-size-medium);
+
  font-weight: var(--font-weight-semibold);
+
  margin: 1.5rem 0 1rem;
+
}
+

+
h5 {
+
  font-size: var(--font-size-small);
+
  font-weight: var(--font-weight-semibold);
+
  margin: 1rem 0 0.25rem;
+
}
+

+
pre, code {
+
  font-family: var(--font-family-code);
+
}
+

+
pre {
+
  background-color: var(--color-bg-light);
+
  overflow-x: scroll;
+
  font-size: 0.875rem;
+
  padding: 1rem;
+
  margin: 0;
+
}
+

+
pre code {
+
  background: none;
+
  padding: 0;
+
}
+

+
pre.center {
+
  text-align: center;
+
}
+

+
p code, ul code, ol code, table code {
+
  font-size: 1rem;
+
  font-weight: 600;
+
}
+

+
p:last-child {
+
  margin-bottom: 0;
+
}
+

+
p + blockquote {
+
  margin-top: 0;
+
}
+

+
blockquote {
+
  color: var(--color-fg-dim-0);
+
  background: var(--color-bg-highlight);
+
  padding: 1rem;
+
  margin: 1rem 0;
+
  border-left: 2px solid var(--color-border-highlight);
+
}
+

+
.title {
+
  grid-column: left;
+
  display: grid;
+
  grid-auto-flow: column;
+
  align-items: stretch;
+
  justify-self: start;
+
}
+

+
.title img {
+
  width: 1.75rem;
+
  height: 1.75rem;
+
}
+

+
.toc + hr {
+
  margin-bottom: 4rem;
+
}
+

+
.first {
+
  margin-top: 60px;
+
}
+

+
.subtitle {
+
  font-size: 1.125rem;
+
  color: var(--color-fg-dim-1);
+
  margin: 0 0 4rem;
+
}
+

+
main figure, main img {
+
  margin: 1rem 0 2rem 0;
+
}
+

+
main img, main object {
+
  margin: 0;
+
  padding: 0;
+
  border: 0;
+
  outline: none;
+
}
+

+
main img.placeholder {
+
  width: 100%;
+
  height: 8rem;
+
  border: none !important;
+
  outline: none !important;
+
  background: var(--color-fg-dim-4) !important;
+
}
+

+
figure {
+
  width: 100%;
+
}
+

+
figure pre {
+
  margin: 0;
+
}
+

+
figure img, figure object {
+
  display: block;
+
  margin: 0 auto;
+
}
+

+
figure object + figcaption {
+
  margin-top: 1rem;
+
}
+

+
figure.diagram {
+
  grid-column-start: kicker-start;
+
  grid-column-end: gutter-end;
+
}
+

+
figure.diagram.tall {
+
  grid-column-start: text-start;
+
  grid-column-end: text-end;
+
}
+

+
figcaption {
+
  margin-top: 0.5rem;
+
  width: 100%;
+
  white-space: nowrap;
+
  overflow-x: hidden;
+
  text-align: center;
+
  text-overflow: ellipsis;
+
}
+

+
aside {
+
  grid-column: gutter;
+
}
+

+
aside.kicker {
+
  grid-column: kicker;
+
}
+

+
aside.diagram {
+
  margin-top: 1.5rem;
+
}
+

+
figcaption, aside {
+
  font-size: 0.75rem;
+
  line-height: 1.5;
+
  color: var(--color-fg-dim-1);
+
}
+

+
a {
+
  color: unset;
+
  text-decoration: unset;
+
  border-bottom: 1px solid var(--color-fg-dim-2);
+
}
+

+
a:hover {
+
  border-bottom-color: var(--color-fg-dim-1);
+
}
+

+
p, ol, ul, table, pre {
+
  margin: 0 0 1rem;
+
}
+

+
ol, ul {
+
  padding-left: 2rem;
+
}
+

+
li {
+
  padding-left: 0.5rem;
+
}
+

+
hr {
+
  grid-column: screen;
+
  width: 100%;
+
  border: none;
+
  border-top: 1px solid var(--color-fg-dim-4);
+
  margin: 0;
+
}
+

+
span.highlight {
+
  color: var(--color-fg-highlight);
+
}
+

+
span.highlight-secondary {
+
  color: var(--color-fg-highlight-secondary);
+
}
+

+
.toc {
+
  display: flex;
+
  flex-direction: column;
+
  flex-wrap: wrap;
+
  gap: 1rem;
+
  font-size: 0.75rem;
+
  margin: 2rem 0;
+
  padding: 0;
+
  height: 16rem;
+
}
+

+
.toc a {
+
  border-bottom-style: none;
+
}
+
.toc a:hover {
+
  border-bottom-style: solid;
+
}
+

+
.toc li, .toc ul {
+
  padding: 0;
+
  margin: 0;
+
  list-style-type: none;
+
}
+

+
.toc-h2 > a {
+
  font-weight: bold !important;
+
}
+
.toc-h2 > ul {
+
  margin-left: 0.5rem;
+
}
+
.toc-h3 > ul {
+
  margin-left: 1rem;
+
}
+
.toc-h3 > a, .toc-h4 > a, .tok-h5 > a {
+
  color: var(--color-fg-dim-1);
+
}
added assets/css/monokai.css
@@ -0,0 +1,2 @@
+
.highlight .nl { color: #555 }
+
.highlight .s2 { color: #555 }
added assets/fonts/Inter-Bold.woff2
added assets/fonts/Inter-Medium.woff2
added assets/fonts/Inter-Regular.woff2
added assets/fonts/Inter-SemiBold.woff2
added assets/fonts/JetBrainsMono-Bold.woff2
added assets/fonts/JetBrainsMono-Medium.woff2
added assets/fonts/JetBrainsMono-Regular.woff2
added assets/fonts/JetBrainsMono-SemiBold.woff2
added assets/fonts/Virgil.woff2
added assets/images/cob-dag.svg
@@ -0,0 +1,138 @@
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 337.2430718281753 731.1541034420761" width="337.2430718281753" height="731.1541034420761">
+
  <defs>
+
    <style>
+
      @import url("/assets/css/fonts.css");
+
      svg { font-size: 16px; font-family: "Inter", sans-serif; }
+
    </style>
+
  </defs>
+
  <g stroke-linecap="round" transform="translate(52.20518097095419 503.2862482615314) rotate(0 53.390605406266786 38.0736284454527)">
+
    <path d="M19.04 0 C37.56 0, 56.09 0, 87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 C106.78 31.03, 106.78 43.03, 106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 C63.19 76.15, 38.64 76.15, 19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 C0 44.83, 0 32.55, 0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="none" stroke-width="0" fill="#ee9944"/>
+
    <path d="M19.04 0 C37.43 0, 55.83 0, 87.74 0 M19.04 0 C35.8 0, 52.56 0, 87.74 0 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M106.78 19.04 C106.78 31.75, 106.78 44.45, 106.78 57.11 M106.78 19.04 C106.78 30.5, 106.78 41.96, 106.78 57.11 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M87.74 76.15 C65.1 76.15, 42.46 76.15, 19.04 76.15 M87.74 76.15 C60.52 76.15, 33.3 76.15, 19.04 76.15 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M0 57.11 C0 48.53, 0 39.95, 0 19.04 M0 57.11 C0 43.92, 0 30.74, 0 19.04 M0 19.04 C0 6.35, 6.35 0, 19.04 0 M0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(71.00828485134207 532.159876706984) rotate(0 34.587501525878906 9.199999999999989)">
+
    <text x="34.587501525878906" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Comment</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(10 352.14874786706235) rotate(0 53.390605406266786 38.0736284454527)">
+
    <path d="M19.04 0 C46.02 0, 73 0, 87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 C106.78 27.55, 106.78 36.07, 106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 C66.86 76.15, 45.98 76.15, 19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 C0 42.88, 0 28.65, 0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="none" stroke-width="0" fill="#ee9944"/>
+
    <path d="M19.04 0 C36.36 0, 53.68 0, 87.74 0 M19.04 0 C44.07 0, 69.1 0, 87.74 0 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M106.78 19.04 C106.78 30.85, 106.78 42.67, 106.78 57.11 M106.78 19.04 C106.78 33.9, 106.78 48.76, 106.78 57.11 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M87.74 76.15 C67.84 76.15, 47.93 76.15, 19.04 76.15 M87.74 76.15 C62.26 76.15, 36.78 76.15, 19.04 76.15 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M0 57.11 C0 47.25, 0 37.4, 0 19.04 M0 57.11 C0 43.71, 0 30.31, 0 19.04 M0 19.04 C0 6.35, 6.35 0, 19.04 0 M0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(28.80310388038788 371.822376312515) rotate(0 34.587501525878906 18.399999999999977)">
+
    <text x="34.587501525878906" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Edit</text>
+
    <text x="34.587501525878906" y="18.4" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Comment</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(220.46186101564126 475.0142432140772) rotate(0 53.390605406267014 38.0736284454527)">
+
    <path d="M19.04 0 C45.48 0, 71.92 0, 87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 C106.78 33.93, 106.78 48.82, 106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 C63.25 76.15, 38.76 76.15, 19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 C0 48.18, 0 39.25, 0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M19.04 0 C44.68 0, 70.32 0, 87.74 0 M19.04 0 C36.96 0, 54.89 0, 87.74 0 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M106.78 19.04 C106.78 29.99, 106.78 40.95, 106.78 57.11 M106.78 19.04 C106.78 32.93, 106.78 46.83, 106.78 57.11 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M87.74 76.15 C72.27 76.15, 56.8 76.15, 19.04 76.15 M87.74 76.15 C62 76.15, 36.25 76.15, 19.04 76.15 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M0 57.11 C0 48.41, 0 39.71, 0 19.04 M0 57.11 C0 46.93, 0 36.75, 0 19.04 M0 19.04 C0 6.35, 6.35 0, 19.04 0 M0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(254.32746680337777 503.88787165952994) rotate(0 19.524999618530273 9.199999999999989)">
+
    <text x="19.524999618530273" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Label</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(144.39080882045937 10) rotate(0 53.390605406266786 38.07362844545273)">
+
    <path d="M19.04 0 C45.97 0, 72.9 0, 87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 C106.78 33.64, 106.78 48.24, 106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 C70.16 76.15, 52.58 76.15, 19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 C0 46.48, 0 35.86, 0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M19.04 0 C42.15 0, 65.26 0, 87.74 0 M19.04 0 C43.53 0, 68.02 0, 87.74 0 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M106.78 19.04 C106.78 32.97, 106.78 46.91, 106.78 57.11 M106.78 19.04 C106.78 30.92, 106.78 42.8, 106.78 57.11 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M87.74 76.15 C71.59 76.15, 55.43 76.15, 19.04 76.15 M87.74 76.15 C70.01 76.15, 52.27 76.15, 19.04 76.15 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M0 57.11 C0 45.95, 0 34.8, 0 19.04 M0 57.11 C0 43.02, 0 28.93, 0 19.04 M0 19.04 C0 6.35, 6.35 0, 19.04 0 M0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(177.38141460819588 38.87362844545271) rotate(0 20.399999618530273 9.199999999999989)">
+
    <text x="20.399999618530273" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Close</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(187.97719679494912 296.7109886655805) rotate(0 53.390605406267014 38.0736284454527)">
+
    <path d="M19.04 0 C36.88 0, 54.72 0, 87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 C106.78 28.84, 106.78 38.63, 106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 C65.36 76.15, 42.98 76.15, 19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 C0 45.16, 0 33.21, 0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M19.04 0 C35.04 0, 51.04 0, 87.74 0 M19.04 0 C41.39 0, 63.73 0, 87.74 0 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M106.78 19.04 C106.78 28.25, 106.78 37.46, 106.78 57.11 M106.78 19.04 C106.78 32.5, 106.78 45.97, 106.78 57.11 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M87.74 76.15 C61.46 76.15, 35.17 76.15, 19.04 76.15 M87.74 76.15 C65.07 76.15, 42.4 76.15, 19.04 76.15 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M0 57.11 C0 43.44, 0 29.77, 0 19.04 M0 57.11 C0 43.92, 0 30.73, 0 19.04 M0 19.04 C0 6.35, 6.35 0, 19.04 0 M0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(206.780300675337 325.5846171110332) rotate(0 34.587501525878906 9.199999999999989)">
+
    <text x="34.587501525878906" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Comment</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(155.08269948085263 145.33589324399912) rotate(0 53.390605406266786 38.0736284454527)">
+
    <path d="M19.04 0 C35.7 0, 52.37 0, 87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 C106.78 28.23, 106.78 37.43, 106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 C63.36 76.15, 38.98 76.15, 19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 C0 45.29, 0 33.46, 0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="none" stroke-width="0" fill="#ee9944"/>
+
    <path d="M19.04 0 C43.52 0, 68 0, 87.74 0 M19.04 0 C44.65 0, 70.26 0, 87.74 0 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M106.78 19.04 C106.78 26.9, 106.78 34.76, 106.78 57.11 M106.78 19.04 C106.78 32.66, 106.78 46.29, 106.78 57.11 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M87.74 76.15 C73.7 76.15, 59.66 76.15, 19.04 76.15 M87.74 76.15 C73.36 76.15, 58.97 76.15, 19.04 76.15 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M0 57.11 C0 48.14, 0 39.16, 0 19.04 M0 57.11 C0 46.42, 0 35.72, 0 19.04 M0 19.04 C0 6.35, 6.35 0, 19.04 0 M0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(173.8858033612405 174.20952168945183) rotate(0 34.587501525878906 9.199999999999989)">
+
    <text x="34.587501525878906" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Comment</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(127.9580125852658 645.0068465511706) rotate(0 53.390605406266786 38.073628445452755)">
+
    <path d="M19.04 0 C41.22 0, 63.4 0, 87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 C106.78 33.33, 106.78 47.63, 106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 C62.03 76.15, 36.31 76.15, 19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 C0 44.23, 0 31.36, 0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M19.04 0 C43.59 0, 68.13 0, 87.74 0 M19.04 0 C33.69 0, 48.34 0, 87.74 0 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M87.74 0 C100.44 0, 106.78 6.35, 106.78 19.04 M106.78 19.04 C106.78 28.99, 106.78 38.94, 106.78 57.11 M106.78 19.04 C106.78 32.46, 106.78 45.89, 106.78 57.11 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M106.78 57.11 C106.78 69.8, 100.44 76.15, 87.74 76.15 M87.74 76.15 C64.06 76.15, 40.37 76.15, 19.04 76.15 M87.74 76.15 C66.5 76.15, 45.25 76.15, 19.04 76.15 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M19.04 76.15 C6.35 76.15, 0 69.8, 0 57.11 M0 57.11 C0 42.24, 0 27.36, 0 19.04 M0 57.11 C0 42.61, 0 28.11, 0 19.04 M0 19.04 C0 6.35, 6.35 0, 19.04 0 M0 19.04 C0 6.35, 6.35 0, 19.04 0" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(161.83611722859314 673.8804749966234) rotate(0 19.512500762939453 9.200000000000045)">
+
    <text x="19.512500762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Open</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(273.5801078482923 557.1236558333646) rotate(0 -43.10167375418246 40.21628481155915)">
+
      <path d="M0 0 C-14.37 13.41, -71.84 67.03, -86.2 80.43 M0 0 C-14.37 13.41, -71.84 67.03, -86.2 80.43" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(273.5801078482923 557.1236558333646) rotate(0 -43.10167375418246 40.21628481155915)">
+
      <path d="M-86.2 80.43 L-80.59 66.52 L-71.94 75.79 L-86.2 80.43" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M-86.2 80.43 C-84.52 76.26, -82.83 72.09, -80.59 66.52 M-86.2 80.43 C-84.96 77.36, -83.72 74.28, -80.59 66.52 M-80.59 66.52 C-77.68 69.64, -74.78 72.75, -71.94 75.79 M-80.59 66.52 C-77.98 69.32, -75.37 72.12, -71.94 75.79 M-71.94 75.79 C-76.82 77.38, -81.71 78.97, -86.2 80.43 M-71.94 75.79 C-75.14 76.83, -78.34 77.87, -86.2 80.43 M-86.2 80.43 C-86.2 80.43, -86.2 80.43, -86.2 80.43 M-86.2 80.43 C-86.2 80.43, -86.2 80.43, -86.2 80.43" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(240.46317562151398 381.8763467092097) rotate(0 17.75419340240819 43.356592404533046)">
+
      <path d="M0 0 C5.92 14.45, 29.59 72.26, 35.51 86.71 M0 0 C5.92 14.45, 29.59 72.26, 35.51 86.71" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(240.46317562151398 381.8763467092097) rotate(0 17.75419340240819 43.356592404533046)">
+
      <path d="M35.51 86.71 L24.49 76.53 L36.22 71.73 L35.51 86.71" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M35.51 86.71 C31.39 82.91, 27.28 79.11, 24.49 76.53 M35.51 86.71 C32.24 83.69, 28.97 80.67, 24.49 76.53 M24.49 76.53 C27.83 75.17, 31.17 73.8, 36.22 71.73 M24.49 76.53 C28.54 74.88, 32.59 73.22, 36.22 71.73 M36.22 71.73 C35.97 76.95, 35.72 82.17, 35.51 86.71 M36.22 71.73 C36.03 75.82, 35.83 79.91, 35.51 86.71 M35.51 86.71 C35.51 86.71, 35.51 86.71, 35.51 86.71 M35.51 86.71 C35.51 86.71, 35.51 86.71, 35.51 86.71" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(65.84128582151789 434.88471388600186) rotate(0 17.074172468658162 31.160364755301202)">
+
      <path d="M0 0 C5.69 10.39, 28.46 51.93, 34.15 62.32 M0 0 C5.69 10.39, 28.46 51.93, 34.15 62.32" stroke="#ee9944" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(65.84128582151789 434.88471388600186) rotate(0 17.074172468658162 31.160364755301202)">
+
      <path d="M34.15 62.32 L22.06 53.44 L33.18 47.35 L34.15 62.32" stroke="none" stroke-width="0" fill="#ee9944" fill-rule="evenodd"/>
+
      <path d="M34.15 62.32 C31.07 60.06, 28 57.81, 22.06 53.44 M34.15 62.32 C31.71 60.53, 29.28 58.75, 22.06 53.44 M22.06 53.44 C26.38 51.07, 30.71 48.7, 33.18 47.35 M22.06 53.44 C26.08 51.24, 30.1 49.04, 33.18 47.35 M33.18 47.35 C33.42 51.1, 33.66 54.84, 34.15 62.32 M33.18 47.35 C33.39 50.69, 33.61 54.02, 34.15 62.32 M34.15 62.32 C34.15 62.32, 34.15 62.32, 34.15 62.32 M34.15 62.32 C34.15 62.32, 34.15 62.32, 34.15 62.32" stroke="#ee9944" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(106.86366612921483 585.6261611465545) rotate(0 32.25021831292861 25.83344027970861)">
+
      <path d="M0 0 C10.75 8.61, 53.75 43.06, 64.5 51.67 M0 0 C10.75 8.61, 53.75 43.06, 64.5 51.67" stroke="#ee9944" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(106.86366612921483 585.6261611465545) rotate(0 32.25021831292861 25.83344027970861)">
+
      <path d="M64.5 51.67 L49.93 48.12 L57.85 38.22 L64.5 51.67" stroke="none" stroke-width="0" fill="#ee9944" fill-rule="evenodd"/>
+
      <path d="M64.5 51.67 C60.68 50.74, 56.86 49.81, 49.93 48.12 M64.5 51.67 C58.74 50.26, 52.97 48.86, 49.93 48.12 M49.93 48.12 C51.62 46, 53.31 43.89, 57.85 38.22 M49.93 48.12 C52 45.53, 54.07 42.95, 57.85 38.22 M57.85 38.22 C59.59 41.74, 61.33 45.26, 64.5 51.67 M57.85 38.22 C60.2 42.98, 62.56 47.73, 64.5 51.67 M64.5 51.67 C64.5 51.67, 64.5 51.67, 64.5 51.67 M64.5 51.67 C64.5 51.67, 64.5 51.67, 64.5 51.67" stroke="#ee9944" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(234.52015786159973 380.4037120064299) rotate(0 -58.1094075399767 57.731142011168856)">
+
      <path d="M0 0 C-19.37 19.24, -96.85 96.22, -116.22 115.46 M0 0 C-19.37 19.24, -96.85 96.22, -116.22 115.46" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(234.52015786159973 380.4037120064299) rotate(0 -58.1094075399767 57.731142011168856)">
+
      <path d="M-116.22 115.46 L-111.04 101.38 L-102.11 110.38 L-116.22 115.46" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M-116.22 115.46 C-114.52 110.85, -112.83 106.25, -111.04 101.38 M-116.22 115.46 C-115.15 112.55, -114.07 109.63, -111.04 101.38 M-111.04 101.38 C-108.93 103.51, -106.82 105.64, -102.11 110.38 M-111.04 101.38 C-108.9 103.54, -106.75 105.71, -102.11 110.38 M-102.11 110.38 C-105.18 111.48, -108.25 112.59, -116.22 115.46 M-102.11 110.38 C-105.46 111.59, -108.82 112.8, -116.22 115.46 M-116.22 115.46 C-116.22 115.46, -116.22 115.46, -116.22 115.46 M-116.22 115.46 C-116.22 115.46, -116.22 115.46, -116.22 115.46" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(217.22875599537156 229.99464426210392) rotate(0 11.715435443094066 30.215509485325867)">
+
      <path d="M0 0 C3.91 10.07, 19.53 50.36, 23.43 60.43 M0 0 C3.91 10.07, 19.53 50.36, 23.43 60.43" stroke="#ee9944" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(217.22875599537156 229.99464426210392) rotate(0 11.715435443094066 30.215509485325867)">
+
      <path d="M23.43 60.43 L12.61 50.05 L24.43 45.46 L23.43 60.43" stroke="none" stroke-width="0" fill="#ee9944" fill-rule="evenodd"/>
+
      <path d="M23.43 60.43 C20.98 58.08, 18.53 55.73, 12.61 50.05 M23.43 60.43 C21.23 58.32, 19.04 56.22, 12.61 50.05 M12.61 50.05 C15.61 48.88, 18.62 47.71, 24.43 45.46 M12.61 50.05 C15.95 48.75, 19.3 47.45, 24.43 45.46 M24.43 45.46 C24.18 49.14, 23.94 52.82, 23.43 60.43 M24.43 45.46 C24.12 50.08, 23.81 54.7, 23.43 60.43 M23.43 60.43 C23.43 60.43, 23.43 60.43, 23.43 60.43 M23.43 60.43 C23.43 60.43, 23.43 60.43, 23.43 60.43" stroke="#ee9944" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(204.14208281764923 230.84835288553683) rotate(0 -68.67932303656698 57.941749169515845)">
+
      <path d="M0 0 C-22.89 19.31, -114.47 96.57, -137.36 115.88 M0 0 C-22.89 19.31, -114.47 96.57, -137.36 115.88" stroke="#ee9944" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(204.14208281764923 230.84835288553683) rotate(0 -68.67932303656698 57.941749169515845)">
+
      <path d="M-137.36 115.88 L-131.06 102.27 L-122.88 111.96 L-137.36 115.88" stroke="none" stroke-width="0" fill="#ee9944" fill-rule="evenodd"/>
+
      <path d="M-137.36 115.88 C-135.64 112.17, -133.92 108.45, -131.06 102.27 M-137.36 115.88 C-135.7 112.29, -134.03 108.7, -131.06 102.27 M-131.06 102.27 C-127.87 106.04, -124.69 109.81, -122.88 111.96 M-131.06 102.27 C-128.34 105.49, -125.62 108.71, -122.88 111.96 M-122.88 111.96 C-127.38 113.18, -131.88 114.4, -137.36 115.88 M-122.88 111.96 C-127.14 113.12, -131.4 114.27, -137.36 115.88 M-137.36 115.88 C-137.36 115.88, -137.36 115.88, -137.36 115.88 M-137.36 115.88 C-137.36 115.88, -137.36 115.88, -137.36 115.88" stroke="#ee9944" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(198.87267287727627 93.40420502108407) rotate(0 1.2780757271502807 22.953228948586883)">
+
      <path d="M0 0 C0.43 7.65, 2.13 38.26, 2.56 45.91 M0 0 C0.43 7.65, 2.13 38.26, 2.56 45.91" stroke="#8888ff" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(198.87267287727627 93.40420502108407) rotate(0 1.2780757271502807 22.953228948586883)">
+
      <path d="M2.56 45.91 L-4.53 32.69 L8.13 31.98 L2.56 45.91" stroke="none" stroke-width="0" fill="#8888ff" fill-rule="evenodd"/>
+
      <path d="M2.56 45.91 C0.24 41.58, -2.08 37.25, -4.53 32.69 M2.56 45.91 C-0.09 40.97, -2.74 36.03, -4.53 32.69 M-4.53 32.69 C0.27 32.42, 5.08 32.15, 8.13 31.98 M-4.53 32.69 C0 32.43, 4.52 32.18, 8.13 31.98 M8.13 31.98 C6.68 35.61, 5.22 39.24, 2.56 45.91 M8.13 31.98 C6.79 35.32, 5.46 38.66, 2.56 45.91 M2.56 45.91 C2.56 45.91, 2.56 45.91, 2.56 45.91 M2.56 45.91 C2.56 45.91, 2.56 45.91, 2.56 45.91" stroke="#8888ff" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
</svg>
added assets/images/federation-vs-p2p.svg
@@ -0,0 +1,202 @@
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 1197.5366182992343 544.0303397564605" width="1197.5366182992343" height="544.0303397564605">
+
  <defs>
+
    <style>
+
      @import url("/assets/css/fonts.css");
+
      svg { font-size: 16px; font-family: "Inter", sans-serif; }
+
    </style>
+
  </defs>
+
  <g stroke-linecap="round" transform="translate(164.46806523511532 249.54652025739685) rotate(0 75.81566086153839 72.99954032373856)">
+
    <path d="M151.63 73 C151.63 75.72, 151.47 78.47, 151.15 81.17 C150.84 83.88, 150.36 86.59, 149.73 89.24 C149.1 91.9, 148.31 94.54, 147.38 97.11 C146.44 99.68, 145.35 102.22, 144.12 104.67 C142.9 107.13, 141.52 109.53, 140.01 111.84 C138.51 114.14, 136.85 116.38, 135.09 118.51 C133.33 120.64, 131.43 122.69, 129.43 124.62 C127.42 126.54, 125.3 128.37, 123.09 130.07 C120.87 131.77, 118.55 133.36, 116.15 134.81 C113.76 136.26, 111.26 137.59, 108.71 138.77 C106.16 139.95, 103.53 141, 100.86 141.9 C98.19 142.8, 95.44 143.56, 92.69 144.17 C89.93 144.78, 87.12 145.24, 84.3 145.54 C81.49 145.85, 78.65 146, 75.82 146 C72.99 146, 70.14 145.85, 67.33 145.54 C64.52 145.24, 61.7 144.78, 58.95 144.17 C56.19 143.56, 53.45 142.8, 50.78 141.9 C48.1 141, 45.47 139.95, 42.92 138.77 C40.37 137.59, 37.88 136.26, 35.48 134.81 C33.08 133.36, 30.76 131.77, 28.55 130.07 C26.33 128.37, 24.21 126.54, 22.21 124.62 C20.21 122.69, 18.3 120.64, 16.54 118.51 C14.78 116.38, 13.13 114.14, 11.62 111.84 C10.12 109.53, 8.74 107.13, 7.51 104.67 C6.28 102.22, 5.19 99.68, 4.25 97.11 C3.32 94.54, 2.53 91.9, 1.9 89.24 C1.27 86.59, 0.79 83.88, 0.48 81.17 C0.16 78.47, 0 75.72, 0 73 C0 70.28, 0.16 67.53, 0.48 64.83 C0.79 62.12, 1.27 59.41, 1.9 56.76 C2.53 54.1, 3.32 51.46, 4.25 48.89 C5.19 46.32, 6.28 43.78, 7.51 41.33 C8.74 38.87, 10.12 36.47, 11.62 34.16 C13.13 31.85, 14.78 29.62, 16.54 27.49 C18.3 25.36, 20.21 23.31, 22.21 21.38 C24.21 19.45, 26.33 17.62, 28.55 15.93 C30.76 14.23, 33.08 12.64, 35.48 11.19 C37.88 9.74, 40.37 8.41, 42.92 7.23 C45.47 6.05, 48.1 5, 50.78 4.1 C53.45 3.2, 56.19 2.44, 58.95 1.83 C61.7 1.22, 64.52 0.76, 67.33 0.46 C70.14 0.15, 72.99 0, 75.82 0 C78.65 0, 81.49 0.15, 84.3 0.46 C87.12 0.76, 89.93 1.22, 92.69 1.83 C95.44 2.44, 98.19 3.2, 100.86 4.1 C103.53 5, 106.16 6.05, 108.71 7.23 C111.26 8.41, 113.76 9.74, 116.15 11.19 C118.55 12.64, 120.87 14.23, 123.09 15.93 C125.3 17.62, 127.42 19.45, 129.43 21.38 C131.43 23.31, 133.33 25.36, 135.09 27.49 C136.85 29.62, 138.51 31.85, 140.01 34.16 C141.52 36.47, 142.9 38.87, 144.12 41.33 C145.35 43.78, 146.44 46.32, 147.38 48.89 C148.31 51.46, 149.1 54.1, 149.73 56.76 C150.36 59.41, 150.84 62.12, 151.15 64.83 C151.47 67.53, 151.55 71.64, 151.63 73 C151.71 74.36, 151.71 71.64, 151.63 73" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M151.63 73 C151.63 75.72, 151.47 78.47, 151.15 81.17 C150.84 83.88, 150.36 86.59, 149.73 89.24 C149.1 91.9, 148.31 94.54, 147.38 97.11 C146.44 99.68, 145.35 102.22, 144.12 104.67 C142.9 107.13, 141.52 109.53, 140.01 111.84 C138.51 114.14, 136.85 116.38, 135.09 118.51 C133.33 120.64, 131.43 122.69, 129.43 124.62 C127.42 126.54, 125.3 128.37, 123.09 130.07 C120.87 131.77, 118.55 133.36, 116.15 134.81 C113.76 136.26, 111.26 137.59, 108.71 138.77 C106.16 139.95, 103.53 141, 100.86 141.9 C98.19 142.8, 95.44 143.56, 92.69 144.17 C89.93 144.78, 87.12 145.24, 84.3 145.54 C81.49 145.85, 78.65 146, 75.82 146 C72.99 146, 70.14 145.85, 67.33 145.54 C64.52 145.24, 61.7 144.78, 58.95 144.17 C56.19 143.56, 53.45 142.8, 50.78 141.9 C48.1 141, 45.47 139.95, 42.92 138.77 C40.37 137.59, 37.88 136.26, 35.48 134.81 C33.08 133.36, 30.76 131.77, 28.55 130.07 C26.33 128.37, 24.21 126.54, 22.21 124.62 C20.21 122.69, 18.3 120.64, 16.54 118.51 C14.78 116.38, 13.13 114.14, 11.62 111.84 C10.12 109.53, 8.74 107.13, 7.51 104.67 C6.28 102.22, 5.19 99.68, 4.25 97.11 C3.32 94.54, 2.53 91.9, 1.9 89.24 C1.27 86.59, 0.79 83.88, 0.48 81.17 C0.16 78.47, 0 75.72, 0 73 C0 70.28, 0.16 67.53, 0.48 64.83 C0.79 62.12, 1.27 59.41, 1.9 56.76 C2.53 54.1, 3.32 51.46, 4.25 48.89 C5.19 46.32, 6.28 43.78, 7.51 41.33 C8.74 38.87, 10.12 36.47, 11.62 34.16 C13.13 31.85, 14.78 29.62, 16.54 27.49 C18.3 25.36, 20.21 23.31, 22.21 21.38 C24.21 19.45, 26.33 17.62, 28.55 15.93 C30.76 14.23, 33.08 12.64, 35.48 11.19 C37.88 9.74, 40.37 8.41, 42.92 7.23 C45.47 6.05, 48.1 5, 50.78 4.1 C53.45 3.2, 56.19 2.44, 58.95 1.83 C61.7 1.22, 64.52 0.76, 67.33 0.46 C70.14 0.15, 72.99 0, 75.82 0 C78.65 0, 81.49 0.15, 84.3 0.46 C87.12 0.76, 89.93 1.22, 92.69 1.83 C95.44 2.44, 98.19 3.2, 100.86 4.1 C103.53 5, 106.16 6.05, 108.71 7.23 C111.26 8.41, 113.76 9.74, 116.15 11.19 C118.55 12.64, 120.87 14.23, 123.09 15.93 C125.3 17.62, 127.42 19.45, 129.43 21.38 C131.43 23.31, 133.33 25.36, 135.09 27.49 C136.85 29.62, 138.51 31.85, 140.01 34.16 C141.52 36.47, 142.9 38.87, 144.12 41.33 C145.35 43.78, 146.44 46.32, 147.38 48.89 C148.31 51.46, 149.1 54.1, 149.73 56.76 C150.36 59.41, 150.84 62.12, 151.15 64.83 C151.47 67.53, 151.55 71.64, 151.63 73 C151.71 74.36, 151.71 71.64, 151.63 73" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(210.02395856279009 313.22759059471906) rotate(0 30.149999618530273 9.2)">
+
    <text x="30.149999618530273" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Instance</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(49.77884501009112 389.488550646855) rotate(0 43.181572564415546 41.87304006246351)">
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="none" stroke-width="0" fill="#ee9944"/>
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(76.07643441043956 422.0528801322546) rotate(0 16.850000381469727 9.200000000000003)">
+
    <text x="16.850000381469727" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">User</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(195.446750133568 450.28425963153353) rotate(0 43.181572564415546 41.8730400624635)">
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="none" stroke-width="0" fill="#ee9944"/>
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(221.74433953391645 482.8485891169331) rotate(0 16.850000381469727 9.200000000000003)">
+
    <text x="16.850000381469727" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">User</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(377.07124620331297 314.8532617533285) rotate(0 43.181572564415546 41.87304006246351)">
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="none" stroke-width="0" fill="#ee9944"/>
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(403.3688356036614 347.4175912387281) rotate(0 16.850000381469727 9.2)">
+
    <text x="16.850000381469727" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">User</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(10 261.6301842620378) rotate(0 43.181572564415546 41.87304006246351)">
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="none" stroke-width="0" fill="#ee9944"/>
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(36.29758940034844 294.1945137474373) rotate(0 16.850000381469727 9.2)">
+
    <text x="16.850000381469727" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">User</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(98.71875979873312 307.5340681163887) rotate(0 32.680205096570035 3.49830712379638)">
+
      <path d="M0 0 C23.24 2.49, 46.48 4.98, 65.36 7" stroke="#f08c00" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(131.6741397291289 405.35073334978426) rotate(0 23.147124966747697 -15.918425252681539)">
+
      <path d="M0 0 C15.37 -10.57, 30.75 -21.15, 46.29 -31.84" stroke="#f08c00" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(244.01367285545393 446.9936182992437) rotate(0 -1.0993849600399699 -23.447938666200784)">
+
      <path d="M0 0 C-0.5 -10.6, -0.99 -21.19, -2.2 -46.9" stroke="#f08c00" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(373.6002476885583 345.95508052730673) rotate(0 -26.775894501999574 -6.031232097674884)">
+
      <path d="M0 0 C-19.6 -4.41, -39.2 -8.83, -53.55 -12.06" stroke="#f08c00" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round" transform="translate(17.148012893789655 84.62230053287573) rotate(0 65.8768637944188 63.42991303267446)">
+
    <path d="M131.75 63.43 C131.75 65.98, 131.59 68.55, 131.27 71.08 C130.95 73.61, 130.47 76.14, 129.84 78.61 C129.21 81.08, 128.41 83.54, 127.47 85.92 C126.53 88.31, 125.44 90.65, 124.21 92.91 C122.98 95.16, 121.6 97.36, 120.09 99.46 C118.59 101.56, 116.94 103.58, 115.19 105.49 C113.43 107.4, 111.54 109.22, 109.56 110.91 C107.58 112.6, 105.48 114.18, 103.3 115.63 C101.12 117.08, 98.84 118.41, 96.49 119.59 C94.15 120.78, 91.71 121.83, 89.24 122.74 C86.76 123.64, 84.21 124.41, 81.64 125.02 C79.07 125.63, 76.45 126.09, 73.82 126.4 C71.19 126.7, 68.52 126.86, 65.88 126.86 C63.23 126.86, 60.56 126.7, 57.94 126.4 C55.31 126.09, 52.68 125.63, 50.11 125.02 C47.54 124.41, 44.99 123.64, 42.52 122.74 C40.04 121.83, 37.61 120.78, 35.26 119.59 C32.92 118.41, 30.63 117.08, 28.45 115.63 C26.28 114.18, 24.17 112.6, 22.19 110.91 C20.21 109.22, 18.32 107.4, 16.57 105.49 C14.81 103.58, 13.16 101.56, 11.66 99.46 C10.16 97.36, 8.78 95.16, 7.55 92.91 C6.32 90.65, 5.22 88.31, 4.28 85.92 C3.34 83.54, 2.55 81.08, 1.91 78.61 C1.28 76.14, 0.8 73.61, 0.48 71.08 C0.16 68.55, 0 65.98, 0 63.43 C0 60.88, 0.16 58.31, 0.48 55.78 C0.8 53.25, 1.28 50.72, 1.91 48.25 C2.55 45.78, 3.34 43.32, 4.28 40.94 C5.22 38.55, 6.32 36.21, 7.55 33.95 C8.78 31.7, 10.16 29.5, 11.66 27.4 C13.16 25.3, 14.81 23.28, 16.57 21.37 C18.32 19.46, 20.21 17.64, 22.19 15.95 C24.17 14.26, 26.28 12.68, 28.45 11.23 C30.63 9.78, 32.92 8.45, 35.26 7.27 C37.61 6.08, 40.04 5.03, 42.52 4.12 C44.99 3.22, 47.54 2.45, 50.11 1.84 C52.68 1.23, 55.31 0.77, 57.94 0.46 C60.56 0.16, 63.23 0, 65.88 0 C68.52 0, 71.19 0.16, 73.82 0.46 C76.45 0.77, 79.07 1.23, 81.64 1.84 C84.21 2.45, 86.76 3.22, 89.24 4.12 C91.71 5.03, 94.15 6.08, 96.49 7.27 C98.84 8.45, 101.12 9.78, 103.3 11.23 C105.48 12.68, 107.58 14.26, 109.56 15.95 C111.54 17.64, 113.43 19.46, 115.19 21.37 C116.94 23.28, 118.59 25.3, 120.09 27.4 C121.6 29.5, 122.98 31.7, 124.21 33.95 C125.44 36.21, 126.53 38.55, 127.47 40.94 C128.41 43.32, 129.21 45.78, 129.84 48.25 C130.47 50.72, 130.95 53.25, 131.27 55.78 C131.59 58.31, 131.75 60.88, 131.75 63.43" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M131.75 63.43 C131.75 65.98, 131.59 68.55, 131.27 71.08 C130.95 73.61, 130.47 76.14, 129.84 78.61 C129.21 81.08, 128.41 83.54, 127.47 85.92 C126.53 88.31, 125.44 90.65, 124.21 92.91 C122.98 95.16, 121.6 97.36, 120.09 99.46 C118.59 101.56, 116.94 103.58, 115.19 105.49 C113.43 107.4, 111.54 109.22, 109.56 110.91 C107.58 112.6, 105.48 114.18, 103.3 115.63 C101.12 117.08, 98.84 118.41, 96.49 119.59 C94.15 120.78, 91.71 121.83, 89.24 122.74 C86.76 123.64, 84.21 124.41, 81.64 125.02 C79.07 125.63, 76.45 126.09, 73.82 126.4 C71.19 126.7, 68.52 126.86, 65.88 126.86 C63.23 126.86, 60.56 126.7, 57.94 126.4 C55.31 126.09, 52.68 125.63, 50.11 125.02 C47.54 124.41, 44.99 123.64, 42.52 122.74 C40.04 121.83, 37.61 120.78, 35.26 119.59 C32.92 118.41, 30.63 117.08, 28.45 115.63 C26.28 114.18, 24.17 112.6, 22.19 110.91 C20.21 109.22, 18.32 107.4, 16.57 105.49 C14.81 103.58, 13.16 101.56, 11.66 99.46 C10.16 97.36, 8.78 95.16, 7.55 92.91 C6.32 90.65, 5.22 88.31, 4.28 85.92 C3.34 83.54, 2.55 81.08, 1.91 78.61 C1.28 76.14, 0.8 73.61, 0.48 71.08 C0.16 68.55, 0 65.98, 0 63.43 C0 60.88, 0.16 58.31, 0.48 55.78 C0.8 53.25, 1.28 50.72, 1.91 48.25 C2.55 45.78, 3.34 43.32, 4.28 40.94 C5.22 38.55, 6.32 36.21, 7.55 33.95 C8.78 31.7, 10.16 29.5, 11.66 27.4 C13.16 25.3, 14.81 23.28, 16.57 21.37 C18.32 19.46, 20.21 17.64, 22.19 15.95 C24.17 14.26, 26.28 12.68, 28.45 11.23 C30.63 9.78, 32.92 8.45, 35.26 7.27 C37.61 6.08, 40.04 5.03, 42.52 4.12 C44.99 3.22, 47.54 2.45, 50.11 1.84 C52.68 1.23, 55.31 0.77, 57.94 0.46 C60.56 0.16, 63.23 0, 65.88 0 C68.52 0, 71.19 0.16, 73.82 0.46 C76.45 0.77, 79.07 1.23, 81.64 1.84 C84.21 2.45, 86.76 3.22, 89.24 4.12 C91.71 5.03, 94.15 6.08, 96.49 7.27 C98.84 8.45, 101.12 9.78, 103.3 11.23 C105.48 12.68, 107.58 14.26, 109.56 15.95 C111.54 17.64, 113.43 19.46, 115.19 21.37 C116.94 23.28, 118.59 25.3, 120.09 27.4 C121.6 29.5, 122.98 31.7, 124.21 33.95 C125.44 36.21, 126.53 38.55, 127.47 40.94 C128.41 43.32, 129.21 45.78, 129.84 48.25 C130.47 50.72, 130.95 53.25, 131.27 55.78 C131.59 58.31, 131.75 60.88, 131.75 63.43" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(52.79289995734189 139.0004919300731) rotate(0 30.149999618530273 9.200000000000003)">
+
    <text x="30.149999618530273" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Instance</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(130.33296245699557 199.76165836821326) rotate(0 27.431722095257555 31.804895182907295)">
+
      <path d="M0 0 C20.35 23.59, 40.69 47.18, 54.86 63.61" stroke="#cc6666" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round" transform="translate(299.8074014826675 91.91694725835794) rotate(0 65.87686379441902 63.42991303267446)">
+
    <path d="M131.75 63.43 C131.75 65.98, 131.59 68.55, 131.27 71.08 C130.95 73.61, 130.47 76.14, 129.84 78.61 C129.21 81.08, 128.41 83.54, 127.47 85.92 C126.53 88.31, 125.44 90.65, 124.21 92.91 C122.98 95.16, 121.6 97.36, 120.09 99.46 C118.59 101.56, 116.94 103.58, 115.19 105.49 C113.43 107.4, 111.54 109.22, 109.56 110.91 C107.58 112.6, 105.48 114.18, 103.3 115.63 C101.12 117.08, 98.84 118.41, 96.49 119.59 C94.15 120.78, 91.71 121.83, 89.24 122.74 C86.76 123.64, 84.21 124.41, 81.64 125.02 C79.07 125.63, 76.45 126.09, 73.82 126.4 C71.19 126.7, 68.52 126.86, 65.88 126.86 C63.23 126.86, 60.56 126.7, 57.94 126.4 C55.31 126.09, 52.68 125.63, 50.11 125.02 C47.54 124.41, 44.99 123.64, 42.52 122.74 C40.04 121.83, 37.61 120.78, 35.26 119.59 C32.92 118.41, 30.63 117.08, 28.45 115.63 C26.28 114.18, 24.17 112.6, 22.19 110.91 C20.21 109.22, 18.32 107.4, 16.57 105.49 C14.81 103.58, 13.16 101.56, 11.66 99.46 C10.16 97.36, 8.78 95.16, 7.55 92.91 C6.32 90.65, 5.22 88.31, 4.28 85.92 C3.34 83.54, 2.55 81.08, 1.91 78.61 C1.28 76.14, 0.8 73.61, 0.48 71.08 C0.16 68.55, 0 65.98, 0 63.43 C0 60.88, 0.16 58.31, 0.48 55.78 C0.8 53.25, 1.28 50.72, 1.91 48.25 C2.55 45.78, 3.34 43.32, 4.28 40.94 C5.22 38.55, 6.32 36.21, 7.55 33.95 C8.78 31.7, 10.16 29.5, 11.66 27.4 C13.16 25.3, 14.81 23.28, 16.57 21.37 C18.32 19.46, 20.21 17.64, 22.19 15.95 C24.17 14.26, 26.28 12.68, 28.45 11.23 C30.63 9.78, 32.92 8.45, 35.26 7.27 C37.61 6.08, 40.04 5.03, 42.52 4.12 C44.99 3.22, 47.54 2.45, 50.11 1.84 C52.68 1.23, 55.31 0.77, 57.94 0.46 C60.56 0.16, 63.23 0, 65.88 0 C68.52 0, 71.19 0.16, 73.82 0.46 C76.45 0.77, 79.07 1.23, 81.64 1.84 C84.21 2.45, 86.76 3.22, 89.24 4.12 C91.71 5.03, 94.15 6.08, 96.49 7.27 C98.84 8.45, 101.12 9.78, 103.3 11.23 C105.48 12.68, 107.58 14.26, 109.56 15.95 C111.54 17.64, 113.43 19.46, 115.19 21.37 C116.94 23.28, 118.59 25.3, 120.09 27.4 C121.6 29.5, 122.98 31.7, 124.21 33.95 C125.44 36.21, 126.53 38.55, 127.47 40.94 C128.41 43.32, 129.21 45.78, 129.84 48.25 C130.47 50.72, 130.95 53.25, 131.27 55.78 C131.59 58.31, 131.75 60.88, 131.75 63.43" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M131.75 63.43 C131.75 65.98, 131.59 68.55, 131.27 71.08 C130.95 73.61, 130.47 76.14, 129.84 78.61 C129.21 81.08, 128.41 83.54, 127.47 85.92 C126.53 88.31, 125.44 90.65, 124.21 92.91 C122.98 95.16, 121.6 97.36, 120.09 99.46 C118.59 101.56, 116.94 103.58, 115.19 105.49 C113.43 107.4, 111.54 109.22, 109.56 110.91 C107.58 112.6, 105.48 114.18, 103.3 115.63 C101.12 117.08, 98.84 118.41, 96.49 119.59 C94.15 120.78, 91.71 121.83, 89.24 122.74 C86.76 123.64, 84.21 124.41, 81.64 125.02 C79.07 125.63, 76.45 126.09, 73.82 126.4 C71.19 126.7, 68.52 126.86, 65.88 126.86 C63.23 126.86, 60.56 126.7, 57.94 126.4 C55.31 126.09, 52.68 125.63, 50.11 125.02 C47.54 124.41, 44.99 123.64, 42.52 122.74 C40.04 121.83, 37.61 120.78, 35.26 119.59 C32.92 118.41, 30.63 117.08, 28.45 115.63 C26.28 114.18, 24.17 112.6, 22.19 110.91 C20.21 109.22, 18.32 107.4, 16.57 105.49 C14.81 103.58, 13.16 101.56, 11.66 99.46 C10.16 97.36, 8.78 95.16, 7.55 92.91 C6.32 90.65, 5.22 88.31, 4.28 85.92 C3.34 83.54, 2.55 81.08, 1.91 78.61 C1.28 76.14, 0.8 73.61, 0.48 71.08 C0.16 68.55, 0 65.98, 0 63.43 C0 60.88, 0.16 58.31, 0.48 55.78 C0.8 53.25, 1.28 50.72, 1.91 48.25 C2.55 45.78, 3.34 43.32, 4.28 40.94 C5.22 38.55, 6.32 36.21, 7.55 33.95 C8.78 31.7, 10.16 29.5, 11.66 27.4 C13.16 25.3, 14.81 23.28, 16.57 21.37 C18.32 19.46, 20.21 17.64, 22.19 15.95 C24.17 14.26, 26.28 12.68, 28.45 11.23 C30.63 9.78, 32.92 8.45, 35.26 7.27 C37.61 6.08, 40.04 5.03, 42.52 4.12 C44.99 3.22, 47.54 2.45, 50.11 1.84 C52.68 1.23, 55.31 0.77, 57.94 0.46 C60.56 0.16, 63.23 0, 65.88 0 C68.52 0, 71.19 0.16, 73.82 0.46 C76.45 0.77, 79.07 1.23, 81.64 1.84 C84.21 2.45, 86.76 3.22, 89.24 4.12 C91.71 5.03, 94.15 6.08, 96.49 7.27 C98.84 8.45, 101.12 9.78, 103.3 11.23 C105.48 12.68, 107.58 14.26, 109.56 15.95 C111.54 17.64, 113.43 19.46, 115.19 21.37 C116.94 23.28, 118.59 25.3, 120.09 27.4 C121.6 29.5, 122.98 31.7, 124.21 33.95 C125.44 36.21, 126.53 38.55, 127.47 40.94 C128.41 43.32, 129.21 45.78, 129.84 48.25 C130.47 50.72, 130.95 53.25, 131.27 55.78 C131.59 58.31, 131.75 60.88, 131.75 63.43" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(335.45228854621973 146.29513865555532) rotate(0 30.149999618530273 9.200000000000003)">
+
    <text x="30.149999618530273" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Instance</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(155.81052696967527 149.04208107520648) rotate(0 68.34468724936437 2.670520078610892)">
+
      <path d="M0 0 C50.56 1.98, 101.12 3.95, 136.69 5.34" stroke="#cc6666" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(297.0871079015392 258.7902818143921) rotate(0 13.292947909892064 -20.149300419218164)">
+
      <path d="M0 0 C8.73 -13.23, 17.46 -26.47, 26.59 -40.3" stroke="#cc6666" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round" transform="translate(180.17911871151955 10) rotate(0 43.18157256441532 41.8730400624635)">
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="none" stroke-width="0" fill="#ee9944"/>
+
    <path d="M86.36 41.87 C86.36 43.86, 86.22 45.87, 85.92 47.83 C85.63 49.8, 85.19 51.76, 84.61 53.67 C84.04 55.58, 83.31 57.46, 82.46 59.27 C81.61 61.07, 80.62 62.84, 79.51 64.51 C78.4 66.18, 77.16 67.79, 75.82 69.29 C74.47 70.8, 73.01 72.22, 71.46 73.52 C69.91 74.82, 68.25 76.02, 66.53 77.1 C64.8 78.17, 62.98 79.14, 61.12 79.96 C59.26 80.79, 57.31 81.49, 55.35 82.05 C53.38 82.61, 51.35 83.04, 49.33 83.32 C47.3 83.6, 45.23 83.75, 43.18 83.75 C41.13 83.75, 39.06 83.6, 37.04 83.32 C35.01 83.04, 32.98 82.61, 31.02 82.05 C29.05 81.49, 27.11 80.79, 25.24 79.96 C23.38 79.14, 21.56 78.17, 19.84 77.1 C18.11 76.02, 16.45 74.82, 14.9 73.52 C13.36 72.22, 11.89 70.8, 10.55 69.29 C9.21 67.79, 7.96 66.18, 6.85 64.51 C5.75 62.84, 4.75 61.07, 3.9 59.27 C3.05 57.46, 2.33 55.58, 1.75 53.67 C1.17 51.76, 0.73 49.8, 0.44 47.83 C0.15 45.87, 0 43.86, 0 41.87 C0 39.89, 0.15 37.88, 0.44 35.91 C0.73 33.95, 1.17 31.98, 1.75 30.08 C2.33 28.17, 3.05 26.29, 3.9 24.48 C4.75 22.67, 5.75 20.91, 6.85 19.23 C7.96 17.56, 9.21 15.95, 10.55 14.45 C11.89 12.95, 13.36 11.53, 14.9 10.23 C16.45 8.93, 18.11 7.72, 19.84 6.65 C21.56 5.57, 23.38 4.61, 25.24 3.78 C27.11 2.96, 29.05 2.26, 31.02 1.7 C32.98 1.14, 35.01 0.71, 37.04 0.43 C39.06 0.14, 41.13 0, 43.18 0 C45.23 0, 47.3 0.14, 49.33 0.43 C51.35 0.71, 53.38 1.14, 55.35 1.7 C57.31 2.26, 59.26 2.96, 61.12 3.78 C62.98 4.61, 64.8 5.57, 66.53 6.65 C68.25 7.72, 69.91 8.93, 71.46 10.23 C73.01 11.53, 74.47 12.95, 75.82 14.45 C77.16 15.95, 78.4 17.56, 79.51 19.23 C80.62 20.91, 81.61 22.67, 82.46 24.48 C83.31 26.29, 84.04 28.17, 84.61 30.08 C85.19 31.98, 85.63 33.95, 85.92 35.91 C86.22 37.88, 86.29 40.88, 86.36 41.87 C86.44 42.87, 86.44 40.88, 86.36 41.87" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(206.476708111868 42.56432948539958) rotate(0 16.8500003814695 9.199999999999989)">
+
    <text x="16.850000381469727" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">User</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(258.66057538988525 80.95176488887137) rotate(0 22.175136810002186 17.055950936410696)">
+
      <path d="M0 0 C9.24 7.11, 18.48 14.21, 44.35 34.11" stroke="#f08c00" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round" transform="translate(621.0930725376234 107.4005764770692) rotate(0 55.56231838939857 53.87861177153815)">
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(657.7918980524923 151.9812565040354) rotate(0 19.075000762939453 9.200000000000003)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(846.0050550609062 51.8730404270479) rotate(0 55.56231838939857 53.87861177153815)">
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(882.7038805757752 96.4537204540141) rotate(0 19.075000762939453 9.200000000000003)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(833.7138547484324 200.1226669501092) rotate(0 55.56231838939857 53.878611771538154)">
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(870.4126802633014 244.7033469770754) rotate(0 19.075000762939453 9.199999999999996)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(1073.3714459553107 400.33351177821623) rotate(0 55.56231838939857 53.87861177153815)">
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(1110.0702714701797 444.91419180518244) rotate(0 19.075000762939453 9.200000000000003)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(1076.4119815204372 121.34509575371601) rotate(0 55.56231838939857 53.87861177153815)">
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(1113.1108070353062 165.92577578068222) rotate(0 19.075000762939453 9.200000000000003)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(734.7248496847219 359.3982089323207) rotate(0 55.56231838939857 53.878611771538154)">
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M111.12 53.88 C111.12 56.22, 110.96 58.59, 110.65 60.91 C110.33 63.24, 109.86 65.56, 109.23 67.82 C108.61 70.09, 107.82 72.33, 106.9 74.5 C105.97 76.66, 104.89 78.79, 103.68 80.82 C102.47 82.85, 101.11 84.82, 99.64 86.68 C98.17 88.54, 96.56 90.32, 94.85 91.98 C93.14 93.63, 91.3 95.2, 89.39 96.62 C87.47 98.05, 85.44 99.37, 83.34 100.54 C81.25 101.71, 79.06 102.76, 76.83 103.66 C74.59 104.55, 72.28 105.31, 69.94 105.92 C67.61 106.53, 65.21 106.99, 62.81 107.3 C60.42 107.6, 57.98 107.76, 55.56 107.76 C53.14 107.76, 50.71 107.6, 48.31 107.3 C45.91 106.99, 43.52 106.53, 41.18 105.92 C38.85 105.31, 36.53 104.55, 34.3 103.66 C32.07 102.76, 29.87 101.71, 27.78 100.54 C25.69 99.37, 23.66 98.05, 21.74 96.62 C19.82 95.2, 17.98 93.63, 16.27 91.98 C14.56 90.32, 12.95 88.54, 11.48 86.68 C10.01 84.82, 8.65 82.85, 7.44 80.82 C6.24 78.79, 5.15 76.66, 4.23 74.5 C3.3 72.33, 2.52 70.09, 1.89 67.82 C1.27 65.56, 0.79 63.24, 0.48 60.91 C0.16 58.59, 0 56.22, 0 53.88 C0 51.53, 0.16 49.17, 0.48 46.85 C0.79 44.52, 1.27 42.2, 1.89 39.93 C2.52 37.67, 3.3 35.43, 4.23 33.26 C5.15 31.09, 6.24 28.97, 7.44 26.94 C8.65 24.91, 10.01 22.94, 11.48 21.08 C12.95 19.22, 14.56 17.44, 16.27 15.78 C17.98 14.12, 19.82 12.56, 21.74 11.13 C23.66 9.71, 25.69 8.39, 27.78 7.22 C29.87 6.05, 32.07 5, 34.3 4.1 C36.53 3.2, 38.85 2.44, 41.18 1.84 C43.52 1.23, 45.91 0.77, 48.31 0.46 C50.71 0.15, 53.14 0, 55.56 0 C57.98 0, 60.42 0.15, 62.81 0.46 C65.21 0.77, 67.61 1.23, 69.94 1.84 C72.28 2.44, 74.59 3.2, 76.83 4.1 C79.06 5, 81.25 6.05, 83.34 7.22 C85.44 8.39, 87.47 9.71, 89.39 11.13 C91.3 12.56, 93.14 14.12, 94.85 15.78 C96.56 17.44, 98.17 19.22, 99.64 21.08 C101.11 22.94, 102.47 24.91, 103.68 26.94 C104.89 28.97, 105.97 31.09, 106.9 33.26 C107.82 35.43, 108.61 37.67, 109.23 39.93 C109.86 42.2, 110.33 44.52, 110.65 46.85 C110.96 49.17, 111.05 52.71, 111.12 53.88 C111.2 55.05, 111.2 52.71, 111.12 53.88" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(771.4236751995909 403.9788889592869) rotate(0 19.075000762939453 9.2)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(892.5351695310005 188.01609981997137) rotate(0 1.2988473808027265 -8.420976433920842)">
+
      <path d="M0 0 C0.43 -2.81, 2.16 -14.03, 2.6 -16.84" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(695.2878488944912 230.72428333596778) rotate(0 28.417713324169654 64.68732563403155)">
+
      <path d="M0 0 C9.47 21.56, 47.36 107.81, 56.84 129.37" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(855.149639501165 427.6710511565692) rotate(0 99.733390846357 13.769149265977639)">
+
      <path d="M0 0 C33.24 4.59, 166.22 22.95, 199.47 27.54" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(933.6033948008958 312.30752722058173) rotate(0 72.19649747504172 47.26234016047354)">
+
      <path d="M0 0 C24.07 15.75, 120.33 78.77, 144.39 94.52" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(856.605242456943 315.2671431623975) rotate(0 -13.762062805582445 20.471127363937477)">
+
      <path d="M0 0 C-4.59 6.82, -22.94 34.12, -27.52 40.94" stroke="#1971c2" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(1126.8094110115167 388.03578429933236) rotate(0 7.020792789252937 -75.32851299562428)">
+
      <path d="M0 0 C2.34 -25.11, 11.7 -125.55, 14.04 -150.66" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(962.05105644278 248.5860443288454) rotate(0 58.51052511049147 -13.536829356526198)">
+
      <path d="M0 0 C19.5 -4.51, 97.52 -22.56, 117.02 -27.07" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(742.4653003088874 144.5503163618182) rotate(0 46.504943433785684 -17.141046457743172)">
+
      <path d="M0 0 C15.5 -5.71, 77.51 -28.57, 93.01 -34.28" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
</svg>
added assets/images/multiplexing.svg
@@ -0,0 +1,65 @@
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 696.3195887720376 165.30538113095736" width="696.3195887720376" height="165.30538113095736">
+
  <style>
+
        @import url("/assets/css/fonts.css");
+
        svg { font-size: 16px; font-family: "Inter", sans-serif; }
+
      </style>
+
  <g stroke-linecap="round">
+
    <g transform="translate(155.66145624068986 90.03122412431958) rotate(0 193.40543491768312 0)">
+
      <path d="M0 0 C64.47 0, 322.34 0, 386.81 0 M0 0 C64.47 0, 322.34 0, 386.81 0" stroke="#8888ff" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(155.66145624068986 90.03122412431958) rotate(0 193.40543491768312 0)">
+
      <path d="M0 0 L13.59 -6.34 L13.59 6.34 L0 0" stroke="none" stroke-width="0" fill="#8888ff" fill-rule="evenodd"/>
+
      <path d="M0 0 C3.15 -1.47, 6.31 -2.94, 13.59 -6.34 M0 0 C4.24 -1.98, 8.48 -3.95, 13.59 -6.34 M13.59 -6.34 C13.59 -3.27, 13.59 -0.2, 13.59 6.34 M13.59 -6.34 C13.59 -3.14, 13.59 0.06, 13.59 6.34 M13.59 6.34 C9.77 4.55, 5.94 2.77, 0 0 M13.59 6.34 C8.78 4.09, 3.96 1.85, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#8888ff" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(155.66145624068986 90.03122412431958) rotate(0 193.40543491768312 0)">
+
      <path d="M386.81 0 L373.22 6.34 L373.22 -6.34 L386.81 0" stroke="none" stroke-width="0" fill="#8888ff" fill-rule="evenodd"/>
+
      <path d="M386.81 0 C383.66 1.47, 380.5 2.94, 373.22 6.34 M386.81 0 C382.57 1.98, 378.33 3.95, 373.22 6.34 M373.22 6.34 C373.22 3.27, 373.22 0.2, 373.22 -6.34 M373.22 6.34 C373.22 3.14, 373.22 -0.06, 373.22 -6.34 M373.22 -6.34 C377.04 -4.55, 380.87 -2.77, 386.81 0 M373.22 -6.34 C378.03 -4.09, 382.85 -1.85, 386.81 0 M386.81 0 C386.81 0, 386.81 0, 386.81 0 M386.81 0 C386.81 0, 386.81 0, 386.81 0" stroke="#8888ff" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(153.4878122341961 121.28644146173292) rotate(0 194.9138844102522 -33.67037978310765)">
+
      <path d="M0 0 C21.37 -0.66, 80.71 5.77, 128.19 -3.96 C175.67 -13.68, 241.28 -47.79, 284.88 -58.35 C328.49 -68.91, 372.34 -65.84, 389.83 -67.34 M0 0 C21.37 -0.66, 80.71 5.77, 128.19 -3.96 C175.67 -13.68, 241.28 -47.79, 284.88 -58.35 C328.49 -68.91, 372.34 -65.84, 389.83 -67.34" stroke="#88cc88" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(153.4878122341961 121.28644146173292) rotate(0 194.9138844102522 -33.67037978310765)">
+
      <path d="M0 0 L13.67 -6.17 L13.51 6.51 L0 0" stroke="none" stroke-width="0" fill="#88cc88" fill-rule="evenodd"/>
+
      <path d="M0 0 C3.94 -1.78, 7.89 -3.56, 13.67 -6.17 M0 0 C4.98 -2.25, 9.96 -4.49, 13.67 -6.17 M13.67 -6.17 C13.63 -2.51, 13.58 1.15, 13.51 6.51 M13.67 -6.17 C13.63 -2.77, 13.59 0.63, 13.51 6.51 M13.51 6.51 C9.19 4.43, 4.87 2.35, 0 0 M13.51 6.51 C9.85 4.75, 6.2 2.99, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#88cc88" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(153.4878122341961 121.28644146173292) rotate(0 194.9138844102522 -33.67037978310765)">
+
      <path d="M389.83 -67.34 L376.41 -60.63 L376.06 -73.31 L389.83 -67.34" stroke="none" stroke-width="0" fill="#88cc88" fill-rule="evenodd"/>
+
      <path d="M389.83 -67.34 C385.96 -65.41, 382.09 -63.47, 376.41 -60.63 M389.83 -67.34 C384.94 -64.9, 380.05 -62.45, 376.41 -60.63 M376.41 -60.63 C376.31 -64.29, 376.21 -67.95, 376.06 -73.31 M376.41 -60.63 C376.32 -64.03, 376.23 -67.43, 376.06 -73.31 M376.06 -73.31 C380.46 -71.4, 384.86 -69.49, 389.83 -67.34 M376.06 -73.31 C379.79 -71.69, 383.52 -70.08, 389.83 -67.34 M389.83 -67.34 C389.83 -67.34, 389.83 -67.34, 389.83 -67.34 M389.83 -67.34 C389.83 -67.34, 389.83 -67.34, 389.83 -67.34" stroke="#88cc88" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(156.28566907690902 58.4419189791131) rotate(0 191.50377535149232 33.08130082930364)">
+
      <path d="M0 0 C20.99 0.65, 79.3 -5.66, 125.95 3.89 C172.6 13.44, 237.06 46.95, 279.9 57.33 C322.74 67.71, 365.82 64.69, 383.01 66.16 M0 0 C20.99 0.65, 79.3 -5.66, 125.95 3.89 C172.6 13.44, 237.06 46.95, 279.9 57.33 C322.74 67.71, 365.82 64.69, 383.01 66.16" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(156.28566907690902 58.4419189791131) rotate(0 191.50377535149232 33.08130082930364)">
+
      <path d="M0 0 L13.51 -6.51 L13.67 6.17 L0 0" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M0 0 C5.07 -2.44, 10.14 -4.89, 13.51 -6.51 M0 0 C4.37 -2.11, 8.74 -4.21, 13.51 -6.51 M13.51 -6.51 C13.57 -1.79, 13.63 2.93, 13.67 6.17 M13.51 -6.51 C13.55 -3.79, 13.58 -1.06, 13.67 6.17 M13.67 6.17 C10.21 4.6, 6.75 3.04, 0 0 M13.67 6.17 C10.05 4.53, 6.43 2.9, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(156.28566907690902 58.4419189791131) rotate(0 191.50377535149232 33.08130082930364)">
+
      <path d="M383.01 66.16 L369.24 72.13 L369.59 59.45 L383.01 66.16" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M383.01 66.16 C377.84 68.4, 372.68 70.64, 369.24 72.13 M383.01 66.16 C378.55 68.09, 374.1 70.02, 369.24 72.13 M369.24 72.13 C369.37 67.41, 369.5 62.69, 369.59 59.45 M369.24 72.13 C369.32 69.4, 369.39 66.68, 369.59 59.45 M369.59 59.45 C372.99 61.15, 376.39 62.85, 383.01 66.16 M369.59 59.45 C373.15 61.23, 376.7 63.01, 383.01 66.16 M383.01 66.16 C383.01 66.16, 383.01 66.16, 383.01 66.16 M383.01 66.16 C383.01 66.16, 383.01 66.16, 383.01 66.16" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round" transform="translate(10 27.305381130957358) rotate(0 66 64)">
+
    <path d="M132 64 C132 66.57, 131.84 69.16, 131.52 71.71 C131.2 74.27, 130.72 76.82, 130.08 79.32 C129.45 81.81, 128.65 84.29, 127.71 86.69 C126.77 89.1, 125.67 91.47, 124.44 93.74 C123.21 96.02, 121.82 98.24, 120.32 100.36 C118.81 102.47, 117.16 104.52, 115.4 106.44 C113.64 108.36, 111.75 110.2, 109.77 111.9 C107.78 113.61, 105.67 115.21, 103.49 116.67 C101.31 118.13, 99.02 119.47, 96.67 120.67 C94.32 121.86, 91.88 122.93, 89.4 123.84 C86.92 124.75, 84.37 125.52, 81.79 126.14 C79.22 126.76, 76.59 127.22, 73.96 127.53 C71.32 127.84, 68.65 128, 66 128 C63.35 128, 60.68 127.84, 58.04 127.53 C55.41 127.22, 52.78 126.76, 50.21 126.14 C47.63 125.52, 45.08 124.75, 42.6 123.84 C40.12 122.93, 37.68 121.86, 35.33 120.67 C32.98 119.47, 30.69 118.13, 28.51 116.67 C26.33 115.21, 24.22 113.61, 22.23 111.9 C20.25 110.2, 18.36 108.36, 16.6 106.44 C14.84 104.52, 13.19 102.47, 11.68 100.36 C10.18 98.24, 8.79 96.02, 7.56 93.74 C6.33 91.47, 5.23 89.1, 4.29 86.69 C3.35 84.29, 2.55 81.81, 1.92 79.32 C1.28 76.82, 0.8 74.27, 0.48 71.71 C0.16 69.16, 0 66.57, 0 64 C0 61.43, 0.16 58.84, 0.48 56.29 C0.8 53.73, 1.28 51.18, 1.92 48.68 C2.55 46.19, 3.35 43.71, 4.29 41.31 C5.23 38.9, 6.33 36.53, 7.56 34.26 C8.79 31.98, 10.18 29.76, 11.68 27.64 C13.19 25.53, 14.84 23.48, 16.6 21.56 C18.36 19.64, 20.25 17.8, 22.23 16.1 C24.22 14.39, 26.33 12.79, 28.51 11.33 C30.69 9.87, 32.98 8.53, 35.33 7.33 C37.68 6.14, 40.12 5.07, 42.6 4.16 C45.08 3.25, 47.63 2.48, 50.21 1.86 C52.78 1.24, 55.41 0.78, 58.04 0.47 C60.68 0.16, 63.35 0, 66 0 C68.65 0, 71.32 0.16, 73.96 0.47 C76.59 0.78, 79.22 1.24, 81.79 1.86 C84.37 2.48, 86.92 3.25, 89.4 4.16 C91.88 5.07, 94.32 6.14, 96.67 7.33 C99.02 8.53, 101.31 9.87, 103.49 11.33 C105.67 12.79, 107.78 14.39, 109.77 16.1 C111.75 17.8, 113.64 19.64, 115.4 21.56 C117.16 23.48, 118.81 25.53, 120.32 27.64 C121.82 29.76, 123.21 31.98, 124.44 34.26 C125.67 36.53, 126.77 38.9, 127.71 41.31 C128.65 43.71, 129.45 46.19, 130.08 48.68 C130.72 51.18, 131.2 53.73, 131.52 56.29 C131.84 58.84, 132 61.43, 132 64" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M132 64 C132 66.57, 131.84 69.16, 131.52 71.71 C131.2 74.27, 130.72 76.82, 130.08 79.32 C129.45 81.81, 128.65 84.29, 127.71 86.69 C126.77 89.1, 125.67 91.47, 124.44 93.74 C123.21 96.02, 121.82 98.24, 120.32 100.36 C118.81 102.47, 117.16 104.52, 115.4 106.44 C113.64 108.36, 111.75 110.2, 109.77 111.9 C107.78 113.61, 105.67 115.21, 103.49 116.67 C101.31 118.13, 99.02 119.47, 96.67 120.67 C94.32 121.86, 91.88 122.93, 89.4 123.84 C86.92 124.75, 84.37 125.52, 81.79 126.14 C79.22 126.76, 76.59 127.22, 73.96 127.53 C71.32 127.84, 68.65 128, 66 128 C63.35 128, 60.68 127.84, 58.04 127.53 C55.41 127.22, 52.78 126.76, 50.21 126.14 C47.63 125.52, 45.08 124.75, 42.6 123.84 C40.12 122.93, 37.68 121.86, 35.33 120.67 C32.98 119.47, 30.69 118.13, 28.51 116.67 C26.33 115.21, 24.22 113.61, 22.23 111.9 C20.25 110.2, 18.36 108.36, 16.6 106.44 C14.84 104.52, 13.19 102.47, 11.68 100.36 C10.18 98.24, 8.79 96.02, 7.56 93.74 C6.33 91.47, 5.23 89.1, 4.29 86.69 C3.35 84.29, 2.55 81.81, 1.92 79.32 C1.28 76.82, 0.8 74.27, 0.48 71.71 C0.16 69.16, 0 66.57, 0 64 C0 61.43, 0.16 58.84, 0.48 56.29 C0.8 53.73, 1.28 51.18, 1.92 48.68 C2.55 46.19, 3.35 43.71, 4.29 41.31 C5.23 38.9, 6.33 36.53, 7.56 34.26 C8.79 31.98, 10.18 29.76, 11.68 27.64 C13.19 25.53, 14.84 23.48, 16.6 21.56 C18.36 19.64, 20.25 17.8, 22.23 16.1 C24.22 14.39, 26.33 12.79, 28.51 11.33 C30.69 9.87, 32.98 8.53, 35.33 7.33 C37.68 6.14, 40.12 5.07, 42.6 4.16 C45.08 3.25, 47.63 2.48, 50.21 1.86 C52.78 1.24, 55.41 0.78, 58.04 0.47 C60.68 0.16, 63.35 0, 66 0 C68.65 0, 71.32 0.16, 73.96 0.47 C76.59 0.78, 79.22 1.24, 81.79 1.86 C84.37 2.48, 86.92 3.25, 89.4 4.16 C91.88 5.07, 94.32 6.14, 96.67 7.33 C99.02 8.53, 101.31 9.87, 103.49 11.33 C105.67 12.79, 107.78 14.39, 109.77 16.1 C111.75 17.8, 113.64 19.64, 115.4 21.56 C117.16 23.48, 118.81 25.53, 120.32 27.64 C121.82 29.76, 123.21 31.98, 124.44 34.26 C125.67 36.53, 126.77 38.9, 127.71 41.31 C128.65 43.71, 129.45 46.19, 130.08 48.68 C130.72 51.18, 131.2 53.73, 131.52 56.29 C131.84 58.84, 132 61.43, 132 64" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(55.88095167874849 82.35054713501836) rotate(0 19.950000762939453 9.199999999999989)">
+
    <text x="19.950000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Calyx</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(554.3195887720376 26.405679331333886) rotate(0 66 64)">
+
    <path d="M132 64 C132 66.57, 131.84 69.16, 131.52 71.71 C131.2 74.27, 130.72 76.82, 130.08 79.32 C129.45 81.81, 128.65 84.29, 127.71 86.69 C126.77 89.1, 125.67 91.47, 124.44 93.74 C123.21 96.02, 121.82 98.24, 120.32 100.36 C118.81 102.47, 117.16 104.52, 115.4 106.44 C113.64 108.36, 111.75 110.2, 109.77 111.9 C107.78 113.61, 105.67 115.21, 103.49 116.67 C101.31 118.13, 99.02 119.47, 96.67 120.67 C94.32 121.86, 91.88 122.93, 89.4 123.84 C86.92 124.75, 84.37 125.52, 81.79 126.14 C79.22 126.76, 76.59 127.22, 73.96 127.53 C71.32 127.84, 68.65 128, 66 128 C63.35 128, 60.68 127.84, 58.04 127.53 C55.41 127.22, 52.78 126.76, 50.21 126.14 C47.63 125.52, 45.08 124.75, 42.6 123.84 C40.12 122.93, 37.68 121.86, 35.33 120.67 C32.98 119.47, 30.69 118.13, 28.51 116.67 C26.33 115.21, 24.22 113.61, 22.23 111.9 C20.25 110.2, 18.36 108.36, 16.6 106.44 C14.84 104.52, 13.19 102.47, 11.68 100.36 C10.18 98.24, 8.79 96.02, 7.56 93.74 C6.33 91.47, 5.23 89.1, 4.29 86.69 C3.35 84.29, 2.55 81.81, 1.92 79.32 C1.28 76.82, 0.8 74.27, 0.48 71.71 C0.16 69.16, 0 66.57, 0 64 C0 61.43, 0.16 58.84, 0.48 56.29 C0.8 53.73, 1.28 51.18, 1.92 48.68 C2.55 46.19, 3.35 43.71, 4.29 41.31 C5.23 38.9, 6.33 36.53, 7.56 34.26 C8.79 31.98, 10.18 29.76, 11.68 27.64 C13.19 25.53, 14.84 23.48, 16.6 21.56 C18.36 19.64, 20.25 17.8, 22.23 16.1 C24.22 14.39, 26.33 12.79, 28.51 11.33 C30.69 9.87, 32.98 8.53, 35.33 7.33 C37.68 6.14, 40.12 5.07, 42.6 4.16 C45.08 3.25, 47.63 2.48, 50.21 1.86 C52.78 1.24, 55.41 0.78, 58.04 0.47 C60.68 0.16, 63.35 0, 66 0 C68.65 0, 71.32 0.16, 73.96 0.47 C76.59 0.78, 79.22 1.24, 81.79 1.86 C84.37 2.48, 86.92 3.25, 89.4 4.16 C91.88 5.07, 94.32 6.14, 96.67 7.33 C99.02 8.53, 101.31 9.87, 103.49 11.33 C105.67 12.79, 107.78 14.39, 109.77 16.1 C111.75 17.8, 113.64 19.64, 115.4 21.56 C117.16 23.48, 118.81 25.53, 120.32 27.64 C121.82 29.76, 123.21 31.98, 124.44 34.26 C125.67 36.53, 126.77 38.9, 127.71 41.31 C128.65 43.71, 129.45 46.19, 130.08 48.68 C130.72 51.18, 131.2 53.73, 131.52 56.29 C131.84 58.84, 132 61.43, 132 64" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M132 64 C132 66.57, 131.84 69.16, 131.52 71.71 C131.2 74.27, 130.72 76.82, 130.08 79.32 C129.45 81.81, 128.65 84.29, 127.71 86.69 C126.77 89.1, 125.67 91.47, 124.44 93.74 C123.21 96.02, 121.82 98.24, 120.32 100.36 C118.81 102.47, 117.16 104.52, 115.4 106.44 C113.64 108.36, 111.75 110.2, 109.77 111.9 C107.78 113.61, 105.67 115.21, 103.49 116.67 C101.31 118.13, 99.02 119.47, 96.67 120.67 C94.32 121.86, 91.88 122.93, 89.4 123.84 C86.92 124.75, 84.37 125.52, 81.79 126.14 C79.22 126.76, 76.59 127.22, 73.96 127.53 C71.32 127.84, 68.65 128, 66 128 C63.35 128, 60.68 127.84, 58.04 127.53 C55.41 127.22, 52.78 126.76, 50.21 126.14 C47.63 125.52, 45.08 124.75, 42.6 123.84 C40.12 122.93, 37.68 121.86, 35.33 120.67 C32.98 119.47, 30.69 118.13, 28.51 116.67 C26.33 115.21, 24.22 113.61, 22.23 111.9 C20.25 110.2, 18.36 108.36, 16.6 106.44 C14.84 104.52, 13.19 102.47, 11.68 100.36 C10.18 98.24, 8.79 96.02, 7.56 93.74 C6.33 91.47, 5.23 89.1, 4.29 86.69 C3.35 84.29, 2.55 81.81, 1.92 79.32 C1.28 76.82, 0.8 74.27, 0.48 71.71 C0.16 69.16, 0 66.57, 0 64 C0 61.43, 0.16 58.84, 0.48 56.29 C0.8 53.73, 1.28 51.18, 1.92 48.68 C2.55 46.19, 3.35 43.71, 4.29 41.31 C5.23 38.9, 6.33 36.53, 7.56 34.26 C8.79 31.98, 10.18 29.76, 11.68 27.64 C13.19 25.53, 14.84 23.48, 16.6 21.56 C18.36 19.64, 20.25 17.8, 22.23 16.1 C24.22 14.39, 26.33 12.79, 28.51 11.33 C30.69 9.87, 32.98 8.53, 35.33 7.33 C37.68 6.14, 40.12 5.07, 42.6 4.16 C45.08 3.25, 47.63 2.48, 50.21 1.86 C52.78 1.24, 55.41 0.78, 58.04 0.47 C60.68 0.16, 63.35 0, 66 0 C68.65 0, 71.32 0.16, 73.96 0.47 C76.59 0.78, 79.22 1.24, 81.79 1.86 C84.37 2.48, 86.92 3.25, 89.4 4.16 C91.88 5.07, 94.32 6.14, 96.67 7.33 C99.02 8.53, 101.31 9.87, 103.49 11.33 C105.67 12.79, 107.78 14.39, 109.77 16.1 C111.75 17.8, 113.64 19.64, 115.4 21.56 C117.16 23.48, 118.81 25.53, 120.32 27.64 C121.82 29.76, 123.21 31.98, 124.44 34.26 C125.67 36.53, 126.77 38.9, 127.71 41.31 C128.65 43.71, 129.45 46.19, 130.08 48.68 C130.72 51.18, 131.2 53.73, 131.52 56.29 C131.84 58.84, 132 61.43, 132 64" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(600.188041595195 81.45084533539489) rotate(0 19.962499618530273 9.199999999999989)">
+
    <text x="19.962499618530273" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Paxel</text>
+
  </g>
+
  <g transform="translate(273.816853053685 10) rotate(0 81.1624984741211 9.199999999999989)">
+
    <text x="0" y="0" fill="#8888ff" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Multiplexed connection</text>
+
  </g>
+
</svg>
added assets/images/p2p-network.svg
@@ -0,0 +1,194 @@
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 753.9252111004685 540.8248741260445" width="753.9252111004685" height="540.8248741260445">
+
  <defs>
+
    <style>
+
      @import url("/assets/css/fonts.css");
+
      svg { font-size: 16px; font-family: "Inter", sans-serif; }
+
    </style>
+
  </defs>
+
  <g stroke-linecap="round" transform="translate(10 88.74726524195782) rotate(0 58.486854893352984 56.71452595719077)">
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(49.55540242505003 136.15856530303853) rotate(0 19.075000762939453 9.200000000000003)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(310.2887891290429 10) rotate(0 58.486854893352984 56.71452595719077)">
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(349.84419155409296 57.411300061080695) rotate(0 19.075000762939453 9.199999999999996)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(267.3463428615448 206.64682956755277) rotate(0 58.4868548933531 56.71452595719077)">
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(306.90174528659463 254.0581296286335) rotate(0 19.075000762939453 9.199999999999989)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(519.6183712310749 417.395822211663) rotate(0 58.486854893352984 56.714525957190745)">
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(559.1737736561249 464.80712227274375) rotate(0 19.075000762939453 9.199999999999989)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(626.951501313763 262.27202836953006) rotate(0 58.486854893352984 56.71452595719077)">
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(666.506903738813 309.6833284306108) rotate(0 19.075000762939453 9.199999999999989)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(163.14702679587003 374.3058794777371) rotate(0 58.486854893352984 56.714525957190745)">
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="none" stroke-width="0" fill="#8888ff"/>
+
    <path d="M116.97 56.71 C116.97 58.99, 116.83 61.29, 116.55 63.55 C116.26 65.81, 115.84 68.07, 115.27 70.29 C114.71 72.5, 114.01 74.7, 113.17 76.83 C112.34 78.96, 111.37 81.05, 110.27 83.07 C109.18 85.09, 107.96 87.06, 106.62 88.93 C105.29 90.81, 103.82 92.62, 102.26 94.32 C100.71 96.03, 99.03 97.65, 97.27 99.17 C95.51 100.68, 93.65 102.1, 91.71 103.39 C89.78 104.68, 87.75 105.87, 85.67 106.93 C83.59 107.99, 81.42 108.94, 79.23 109.74 C77.03 110.55, 74.77 111.24, 72.48 111.78 C70.2 112.33, 67.87 112.74, 65.54 113.02 C63.2 113.29, 60.84 113.43, 58.49 113.43 C56.14 113.43, 53.77 113.29, 51.44 113.02 C49.1 112.74, 46.77 112.33, 44.49 111.78 C42.21 111.24, 39.94 110.55, 37.75 109.74 C35.55 108.94, 33.39 107.99, 31.31 106.93 C29.23 105.87, 27.2 104.68, 25.26 103.39 C23.33 102.1, 21.46 100.68, 19.7 99.17 C17.94 97.65, 16.27 96.03, 14.71 94.32 C13.15 92.62, 11.69 90.81, 10.35 88.93 C9.02 87.06, 7.79 85.09, 6.7 83.07 C5.61 81.05, 4.63 78.96, 3.8 76.83 C2.97 74.7, 2.26 72.5, 1.7 70.29 C1.14 68.07, 0.71 65.81, 0.43 63.55 C0.14 61.29, 0 58.99, 0 56.71 C0 54.44, 0.14 52.14, 0.43 49.88 C0.71 47.62, 1.14 45.35, 1.7 43.14 C2.26 40.93, 2.97 38.73, 3.8 36.6 C4.63 34.47, 5.61 32.38, 6.7 30.36 C7.79 28.34, 9.02 26.37, 10.35 24.5 C11.69 22.62, 13.15 20.81, 14.71 19.11 C16.27 17.4, 17.94 15.77, 19.7 14.26 C21.46 12.75, 23.33 11.33, 25.26 10.04 C27.2 8.74, 29.23 7.56, 31.31 6.5 C33.39 5.44, 35.55 4.49, 37.75 3.69 C39.94 2.88, 42.21 2.19, 44.49 1.65 C46.77 1.1, 49.1 0.69, 51.44 0.41 C53.77 0.14, 56.14 0, 58.49 0 C60.84 0, 63.2 0.14, 65.54 0.41 C67.87 0.69, 70.2 1.1, 72.48 1.65 C74.77 2.19, 77.03 2.88, 79.23 3.69 C81.42 4.49, 83.59 5.44, 85.67 6.5 C87.75 7.56, 89.78 8.74, 91.71 10.04 C93.65 11.33, 95.51 12.75, 97.27 14.26 C99.03 15.77, 100.71 17.4, 102.26 19.11 C103.82 20.81, 105.29 22.62, 106.62 24.5 C107.96 26.37, 109.18 28.34, 110.27 30.36 C111.37 32.38, 112.34 34.47, 113.17 36.6 C114.01 38.73, 114.71 40.93, 115.27 43.14 C115.84 45.35, 116.26 47.62, 116.55 49.88 C116.83 52.14, 116.97 54.44, 116.97 56.71" stroke="#ffffff" stroke-width="1" fill="none"/>
+
  </g>
+
  <g transform="translate(202.70242922092007 421.71717953881785) rotate(0 19.075000762939453 9.199999999999989)">
+
    <text x="19.075000762939453" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g mask="url(#mask-zSxwzdfp1ECJoq_7zknET)" stroke-linecap="round">
+
    <g transform="translate(136.60364791299298 130.03104577778873) rotate(0 80.93565039496934 -22.00911255609661)">
+
      <path d="M0 0 C26.98 -7.34, 134.89 -36.68, 161.87 -44.02 M0 0 C26.98 -7.34, 134.89 -36.68, 161.87 -44.02" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(136.60364791299298 130.03104577778873) rotate(0 80.93565039496934 -22.00911255609661)">
+
      <path d="M161.87 -44.02 L150.42 -34.33 L147.09 -46.57 L161.87 -44.02" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M161.87 -44.02 C158.65 -41.29, 155.42 -38.56, 150.42 -34.33 M161.87 -44.02 C159.39 -41.92, 156.91 -39.83, 150.42 -34.33 M150.42 -34.33 C149.29 -38.49, 148.15 -42.65, 147.09 -46.57 M150.42 -34.33 C149.58 -37.4, 148.75 -40.48, 147.09 -46.57 M147.09 -46.57 C150.8 -45.93, 154.52 -45.29, 161.87 -44.02 M147.09 -46.57 C151.07 -45.88, 155.04 -45.2, 161.87 -44.02 M161.87 -44.02 C161.87 -44.02, 161.87 -44.02, 161.87 -44.02 M161.87 -44.02 C161.87 -44.02, 161.87 -44.02, 161.87 -44.02" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask id="mask-zSxwzdfp1ECJoq_7zknET">
+
    <rect x="0" y="0" fill="#fff" width="398.4749487029315" height="274.0492708899819"/>
+
    <rect x="200.2517979264926" y="98.82193322169215" fill="#000" width="34.57500076293945" height="18.4" opacity="1"/>
+
  </mask>
+
  <g transform="translate(200.2517979264926 98.82193322169215) rotate(0 17.287500381469727 9.199999999999974)">
+
    <text x="17.287500381469727" y="0" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">fetch</text>
+
  </g>
+
  <g mask="url(#mask-8edb0N0xMd1y8xEyjyNZy)" stroke-linecap="round">
+
    <g transform="translate(613.5568552447589 310.90467441845533) rotate(0 -106.70178824522327 -23.18423847249062)">
+
      <path d="M0 0 C-35.57 -7.73, -177.84 -38.64, -213.4 -46.37 M0 0 C-35.57 -7.73, -177.84 -38.64, -213.4 -46.37" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(613.5568552447589 310.90467441845533) rotate(0 -106.70178824522327 -23.18423847249062)">
+
      <path d="M0 0 L-14.63 3.31 L-11.94 -9.08 L0 0" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M0 0 C-3.15 0.71, -6.3 1.43, -14.63 3.31 M0 0 C-3.04 0.69, -6.08 1.38, -14.63 3.31 M-14.63 3.31 C-13.88 -0.14, -13.13 -3.59, -11.94 -9.08 M-14.63 3.31 C-13.73 -0.83, -12.83 -4.96, -11.94 -9.08 M-11.94 -9.08 C-9.12 -6.93, -6.29 -4.79, 0 0 M-11.94 -9.08 C-8.49 -6.46, -5.03 -3.83, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask id="mask-8edb0N0xMd1y8xEyjyNZy">
+
    <rect x="0" y="0" fill="#fff" width="926.9604317352055" height="457.27315136343657"/>
+
    <rect x="489.56756661806594" y="278.5204359459648" fill="#000" width="34.57500076293945" height="18.4" opacity="1"/>
+
  </mask>
+
  <g transform="translate(489.56756661806594 278.52043594596483) rotate(0 17.287500381469727 9.199999999999989)">
+
    <text x="17.287500381469727" y="0" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">fetch</text>
+
  </g>
+
  <g mask="url(#mask-EoBwFsRtk4rVGTzQtcBdH)" stroke-linecap="round">
+
    <g transform="translate(337.4337469730772 194.74867052934286) rotate(0 8.315885347008134 -30.17753752057702)">
+
      <path d="M0 0 C2.77 -10.06, 13.86 -50.3, 16.63 -60.36" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask id="mask-EoBwFsRtk4rVGTzQtcBdH">
+
    <rect x="0" y="0" fill="#fff" width="454.06551766709345" height="355.1037455704969"/>
+
    <rect x="322.6871323200853" y="155.37113300876584" fill="#000" width="46.125" height="18.4" opacity="1"/>
+
  </mask>
+
  <g transform="translate(322.6871323200853 155.3711330087658) rotate(0 23.0625 9.200000000000003)">
+
    <text x="23.0625" y="0" fill="#8888ff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">gossip</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(93.1696482607083 217.08136793988578) rotate(0 42.22557159445739 80.38758103934501)">
+
      <path d="M0 0 C14.08 26.8, 70.38 133.98, 84.45 160.78" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g mask="url(#mask-FX5PDo1N7GMKcZQ1J8pW_)" stroke-linecap="round">
+
    <g transform="translate(198.83710343555072 357.69961233492484) rotate(0 -41.43001101616528 -78.43234415949463)">
+
      <path d="M0 0 C-13.81 -26.14, -69.05 -130.72, -82.86 -156.86 M0 0 C-13.81 -26.14, -69.05 -130.72, -82.86 -156.86" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(198.83710343555072 357.69961233492484) rotate(0 -41.43001101616528 -78.43234415949463)">
+
      <path d="M-82.86 -156.86 L-70.91 -147.8 L-82.12 -141.88 L-82.86 -156.86" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M-82.86 -156.86 C-79.72 -154.49, -76.58 -152.11, -70.91 -147.8 M-82.86 -156.86 C-78.54 -153.59, -74.22 -150.32, -70.91 -147.8 M-70.91 -147.8 C-75.16 -145.56, -79.42 -143.31, -82.12 -141.88 M-70.91 -147.8 C-74.31 -146.01, -77.71 -144.21, -82.12 -141.88 M-82.12 -141.88 C-82.29 -145.3, -82.45 -148.71, -82.86 -156.86 M-82.12 -141.88 C-82.38 -147.2, -82.64 -152.51, -82.86 -156.86 M-82.86 -156.86 C-82.86 -156.86, -82.86 -156.86, -82.86 -156.86 M-82.86 -156.86 C-82.86 -156.86, -82.86 -156.86, -82.86 -156.86" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask id="mask-FX5PDo1N7GMKcZQ1J8pW_">
+
    <rect x="0" y="0" fill="#fff" width="381.6971254678813" height="614.5643006539141"/>
+
    <rect x="140.1195920379157" y="270.0672681754303" fill="#000" width="34.57500076293945" height="18.4" opacity="1"/>
+
  </mask>
+
  <g transform="translate(140.1195920379157 270.06726817543034) rotate(0 17.287500381469727 9.199999999999974)">
+
    <text x="17.287500381469727" y="0" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">fetch</text>
+
  </g>
+
  <g mask="url(#mask-KQWjxgPB8cljw5SK97v7v)" stroke-linecap="round">
+
    <g transform="translate(289.91040549787795 446.172279802175) rotate(0 104.98288277988581 14.493891876149746)">
+
      <path d="M0 0 C34.99 4.83, 174.97 24.16, 209.97 28.99" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
    <g transform="translate(289.91040549787795 446.172279802175) rotate(0 104.98288277988581 14.493891876149746)">
+
      <path d="M209.97 28.99 L195.63 33.41 L197.37 20.85 L209.97 28.99" stroke="none" stroke-width="0" fill="#8888ff" fill-rule="evenodd"/>
+
      <path d="M209.97 28.99 C206.75 29.98, 203.54 30.97, 195.63 33.41 M195.63 33.41 C196.08 30.13, 196.54 26.85, 197.37 20.85 M197.37 20.85 C200.21 22.69, 203.06 24.53, 209.97 28.99 M209.97 28.99 C209.97 28.99, 209.97 28.99, 209.97 28.99" stroke="#8888ff" stroke-width="1.5" fill="none"/>
+
    </g>
+
  </g>
+
  <mask id="mask-KQWjxgPB8cljw5SK97v7v">
+
    <rect x="0" y="0" fill="#fff" width="599.8761710576496" height="575.1600635544745"/>
+
    <rect x="371.830788277764" y="451.4661716783247" fill="#000" width="46.125" height="18.4" opacity="1"/>
+
  </mask>
+
  <g transform="translate(371.830788277764 451.4661716783249) rotate(0 23.062499999999773 9.199999999999989)">
+
    <text x="23.0625" y="0" fill="#8888ff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">gossip</text>
+
  </g>
+
  <g mask="url(#mask-yMAqHfG9whOVzOfrKMWlb)" stroke-linecap="round">
+
    <g transform="translate(371.3877401715272 324.73656797418676) rotate(0 75.99657814920738 49.75000523760215)">
+
      <path d="M0 0 C25.33 16.58, 126.66 82.92, 151.99 99.5" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
    <g transform="translate(371.3877401715272 324.73656797418676) rotate(0 75.99657814920738 49.75000523760215)">
+
      <path d="M0 0 L14.85 2.14 L7.9 12.75 L0 0" stroke="none" stroke-width="0" fill="#8888ff" fill-rule="evenodd"/>
+
      <path d="M0 0 C5.67 0.82, 11.34 1.64, 14.85 2.14 M14.85 2.14 C12.59 5.59, 10.33 9.04, 7.9 12.75 M7.9 12.75 C5.9 9.52, 3.9 6.3, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#8888ff" stroke-width="1.5" fill="none"/>
+
    </g>
+
  </g>
+
  <mask id="mask-yMAqHfG9whOVzOfrKMWlb">
+
    <rect x="0" y="0" fill="#fff" width="623.380896469942" height="524.2365784493911"/>
+
    <rect x="424.32181832073456" y="365.2865732117889" fill="#000" width="46.125" height="18.4" opacity="1"/>
+
  </mask>
+
  <g transform="translate(424.32181832073456 365.28657321178906) rotate(0 23.0625 9.19999999999996)">
+
    <text x="23.0625" y="0" fill="#8888ff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">gossip</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(291.4426244787396 327.85196404020223) rotate(0 -14.48643241814193 21.54863026497472)">
+
      <path d="M0 0 C-4.83 7.18, -24.14 35.91, -28.97 43.1" stroke="#1971c2" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(618.151538503384 416.38509054872736) rotate(0 17.633369809143005 -19.58258118992751)">
+
      <path d="M0 0 C5.88 -6.53, 29.39 -32.64, 35.27 -39.17" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(397.2429274963506 291.04844404416406) rotate(0 108.11723831068298 23.89541939863892)">
+
      <path d="M0 0 C36.04 7.97, 180.2 39.83, 216.23 47.79" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(133.85460614113617 106.93725808667256) rotate(0 75.6039044712877 -20.76169397398054)">
+
      <path d="M0 0 C25.2 -6.92, 126.01 -34.6, 151.21 -41.52" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g stroke-linecap="round">
+
    <g transform="translate(516.3493971183298 73.41312426332212) rotate(0 27.70338997193403 0)">
+
      <path d="M0 0 C9.23 0, 46.17 0, 55.41 0" stroke="#8888ff" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g transform="translate(599.1775199908825 64.21312459557097) rotate(0 24.825000762939453 9.200000000000003)">
+
    <text x="0" y="0" fill="#8888ff" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Gossip</text>
+
  </g>
+
  <g stroke-linecap="round">
+
    <g transform="translate(575.1806302259697 106.55716122893222) rotate(0 -30.59614681953599 0)">
+
      <path d="M0 0 C-10.2 0, -50.99 0, -61.19 0 M0 0 C-10.2 0, -50.99 0, -61.19 0" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(575.1806302259697 106.55716122893222) rotate(0 -30.59614681953599 0)">
+
      <path d="M0 0 L-13.59 6.34 L-13.59 -6.34 L0 0" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M0 0 C-3.44 1.6, -6.88 3.21, -13.59 6.34 M0 0 C-3.12 1.46, -6.24 2.91, -13.59 6.34 M-13.59 6.34 C-13.59 2.49, -13.59 -1.35, -13.59 -6.34 M-13.59 6.34 C-13.59 1.95, -13.59 -2.43, -13.59 -6.34 M-13.59 -6.34 C-9.84 -4.59, -6.08 -2.84, 0 0 M-13.59 -6.34 C-8.52 -3.97, -3.44 -1.6, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask/>
+
  <g transform="translate(599.1775200738539 97.35716109035201) rotate(0 29.6875 9.200000000000003)">
+
    <text x="0" y="0" fill="#cc6666" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Git fetch</text>
+
  </g>
+
</svg>
added assets/images/radicle.svg
@@ -0,0 +1,63 @@
+
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 44 44" fill="none">
+
  <g shape-rendering="crispEdges">
+
    <rect x="8" y="0" width="4" height="4" fill="#5555FF"/>
+
    <rect x="32" y="0" width="4" height="4" fill="#5555FF"/>
+
    <rect x="12" y="4" width="4" height="4" fill="#5555FF"/>
+
    <rect x="28" y="4" width="4" height="4" fill="#5555FF"/>
+
    <rect x="12" y="8" width="4" height="4" fill="#5555FF"/>
+
    <rect x="16" y="8" width="4" height="4" fill="#3333DD"/>
+
    <rect x="20" y="8" width="4" height="4" fill="#5555FF"/>
+
    <rect x="24" y="8" width="4" height="4" fill="#3333DD"/>
+
    <rect x="28" y="8" width="4" height="4" fill="#5555FF"/>
+
    <rect x="8" y="12" width="4" height="4" fill="#5555FF"/>
+
    <rect x="12" y="12" width="4" height="4" fill="#5555FF"/>
+
    <rect x="16" y="12" width="4" height="4" fill="#5555FF"/>
+
    <rect x="20" y="12" width="4" height="4" fill="#5555FF"/>
+
    <rect x="24" y="12" width="4" height="4" fill="#5555FF"/>
+
    <rect x="28" y="12" width="4" height="4" fill="#5555FF"/>
+
    <rect x="32" y="12" width="4" height="4" fill="#5555FF"/>
+
    <rect x="4" y="16" width="4" height="4" fill="#5555FF"/>
+
    <rect x="8" y="16" width="4" height="4" fill="#5555FF"/>
+
    <rect x="12" y="16" width="4" height="4" fill="#F4F4F4"/>
+
    <rect x="16" y="16" width="4" height="4" fill="#F4F4F4"/>
+
    <rect x="20" y="16" width="4" height="4" fill="#5555FF"/>
+
    <rect x="24" y="16" width="4" height="4" fill="#5555FF"/>
+
    <rect x="28" y="16" width="4" height="4" fill="#F4F4F4"/>
+
    <rect x="32" y="16" width="4" height="4" fill="#F4F4F4"/>
+
    <rect x="36" y="16" width="4" height="4" fill="#5555FF"/>
+
    <rect x="4" y="20" width="4" height="4" fill="#5555FF"/>
+
    <rect x="8" y="20" width="4" height="4" fill="#5555FF"/>
+
    <rect x="12" y="20" width="4" height="4" fill="#F4F4F4"/>
+
    <rect x="16" y="20" width="4" height="4" fill="#FF55FF"/>
+
    <rect x="20" y="20" width="4" height="4" fill="#5555FF"/>
+
    <rect x="24" y="20" width="4" height="4" fill="#5555FF"/>
+
    <rect x="28" y="20" width="4" height="4" fill="#F4F4F4"/>
+
    <rect x="32" y="20" width="4" height="4" fill="#FF55FF"/>
+
    <rect x="36" y="20" width="4" height="4" fill="#5555FF"/>
+
    <rect x="0" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="4" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="8" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="12" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="16" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="20" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="24" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="28" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="32" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="36" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="40" y="24" width="4" height="4" fill="#3333DD"/>
+
    <rect x="8" y="28" width="4" height="4" fill="#3333DD"/>
+
    <rect x="16" y="28" width="4" height="4" fill="#5555FF"/>
+
    <rect x="24" y="28" width="4" height="4" fill="#5555FF"/>
+
    <rect x="32" y="28" width="4" height="4" fill="#3333DD"/>
+
    <rect x="8" y="32" width="4" height="4" fill="#3333DD"/>
+
    <rect x="16" y="32" width="4" height="4" fill="#5555FF"/>
+
    <rect x="24" y="32" width="4" height="4" fill="#5555FF"/>
+
    <rect x="32" y="32" width="4" height="4" fill="#3333DD"/>
+
    <rect x="16" y="36" width="4" height="4" fill="#5555FF"/>
+
    <rect x="24" y="36" width="4" height="4" fill="#5555FF"/>
+
    <rect x="12" y="40" width="4" height="4" fill="#5555FF"/>
+
    <rect x="16" y="40" width="4" height="4" fill="#5555FF"/>
+
    <rect x="24" y="40" width="4" height="4" fill="#5555FF"/>
+
    <rect x="28" y="40" width="4" height="4" fill="#5555FF"/>
+
  </g>
+
</svg>
added assets/images/working-vs-stored.svg
@@ -0,0 +1,90 @@
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 584.63792804179 603.7325083107335" width="584.63792804179" height="603.7325083107335">
+
  <defs>
+
    <style>
+
      @import url("/assets/css/fonts.css");
+
      svg { font-size: 16px; font-family: "Inter", sans-serif; }
+
    </style>
+
  </defs>
+
  <g stroke-linecap="round" transform="translate(36.21399090243949 89.18033866906654) rotate(0 256.29680448850263 103.6806465444188)">
+
    <path d="M0 0 C115.34 0, 230.67 0, 512.59 0 M0 0 C194.76 0, 389.52 0, 512.59 0 M512.59 0 C512.59 63.96, 512.59 127.93, 512.59 207.36 M512.59 0 C512.59 74.28, 512.59 148.56, 512.59 207.36 M512.59 207.36 C312.31 207.36, 112.03 207.36, 0 207.36 M512.59 207.36 C364.19 207.36, 215.78 207.36, 0 207.36 M0 207.36 C0 144.5, 0 81.63, 0 0 M0 207.36 C0 150.74, 0 94.11, 0 0" stroke="#cc6666" stroke-width="2" fill="none"/>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(62.272004343533354 176.8903011012392) rotate(0 102.83593272276357 44.23050862605392)">
+
    <path d="M0 0 L205.67 0 L205.67 88.46 L0 88.46" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M0 0 C41.73 0, 83.45 0, 205.67 0 M0 0 C75.35 0, 150.69 0, 205.67 0 M205.67 0 C205.67 19.47, 205.67 38.94, 205.67 88.46 M205.67 0 C205.67 34.4, 205.67 68.8, 205.67 88.46 M205.67 88.46 C134.34 88.46, 63 88.46, 0 88.46 M205.67 88.46 C145.78 88.46, 85.88 88.46, 0 88.46 M0 88.46 C0 68.71, 0 48.96, 0 0 M0 88.46 C0 59.07, 0 29.68, 0 0" stroke="transparent" stroke-width="2" fill="none"/>
+
  </g>
+
  <g transform="translate(126.97043630335747 211.92080972729315) rotate(0 38.13750076293945 9.199999999999989)">
+
    <text x="38.13750076293945" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Repository</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(284.53031055079737 176.8903011012392) rotate(0 102.83593272276357 43.677627267329584)">
+
    <path d="M0 0 L205.67 0 L205.67 87.36 L0 87.36" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M0 0 C45.9 0, 91.81 0, 205.67 0 M0 0 C46.49 0, 92.98 0, 205.67 0 M205.67 0 C205.67 21.92, 205.67 43.84, 205.67 87.36 M205.67 0 C205.67 26.17, 205.67 52.34, 205.67 87.36 M205.67 87.36 C137.22 87.36, 68.76 87.36, 0 87.36 M205.67 87.36 C151.16 87.36, 96.66 87.36, 0 87.36 M0 87.36 C0 57.99, 0 28.63, 0 0 M0 87.36 C0 67.86, 0 48.37, 0 0" stroke="transparent" stroke-width="2" fill="none"/>
+
  </g>
+
  <g transform="translate(349.2287425106215 211.3679283685688) rotate(0 38.13750076293945 9.199999999999989)">
+
    <text x="38.13750076293945" y="0" fill="#ffffff" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Repository</text>
+
  </g>
+
  <g transform="translate(62.272003800575476 114.4692318608763) rotate(0 49.23749923706055 9.200000000000003)">
+
    <text x="0" y="0" fill="#cc6666" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Local Storage</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(506.7886165197956 176.8903011012392) rotate(0 21.009491631532455 43.677627267329555)">
+
    <path d="M0 0 L42.02 0 L42.02 87.36 L0 87.36" stroke="none" stroke-width="0" fill="#cc6666"/>
+
    <path d="M0 0 C16.56 0, 33.11 0, 42.02 0 M0 0 C14.97 0, 29.95 0, 42.02 0 M42.02 0 C42.02 22.37, 42.02 44.75, 42.02 87.36 M42.02 0 C42.02 27.72, 42.02 55.43, 42.02 87.36 M42.02 87.36 C29.27 87.36, 16.53 87.36, 0 87.36 M42.02 87.36 C28.44 87.36, 14.87 87.36, 0 87.36 M0 87.36 C0 65.99, 0 44.62, 0 0 M0 87.36 C0 64.31, 0 41.26, 0 0" stroke="transparent" stroke-width="2" fill="none"/>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(62.27200421333055 453.0162762609689) rotate(0 102.83593272276357 49.8366924565654)">
+
    <path d="M0 0 C62.68 0, 125.36 0, 205.67 0 M0 0 C44.6 0, 89.21 0, 205.67 0 M205.67 0 C205.67 32.54, 205.67 65.07, 205.67 99.67 M205.67 0 C205.67 24.58, 205.67 49.16, 205.67 99.67 M205.67 99.67 C135.69 99.67, 65.71 99.67, 0 99.67 M205.67 99.67 C164.24 99.67, 122.81 99.67, 0 99.67 M0 99.67 C0 74.76, 0 49.85, 0 0 M0 99.67 C0 74.55, 0 49.42, 0 0" stroke="#cc6666" stroke-width="2" fill="none"/>
+
  </g>
+
  <g transform="translate(135.98293693609412 484.4529687175343) rotate(0 29.125 18.399999999999977)">
+
    <text x="29.125" y="0" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Working</text>
+
    <text x="29.125" y="18.4" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Copy</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(284.5303112266156 453.01627687035796) rotate(0 102.83593272276357 49.8366922344419)">
+
    <path d="M0 0 C64.42 0, 128.85 0, 205.67 0 M0 0 C53.08 0, 106.16 0, 205.67 0 M205.67 0 C205.67 20.49, 205.67 40.99, 205.67 99.67 M205.67 0 C205.67 22.78, 205.67 45.57, 205.67 99.67 M205.67 99.67 C128.41 99.67, 51.14 99.67, 0 99.67 M205.67 99.67 C162.33 99.67, 118.98 99.67, 0 99.67 M0 99.67 C0 61.81, 0 23.95, 0 0 M0 99.67 C0 61.92, 0 24.17, 0 0" stroke="#cc6666" stroke-width="2" fill="none"/>
+
  </g>
+
  <g transform="translate(358.24124394937917 484.4529691047999) rotate(0 29.125 18.399999999999977)">
+
    <text x="29.125" y="0" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Working</text>
+
    <text x="29.125" y="18.4" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Copy</text>
+
  </g>
+
  <g mask="url(#mask-T6BDWh6j4ZmaAEnRs0YZ9)" stroke-linecap="round">
+
    <g transform="translate(165.10793678374694 452.0162762609689) rotate(0 0 -91.2237868536044)">
+
      <path d="M0 0 C0 -28.95, 0 -57.89, 0 -77.8 M0 0 C0 -19.62, 0 -39.24, 0 -77.8 M0 -77.8 C0 -109.51, 0 -141.23, 0 -182.45 M0 -77.8 C0 -102.54, 0 -127.28, 0 -182.45" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(165.10793678374694 452.0162762609689) rotate(0 0 -91.2237868536044)">
+
      <path d="M0 -182.45 L6.34 -168.85 L-6.34 -168.85 L0 -182.45" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M0 -182.45 C2.36 -177.39, 4.72 -172.33, 6.34 -168.85 M0 -182.45 C1.6 -179.02, 3.2 -175.59, 6.34 -168.85 M6.34 -168.85 C2.5 -168.85, -1.35 -168.85, -6.34 -168.85 M6.34 -168.85 C3.34 -168.85, 0.34 -168.85, -6.34 -168.85 M-6.34 -168.85 C-3.98 -173.91, -1.63 -178.96, 0 -182.45 M-6.34 -168.85 C-3.9 -174.09, -1.45 -179.33, 0 -182.45 M0 -182.45 C0 -182.45, 0 -182.45, 0 -182.45 M0 -182.45 C0 -182.45, 0 -182.45, 0 -182.45" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask id="mask-T6BDWh6j4ZmaAEnRs0YZ9">
+
    <rect x="0" y="0" fill="#fff" width="265.10793678374694" height="734.4638499681777"/>
+
    <rect x="147.8079375466864" y="365.0211365577122" fill="#000" width="34.599998474121094" height="18.4" opacity="1"/>
+
  </mask>
+
  <g transform="translate(147.8079375466864 365.0211365577123) rotate(0 17.299999237060547 -4.228647150347797)">
+
    <text x="17.299999237060547" y="0" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">push</text>
+
  </g>
+
  <g mask="url(#mask-iq1SBTW31kyu6R1UNUpVo)" stroke-linecap="round">
+
    <g transform="translate(387.3662432735605 263.29563731190547) rotate(0 0 92.38023798350207)">
+
      <path d="M0 0 C0 32.19, 0 64.38, 0 110.93 M0 0 C0 44.06, 0 88.12, 0 110.93 M0 110.93 C0 126.65, 0 142.38, 0 184.76 M0 110.93 C0 127.33, 0 143.73, 0 184.76" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
    <g transform="translate(387.3662432735605 263.29563731190547) rotate(0 0 92.38023798350207)">
+
      <path d="M0 184.76 L-6.34 171.17 L6.34 171.17 L0 184.76" stroke="none" stroke-width="0" fill="#cc6666" fill-rule="evenodd"/>
+
      <path d="M0 184.76 C-1.84 180.82, -3.68 176.87, -6.34 171.17 M0 184.76 C-2.52 179.36, -5.04 173.96, -6.34 171.17 M-6.34 171.17 C-3.64 171.17, -0.94 171.17, 6.34 171.17 M-6.34 171.17 C-3.52 171.17, -0.71 171.17, 6.34 171.17 M6.34 171.17 C4.64 174.82, 2.94 178.47, 0 184.76 M6.34 171.17 C4.37 175.39, 2.4 179.61, 0 184.76 M0 184.76 C0 184.76, 0 184.76, 0 184.76 M0 184.76 C0 184.76, 0 184.76, 0 184.76" stroke="#cc6666" stroke-width="1" fill="none"/>
+
    </g>
+
  </g>
+
  <mask id="mask-iq1SBTW31kyu6R1UNUpVo">
+
    <rect x="0" y="0" fill="#fff" width="487.3662432735605" height="548.0561132789096"/>
+
    <rect x="374.9412430828256" y="365.0211365577122" fill="#000" width="24.850000381469727" height="18.4" opacity="1"/>
+
  </mask>
+
  <g transform="translate(374.9412430828256 365.0211365577123) rotate(0 12.425000190734863 -9.345261262304689)">
+
    <text x="12.425000190734863" y="0" fill="#cc6666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">pull</text>
+
  </g>
+
  <g stroke-linecap="round" transform="translate(10 10) rotate(0 282.318964020895 291.86625415536673)">
+
    <path d="M0 0 C201.06 0, 402.12 0, 564.64 0 M564.64 0 C564.64 127.56, 564.64 255.11, 564.64 583.73 M564.64 583.73 C392 583.73, 219.37 583.73, 0 583.73 M0 583.73 C0 438.15, 0 292.57, 0 0" stroke="#8888ff" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/>
+
  </g>
+
  <g transform="translate(35.83378166044122 37.655395980126286) rotate(0 19.075000762939453 9.200000000000003)">
+
    <text x="0" y="0" fill="#8888ff" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Node</text>
+
  </g>
+
  <g transform="translate(66.76752242426846 160.97688007006667) rotate(0 93.97947929276734 5.848018388617973)">
+
    <text x="0" y="0" fill="#cc6666" text-anchor="start" font-size="10px" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5</text>
+
  </g>
+
  <g transform="translate(284.5303112886372 160.9768802531607) rotate(0 94.4625015258789 5.848018388617973)">
+
    <text x="0" y="0" fill="#cc6666" text-anchor="start" font-size="10px" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">rad:z2ATVRDqFu2Yq2MG5ZZCWecwSDYqj</text>
+
  </g>
+
</svg>
added scripts/cleanup-svgs.sh
@@ -0,0 +1,43 @@
+
#!/bin/sh
+
set -e
+

+
if [ $# -lt 1 ]; then
+
  echo "usage: $0 <path>..."
+
  exit 1
+
fi
+

+
# Function to process a single file
+
process() {
+
    FILE="$1"
+

+
    # Ensure the file exists
+
    if [ ! -f "$FILE" ]; then
+
      echo "error: '$FILE' does not exist."
+
      return
+
    fi
+

+
    # Format SVG.
+
    xmllint --format "$FILE" --output "$FILE"
+
    # Remove `<?xml>` header.
+
    sed -i 1d "$FILE"
+

+
    # Remove all instances of `font-family="..."` and `font-size="..."`
+
    sed -i -e 's/font-family="[^"]*"//g' -e 's/font-size="16px"//g' "$FILE"
+
    # Remove comments.
+
    sed -i -e 's/<!--.*-->\n//' "$FILE"
+
    # Replace the contents of <style> tags
+
    sed -i '/<defs>/,/<\/defs>/c\
+
  <defs>\
+
    <style>\
+
      @import url("/assets/css/fonts.css");\
+
      svg { font-size: 16px; font-family: "Inter", sans-serif; }\
+
    </style>\
+
  </defs>' "$FILE"
+

+
    echo "Processed $FILE"
+
  }
+

+
# Iterate over each file provided as an argument
+
for file in "$@"; do
+
  process "$file"
+
done