diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..c22302dc3a97d97950c9f0c438b8dddd644daedd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+./neo4j/
+.idea/
\ No newline at end of file
diff --git a/README.md b/README.md
index e2798fbe13ea69858deb442ca75c3f3a066b185f..5ef08c0e12ed9cb9cd59b9f486a13a1dc05b2ab9 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,8 @@
-# the-software-graph
\ No newline at end of file
+# the-software-graph
+
+## En cas d'erreur
+`neo4j | Folder /data is not accessible for user: 7474 or group 7474 or groups 7474, this is commonly a file permissions issue on the mounted folder.`
+
+Solution:
+
+`sudo chmod -R 777 neo4j/data`
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..43d0a2b14c4884a5bc5ce99baf9ec2c5429a402f
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,50 @@
+version: '3.7'
+
+services:
+  database:
+    build: ./neo4j
+    environment:
+      - NEO4J_AUTH=neo4j/test
+    ports:
+      - "7474:7474"
+      - "7687:7687"
+    volumes:
+      - ./neo4j/import:/var/lib/neo4j/import
+      - ./neo4j/data:/var/lib/neo4j/data
+    container_name: neo4j
+  redis:
+    image: "redis:alpine"
+    ports:
+      - "6379:6379"
+  sg-backend:
+    build: ./sg-backend
+    command: sh -c "/wait && uvicorn main:app --reload --host 0.0.0.0"
+    environment:
+      - FRONTEND_URL="http://localhost"
+      - NEO4J_URI=neo4j://database:7687
+      - NEO4J_USER=neo4j
+      - NEO4J_PASSWORD=test
+      - WAIT_HOSTS=database:7474
+      - WAIT_HOSTS_TIMEOUT=300
+      - WAIT_SLEEP_INTERVAL=5
+      - WAIT_HOST_CONNECT_TIMEOUT=30
+    volumes:
+      - ./sg-backend:/code
+    depends_on:
+      - database
+      - redis
+    ports:
+      - "8000:8000"
+  sg-frontend:
+    build: ./sg-frontend
+    environment:
+      - VITE_BACKEND_URL=http://localhost:8000
+    volumes:
+      - ./sg-frontend:/app
+      - node_modules:/app/node_modules
+    ports:
+      - "5173:5173"
+    depends_on:
+      - sg-backend
+volumes:
+  node_modules:
\ No newline at end of file
diff --git a/neo4j/Dockerfile b/neo4j/Dockerfile
new file mode 100755
index 0000000000000000000000000000000000000000..2b3baebe60847c2487208260856ec0b1e3772e75
--- /dev/null
+++ b/neo4j/Dockerfile
@@ -0,0 +1,19 @@
+FROM neo4j:4.4.0
+
+
+#ARG UID
+#ARG GID
+#
+#ENV UID=${UID}
+#ENV GID=${GID}
+#
+#RUN addgroup -g ${GID} --system neo4j
+#RUN adduser -G neo4j --system -D -s /bin/sh -u ${UID} neo4j
+#COPY import/* import/
+#RUN bash -c "neo4j-admin load --from=/import/software-graph.dump --verbose --database=software-graph"
+#RUN bash -c "neo4j-admin load --from=import/software-graph.dump --database=data --force --verbose"
+#RUN bash -c "cypher-shell -u neo4j -p test --non-interactive -f import/data_cypher.cypher"
+
+USER neo4j
+
+EXPOSE 7474 7473 7687
\ No newline at end of file
diff --git a/neo4j/conf/neo4j.conf b/neo4j/conf/neo4j.conf
new file mode 100644
index 0000000000000000000000000000000000000000..62533b8417141cf26155a7e50f934a504a7be55b
--- /dev/null
+++ b/neo4j/conf/neo4j.conf
@@ -0,0 +1,7 @@
+
+dbms.tx_log.rotation.retention_policy=100M size
+
+dbms.memory.pagecache.size=512M
+
+dbms.default_listen_address=0.0.0.0
+dbms.directories.logs=/logs
diff --git a/sg-backend/test.json b/neo4j/data/databases/neo4j/database_lock
old mode 100644
new mode 100755
similarity index 100%
rename from sg-backend/test.json
rename to neo4j/data/databases/neo4j/database_lock
diff --git a/neo4j/data/databases/neo4j/neostore b/neo4j/data/databases/neo4j/neostore
new file mode 100755
index 0000000000000000000000000000000000000000..981eab4d85821684af01e263928ab40121c5023c
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore differ
diff --git a/neo4j/data/databases/neo4j/neostore.counts.db b/neo4j/data/databases/neo4j/neostore.counts.db
new file mode 100755
index 0000000000000000000000000000000000000000..5babc14e22e71cb88d528cceb648c8a1e7c81486
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.counts.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.indexstats.db b/neo4j/data/databases/neo4j/neostore.indexstats.db
new file mode 100755
index 0000000000000000000000000000000000000000..f12166e751b289b063b483f743ceb19781104e51
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.indexstats.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.labelscanstore.db b/neo4j/data/databases/neo4j/neostore.labelscanstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..d52eb27dad1d35452123f8b649c1e55a48e936fb
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.labelscanstore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.labeltokenstore.db b/neo4j/data/databases/neo4j/neostore.labeltokenstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..707ccdc3fe8064438ccec94943d69b5592498609
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.labeltokenstore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.id b/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..0aaa39af74b06e38860e95741f5dd972d5731a83
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.names b/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.names
new file mode 100755
index 0000000000000000000000000000000000000000..dbfc3b08fa8932b68adf54071508c35495367bc6
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.names differ
diff --git a/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.names.id b/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.names.id
new file mode 100755
index 0000000000000000000000000000000000000000..5efd8d0066c8d1bb9d9059c256d317fccae1ae5e
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.labeltokenstore.db.names.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.nodestore.db b/neo4j/data/databases/neo4j/neostore.nodestore.db
new file mode 100755
index 0000000000000000000000000000000000000000..19f417153d8e62413d63cf9dcb025dca1d48f73e
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.nodestore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.nodestore.db.id b/neo4j/data/databases/neo4j/neostore.nodestore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..a625a263e5976d0bc60a8bcb307489d0d4686dbf
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.nodestore.db.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.nodestore.db.labels b/neo4j/data/databases/neo4j/neostore.nodestore.db.labels
new file mode 100755
index 0000000000000000000000000000000000000000..df8ce2a58c7337a0be82febc80d3e0e21c414f96
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.nodestore.db.labels differ
diff --git a/neo4j/data/databases/neo4j/neostore.nodestore.db.labels.id b/neo4j/data/databases/neo4j/neostore.nodestore.db.labels.id
new file mode 100755
index 0000000000000000000000000000000000000000..04d482c29fbe5fc8929bcf8097d05e04e6fce0c8
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.nodestore.db.labels.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db b/neo4j/data/databases/neo4j/neostore.propertystore.db
new file mode 100755
index 0000000000000000000000000000000000000000..d9bf0b2004b88a8af3101925350bc68695348c9c
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.arrays b/neo4j/data/databases/neo4j/neostore.propertystore.db.arrays
new file mode 100755
index 0000000000000000000000000000000000000000..bae49621466737c0cbedd1d7bfe3c4f13dba925c
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.arrays differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.arrays.id b/neo4j/data/databases/neo4j/neostore.propertystore.db.arrays.id
new file mode 100755
index 0000000000000000000000000000000000000000..84e800788a1a1b96abd3d7bacd9a65a3877c286d
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.arrays.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.id b/neo4j/data/databases/neo4j/neostore.propertystore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..84a98336c38e0a1a70eb3f196079ef3faebb04b9
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.index b/neo4j/data/databases/neo4j/neostore.propertystore.db.index
new file mode 100755
index 0000000000000000000000000000000000000000..b002d509834e8a83ec01c6f530b2524131bdc994
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.index differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.index.id b/neo4j/data/databases/neo4j/neostore.propertystore.db.index.id
new file mode 100755
index 0000000000000000000000000000000000000000..fc1043af1f086d4aad7eb5988e4f5dd7b5a0614c
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.index.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.index.keys b/neo4j/data/databases/neo4j/neostore.propertystore.db.index.keys
new file mode 100755
index 0000000000000000000000000000000000000000..8d15c9f98a47e64d88ef6857bfa7f71717e2f7bc
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.index.keys differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.index.keys.id b/neo4j/data/databases/neo4j/neostore.propertystore.db.index.keys.id
new file mode 100755
index 0000000000000000000000000000000000000000..053263cdcdb3ba8b4a2f07f4ba3d96a0db599749
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.index.keys.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.strings b/neo4j/data/databases/neo4j/neostore.propertystore.db.strings
new file mode 100755
index 0000000000000000000000000000000000000000..1d85cb6f6e0451d848d6fdfeb743256251380a75
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.strings differ
diff --git a/neo4j/data/databases/neo4j/neostore.propertystore.db.strings.id b/neo4j/data/databases/neo4j/neostore.propertystore.db.strings.id
new file mode 100755
index 0000000000000000000000000000000000000000..fb3f13ed4b857ec03f5db8f66e4b11c2d1373981
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.propertystore.db.strings.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.db b/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..b72840ef50b6a432f92ecd6edaaf539fae606949
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.db.id b/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..04d482c29fbe5fc8929bcf8097d05e04e6fce0c8
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.db.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.degrees.db b/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.degrees.db
new file mode 100755
index 0000000000000000000000000000000000000000..5b40d263efc4778462ca31927d92e809997729bb
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshipgroupstore.degrees.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshipstore.db b/neo4j/data/databases/neo4j/neostore.relationshipstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..2b066d2a6b361afca198d2269e95e07030b93698
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshipstore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshipstore.db.id b/neo4j/data/databases/neo4j/neostore.relationshipstore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..b4755b6da83abd065b530e9b54010284001faf88
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshipstore.db.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshiptypescanstore.db b/neo4j/data/databases/neo4j/neostore.relationshiptypescanstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..04dfec0af1bb28a25602c81861e6e15907b8ae8b
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshiptypescanstore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db b/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db
new file mode 100755
index 0000000000000000000000000000000000000000..909cb7fe5e0802e236674c307fae0b332140eb5b
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.id b/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..2db4345fe9cffa19af5e435452316c11a3011fb0
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.names b/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.names
new file mode 100755
index 0000000000000000000000000000000000000000..948c0f8dd89a5a59e5d182e549b1610871e5ccb1
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.names differ
diff --git a/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.names.id b/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.names.id
new file mode 100755
index 0000000000000000000000000000000000000000..60ac3e23a1b7bf176dd399da9db3f9c014deba6b
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.relationshiptypestore.db.names.id differ
diff --git a/neo4j/data/databases/neo4j/neostore.schemastore.db b/neo4j/data/databases/neo4j/neostore.schemastore.db
new file mode 100755
index 0000000000000000000000000000000000000000..e1e48989e6d5d5685b2c3a6de7ee0898d6152ce9
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.schemastore.db differ
diff --git a/neo4j/data/databases/neo4j/neostore.schemastore.db.id b/neo4j/data/databases/neo4j/neostore.schemastore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..d02951bd3963e6bd5cea00152f7d79814dc83844
Binary files /dev/null and b/neo4j/data/databases/neo4j/neostore.schemastore.db.id differ
diff --git a/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/3/index-3 b/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/3/index-3
new file mode 100755
index 0000000000000000000000000000000000000000..3fe26211679f34ea4410da861f5c2937b85b6998
Binary files /dev/null and b/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/3/index-3 differ
diff --git a/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/4/index-4 b/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/4/index-4
new file mode 100755
index 0000000000000000000000000000000000000000..24ed26b67665210957b21ee3193546bc098e0f98
Binary files /dev/null and b/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/4/index-4 differ
diff --git a/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/5/index-5 b/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/5/index-5
new file mode 100755
index 0000000000000000000000000000000000000000..f58fa9374943e65f80f1661612133e4ac7ea0c76
Binary files /dev/null and b/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/5/index-5 differ
diff --git a/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/6/index-6 b/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/6/index-6
new file mode 100755
index 0000000000000000000000000000000000000000..9e4e1ebf9fc8e46c59a1a19459f73cc0d2224fd6
Binary files /dev/null and b/neo4j/data/databases/neo4j/schema/index/native-btree-1.0/6/index-6 differ
diff --git a/neo4j/data/databases/store_lock b/neo4j/data/databases/store_lock
new file mode 100755
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/neo4j/data/databases/system/database_lock b/neo4j/data/databases/system/database_lock
new file mode 100755
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/neo4j/data/databases/system/neostore b/neo4j/data/databases/system/neostore
new file mode 100755
index 0000000000000000000000000000000000000000..770ae3281f150364f44097b0a57e792c3bbe8aa5
Binary files /dev/null and b/neo4j/data/databases/system/neostore differ
diff --git a/neo4j/data/databases/system/neostore.counts.db b/neo4j/data/databases/system/neostore.counts.db
new file mode 100755
index 0000000000000000000000000000000000000000..e87b6fb3d5268fc1fe79938cda8b56a0f3ac3a42
Binary files /dev/null and b/neo4j/data/databases/system/neostore.counts.db differ
diff --git a/neo4j/data/databases/system/neostore.indexstats.db b/neo4j/data/databases/system/neostore.indexstats.db
new file mode 100755
index 0000000000000000000000000000000000000000..1b90709f73c4f870a44cb8f18773326a7147b518
Binary files /dev/null and b/neo4j/data/databases/system/neostore.indexstats.db differ
diff --git a/neo4j/data/databases/system/neostore.labelscanstore.db b/neo4j/data/databases/system/neostore.labelscanstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..72da8b2652c2929c89666aa9da6e57c430f6f911
Binary files /dev/null and b/neo4j/data/databases/system/neostore.labelscanstore.db differ
diff --git a/neo4j/data/databases/system/neostore.labeltokenstore.db b/neo4j/data/databases/system/neostore.labeltokenstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..707ccdc3fe8064438ccec94943d69b5592498609
Binary files /dev/null and b/neo4j/data/databases/system/neostore.labeltokenstore.db differ
diff --git a/neo4j/data/databases/system/neostore.labeltokenstore.db.id b/neo4j/data/databases/system/neostore.labeltokenstore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..922e21f726b52bd2294bfc42be4ef2c4e436e8cb
Binary files /dev/null and b/neo4j/data/databases/system/neostore.labeltokenstore.db.id differ
diff --git a/neo4j/data/databases/system/neostore.labeltokenstore.db.names b/neo4j/data/databases/system/neostore.labeltokenstore.db.names
new file mode 100755
index 0000000000000000000000000000000000000000..a37891527b9757aee491508d3a03eaafe74d4cff
Binary files /dev/null and b/neo4j/data/databases/system/neostore.labeltokenstore.db.names differ
diff --git a/neo4j/data/databases/system/neostore.labeltokenstore.db.names.id b/neo4j/data/databases/system/neostore.labeltokenstore.db.names.id
new file mode 100755
index 0000000000000000000000000000000000000000..c3502e8f309fee015cf6168da420b803220065b3
Binary files /dev/null and b/neo4j/data/databases/system/neostore.labeltokenstore.db.names.id differ
diff --git a/neo4j/data/databases/system/neostore.nodestore.db b/neo4j/data/databases/system/neostore.nodestore.db
new file mode 100755
index 0000000000000000000000000000000000000000..b95067581b4e27c4abccc763974b683018c04fbc
Binary files /dev/null and b/neo4j/data/databases/system/neostore.nodestore.db differ
diff --git a/neo4j/data/databases/system/neostore.nodestore.db.id b/neo4j/data/databases/system/neostore.nodestore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..a4350252a698d5003897e09d476c1474eddfce37
Binary files /dev/null and b/neo4j/data/databases/system/neostore.nodestore.db.id differ
diff --git a/neo4j/data/databases/system/neostore.nodestore.db.labels b/neo4j/data/databases/system/neostore.nodestore.db.labels
new file mode 100755
index 0000000000000000000000000000000000000000..df8ce2a58c7337a0be82febc80d3e0e21c414f96
Binary files /dev/null and b/neo4j/data/databases/system/neostore.nodestore.db.labels differ
diff --git a/neo4j/data/databases/system/neostore.nodestore.db.labels.id b/neo4j/data/databases/system/neostore.nodestore.db.labels.id
new file mode 100755
index 0000000000000000000000000000000000000000..9c7e828663fb5a93eee1f0f57aaf94a50a8b1b69
Binary files /dev/null and b/neo4j/data/databases/system/neostore.nodestore.db.labels.id differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db b/neo4j/data/databases/system/neostore.propertystore.db
new file mode 100755
index 0000000000000000000000000000000000000000..222f27032ca94062fe54b7ebac9b1bb3c864ad2a
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.arrays b/neo4j/data/databases/system/neostore.propertystore.db.arrays
new file mode 100755
index 0000000000000000000000000000000000000000..d19598d74e5c5046e0090285895b3443642008be
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.arrays differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.arrays.id b/neo4j/data/databases/system/neostore.propertystore.db.arrays.id
new file mode 100755
index 0000000000000000000000000000000000000000..9c7e828663fb5a93eee1f0f57aaf94a50a8b1b69
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.arrays.id differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.id b/neo4j/data/databases/system/neostore.propertystore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..b9fe50ea14dfbaa0b0d8e36fe876f8df027bac14
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.id differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.index b/neo4j/data/databases/system/neostore.propertystore.db.index
new file mode 100755
index 0000000000000000000000000000000000000000..de68d5b28d794b4e2674c12ac2517c310f62a561
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.index differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.index.id b/neo4j/data/databases/system/neostore.propertystore.db.index.id
new file mode 100755
index 0000000000000000000000000000000000000000..44f0ed7261f91bf74a4d120ab8d9048455fc2abc
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.index.id differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.index.keys b/neo4j/data/databases/system/neostore.propertystore.db.index.keys
new file mode 100755
index 0000000000000000000000000000000000000000..e5605ce8b8a820dbb85f030d8acd0a776ab662b8
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.index.keys differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.index.keys.id b/neo4j/data/databases/system/neostore.propertystore.db.index.keys.id
new file mode 100755
index 0000000000000000000000000000000000000000..e33cbbab8d85c37b0dee0f9fd0be520fc9dfe1f8
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.index.keys.id differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.strings b/neo4j/data/databases/system/neostore.propertystore.db.strings
new file mode 100755
index 0000000000000000000000000000000000000000..a91a48e13129e9c348e2224cad54a8d318456991
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.strings differ
diff --git a/neo4j/data/databases/system/neostore.propertystore.db.strings.id b/neo4j/data/databases/system/neostore.propertystore.db.strings.id
new file mode 100755
index 0000000000000000000000000000000000000000..f44372f843be8097336a6aba1b944c573542fb3e
Binary files /dev/null and b/neo4j/data/databases/system/neostore.propertystore.db.strings.id differ
diff --git a/neo4j/data/databases/system/neostore.relationshipgroupstore.db b/neo4j/data/databases/system/neostore.relationshipgroupstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..b72840ef50b6a432f92ecd6edaaf539fae606949
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshipgroupstore.db differ
diff --git a/neo4j/data/databases/system/neostore.relationshipgroupstore.db.id b/neo4j/data/databases/system/neostore.relationshipgroupstore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..9c7e828663fb5a93eee1f0f57aaf94a50a8b1b69
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshipgroupstore.db.id differ
diff --git a/neo4j/data/databases/system/neostore.relationshipgroupstore.degrees.db b/neo4j/data/databases/system/neostore.relationshipgroupstore.degrees.db
new file mode 100755
index 0000000000000000000000000000000000000000..44a3958209441d1cb5e04f5f72a5c1a2049f3f58
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshipgroupstore.degrees.db differ
diff --git a/neo4j/data/databases/system/neostore.relationshipstore.db b/neo4j/data/databases/system/neostore.relationshipstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..14bd74b1d74a664fc474194c6ac3b01222ccb276
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshipstore.db differ
diff --git a/neo4j/data/databases/system/neostore.relationshipstore.db.id b/neo4j/data/databases/system/neostore.relationshipstore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..5c4f85d1ca0179601c0a46101004d7db97dc5431
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshipstore.db.id differ
diff --git a/neo4j/data/databases/system/neostore.relationshiptypescanstore.db b/neo4j/data/databases/system/neostore.relationshiptypescanstore.db
new file mode 100755
index 0000000000000000000000000000000000000000..31569c49ccdf77da552681057d8410a3baca0e10
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshiptypescanstore.db differ
diff --git a/neo4j/data/databases/system/neostore.relationshiptypestore.db b/neo4j/data/databases/system/neostore.relationshiptypestore.db
new file mode 100755
index 0000000000000000000000000000000000000000..5a7a0b60b80e1df73f96b4c78484d7ec7c783620
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshiptypestore.db differ
diff --git a/neo4j/data/databases/system/neostore.relationshiptypestore.db.id b/neo4j/data/databases/system/neostore.relationshiptypestore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..9c7e828663fb5a93eee1f0f57aaf94a50a8b1b69
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshiptypestore.db.id differ
diff --git a/neo4j/data/databases/system/neostore.relationshiptypestore.db.names b/neo4j/data/databases/system/neostore.relationshiptypestore.db.names
new file mode 100755
index 0000000000000000000000000000000000000000..1aa8cf651908b749d5e27d1bc899e72eee93dc0a
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshiptypestore.db.names differ
diff --git a/neo4j/data/databases/system/neostore.relationshiptypestore.db.names.id b/neo4j/data/databases/system/neostore.relationshiptypestore.db.names.id
new file mode 100755
index 0000000000000000000000000000000000000000..5c4f85d1ca0179601c0a46101004d7db97dc5431
Binary files /dev/null and b/neo4j/data/databases/system/neostore.relationshiptypestore.db.names.id differ
diff --git a/neo4j/data/databases/system/neostore.schemastore.db b/neo4j/data/databases/system/neostore.schemastore.db
new file mode 100755
index 0000000000000000000000000000000000000000..8e31522a58180d5c3ff275636085e244cbf34def
Binary files /dev/null and b/neo4j/data/databases/system/neostore.schemastore.db differ
diff --git a/neo4j/data/databases/system/neostore.schemastore.db.id b/neo4j/data/databases/system/neostore.schemastore.db.id
new file mode 100755
index 0000000000000000000000000000000000000000..b9c6494f4fbc44ea3b69b8e517381d379c37aefe
Binary files /dev/null and b/neo4j/data/databases/system/neostore.schemastore.db.id differ
diff --git a/neo4j/data/databases/system/schema/index/native-btree-1.0/3/index-3 b/neo4j/data/databases/system/schema/index/native-btree-1.0/3/index-3
new file mode 100755
index 0000000000000000000000000000000000000000..75474a6934bcc753f63eb9d768828b542c609e3a
Binary files /dev/null and b/neo4j/data/databases/system/schema/index/native-btree-1.0/3/index-3 differ
diff --git a/neo4j/data/databases/system/schema/index/native-btree-1.0/4/index-4 b/neo4j/data/databases/system/schema/index/native-btree-1.0/4/index-4
new file mode 100755
index 0000000000000000000000000000000000000000..45143b74df3e07e863f7a17dce841ffdf07bc938
Binary files /dev/null and b/neo4j/data/databases/system/schema/index/native-btree-1.0/4/index-4 differ
diff --git a/neo4j/data/databases/system/schema/index/native-btree-1.0/7/index-7 b/neo4j/data/databases/system/schema/index/native-btree-1.0/7/index-7
new file mode 100755
index 0000000000000000000000000000000000000000..84bbb106a293d4122448099b6a5cad7930262a07
Binary files /dev/null and b/neo4j/data/databases/system/schema/index/native-btree-1.0/7/index-7 differ
diff --git a/neo4j/data/dbms/auth.ini b/neo4j/data/dbms/auth.ini
new file mode 100644
index 0000000000000000000000000000000000000000..1b24e9c596f65f066f5afc002057e429887f9a55
--- /dev/null
+++ b/neo4j/data/dbms/auth.ini
@@ -0,0 +1 @@
+neo4j:SHA-256,906719f6da0ad46d3082df3e1b8b94748c421a50715d5b0c272352fe07f800b8,9e0db27dc9ab2a017f801384f24c47b7c0eea36916a0b907dbee8ad32533b1c3,1024:
diff --git a/neo4j/data/server_id b/neo4j/data/server_id
new file mode 100755
index 0000000000000000000000000000000000000000..79c9d047b202d753b2b172752c1aa3e2a94a54b5
--- /dev/null
+++ b/neo4j/data/server_id
@@ -0,0 +1 @@
+jA#*bCFƒ2±Û]k»±
\ No newline at end of file
diff --git a/neo4j/data/transactions/neo4j/checkpoint.0 b/neo4j/data/transactions/neo4j/checkpoint.0
new file mode 100755
index 0000000000000000000000000000000000000000..a9f5b87cdeebc04eef63e5067da20ddf8aad46a5
Binary files /dev/null and b/neo4j/data/transactions/neo4j/checkpoint.0 differ
diff --git a/neo4j/data/transactions/neo4j/neostore.transaction.db.0 b/neo4j/data/transactions/neo4j/neostore.transaction.db.0
new file mode 100755
index 0000000000000000000000000000000000000000..0c8a119a7fb9610d88a35e52274d0a344123040c
Binary files /dev/null and b/neo4j/data/transactions/neo4j/neostore.transaction.db.0 differ
diff --git a/neo4j/data/transactions/system/checkpoint.0 b/neo4j/data/transactions/system/checkpoint.0
new file mode 100755
index 0000000000000000000000000000000000000000..94ce862967002de98fd2880ffb4dad286933334d
Binary files /dev/null and b/neo4j/data/transactions/system/checkpoint.0 differ
diff --git a/neo4j/data/transactions/system/neostore.transaction.db.0 b/neo4j/data/transactions/system/neostore.transaction.db.0
new file mode 100755
index 0000000000000000000000000000000000000000..a9045c9667be60eeeaa3d2475235de615732df00
Binary files /dev/null and b/neo4j/data/transactions/system/neostore.transaction.db.0 differ
diff --git a/neo4j/data_cypher b/neo4j/data_cypher
new file mode 100755
index 0000000000000000000000000000000000000000..210a94eaddb5768b1e570d4f6677929b876f17d4
--- /dev/null
+++ b/neo4j/data_cypher
@@ -0,0 +1,110 @@
+:begin
+CREATE INDEX FOR (node:Person) ON (node.born);
+CREATE INDEX FOR (node:Movie) ON (node.released);
+CREATE CONSTRAINT ON (node:Person) ASSERT (node.name) IS UNIQUE;
+CREATE CONSTRAINT ON (node:Movie) ASSERT (node.title) IS UNIQUE;
+CREATE CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
+:commit
+CALL db.awaitIndexes(300);
+:begin
+UNWIND [{name:"Keanu Reeves", properties:{born:1964}}, {name:"Carrie-Anne Moss", properties:{born:1967}}, {name:"Laurence Fishburne", properties:{born:1961}}, {name:"Hugo Weaving", properties:{born:1960}}, {name:"Lilly Wachowski", properties:{born:1967}}, {name:"Lana Wachowski", properties:{born:1965}}, {name:"Joel Silver", properties:{born:1952}}, {name:"Emil Eifrem", properties:{born:1978}}, {name:"Charlize Theron", properties:{born:1975}}, {name:"Al Pacino", properties:{born:1940}}, {name:"Taylor Hackford", properties:{born:1944}}, {name:"Tom Cruise", properties:{born:1962}}, {name:"Jack Nicholson", properties:{born:1937}}, {name:"Demi Moore", properties:{born:1962}}, {name:"Kevin Bacon", properties:{born:1958}}, {name:"Kiefer Sutherland", properties:{born:1966}}, {name:"Noah Wyle", properties:{born:1971}}, {name:"Cuba Gooding Jr.", properties:{born:1968}}, {name:"Kevin Pollak", properties:{born:1957}}, {name:"J.T. Walsh", properties:{born:1943}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"James Marshall", properties:{born:1967}}, {name:"Christopher Guest", properties:{born:1948}}, {name:"Rob Reiner", properties:{born:1947}}, {name:"Aaron Sorkin", properties:{born:1961}}, {name:"Kelly McGillis", properties:{born:1957}}, {name:"Val Kilmer", properties:{born:1959}}, {name:"Anthony Edwards", properties:{born:1962}}, {name:"Tom Skerritt", properties:{born:1933}}, {name:"Meg Ryan", properties:{born:1961}}, {name:"Tony Scott", properties:{born:1944}}, {name:"Jim Cash", properties:{born:1941}}, {name:"Renee Zellweger", properties:{born:1969}}, {name:"Kelly Preston", properties:{born:1962}}, {name:"Jerry O'Connell", properties:{born:1974}}, {name:"Jay Mohr", properties:{born:1970}}, {name:"Bonnie Hunt", properties:{born:1961}}, {name:"Regina King", properties:{born:1971}}, {name:"Jonathan Lipnicki", properties:{born:1996}}, {name:"Cameron Crowe", properties:{born:1957}}, {name:"River Phoenix", properties:{born:1970}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Corey Feldman", properties:{born:1971}}, {name:"Wil Wheaton", properties:{born:1972}}, {name:"John Cusack", properties:{born:1966}}, {name:"Marshall Bell", properties:{born:1942}}, {name:"Helen Hunt", properties:{born:1963}}, {name:"Greg Kinnear", properties:{born:1963}}, {name:"James L. Brooks", properties:{born:1940}}, {name:"Annabella Sciorra", properties:{born:1960}}, {name:"Max von Sydow", properties:{born:1929}}, {name:"Werner Herzog", properties:{born:1942}}, {name:"Robin Williams", properties:{born:1951}}, {name:"Vincent Ward", properties:{born:1956}}, {name:"Ethan Hawke", properties:{born:1970}}, {name:"Rick Yune", properties:{born:1971}}, {name:"James Cromwell", properties:{born:1940}}, {name:"Scott Hicks", properties:{born:1953}}, {name:"Parker Posey", properties:{born:1968}}, {name:"Dave Chappelle", properties:{born:1973}}, {name:"Steve Zahn", properties:{born:1967}}, {name:"Tom Hanks", properties:{born:1956}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Nora Ephron", properties:{born:1941}}, {name:"Rita Wilson", properties:{born:1956}}, {name:"Bill Pullman", properties:{born:1953}}, {name:"Victor Garber", properties:{born:1949}}, {name:"Rosie O'Donnell", properties:{born:1962}}, {name:"John Patrick Stanley", properties:{born:1950}}, {name:"Nathan Lane", properties:{born:1956}}, {name:"Billy Crystal", properties:{born:1948}}, {name:"Carrie Fisher", properties:{born:1956}}, {name:"Bruno Kirby", properties:{born:1949}}, {name:"Liv Tyler", properties:{born:1977}}, {name:"Brooke Langton", properties:{born:1970}}, {name:"Gene Hackman", properties:{born:1930}}, {name:"Orlando Jones", properties:{born:1968}}, {name:"Howard Deutch", properties:{born:1950}}, {name:"Christian Bale", properties:{born:1974}}, {name:"Zach Grenier", properties:{born:1954}}, {name:"Mike Nichols", properties:{born:1931}}, {name:"Richard Harris", properties:{born:1930}}, {name:"Clint Eastwood", properties:{born:1930}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Takeshi Kitano", properties:{born:1947}}, {name:"Dina Meyer", properties:{born:1968}}, {name:"Ice-T", properties:{born:1958}}, {name:"Robert Longo", properties:{born:1953}}, {name:"Halle Berry", properties:{born:1966}}, {name:"Jim Broadbent", properties:{born:1949}}, {name:"Tom Tykwer", properties:{born:1965}}, {name:"David Mitchell", properties:{born:1969}}, {name:"Stefan Arndt", properties:{born:1961}}, {name:"Ian McKellen", properties:{born:1939}}, {name:"Audrey Tautou", properties:{born:1976}}, {name:"Paul Bettany", properties:{born:1971}}, {name:"Ron Howard", properties:{born:1954}}, {name:"Natalie Portman", properties:{born:1981}}, {name:"Stephen Rea", properties:{born:1946}}, {name:"John Hurt", properties:{born:1940}}, {name:"Ben Miles", properties:{born:1967}}, {name:"Emile Hirsch", properties:{born:1985}}, {name:"John Goodman", properties:{born:1960}}, {name:"Susan Sarandon", properties:{born:1946}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Matthew Fox", properties:{born:1966}}, {name:"Christina Ricci", properties:{born:1980}}, {name:"Rain", properties:{born:1982}}, {name:"Naomie Harris", properties:{}}, {name:"Michael Clarke Duncan", properties:{born:1957}}, {name:"David Morse", properties:{born:1953}}, {name:"Sam Rockwell", properties:{born:1968}}, {name:"Gary Sinise", properties:{born:1955}}, {name:"Patricia Clarkson", properties:{born:1959}}, {name:"Frank Darabont", properties:{born:1959}}, {name:"Frank Langella", properties:{born:1938}}, {name:"Michael Sheen", properties:{born:1969}}, {name:"Oliver Platt", properties:{born:1960}}, {name:"Danny DeVito", properties:{born:1944}}, {name:"John C. Reilly", properties:{born:1965}}, {name:"Ed Harris", properties:{born:1950}}, {name:"Bill Paxton", properties:{born:1955}}, {name:"Philip Seymour Hoffman", properties:{born:1967}}, {name:"Jan de Bont", properties:{born:1943}}, {name:"Robert Zemeckis", properties:{born:1951}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Milos Forman", properties:{born:1932}}, {name:"Diane Keaton", properties:{born:1946}}, {name:"Nancy Meyers", properties:{born:1949}}, {name:"Chris Columbus", properties:{born:1958}}, {name:"Julia Roberts", properties:{born:1967}}, {name:"Madonna", properties:{born:1954}}, {name:"Geena Davis", properties:{born:1956}}, {name:"Lori Petty", properties:{born:1963}}, {name:"Penny Marshall", properties:{born:1943}}, {name:"Paul Blythe", properties:{}}, {name:"Angela Scope", properties:{}}, {name:"Jessica Thompson", properties:{}}, {name:"James Thompson", properties:{}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{_id:171, properties:{license:"proprietary", price:"freemium", name:"Notion"}}, {_id:172, properties:{name:"Libreoffice Calc\n"}}, {_id:173, properties:{name:"Trello"}}, {_id:174, properties:{name:"Word"}}, {_id:175, properties:{name:"Google Slides"}}, {_id:176, properties:{name:"Google Sheets"}}, {_id:177, properties:{name:"Excel"}}, {_id:178, properties:{name:"Libreoffice Writer\n"}}, {_id:179, properties:{name:"Libreoffice Impress\n"}}, {_id:180, properties:{name:"Powerpoint"}}, {_id:181, properties:{name:"Google Docs\n"}}] AS row
+CREATE (n:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row._id}) SET n += row.properties SET n:Software;
+UNWIND [{title:"The Matrix", properties:{tagline:"Welcome to the Real World", released:1999}}, {title:"The Matrix Reloaded", properties:{tagline:"Free your mind", released:2003}}, {title:"The Matrix Revolutions", properties:{tagline:"Everything that has a beginning has an end", released:2003}}, {title:"The Devil's Advocate", properties:{tagline:"Evil has its winning ways", released:1997}}, {title:"A Few Good Men", properties:{tagline:"In the heart of the nation's capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth.", released:1992}}, {title:"Top Gun", properties:{tagline:"I feel the need, the need for speed.", released:1986}}, {title:"Jerry Maguire", properties:{tagline:"The rest of his life begins now.", released:2000}}, {title:"Stand By Me", properties:{tagline:"For some, it's the last real taste of innocence, and the first real taste of life. But for everyone, it's the time that memories are made of.", released:1986}}, {title:"As Good as It Gets", properties:{tagline:"A comedy from the heart that goes for the throat.", released:1997}}, {title:"What Dreams May Come", properties:{tagline:"After life there is more. The end is just the beginning.", released:1998}}, {title:"Snow Falling on Cedars", properties:{tagline:"First loves last. Forever.", released:1999}}, {title:"You've Got Mail", properties:{tagline:"At odds in life... in love on-line.", released:1998}}, {title:"Sleepless in Seattle", properties:{tagline:"What if someone you never met, someone you never saw, someone you never knew was the only someone for you?", released:1993}}, {title:"Joe Versus the Volcano", properties:{tagline:"A story of love, lava and burning desire.", released:1990}}, {title:"When Harry Met Sally", properties:{tagline:"Can two friends sleep together and still love each other in the morning?", released:1998}}, {title:"That Thing You Do", properties:{tagline:"In every life there comes a time when that thing you dream becomes that thing you do", released:1996}}, {title:"The Replacements", properties:{tagline:"Pain heals, Chicks dig scars... Glory lasts forever", released:2000}}, {title:"RescueDawn", properties:{tagline:"Based on the extraordinary true story of one man's fight for freedom", released:2006}}, {title:"The Birdcage", properties:{tagline:"Come as you are", released:1996}}, {title:"Unforgiven", properties:{tagline:"It's a hell of a thing, killing a man", released:1992}}] AS row
+CREATE (n:Movie{title: row.title}) SET n += row.properties;
+UNWIND [{title:"Johnny Mnemonic", properties:{tagline:"The hottest data on earth. In the coolest head in town", released:1995}}, {title:"Cloud Atlas", properties:{tagline:"Everything is connected", released:2012}}, {title:"The Da Vinci Code", properties:{tagline:"Break The Codes", released:2006}}, {title:"V for Vendetta", properties:{tagline:"Freedom! Forever!", released:2006}}, {title:"Speed Racer", properties:{tagline:"Speed has no limits", released:2008}}, {title:"Ninja Assassin", properties:{tagline:"Prepare to enter a secret world of assassins", released:2009}}, {title:"The Green Mile", properties:{tagline:"Walk a mile you'll never forget.", released:1999}}, {title:"Frost/Nixon", properties:{tagline:"400 million people were waiting for the truth.", released:2008}}, {title:"Hoffa", properties:{tagline:"He didn't want law. He wanted justice.", released:1992}}, {title:"Apollo 13", properties:{tagline:"Houston, we have a problem.", released:1995}}, {title:"Twister", properties:{tagline:"Don't Breathe. Don't Look Back.", released:1996}}, {title:"Cast Away", properties:{tagline:"At the edge of the world, his journey begins.", released:2000}}, {title:"One Flew Over the Cuckoo's Nest", properties:{tagline:"If he's crazy, what does that make you?", released:1975}}, {title:"Something's Gotta Give", properties:{released:2003}}, {title:"Bicentennial Man", properties:{tagline:"One robot's 200 year journey to become an ordinary man.", released:1999}}, {title:"Charlie Wilson's War", properties:{tagline:"A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire.", released:2007}}, {title:"The Polar Express", properties:{tagline:"This Holiday Season… Believe", released:2004}}, {title:"A League of Their Own", properties:{tagline:"Once in a lifetime you get a chance to do something different.", released:1992}}] AS row
+CREATE (n:Movie{title: row.title}) SET n += row.properties;
+:commit
+:begin
+UNWIND [{start: {name:"Joel Silver"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Stefan Arndt"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:PRODUCED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Aaron Sorkin"}, end: {title:"A Few Good Men"}, properties:{}}, {start: {name:"Jim Cash"}, end: {title:"Top Gun"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"David Mitchell"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:WROTE]->(end) SET r += row.properties;
+UNWIND [{start: {_id:172}, end: {_id:177}, properties:{}}, {start: {_id:173}, end: {_id:171}, properties:{}}, {start: {_id:171}, end: {_id:181}, properties:{}}, {start: {_id:181}, end: {_id:174}, properties:{}}, {start: {_id:176}, end: {_id:171}, properties:{}}, {start: {_id:178}, end: {_id:174}, properties:{}}, {start: {_id:176}, end: {_id:177}, properties:{}}, {start: {_id:179}, end: {_id:175}, properties:{}}, {start: {_id:179}, end: {_id:180}, properties:{}}, {start: {_id:180}, end: {_id:175}, properties:{}}] AS row
+MATCH (start:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.start._id})
+MATCH (end:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.end._id})
+CREATE (start)-[r:SIMILAR]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Keanu Reeves"}, end: {title:"The Matrix"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Emil Eifrem"}, end: {title:"The Matrix"}, properties:{roles:["Emil"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Devil's Advocate"}, properties:{roles:["Kevin Lomax"]}}, {start: {name:"Charlize Theron"}, end: {title:"The Devil's Advocate"}, properties:{roles:["Mary Ann Lomax"]}}, {start: {name:"Al Pacino"}, end: {title:"The Devil's Advocate"}, properties:{roles:["John Milton"]}}, {start: {name:"Tom Cruise"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Daniel Kaffee"]}}, {start: {name:"Jack Nicholson"}, end: {title:"A Few Good Men"}, properties:{roles:["Col. Nathan R. Jessup"]}}, {start: {name:"Demi Moore"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Cdr. JoAnne Galloway"]}}, {start: {name:"Kevin Bacon"}, end: {title:"A Few Good Men"}, properties:{roles:["Capt. Jack Ross"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Kiefer Sutherland"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Jonathan Kendrick"]}}, {start: {name:"Noah Wyle"}, end: {title:"A Few Good Men"}, properties:{roles:["Cpl. Jeffrey Barnes"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"A Few Good Men"}, properties:{roles:["Cpl. Carl Hammaker"]}}, {start: {name:"Kevin Pollak"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Sam Weinberg"]}}, {start: {name:"J.T. Walsh"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Col. Matthew Andrew Markinson"]}}, {start: {name:"James Marshall"}, end: {title:"A Few Good Men"}, properties:{roles:["Pfc. Louden Downey"]}}, {start: {name:"Christopher Guest"}, end: {title:"A Few Good Men"}, properties:{roles:["Dr. Stone"]}}, {start: {name:"Aaron Sorkin"}, end: {title:"A Few Good Men"}, properties:{roles:["Man in Bar"]}}, {start: {name:"Tom Cruise"}, end: {title:"Top Gun"}, properties:{roles:["Maverick"]}}, {start: {name:"Kelly McGillis"}, end: {title:"Top Gun"}, properties:{roles:["Charlie"]}}, {start: {name:"Val Kilmer"}, end: {title:"Top Gun"}, properties:{roles:["Iceman"]}}, {start: {name:"Anthony Edwards"}, end: {title:"Top Gun"}, properties:{roles:["Goose"]}}, {start: {name:"Tom Skerritt"}, end: {title:"Top Gun"}, properties:{roles:["Viper"]}}, {start: {name:"Meg Ryan"}, end: {title:"Top Gun"}, properties:{roles:["Carole"]}}, {start: {name:"Tom Cruise"}, end: {title:"Jerry Maguire"}, properties:{roles:["Jerry Maguire"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"Jerry Maguire"}, properties:{roles:["Rod Tidwell"]}}, {start: {name:"Renee Zellweger"}, end: {title:"Jerry Maguire"}, properties:{roles:["Dorothy Boyd"]}}, {start: {name:"Kelly Preston"}, end: {title:"Jerry Maguire"}, properties:{roles:["Avery Bishop"]}}, {start: {name:"Jerry O'Connell"}, end: {title:"Jerry Maguire"}, properties:{roles:["Frank Cushman"]}}, {start: {name:"Jay Mohr"}, end: {title:"Jerry Maguire"}, properties:{roles:["Bob Sugar"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Bonnie Hunt"}, end: {title:"Jerry Maguire"}, properties:{roles:["Laurel Boyd"]}}, {start: {name:"Regina King"}, end: {title:"Jerry Maguire"}, properties:{roles:["Marcee Tidwell"]}}, {start: {name:"Jonathan Lipnicki"}, end: {title:"Jerry Maguire"}, properties:{roles:["Ray Boyd"]}}, {start: {name:"Wil Wheaton"}, end: {title:"Stand By Me"}, properties:{roles:["Gordie Lachance"]}}, {start: {name:"River Phoenix"}, end: {title:"Stand By Me"}, properties:{roles:["Chris Chambers"]}}, {start: {name:"Jerry O'Connell"}, end: {title:"Stand By Me"}, properties:{roles:["Vern Tessio"]}}, {start: {name:"Corey Feldman"}, end: {title:"Stand By Me"}, properties:{roles:["Teddy Duchamp"]}}, {start: {name:"John Cusack"}, end: {title:"Stand By Me"}, properties:{roles:["Denny Lachance"]}}, {start: {name:"Kiefer Sutherland"}, end: {title:"Stand By Me"}, properties:{roles:["Ace Merrill"]}}, {start: {name:"Marshall Bell"}, end: {title:"Stand By Me"}, properties:{roles:["Mr. Lachance"]}}, {start: {name:"Jack Nicholson"}, end: {title:"As Good as It Gets"}, properties:{roles:["Melvin Udall"]}}, {start: {name:"Helen Hunt"}, end: {title:"As Good as It Gets"}, properties:{roles:["Carol Connelly"]}}, {start: {name:"Greg Kinnear"}, end: {title:"As Good as It Gets"}, properties:{roles:["Simon Bishop"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"As Good as It Gets"}, properties:{roles:["Frank Sachs"]}}, {start: {name:"Robin Williams"}, end: {title:"What Dreams May Come"}, properties:{roles:["Chris Nielsen"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"What Dreams May Come"}, properties:{roles:["Albert Lewis"]}}, {start: {name:"Annabella Sciorra"}, end: {title:"What Dreams May Come"}, properties:{roles:["Annie Collins-Nielsen"]}}, {start: {name:"Max von Sydow"}, end: {title:"What Dreams May Come"}, properties:{roles:["The Tracker"]}}, {start: {name:"Werner Herzog"}, end: {title:"What Dreams May Come"}, properties:{roles:["The Face"]}}, {start: {name:"Ethan Hawke"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Ishmael Chambers"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Rick Yune"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Kazuo Miyamoto"]}}, {start: {name:"Max von Sydow"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Nels Gudmundsson"]}}, {start: {name:"James Cromwell"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Judge Fielding"]}}, {start: {name:"Tom Hanks"}, end: {title:"You've Got Mail"}, properties:{roles:["Joe Fox"]}}, {start: {name:"Meg Ryan"}, end: {title:"You've Got Mail"}, properties:{roles:["Kathleen Kelly"]}}, {start: {name:"Greg Kinnear"}, end: {title:"You've Got Mail"}, properties:{roles:["Frank Navasky"]}}, {start: {name:"Parker Posey"}, end: {title:"You've Got Mail"}, properties:{roles:["Patricia Eden"]}}, {start: {name:"Dave Chappelle"}, end: {title:"You've Got Mail"}, properties:{roles:["Kevin Jackson"]}}, {start: {name:"Steve Zahn"}, end: {title:"You've Got Mail"}, properties:{roles:["George Pappas"]}}, {start: {name:"Tom Hanks"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Sam Baldwin"]}}, {start: {name:"Meg Ryan"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Annie Reed"]}}, {start: {name:"Rita Wilson"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Suzy"]}}, {start: {name:"Bill Pullman"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Walter"]}}, {start: {name:"Victor Garber"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Greg"]}}, {start: {name:"Rosie O'Donnell"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Becky"]}}, {start: {name:"Tom Hanks"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["Joe Banks"]}}, {start: {name:"Meg Ryan"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["DeDe", "Angelica Graynamore", "Patricia Graynamore"]}}, {start: {name:"Nathan Lane"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["Baw"]}}, {start: {name:"Billy Crystal"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Harry Burns"]}}, {start: {name:"Meg Ryan"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Sally Albright"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Carrie Fisher"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Marie"]}}, {start: {name:"Bruno Kirby"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Jess"]}}, {start: {name:"Tom Hanks"}, end: {title:"That Thing You Do"}, properties:{roles:["Mr. White"]}}, {start: {name:"Liv Tyler"}, end: {title:"That Thing You Do"}, properties:{roles:["Faye Dolan"]}}, {start: {name:"Charlize Theron"}, end: {title:"That Thing You Do"}, properties:{roles:["Tina"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Replacements"}, properties:{roles:["Shane Falco"]}}, {start: {name:"Brooke Langton"}, end: {title:"The Replacements"}, properties:{roles:["Annabelle Farrell"]}}, {start: {name:"Gene Hackman"}, end: {title:"The Replacements"}, properties:{roles:["Jimmy McGinty"]}}, {start: {name:"Orlando Jones"}, end: {title:"The Replacements"}, properties:{roles:["Clifford Franklin"]}}, {start: {name:"Marshall Bell"}, end: {title:"RescueDawn"}, properties:{roles:["Admiral"]}}, {start: {name:"Christian Bale"}, end: {title:"RescueDawn"}, properties:{roles:["Dieter Dengler"]}}, {start: {name:"Zach Grenier"}, end: {title:"RescueDawn"}, properties:{roles:["Squad Leader"]}}, {start: {name:"Steve Zahn"}, end: {title:"RescueDawn"}, properties:{roles:["Duane"]}}, {start: {name:"Robin Williams"}, end: {title:"The Birdcage"}, properties:{roles:["Armand Goldman"]}}, {start: {name:"Nathan Lane"}, end: {title:"The Birdcage"}, properties:{roles:["Albert Goldman"]}}, {start: {name:"Gene Hackman"}, end: {title:"The Birdcage"}, properties:{roles:["Sen. Kevin Keeley"]}}, {start: {name:"Richard Harris"}, end: {title:"Unforgiven"}, properties:{roles:["English Bob"]}}, {start: {name:"Clint Eastwood"}, end: {title:"Unforgiven"}, properties:{roles:["Bill Munny"]}}, {start: {name:"Gene Hackman"}, end: {title:"Unforgiven"}, properties:{roles:["Little Bill Daggett"]}}, {start: {name:"Keanu Reeves"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Johnny Mnemonic"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Takeshi Kitano"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Takahashi"]}}, {start: {name:"Dina Meyer"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Jane"]}}, {start: {name:"Ice-T"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["J-Bone"]}}, {start: {name:"Tom Hanks"}, end: {title:"Cloud Atlas"}, properties:{roles:["Zachry", "Dr. Henry Goose", "Isaac Sachs", "Dermot Hoggins"]}}, {start: {name:"Hugo Weaving"}, end: {title:"Cloud Atlas"}, properties:{roles:["Bill Smoke", "Haskell Moore", "Tadeusz Kesselring", "Nurse Noakes", "Boardman Mephi", "Old Georgie"]}}, {start: {name:"Halle Berry"}, end: {title:"Cloud Atlas"}, properties:{roles:["Luisa Rey", "Jocasta Ayrs", "Ovid", "Meronym"]}}, {start: {name:"Jim Broadbent"}, end: {title:"Cloud Atlas"}, properties:{roles:["Vyvyan Ayrs", "Captain Molyneux", "Timothy Cavendish"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Dr. Robert Langdon"]}}, {start: {name:"Ian McKellen"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Sir Leight Teabing"]}}, {start: {name:"Audrey Tautou"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Sophie Neveu"]}}, {start: {name:"Paul Bettany"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Silas"]}}, {start: {name:"Hugo Weaving"}, end: {title:"V for Vendetta"}, properties:{roles:["V"]}}, {start: {name:"Natalie Portman"}, end: {title:"V for Vendetta"}, properties:{roles:["Evey Hammond"]}}, {start: {name:"Stephen Rea"}, end: {title:"V for Vendetta"}, properties:{roles:["Eric Finch"]}}, {start: {name:"John Hurt"}, end: {title:"V for Vendetta"}, properties:{roles:["High Chancellor Adam Sutler"]}}, {start: {name:"Ben Miles"}, end: {title:"V for Vendetta"}, properties:{roles:["Dascomb"]}}, {start: {name:"Emile Hirsch"}, end: {title:"Speed Racer"}, properties:{roles:["Speed Racer"]}}, {start: {name:"John Goodman"}, end: {title:"Speed Racer"}, properties:{roles:["Pops"]}}, {start: {name:"Susan Sarandon"}, end: {title:"Speed Racer"}, properties:{roles:["Mom"]}}, {start: {name:"Matthew Fox"}, end: {title:"Speed Racer"}, properties:{roles:["Racer X"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Christina Ricci"}, end: {title:"Speed Racer"}, properties:{roles:["Trixie"]}}, {start: {name:"Rain"}, end: {title:"Speed Racer"}, properties:{roles:["Taejo Togokahn"]}}, {start: {name:"Ben Miles"}, end: {title:"Speed Racer"}, properties:{roles:["Cass Jones"]}}, {start: {name:"Rain"}, end: {title:"Ninja Assassin"}, properties:{roles:["Raizo"]}}, {start: {name:"Naomie Harris"}, end: {title:"Ninja Assassin"}, properties:{roles:["Mika Coretti"]}}, {start: {name:"Rick Yune"}, end: {title:"Ninja Assassin"}, properties:{roles:["Takeshi"]}}, {start: {name:"Ben Miles"}, end: {title:"Ninja Assassin"}, properties:{roles:["Ryan Maslow"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Green Mile"}, properties:{roles:["Paul Edgecomb"]}}, {start: {name:"Michael Clarke Duncan"}, end: {title:"The Green Mile"}, properties:{roles:["John Coffey"]}}, {start: {name:"David Morse"}, end: {title:"The Green Mile"}, properties:{roles:["Brutus \"Brutal\" Howell"]}}, {start: {name:"Bonnie Hunt"}, end: {title:"The Green Mile"}, properties:{roles:["Jan Edgecomb"]}}, {start: {name:"James Cromwell"}, end: {title:"The Green Mile"}, properties:{roles:["Warden Hal Moores"]}}, {start: {name:"Sam Rockwell"}, end: {title:"The Green Mile"}, properties:{roles:["\"Wild Bill\" Wharton"]}}, {start: {name:"Gary Sinise"}, end: {title:"The Green Mile"}, properties:{roles:["Burt Hammersmith"]}}, {start: {name:"Patricia Clarkson"}, end: {title:"The Green Mile"}, properties:{roles:["Melinda Moores"]}}, {start: {name:"Frank Langella"}, end: {title:"Frost/Nixon"}, properties:{roles:["Richard Nixon"]}}, {start: {name:"Michael Sheen"}, end: {title:"Frost/Nixon"}, properties:{roles:["David Frost"]}}, {start: {name:"Kevin Bacon"}, end: {title:"Frost/Nixon"}, properties:{roles:["Jack Brennan"]}}, {start: {name:"Oliver Platt"}, end: {title:"Frost/Nixon"}, properties:{roles:["Bob Zelnick"]}}, {start: {name:"Sam Rockwell"}, end: {title:"Frost/Nixon"}, properties:{roles:["James Reston, Jr."]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Jack Nicholson"}, end: {title:"Hoffa"}, properties:{roles:["Hoffa"]}}, {start: {name:"Danny DeVito"}, end: {title:"Hoffa"}, properties:{roles:["Robert \"Bobby\" Ciaro"]}}, {start: {name:"J.T. Walsh"}, end: {title:"Hoffa"}, properties:{roles:["Frank Fitzsimmons"]}}, {start: {name:"John C. Reilly"}, end: {title:"Hoffa"}, properties:{roles:["Peter \"Pete\" Connelly"]}}, {start: {name:"Tom Hanks"}, end: {title:"Apollo 13"}, properties:{roles:["Jim Lovell"]}}, {start: {name:"Kevin Bacon"}, end: {title:"Apollo 13"}, properties:{roles:["Jack Swigert"]}}, {start: {name:"Ed Harris"}, end: {title:"Apollo 13"}, properties:{roles:["Gene Kranz"]}}, {start: {name:"Bill Paxton"}, end: {title:"Apollo 13"}, properties:{roles:["Fred Haise"]}}, {start: {name:"Gary Sinise"}, end: {title:"Apollo 13"}, properties:{roles:["Ken Mattingly"]}}, {start: {name:"Bill Paxton"}, end: {title:"Twister"}, properties:{roles:["Bill Harding"]}}, {start: {name:"Helen Hunt"}, end: {title:"Twister"}, properties:{roles:["Dr. Jo Harding"]}}, {start: {name:"Zach Grenier"}, end: {title:"Twister"}, properties:{roles:["Eddie"]}}, {start: {name:"Philip Seymour Hoffman"}, end: {title:"Twister"}, properties:{roles:["Dustin \"Dusty\" Davis"]}}, {start: {name:"Tom Hanks"}, end: {title:"Cast Away"}, properties:{roles:["Chuck Noland"]}}, {start: {name:"Helen Hunt"}, end: {title:"Cast Away"}, properties:{roles:["Kelly Frears"]}}, {start: {name:"Jack Nicholson"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{roles:["Randle McMurphy"]}}, {start: {name:"Danny DeVito"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{roles:["Martini"]}}, {start: {name:"Jack Nicholson"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Harry Sanborn"]}}, {start: {name:"Diane Keaton"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Erica Barry"]}}, {start: {name:"Keanu Reeves"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Julian Mercer"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Robin Williams"}, end: {title:"Bicentennial Man"}, properties:{roles:["Andrew Marin"]}}, {start: {name:"Oliver Platt"}, end: {title:"Bicentennial Man"}, properties:{roles:["Rupert Burns"]}}, {start: {name:"Tom Hanks"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Rep. Charlie Wilson"]}}, {start: {name:"Julia Roberts"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Joanne Herring"]}}, {start: {name:"Philip Seymour Hoffman"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Gust Avrakotos"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Polar Express"}, properties:{roles:["Hero Boy", "Father", "Conductor", "Hobo", "Scrooge", "Santa Claus"]}}, {start: {name:"Tom Hanks"}, end: {title:"A League of Their Own"}, properties:{roles:["Jimmy Dugan"]}}, {start: {name:"Geena Davis"}, end: {title:"A League of Their Own"}, properties:{roles:["Dottie Hinson"]}}, {start: {name:"Lori Petty"}, end: {title:"A League of Their Own"}, properties:{roles:["Kit Keller"]}}, {start: {name:"Rosie O'Donnell"}, end: {title:"A League of Their Own"}, properties:{roles:["Doris Murphy"]}}, {start: {name:"Madonna"}, end: {title:"A League of Their Own"}, properties:{roles:["\"All the Way\" Mae Mordabito"]}}, {start: {name:"Bill Paxton"}, end: {title:"A League of Their Own"}, properties:{roles:["Bob Hinson"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Jessica Thompson"}, end: {title:"Cloud Atlas"}, properties:{summary:"An amazing journey", rating:95}}, {start: {name:"Jessica Thompson"}, end: {title:"The Replacements"}, properties:{summary:"Silly, but fun", rating:65}}, {start: {name:"James Thompson"}, end: {title:"The Replacements"}, properties:{summary:"The coolest football movie ever", rating:100}}, {start: {name:"Angela Scope"}, end: {title:"The Replacements"}, properties:{summary:"Pretty funny at times", rating:62}}, {start: {name:"Jessica Thompson"}, end: {title:"Unforgiven"}, properties:{summary:"Dark, but compelling", rating:85}}, {start: {name:"Jessica Thompson"}, end: {title:"The Birdcage"}, properties:{summary:"Slapstick redeemed only by the Robin Williams and Gene Hackman's stellar performances", rating:45}}, {start: {name:"Jessica Thompson"}, end: {title:"The Da Vinci Code"}, properties:{summary:"A solid romp", rating:68}}, {start: {name:"James Thompson"}, end: {title:"The Da Vinci Code"}, properties:{summary:"Fun, but a little far fetched", rating:65}}, {start: {name:"Jessica Thompson"}, end: {title:"Jerry Maguire"}, properties:{summary:"You had me at Jerry", rating:92}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:REVIEWED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"James Thompson"}, end: {name:"Jessica Thompson"}, properties:{}}, {start: {name:"Angela Scope"}, end: {name:"Jessica Thompson"}, properties:{}}, {start: {name:"Paul Blythe"}, end: {name:"Angela Scope"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Person{name: row.end.name})
+CREATE (start)-[r:FOLLOWS]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Lilly Wachowski"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Taylor Hackford"}, end: {title:"The Devil's Advocate"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"A Few Good Men"}, properties:{}}, {start: {name:"Tony Scott"}, end: {title:"Top Gun"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"Stand By Me"}, properties:{}}, {start: {name:"James L. Brooks"}, end: {title:"As Good as It Gets"}, properties:{}}, {start: {name:"Vincent Ward"}, end: {title:"What Dreams May Come"}, properties:{}}, {start: {name:"Scott Hicks"}, end: {title:"Snow Falling on Cedars"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"You've Got Mail"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"Sleepless in Seattle"}, properties:{}}, {start: {name:"John Patrick Stanley"}, end: {title:"Joe Versus the Volcano"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Tom Hanks"}, end: {title:"That Thing You Do"}, properties:{}}, {start: {name:"Howard Deutch"}, end: {title:"The Replacements"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Werner Herzog"}, end: {title:"RescueDawn"}, properties:{}}, {start: {name:"Mike Nichols"}, end: {title:"The Birdcage"}, properties:{}}, {start: {name:"Clint Eastwood"}, end: {title:"Unforgiven"}, properties:{}}, {start: {name:"Robert Longo"}, end: {title:"Johnny Mnemonic"}, properties:{}}, {start: {name:"Tom Tykwer"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"The Da Vinci Code"}, properties:{}}, {start: {name:"James Marshall"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"James Marshall"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Frank Darabont"}, end: {title:"The Green Mile"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"Frost/Nixon"}, properties:{}}, {start: {name:"Danny DeVito"}, end: {title:"Hoffa"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"Apollo 13"}, properties:{}}, {start: {name:"Jan de Bont"}, end: {title:"Twister"}, properties:{}}, {start: {name:"Robert Zemeckis"}, end: {title:"Cast Away"}, properties:{}}, {start: {name:"Milos Forman"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Chris Columbus"}, end: {title:"Bicentennial Man"}, properties:{}}, {start: {name:"Mike Nichols"}, end: {title:"Charlie Wilson's War"}, properties:{}}, {start: {name:"Robert Zemeckis"}, end: {title:"The Polar Express"}, properties:{}}, {start: {name:"Penny Marshall"}, end: {title:"A League of Their Own"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {_id:176}, end: {_id:175}, properties:{}}, {start: {_id:174}, end: {_id:177}, properties:{}}, {start: {_id:179}, end: {_id:178}, properties:{}}, {start: {_id:180}, end: {_id:177}, properties:{}}, {start: {_id:174}, end: {_id:180}, properties:{}}] AS row
+MATCH (start:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.start._id})
+MATCH (end:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.end._id})
+CREATE (start)-[r:HAS_SAME_CREATOR]->(end) SET r += row.properties;
+:commit
+:begin
+MATCH (n:`UNIQUE IMPORT LABEL`)  WITH n LIMIT 20000 REMOVE n:`UNIQUE IMPORT LABEL` REMOVE n.`UNIQUE IMPORT ID`;
+:commit
+:begin
+DROP CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
+:commit
\ No newline at end of file
diff --git a/neo4j/import/data_cypher.cypher b/neo4j/import/data_cypher.cypher
new file mode 100644
index 0000000000000000000000000000000000000000..c6b32eeb6386b4df9eac495e5e3658cfd2562936
--- /dev/null
+++ b/neo4j/import/data_cypher.cypher
@@ -0,0 +1,2 @@
+match (a) -[r] -> () delete a, r;
+match (a) delete a;
\ No newline at end of file
diff --git a/neo4j/import/index.cypher b/neo4j/import/index.cypher
new file mode 100644
index 0000000000000000000000000000000000000000..cd57dbd6587c08bc64da00227f34d28c47375484
--- /dev/null
+++ b/neo4j/import/index.cypher
@@ -0,0 +1,8 @@
+:begin
+CREATE INDEX FOR (node:Person) ON (node.born);
+CREATE INDEX FOR (node:Movie) ON (node.released);
+CREATE CONSTRAINT ON (node:Person) ASSERT (node.name) IS UNIQUE;
+CREATE CONSTRAINT ON (node:Movie) ASSERT (node.title) IS UNIQUE;
+CREATE CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
+:commit
+CALL db.awaitIndexes(300);
\ No newline at end of file
diff --git a/neo4j/import/insert.cypher b/neo4j/import/insert.cypher
new file mode 100644
index 0000000000000000000000000000000000000000..ba4cc7bc3e6db76c36975395df80a88af1e38504
--- /dev/null
+++ b/neo4j/import/insert.cypher
@@ -0,0 +1,103 @@
+
+:begin
+UNWIND [{name:"Keanu Reeves", properties:{born:1964}}, {name:"Carrie-Anne Moss", properties:{born:1967}}, {name:"Laurence Fishburne", properties:{born:1961}}, {name:"Hugo Weaving", properties:{born:1960}}, {name:"Lilly Wachowski", properties:{born:1967}}, {name:"Lana Wachowski", properties:{born:1965}}, {name:"Joel Silver", properties:{born:1952}}, {name:"Emil Eifrem", properties:{born:1978}}, {name:"Charlize Theron", properties:{born:1975}}, {name:"Al Pacino", properties:{born:1940}}, {name:"Taylor Hackford", properties:{born:1944}}, {name:"Tom Cruise", properties:{born:1962}}, {name:"Jack Nicholson", properties:{born:1937}}, {name:"Demi Moore", properties:{born:1962}}, {name:"Kevin Bacon", properties:{born:1958}}, {name:"Kiefer Sutherland", properties:{born:1966}}, {name:"Noah Wyle", properties:{born:1971}}, {name:"Cuba Gooding Jr.", properties:{born:1968}}, {name:"Kevin Pollak", properties:{born:1957}}, {name:"J.T. Walsh", properties:{born:1943}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"James Marshall", properties:{born:1967}}, {name:"Christopher Guest", properties:{born:1948}}, {name:"Rob Reiner", properties:{born:1947}}, {name:"Aaron Sorkin", properties:{born:1961}}, {name:"Kelly McGillis", properties:{born:1957}}, {name:"Val Kilmer", properties:{born:1959}}, {name:"Anthony Edwards", properties:{born:1962}}, {name:"Tom Skerritt", properties:{born:1933}}, {name:"Meg Ryan", properties:{born:1961}}, {name:"Tony Scott", properties:{born:1944}}, {name:"Jim Cash", properties:{born:1941}}, {name:"Renee Zellweger", properties:{born:1969}}, {name:"Kelly Preston", properties:{born:1962}}, {name:"Jerry O'Connell", properties:{born:1974}}, {name:"Jay Mohr", properties:{born:1970}}, {name:"Bonnie Hunt", properties:{born:1961}}, {name:"Regina King", properties:{born:1971}}, {name:"Jonathan Lipnicki", properties:{born:1996}}, {name:"Cameron Crowe", properties:{born:1957}}, {name:"River Phoenix", properties:{born:1970}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Corey Feldman", properties:{born:1971}}, {name:"Wil Wheaton", properties:{born:1972}}, {name:"John Cusack", properties:{born:1966}}, {name:"Marshall Bell", properties:{born:1942}}, {name:"Helen Hunt", properties:{born:1963}}, {name:"Greg Kinnear", properties:{born:1963}}, {name:"James L. Brooks", properties:{born:1940}}, {name:"Annabella Sciorra", properties:{born:1960}}, {name:"Max von Sydow", properties:{born:1929}}, {name:"Werner Herzog", properties:{born:1942}}, {name:"Robin Williams", properties:{born:1951}}, {name:"Vincent Ward", properties:{born:1956}}, {name:"Ethan Hawke", properties:{born:1970}}, {name:"Rick Yune", properties:{born:1971}}, {name:"James Cromwell", properties:{born:1940}}, {name:"Scott Hicks", properties:{born:1953}}, {name:"Parker Posey", properties:{born:1968}}, {name:"Dave Chappelle", properties:{born:1973}}, {name:"Steve Zahn", properties:{born:1967}}, {name:"Tom Hanks", properties:{born:1956}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Nora Ephron", properties:{born:1941}}, {name:"Rita Wilson", properties:{born:1956}}, {name:"Bill Pullman", properties:{born:1953}}, {name:"Victor Garber", properties:{born:1949}}, {name:"Rosie O'Donnell", properties:{born:1962}}, {name:"John Patrick Stanley", properties:{born:1950}}, {name:"Nathan Lane", properties:{born:1956}}, {name:"Billy Crystal", properties:{born:1948}}, {name:"Carrie Fisher", properties:{born:1956}}, {name:"Bruno Kirby", properties:{born:1949}}, {name:"Liv Tyler", properties:{born:1977}}, {name:"Brooke Langton", properties:{born:1970}}, {name:"Gene Hackman", properties:{born:1930}}, {name:"Orlando Jones", properties:{born:1968}}, {name:"Howard Deutch", properties:{born:1950}}, {name:"Christian Bale", properties:{born:1974}}, {name:"Zach Grenier", properties:{born:1954}}, {name:"Mike Nichols", properties:{born:1931}}, {name:"Richard Harris", properties:{born:1930}}, {name:"Clint Eastwood", properties:{born:1930}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Takeshi Kitano", properties:{born:1947}}, {name:"Dina Meyer", properties:{born:1968}}, {name:"Ice-T", properties:{born:1958}}, {name:"Robert Longo", properties:{born:1953}}, {name:"Halle Berry", properties:{born:1966}}, {name:"Jim Broadbent", properties:{born:1949}}, {name:"Tom Tykwer", properties:{born:1965}}, {name:"David Mitchell", properties:{born:1969}}, {name:"Stefan Arndt", properties:{born:1961}}, {name:"Ian McKellen", properties:{born:1939}}, {name:"Audrey Tautou", properties:{born:1976}}, {name:"Paul Bettany", properties:{born:1971}}, {name:"Ron Howard", properties:{born:1954}}, {name:"Natalie Portman", properties:{born:1981}}, {name:"Stephen Rea", properties:{born:1946}}, {name:"John Hurt", properties:{born:1940}}, {name:"Ben Miles", properties:{born:1967}}, {name:"Emile Hirsch", properties:{born:1985}}, {name:"John Goodman", properties:{born:1960}}, {name:"Susan Sarandon", properties:{born:1946}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Matthew Fox", properties:{born:1966}}, {name:"Christina Ricci", properties:{born:1980}}, {name:"Rain", properties:{born:1982}}, {name:"Naomie Harris", properties:{}}, {name:"Michael Clarke Duncan", properties:{born:1957}}, {name:"David Morse", properties:{born:1953}}, {name:"Sam Rockwell", properties:{born:1968}}, {name:"Gary Sinise", properties:{born:1955}}, {name:"Patricia Clarkson", properties:{born:1959}}, {name:"Frank Darabont", properties:{born:1959}}, {name:"Frank Langella", properties:{born:1938}}, {name:"Michael Sheen", properties:{born:1969}}, {name:"Oliver Platt", properties:{born:1960}}, {name:"Danny DeVito", properties:{born:1944}}, {name:"John C. Reilly", properties:{born:1965}}, {name:"Ed Harris", properties:{born:1950}}, {name:"Bill Paxton", properties:{born:1955}}, {name:"Philip Seymour Hoffman", properties:{born:1967}}, {name:"Jan de Bont", properties:{born:1943}}, {name:"Robert Zemeckis", properties:{born:1951}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Milos Forman", properties:{born:1932}}, {name:"Diane Keaton", properties:{born:1946}}, {name:"Nancy Meyers", properties:{born:1949}}, {name:"Chris Columbus", properties:{born:1958}}, {name:"Julia Roberts", properties:{born:1967}}, {name:"Madonna", properties:{born:1954}}, {name:"Geena Davis", properties:{born:1956}}, {name:"Lori Petty", properties:{born:1963}}, {name:"Penny Marshall", properties:{born:1943}}, {name:"Paul Blythe", properties:{}}, {name:"Angela Scope", properties:{}}, {name:"Jessica Thompson", properties:{}}, {name:"James Thompson", properties:{}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{_id:171, properties:{license:"proprietary", price:"freemium", name:"Notion"}}, {_id:172, properties:{name:"Libreoffice Calc\n"}}, {_id:173, properties:{name:"Trello"}}, {_id:174, properties:{name:"Word"}}, {_id:175, properties:{name:"Google Slides"}}, {_id:176, properties:{name:"Google Sheets"}}, {_id:177, properties:{name:"Excel"}}, {_id:178, properties:{name:"Libreoffice Writer\n"}}, {_id:179, properties:{name:"Libreoffice Impress\n"}}, {_id:180, properties:{name:"Powerpoint"}}, {_id:181, properties:{name:"Google Docs\n"}}] AS row
+CREATE (n:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row._id}) SET n += row.properties SET n:Software;
+UNWIND [{title:"The Matrix", properties:{tagline:"Welcome to the Real World", released:1999}}, {title:"The Matrix Reloaded", properties:{tagline:"Free your mind", released:2003}}, {title:"The Matrix Revolutions", properties:{tagline:"Everything that has a beginning has an end", released:2003}}, {title:"The Devil's Advocate", properties:{tagline:"Evil has its winning ways", released:1997}}, {title:"A Few Good Men", properties:{tagline:"In the heart of the nation's capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth.", released:1992}}, {title:"Top Gun", properties:{tagline:"I feel the need, the need for speed.", released:1986}}, {title:"Jerry Maguire", properties:{tagline:"The rest of his life begins now.", released:2000}}, {title:"Stand By Me", properties:{tagline:"For some, it's the last real taste of innocence, and the first real taste of life. But for everyone, it's the time that memories are made of.", released:1986}}, {title:"As Good as It Gets", properties:{tagline:"A comedy from the heart that goes for the throat.", released:1997}}, {title:"What Dreams May Come", properties:{tagline:"After life there is more. The end is just the beginning.", released:1998}}, {title:"Snow Falling on Cedars", properties:{tagline:"First loves last. Forever.", released:1999}}, {title:"You've Got Mail", properties:{tagline:"At odds in life... in love on-line.", released:1998}}, {title:"Sleepless in Seattle", properties:{tagline:"What if someone you never met, someone you never saw, someone you never knew was the only someone for you?", released:1993}}, {title:"Joe Versus the Volcano", properties:{tagline:"A story of love, lava and burning desire.", released:1990}}, {title:"When Harry Met Sally", properties:{tagline:"Can two friends sleep together and still love each other in the morning?", released:1998}}, {title:"That Thing You Do", properties:{tagline:"In every life there comes a time when that thing you dream becomes that thing you do", released:1996}}, {title:"The Replacements", properties:{tagline:"Pain heals, Chicks dig scars... Glory lasts forever", released:2000}}, {title:"RescueDawn", properties:{tagline:"Based on the extraordinary true story of one man's fight for freedom", released:2006}}, {title:"The Birdcage", properties:{tagline:"Come as you are", released:1996}}, {title:"Unforgiven", properties:{tagline:"It's a hell of a thing, killing a man", released:1992}}] AS row
+CREATE (n:Movie{title: row.title}) SET n += row.properties;
+UNWIND [{title:"Johnny Mnemonic", properties:{tagline:"The hottest data on earth. In the coolest head in town", released:1995}}, {title:"Cloud Atlas", properties:{tagline:"Everything is connected", released:2012}}, {title:"The Da Vinci Code", properties:{tagline:"Break The Codes", released:2006}}, {title:"V for Vendetta", properties:{tagline:"Freedom! Forever!", released:2006}}, {title:"Speed Racer", properties:{tagline:"Speed has no limits", released:2008}}, {title:"Ninja Assassin", properties:{tagline:"Prepare to enter a secret world of assassins", released:2009}}, {title:"The Green Mile", properties:{tagline:"Walk a mile you'll never forget.", released:1999}}, {title:"Frost/Nixon", properties:{tagline:"400 million people were waiting for the truth.", released:2008}}, {title:"Hoffa", properties:{tagline:"He didn't want law. He wanted justice.", released:1992}}, {title:"Apollo 13", properties:{tagline:"Houston, we have a problem.", released:1995}}, {title:"Twister", properties:{tagline:"Don't Breathe. Don't Look Back.", released:1996}}, {title:"Cast Away", properties:{tagline:"At the edge of the world, his journey begins.", released:2000}}, {title:"One Flew Over the Cuckoo's Nest", properties:{tagline:"If he's crazy, what does that make you?", released:1975}}, {title:"Something's Gotta Give", properties:{released:2003}}, {title:"Bicentennial Man", properties:{tagline:"One robot's 200 year journey to become an ordinary man.", released:1999}}, {title:"Charlie Wilson's War", properties:{tagline:"A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire.", released:2007}}, {title:"The Polar Express", properties:{tagline:"This Holiday Season… Believe", released:2004}}, {title:"A League of Their Own", properties:{tagline:"Once in a lifetime you get a chance to do something different.", released:1992}}] AS row
+CREATE (n:Movie{title: row.title}) SET n += row.properties;
+:commit
+:begin
+UNWIND [{start: {name:"Joel Silver"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Stefan Arndt"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:PRODUCED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Aaron Sorkin"}, end: {title:"A Few Good Men"}, properties:{}}, {start: {name:"Jim Cash"}, end: {title:"Top Gun"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"David Mitchell"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:WROTE]->(end) SET r += row.properties;
+UNWIND [{start: {_id:172}, end: {_id:177}, properties:{}}, {start: {_id:173}, end: {_id:171}, properties:{}}, {start: {_id:171}, end: {_id:181}, properties:{}}, {start: {_id:181}, end: {_id:174}, properties:{}}, {start: {_id:176}, end: {_id:171}, properties:{}}, {start: {_id:178}, end: {_id:174}, properties:{}}, {start: {_id:176}, end: {_id:177}, properties:{}}, {start: {_id:179}, end: {_id:175}, properties:{}}, {start: {_id:179}, end: {_id:180}, properties:{}}, {start: {_id:180}, end: {_id:175}, properties:{}}] AS row
+MATCH (start:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.start._id})
+MATCH (end:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.end._id})
+CREATE (start)-[r:SIMILAR]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Keanu Reeves"}, end: {title:"The Matrix"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Emil Eifrem"}, end: {title:"The Matrix"}, properties:{roles:["Emil"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Devil's Advocate"}, properties:{roles:["Kevin Lomax"]}}, {start: {name:"Charlize Theron"}, end: {title:"The Devil's Advocate"}, properties:{roles:["Mary Ann Lomax"]}}, {start: {name:"Al Pacino"}, end: {title:"The Devil's Advocate"}, properties:{roles:["John Milton"]}}, {start: {name:"Tom Cruise"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Daniel Kaffee"]}}, {start: {name:"Jack Nicholson"}, end: {title:"A Few Good Men"}, properties:{roles:["Col. Nathan R. Jessup"]}}, {start: {name:"Demi Moore"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Cdr. JoAnne Galloway"]}}, {start: {name:"Kevin Bacon"}, end: {title:"A Few Good Men"}, properties:{roles:["Capt. Jack Ross"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Kiefer Sutherland"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Jonathan Kendrick"]}}, {start: {name:"Noah Wyle"}, end: {title:"A Few Good Men"}, properties:{roles:["Cpl. Jeffrey Barnes"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"A Few Good Men"}, properties:{roles:["Cpl. Carl Hammaker"]}}, {start: {name:"Kevin Pollak"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Sam Weinberg"]}}, {start: {name:"J.T. Walsh"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Col. Matthew Andrew Markinson"]}}, {start: {name:"James Marshall"}, end: {title:"A Few Good Men"}, properties:{roles:["Pfc. Louden Downey"]}}, {start: {name:"Christopher Guest"}, end: {title:"A Few Good Men"}, properties:{roles:["Dr. Stone"]}}, {start: {name:"Aaron Sorkin"}, end: {title:"A Few Good Men"}, properties:{roles:["Man in Bar"]}}, {start: {name:"Tom Cruise"}, end: {title:"Top Gun"}, properties:{roles:["Maverick"]}}, {start: {name:"Kelly McGillis"}, end: {title:"Top Gun"}, properties:{roles:["Charlie"]}}, {start: {name:"Val Kilmer"}, end: {title:"Top Gun"}, properties:{roles:["Iceman"]}}, {start: {name:"Anthony Edwards"}, end: {title:"Top Gun"}, properties:{roles:["Goose"]}}, {start: {name:"Tom Skerritt"}, end: {title:"Top Gun"}, properties:{roles:["Viper"]}}, {start: {name:"Meg Ryan"}, end: {title:"Top Gun"}, properties:{roles:["Carole"]}}, {start: {name:"Tom Cruise"}, end: {title:"Jerry Maguire"}, properties:{roles:["Jerry Maguire"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"Jerry Maguire"}, properties:{roles:["Rod Tidwell"]}}, {start: {name:"Renee Zellweger"}, end: {title:"Jerry Maguire"}, properties:{roles:["Dorothy Boyd"]}}, {start: {name:"Kelly Preston"}, end: {title:"Jerry Maguire"}, properties:{roles:["Avery Bishop"]}}, {start: {name:"Jerry O'Connell"}, end: {title:"Jerry Maguire"}, properties:{roles:["Frank Cushman"]}}, {start: {name:"Jay Mohr"}, end: {title:"Jerry Maguire"}, properties:{roles:["Bob Sugar"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Bonnie Hunt"}, end: {title:"Jerry Maguire"}, properties:{roles:["Laurel Boyd"]}}, {start: {name:"Regina King"}, end: {title:"Jerry Maguire"}, properties:{roles:["Marcee Tidwell"]}}, {start: {name:"Jonathan Lipnicki"}, end: {title:"Jerry Maguire"}, properties:{roles:["Ray Boyd"]}}, {start: {name:"Wil Wheaton"}, end: {title:"Stand By Me"}, properties:{roles:["Gordie Lachance"]}}, {start: {name:"River Phoenix"}, end: {title:"Stand By Me"}, properties:{roles:["Chris Chambers"]}}, {start: {name:"Jerry O'Connell"}, end: {title:"Stand By Me"}, properties:{roles:["Vern Tessio"]}}, {start: {name:"Corey Feldman"}, end: {title:"Stand By Me"}, properties:{roles:["Teddy Duchamp"]}}, {start: {name:"John Cusack"}, end: {title:"Stand By Me"}, properties:{roles:["Denny Lachance"]}}, {start: {name:"Kiefer Sutherland"}, end: {title:"Stand By Me"}, properties:{roles:["Ace Merrill"]}}, {start: {name:"Marshall Bell"}, end: {title:"Stand By Me"}, properties:{roles:["Mr. Lachance"]}}, {start: {name:"Jack Nicholson"}, end: {title:"As Good as It Gets"}, properties:{roles:["Melvin Udall"]}}, {start: {name:"Helen Hunt"}, end: {title:"As Good as It Gets"}, properties:{roles:["Carol Connelly"]}}, {start: {name:"Greg Kinnear"}, end: {title:"As Good as It Gets"}, properties:{roles:["Simon Bishop"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"As Good as It Gets"}, properties:{roles:["Frank Sachs"]}}, {start: {name:"Robin Williams"}, end: {title:"What Dreams May Come"}, properties:{roles:["Chris Nielsen"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"What Dreams May Come"}, properties:{roles:["Albert Lewis"]}}, {start: {name:"Annabella Sciorra"}, end: {title:"What Dreams May Come"}, properties:{roles:["Annie Collins-Nielsen"]}}, {start: {name:"Max von Sydow"}, end: {title:"What Dreams May Come"}, properties:{roles:["The Tracker"]}}, {start: {name:"Werner Herzog"}, end: {title:"What Dreams May Come"}, properties:{roles:["The Face"]}}, {start: {name:"Ethan Hawke"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Ishmael Chambers"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Rick Yune"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Kazuo Miyamoto"]}}, {start: {name:"Max von Sydow"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Nels Gudmundsson"]}}, {start: {name:"James Cromwell"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Judge Fielding"]}}, {start: {name:"Tom Hanks"}, end: {title:"You've Got Mail"}, properties:{roles:["Joe Fox"]}}, {start: {name:"Meg Ryan"}, end: {title:"You've Got Mail"}, properties:{roles:["Kathleen Kelly"]}}, {start: {name:"Greg Kinnear"}, end: {title:"You've Got Mail"}, properties:{roles:["Frank Navasky"]}}, {start: {name:"Parker Posey"}, end: {title:"You've Got Mail"}, properties:{roles:["Patricia Eden"]}}, {start: {name:"Dave Chappelle"}, end: {title:"You've Got Mail"}, properties:{roles:["Kevin Jackson"]}}, {start: {name:"Steve Zahn"}, end: {title:"You've Got Mail"}, properties:{roles:["George Pappas"]}}, {start: {name:"Tom Hanks"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Sam Baldwin"]}}, {start: {name:"Meg Ryan"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Annie Reed"]}}, {start: {name:"Rita Wilson"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Suzy"]}}, {start: {name:"Bill Pullman"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Walter"]}}, {start: {name:"Victor Garber"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Greg"]}}, {start: {name:"Rosie O'Donnell"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Becky"]}}, {start: {name:"Tom Hanks"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["Joe Banks"]}}, {start: {name:"Meg Ryan"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["DeDe", "Angelica Graynamore", "Patricia Graynamore"]}}, {start: {name:"Nathan Lane"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["Baw"]}}, {start: {name:"Billy Crystal"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Harry Burns"]}}, {start: {name:"Meg Ryan"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Sally Albright"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Carrie Fisher"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Marie"]}}, {start: {name:"Bruno Kirby"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Jess"]}}, {start: {name:"Tom Hanks"}, end: {title:"That Thing You Do"}, properties:{roles:["Mr. White"]}}, {start: {name:"Liv Tyler"}, end: {title:"That Thing You Do"}, properties:{roles:["Faye Dolan"]}}, {start: {name:"Charlize Theron"}, end: {title:"That Thing You Do"}, properties:{roles:["Tina"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Replacements"}, properties:{roles:["Shane Falco"]}}, {start: {name:"Brooke Langton"}, end: {title:"The Replacements"}, properties:{roles:["Annabelle Farrell"]}}, {start: {name:"Gene Hackman"}, end: {title:"The Replacements"}, properties:{roles:["Jimmy McGinty"]}}, {start: {name:"Orlando Jones"}, end: {title:"The Replacements"}, properties:{roles:["Clifford Franklin"]}}, {start: {name:"Marshall Bell"}, end: {title:"RescueDawn"}, properties:{roles:["Admiral"]}}, {start: {name:"Christian Bale"}, end: {title:"RescueDawn"}, properties:{roles:["Dieter Dengler"]}}, {start: {name:"Zach Grenier"}, end: {title:"RescueDawn"}, properties:{roles:["Squad Leader"]}}, {start: {name:"Steve Zahn"}, end: {title:"RescueDawn"}, properties:{roles:["Duane"]}}, {start: {name:"Robin Williams"}, end: {title:"The Birdcage"}, properties:{roles:["Armand Goldman"]}}, {start: {name:"Nathan Lane"}, end: {title:"The Birdcage"}, properties:{roles:["Albert Goldman"]}}, {start: {name:"Gene Hackman"}, end: {title:"The Birdcage"}, properties:{roles:["Sen. Kevin Keeley"]}}, {start: {name:"Richard Harris"}, end: {title:"Unforgiven"}, properties:{roles:["English Bob"]}}, {start: {name:"Clint Eastwood"}, end: {title:"Unforgiven"}, properties:{roles:["Bill Munny"]}}, {start: {name:"Gene Hackman"}, end: {title:"Unforgiven"}, properties:{roles:["Little Bill Daggett"]}}, {start: {name:"Keanu Reeves"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Johnny Mnemonic"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Takeshi Kitano"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Takahashi"]}}, {start: {name:"Dina Meyer"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Jane"]}}, {start: {name:"Ice-T"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["J-Bone"]}}, {start: {name:"Tom Hanks"}, end: {title:"Cloud Atlas"}, properties:{roles:["Zachry", "Dr. Henry Goose", "Isaac Sachs", "Dermot Hoggins"]}}, {start: {name:"Hugo Weaving"}, end: {title:"Cloud Atlas"}, properties:{roles:["Bill Smoke", "Haskell Moore", "Tadeusz Kesselring", "Nurse Noakes", "Boardman Mephi", "Old Georgie"]}}, {start: {name:"Halle Berry"}, end: {title:"Cloud Atlas"}, properties:{roles:["Luisa Rey", "Jocasta Ayrs", "Ovid", "Meronym"]}}, {start: {name:"Jim Broadbent"}, end: {title:"Cloud Atlas"}, properties:{roles:["Vyvyan Ayrs", "Captain Molyneux", "Timothy Cavendish"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Dr. Robert Langdon"]}}, {start: {name:"Ian McKellen"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Sir Leight Teabing"]}}, {start: {name:"Audrey Tautou"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Sophie Neveu"]}}, {start: {name:"Paul Bettany"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Silas"]}}, {start: {name:"Hugo Weaving"}, end: {title:"V for Vendetta"}, properties:{roles:["V"]}}, {start: {name:"Natalie Portman"}, end: {title:"V for Vendetta"}, properties:{roles:["Evey Hammond"]}}, {start: {name:"Stephen Rea"}, end: {title:"V for Vendetta"}, properties:{roles:["Eric Finch"]}}, {start: {name:"John Hurt"}, end: {title:"V for Vendetta"}, properties:{roles:["High Chancellor Adam Sutler"]}}, {start: {name:"Ben Miles"}, end: {title:"V for Vendetta"}, properties:{roles:["Dascomb"]}}, {start: {name:"Emile Hirsch"}, end: {title:"Speed Racer"}, properties:{roles:["Speed Racer"]}}, {start: {name:"John Goodman"}, end: {title:"Speed Racer"}, properties:{roles:["Pops"]}}, {start: {name:"Susan Sarandon"}, end: {title:"Speed Racer"}, properties:{roles:["Mom"]}}, {start: {name:"Matthew Fox"}, end: {title:"Speed Racer"}, properties:{roles:["Racer X"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Christina Ricci"}, end: {title:"Speed Racer"}, properties:{roles:["Trixie"]}}, {start: {name:"Rain"}, end: {title:"Speed Racer"}, properties:{roles:["Taejo Togokahn"]}}, {start: {name:"Ben Miles"}, end: {title:"Speed Racer"}, properties:{roles:["Cass Jones"]}}, {start: {name:"Rain"}, end: {title:"Ninja Assassin"}, properties:{roles:["Raizo"]}}, {start: {name:"Naomie Harris"}, end: {title:"Ninja Assassin"}, properties:{roles:["Mika Coretti"]}}, {start: {name:"Rick Yune"}, end: {title:"Ninja Assassin"}, properties:{roles:["Takeshi"]}}, {start: {name:"Ben Miles"}, end: {title:"Ninja Assassin"}, properties:{roles:["Ryan Maslow"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Green Mile"}, properties:{roles:["Paul Edgecomb"]}}, {start: {name:"Michael Clarke Duncan"}, end: {title:"The Green Mile"}, properties:{roles:["John Coffey"]}}, {start: {name:"David Morse"}, end: {title:"The Green Mile"}, properties:{roles:["Brutus \"Brutal\" Howell"]}}, {start: {name:"Bonnie Hunt"}, end: {title:"The Green Mile"}, properties:{roles:["Jan Edgecomb"]}}, {start: {name:"James Cromwell"}, end: {title:"The Green Mile"}, properties:{roles:["Warden Hal Moores"]}}, {start: {name:"Sam Rockwell"}, end: {title:"The Green Mile"}, properties:{roles:["\"Wild Bill\" Wharton"]}}, {start: {name:"Gary Sinise"}, end: {title:"The Green Mile"}, properties:{roles:["Burt Hammersmith"]}}, {start: {name:"Patricia Clarkson"}, end: {title:"The Green Mile"}, properties:{roles:["Melinda Moores"]}}, {start: {name:"Frank Langella"}, end: {title:"Frost/Nixon"}, properties:{roles:["Richard Nixon"]}}, {start: {name:"Michael Sheen"}, end: {title:"Frost/Nixon"}, properties:{roles:["David Frost"]}}, {start: {name:"Kevin Bacon"}, end: {title:"Frost/Nixon"}, properties:{roles:["Jack Brennan"]}}, {start: {name:"Oliver Platt"}, end: {title:"Frost/Nixon"}, properties:{roles:["Bob Zelnick"]}}, {start: {name:"Sam Rockwell"}, end: {title:"Frost/Nixon"}, properties:{roles:["James Reston, Jr."]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Jack Nicholson"}, end: {title:"Hoffa"}, properties:{roles:["Hoffa"]}}, {start: {name:"Danny DeVito"}, end: {title:"Hoffa"}, properties:{roles:["Robert \"Bobby\" Ciaro"]}}, {start: {name:"J.T. Walsh"}, end: {title:"Hoffa"}, properties:{roles:["Frank Fitzsimmons"]}}, {start: {name:"John C. Reilly"}, end: {title:"Hoffa"}, properties:{roles:["Peter \"Pete\" Connelly"]}}, {start: {name:"Tom Hanks"}, end: {title:"Apollo 13"}, properties:{roles:["Jim Lovell"]}}, {start: {name:"Kevin Bacon"}, end: {title:"Apollo 13"}, properties:{roles:["Jack Swigert"]}}, {start: {name:"Ed Harris"}, end: {title:"Apollo 13"}, properties:{roles:["Gene Kranz"]}}, {start: {name:"Bill Paxton"}, end: {title:"Apollo 13"}, properties:{roles:["Fred Haise"]}}, {start: {name:"Gary Sinise"}, end: {title:"Apollo 13"}, properties:{roles:["Ken Mattingly"]}}, {start: {name:"Bill Paxton"}, end: {title:"Twister"}, properties:{roles:["Bill Harding"]}}, {start: {name:"Helen Hunt"}, end: {title:"Twister"}, properties:{roles:["Dr. Jo Harding"]}}, {start: {name:"Zach Grenier"}, end: {title:"Twister"}, properties:{roles:["Eddie"]}}, {start: {name:"Philip Seymour Hoffman"}, end: {title:"Twister"}, properties:{roles:["Dustin \"Dusty\" Davis"]}}, {start: {name:"Tom Hanks"}, end: {title:"Cast Away"}, properties:{roles:["Chuck Noland"]}}, {start: {name:"Helen Hunt"}, end: {title:"Cast Away"}, properties:{roles:["Kelly Frears"]}}, {start: {name:"Jack Nicholson"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{roles:["Randle McMurphy"]}}, {start: {name:"Danny DeVito"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{roles:["Martini"]}}, {start: {name:"Jack Nicholson"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Harry Sanborn"]}}, {start: {name:"Diane Keaton"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Erica Barry"]}}, {start: {name:"Keanu Reeves"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Julian Mercer"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Robin Williams"}, end: {title:"Bicentennial Man"}, properties:{roles:["Andrew Marin"]}}, {start: {name:"Oliver Platt"}, end: {title:"Bicentennial Man"}, properties:{roles:["Rupert Burns"]}}, {start: {name:"Tom Hanks"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Rep. Charlie Wilson"]}}, {start: {name:"Julia Roberts"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Joanne Herring"]}}, {start: {name:"Philip Seymour Hoffman"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Gust Avrakotos"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Polar Express"}, properties:{roles:["Hero Boy", "Father", "Conductor", "Hobo", "Scrooge", "Santa Claus"]}}, {start: {name:"Tom Hanks"}, end: {title:"A League of Their Own"}, properties:{roles:["Jimmy Dugan"]}}, {start: {name:"Geena Davis"}, end: {title:"A League of Their Own"}, properties:{roles:["Dottie Hinson"]}}, {start: {name:"Lori Petty"}, end: {title:"A League of Their Own"}, properties:{roles:["Kit Keller"]}}, {start: {name:"Rosie O'Donnell"}, end: {title:"A League of Their Own"}, properties:{roles:["Doris Murphy"]}}, {start: {name:"Madonna"}, end: {title:"A League of Their Own"}, properties:{roles:["\"All the Way\" Mae Mordabito"]}}, {start: {name:"Bill Paxton"}, end: {title:"A League of Their Own"}, properties:{roles:["Bob Hinson"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Jessica Thompson"}, end: {title:"Cloud Atlas"}, properties:{summary:"An amazing journey", rating:95}}, {start: {name:"Jessica Thompson"}, end: {title:"The Replacements"}, properties:{summary:"Silly, but fun", rating:65}}, {start: {name:"James Thompson"}, end: {title:"The Replacements"}, properties:{summary:"The coolest football movie ever", rating:100}}, {start: {name:"Angela Scope"}, end: {title:"The Replacements"}, properties:{summary:"Pretty funny at times", rating:62}}, {start: {name:"Jessica Thompson"}, end: {title:"Unforgiven"}, properties:{summary:"Dark, but compelling", rating:85}}, {start: {name:"Jessica Thompson"}, end: {title:"The Birdcage"}, properties:{summary:"Slapstick redeemed only by the Robin Williams and Gene Hackman's stellar performances", rating:45}}, {start: {name:"Jessica Thompson"}, end: {title:"The Da Vinci Code"}, properties:{summary:"A solid romp", rating:68}}, {start: {name:"James Thompson"}, end: {title:"The Da Vinci Code"}, properties:{summary:"Fun, but a little far fetched", rating:65}}, {start: {name:"Jessica Thompson"}, end: {title:"Jerry Maguire"}, properties:{summary:"You had me at Jerry", rating:92}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:REVIEWED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"James Thompson"}, end: {name:"Jessica Thompson"}, properties:{}}, {start: {name:"Angela Scope"}, end: {name:"Jessica Thompson"}, properties:{}}, {start: {name:"Paul Blythe"}, end: {name:"Angela Scope"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Person{name: row.end.name})
+CREATE (start)-[r:FOLLOWS]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Lilly Wachowski"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Taylor Hackford"}, end: {title:"The Devil's Advocate"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"A Few Good Men"}, properties:{}}, {start: {name:"Tony Scott"}, end: {title:"Top Gun"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"Stand By Me"}, properties:{}}, {start: {name:"James L. Brooks"}, end: {title:"As Good as It Gets"}, properties:{}}, {start: {name:"Vincent Ward"}, end: {title:"What Dreams May Come"}, properties:{}}, {start: {name:"Scott Hicks"}, end: {title:"Snow Falling on Cedars"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"You've Got Mail"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"Sleepless in Seattle"}, properties:{}}, {start: {name:"John Patrick Stanley"}, end: {title:"Joe Versus the Volcano"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Tom Hanks"}, end: {title:"That Thing You Do"}, properties:{}}, {start: {name:"Howard Deutch"}, end: {title:"The Replacements"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Werner Herzog"}, end: {title:"RescueDawn"}, properties:{}}, {start: {name:"Mike Nichols"}, end: {title:"The Birdcage"}, properties:{}}, {start: {name:"Clint Eastwood"}, end: {title:"Unforgiven"}, properties:{}}, {start: {name:"Robert Longo"}, end: {title:"Johnny Mnemonic"}, properties:{}}, {start: {name:"Tom Tykwer"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"The Da Vinci Code"}, properties:{}}, {start: {name:"James Marshall"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"James Marshall"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Frank Darabont"}, end: {title:"The Green Mile"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"Frost/Nixon"}, properties:{}}, {start: {name:"Danny DeVito"}, end: {title:"Hoffa"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"Apollo 13"}, properties:{}}, {start: {name:"Jan de Bont"}, end: {title:"Twister"}, properties:{}}, {start: {name:"Robert Zemeckis"}, end: {title:"Cast Away"}, properties:{}}, {start: {name:"Milos Forman"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Chris Columbus"}, end: {title:"Bicentennial Man"}, properties:{}}, {start: {name:"Mike Nichols"}, end: {title:"Charlie Wilson's War"}, properties:{}}, {start: {name:"Robert Zemeckis"}, end: {title:"The Polar Express"}, properties:{}}, {start: {name:"Penny Marshall"}, end: {title:"A League of Their Own"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {_id:176}, end: {_id:175}, properties:{}}, {start: {_id:174}, end: {_id:177}, properties:{}}, {start: {_id:179}, end: {_id:178}, properties:{}}, {start: {_id:180}, end: {_id:177}, properties:{}}, {start: {_id:174}, end: {_id:180}, properties:{}}] AS row
+MATCH (start:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.start._id})
+MATCH (end:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.end._id})
+CREATE (start)-[r:HAS_SAME_CREATOR]->(end) SET r += row.properties;
+:commit
+:begin
+MATCH (n:`UNIQUE IMPORT LABEL`)  WITH n LIMIT 20000 REMOVE n:`UNIQUE IMPORT LABEL` REMOVE n.`UNIQUE IMPORT ID`;
+:commit
+:begin
+DROP CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
+:commit
\ No newline at end of file
diff --git a/neo4j/import/reset.cypher b/neo4j/import/reset.cypher
new file mode 100644
index 0000000000000000000000000000000000000000..c6b32eeb6386b4df9eac495e5e3658cfd2562936
--- /dev/null
+++ b/neo4j/import/reset.cypher
@@ -0,0 +1,2 @@
+match (a) -[r] -> () delete a, r;
+match (a) delete a;
\ No newline at end of file
diff --git a/neo4j/import_old/data.csv b/neo4j/import_old/data.csv
new file mode 100755
index 0000000000000000000000000000000000000000..69ab40c239269db06b4489ed5df6820f9fa4b07b
--- /dev/null
+++ b/neo4j/import_old/data.csv
@@ -0,0 +1,455 @@
+"_id","_labels","born","license","name","price","released","tagline","title","_start","_end","_type","rating","roles","summary"
+"0",":Movie","","","","","1999","Welcome to the Real World","The Matrix",,,,,,
+"1",":Person","1964","","Keanu Reeves","","","","",,,,,,
+"2",":Person","1967","","Carrie-Anne Moss","","","","",,,,,,
+"3",":Person","1961","","Laurence Fishburne","","","","",,,,,,
+"4",":Person","1960","","Hugo Weaving","","","","",,,,,,
+"5",":Person","1967","","Lilly Wachowski","","","","",,,,,,
+"6",":Person","1965","","Lana Wachowski","","","","",,,,,,
+"7",":Person","1952","","Joel Silver","","","","",,,,,,
+"8",":Person","1978","","Emil Eifrem","","","","",,,,,,
+"9",":Movie","","","","","2003","Free your mind","The Matrix Reloaded",,,,,,
+"10",":Movie","","","","","2003","Everything that has a beginning has an end","The Matrix Revolutions",,,,,,
+"11",":Movie","","","","","1997","Evil has its winning ways","The Devil's Advocate",,,,,,
+"12",":Person","1975","","Charlize Theron","","","","",,,,,,
+"13",":Person","1940","","Al Pacino","","","","",,,,,,
+"14",":Person","1944","","Taylor Hackford","","","","",,,,,,
+"15",":Movie","","","","","1992","In the heart of the nation's capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth.","A Few Good Men",,,,,,
+"16",":Person","1962","","Tom Cruise","","","","",,,,,,
+"17",":Person","1937","","Jack Nicholson","","","","",,,,,,
+"18",":Person","1962","","Demi Moore","","","","",,,,,,
+"19",":Person","1958","","Kevin Bacon","","","","",,,,,,
+"20",":Person","1966","","Kiefer Sutherland","","","","",,,,,,
+"21",":Person","1971","","Noah Wyle","","","","",,,,,,
+"22",":Person","1968","","Cuba Gooding Jr.","","","","",,,,,,
+"23",":Person","1957","","Kevin Pollak","","","","",,,,,,
+"24",":Person","1943","","J.T. Walsh","","","","",,,,,,
+"25",":Person","1967","","James Marshall","","","","",,,,,,
+"26",":Person","1948","","Christopher Guest","","","","",,,,,,
+"27",":Person","1947","","Rob Reiner","","","","",,,,,,
+"28",":Person","1961","","Aaron Sorkin","","","","",,,,,,
+"29",":Movie","","","","","1986","I feel the need, the need for speed.","Top Gun",,,,,,
+"30",":Person","1957","","Kelly McGillis","","","","",,,,,,
+"31",":Person","1959","","Val Kilmer","","","","",,,,,,
+"32",":Person","1962","","Anthony Edwards","","","","",,,,,,
+"33",":Person","1933","","Tom Skerritt","","","","",,,,,,
+"34",":Person","1961","","Meg Ryan","","","","",,,,,,
+"35",":Person","1944","","Tony Scott","","","","",,,,,,
+"36",":Person","1941","","Jim Cash","","","","",,,,,,
+"37",":Movie","","","","","2000","The rest of his life begins now.","Jerry Maguire",,,,,,
+"38",":Person","1969","","Renee Zellweger","","","","",,,,,,
+"39",":Person","1962","","Kelly Preston","","","","",,,,,,
+"40",":Person","1974","","Jerry O'Connell","","","","",,,,,,
+"41",":Person","1970","","Jay Mohr","","","","",,,,,,
+"42",":Person","1961","","Bonnie Hunt","","","","",,,,,,
+"43",":Person","1971","","Regina King","","","","",,,,,,
+"44",":Person","1996","","Jonathan Lipnicki","","","","",,,,,,
+"45",":Person","1957","","Cameron Crowe","","","","",,,,,,
+"46",":Movie","","","","","1986","For some, it's the last real taste of innocence, and the first real taste of life. But for everyone, it's the time that memories are made of.","Stand By Me",,,,,,
+"47",":Person","1970","","River Phoenix","","","","",,,,,,
+"48",":Person","1971","","Corey Feldman","","","","",,,,,,
+"49",":Person","1972","","Wil Wheaton","","","","",,,,,,
+"50",":Person","1966","","John Cusack","","","","",,,,,,
+"51",":Person","1942","","Marshall Bell","","","","",,,,,,
+"52",":Movie","","","","","1997","A comedy from the heart that goes for the throat.","As Good as It Gets",,,,,,
+"53",":Person","1963","","Helen Hunt","","","","",,,,,,
+"54",":Person","1963","","Greg Kinnear","","","","",,,,,,
+"55",":Person","1940","","James L. Brooks","","","","",,,,,,
+"56",":Movie","","","","","1998","After life there is more. The end is just the beginning.","What Dreams May Come",,,,,,
+"57",":Person","1960","","Annabella Sciorra","","","","",,,,,,
+"58",":Person","1929","","Max von Sydow","","","","",,,,,,
+"59",":Person","1942","","Werner Herzog","","","","",,,,,,
+"60",":Person","1951","","Robin Williams","","","","",,,,,,
+"61",":Person","1956","","Vincent Ward","","","","",,,,,,
+"62",":Movie","","","","","1999","First loves last. Forever.","Snow Falling on Cedars",,,,,,
+"63",":Person","1970","","Ethan Hawke","","","","",,,,,,
+"64",":Person","1971","","Rick Yune","","","","",,,,,,
+"65",":Person","1940","","James Cromwell","","","","",,,,,,
+"66",":Person","1953","","Scott Hicks","","","","",,,,,,
+"67",":Movie","","","","","1998","At odds in life... in love on-line.","You've Got Mail",,,,,,
+"68",":Person","1968","","Parker Posey","","","","",,,,,,
+"69",":Person","1973","","Dave Chappelle","","","","",,,,,,
+"70",":Person","1967","","Steve Zahn","","","","",,,,,,
+"71",":Person","1956","","Tom Hanks","","","","",,,,,,
+"72",":Person","1941","","Nora Ephron","","","","",,,,,,
+"73",":Movie","","","","","1993","What if someone you never met, someone you never saw, someone you never knew was the only someone for you?","Sleepless in Seattle",,,,,,
+"74",":Person","1956","","Rita Wilson","","","","",,,,,,
+"75",":Person","1953","","Bill Pullman","","","","",,,,,,
+"76",":Person","1949","","Victor Garber","","","","",,,,,,
+"77",":Person","1962","","Rosie O'Donnell","","","","",,,,,,
+"78",":Movie","","","","","1990","A story of love, lava and burning desire.","Joe Versus the Volcano",,,,,,
+"79",":Person","1950","","John Patrick Stanley","","","","",,,,,,
+"80",":Person","1956","","Nathan Lane","","","","",,,,,,
+"81",":Movie","","","","","1998","Can two friends sleep together and still love each other in the morning?","When Harry Met Sally",,,,,,
+"82",":Person","1948","","Billy Crystal","","","","",,,,,,
+"83",":Person","1956","","Carrie Fisher","","","","",,,,,,
+"84",":Person","1949","","Bruno Kirby","","","","",,,,,,
+"85",":Movie","","","","","1996","In every life there comes a time when that thing you dream becomes that thing you do","That Thing You Do",,,,,,
+"86",":Person","1977","","Liv Tyler","","","","",,,,,,
+"87",":Movie","","","","","2000","Pain heals, Chicks dig scars... Glory lasts forever","The Replacements",,,,,,
+"88",":Person","1970","","Brooke Langton","","","","",,,,,,
+"89",":Person","1930","","Gene Hackman","","","","",,,,,,
+"90",":Person","1968","","Orlando Jones","","","","",,,,,,
+"91",":Person","1950","","Howard Deutch","","","","",,,,,,
+"92",":Movie","","","","","2006","Based on the extraordinary true story of one man's fight for freedom","RescueDawn",,,,,,
+"93",":Person","1974","","Christian Bale","","","","",,,,,,
+"94",":Person","1954","","Zach Grenier","","","","",,,,,,
+"95",":Movie","","","","","1996","Come as you are","The Birdcage",,,,,,
+"96",":Person","1931","","Mike Nichols","","","","",,,,,,
+"97",":Movie","","","","","1992","It's a hell of a thing, killing a man","Unforgiven",,,,,,
+"98",":Person","1930","","Richard Harris","","","","",,,,,,
+"99",":Person","1930","","Clint Eastwood","","","","",,,,,,
+"100",":Movie","","","","","1995","The hottest data on earth. In the coolest head in town","Johnny Mnemonic",,,,,,
+"101",":Person","1947","","Takeshi Kitano","","","","",,,,,,
+"102",":Person","1968","","Dina Meyer","","","","",,,,,,
+"103",":Person","1958","","Ice-T","","","","",,,,,,
+"104",":Person","1953","","Robert Longo","","","","",,,,,,
+"105",":Movie","","","","","2012","Everything is connected","Cloud Atlas",,,,,,
+"106",":Person","1966","","Halle Berry","","","","",,,,,,
+"107",":Person","1949","","Jim Broadbent","","","","",,,,,,
+"108",":Person","1965","","Tom Tykwer","","","","",,,,,,
+"109",":Person","1969","","David Mitchell","","","","",,,,,,
+"110",":Person","1961","","Stefan Arndt","","","","",,,,,,
+"111",":Movie","","","","","2006","Break The Codes","The Da Vinci Code",,,,,,
+"112",":Person","1939","","Ian McKellen","","","","",,,,,,
+"113",":Person","1976","","Audrey Tautou","","","","",,,,,,
+"114",":Person","1971","","Paul Bettany","","","","",,,,,,
+"115",":Person","1954","","Ron Howard","","","","",,,,,,
+"116",":Movie","","","","","2006","Freedom! Forever!","V for Vendetta",,,,,,
+"117",":Person","1981","","Natalie Portman","","","","",,,,,,
+"118",":Person","1946","","Stephen Rea","","","","",,,,,,
+"119",":Person","1940","","John Hurt","","","","",,,,,,
+"120",":Person","1967","","Ben Miles","","","","",,,,,,
+"121",":Movie","","","","","2008","Speed has no limits","Speed Racer",,,,,,
+"122",":Person","1985","","Emile Hirsch","","","","",,,,,,
+"123",":Person","1960","","John Goodman","","","","",,,,,,
+"124",":Person","1946","","Susan Sarandon","","","","",,,,,,
+"125",":Person","1966","","Matthew Fox","","","","",,,,,,
+"126",":Person","1980","","Christina Ricci","","","","",,,,,,
+"127",":Person","1982","","Rain","","","","",,,,,,
+"128",":Movie","","","","","2009","Prepare to enter a secret world of assassins","Ninja Assassin",,,,,,
+"129",":Person","","","Naomie Harris","","","","",,,,,,
+"130",":Movie","","","","","1999","Walk a mile you'll never forget.","The Green Mile",,,,,,
+"131",":Person","1957","","Michael Clarke Duncan","","","","",,,,,,
+"132",":Person","1953","","David Morse","","","","",,,,,,
+"133",":Person","1968","","Sam Rockwell","","","","",,,,,,
+"134",":Person","1955","","Gary Sinise","","","","",,,,,,
+"135",":Person","1959","","Patricia Clarkson","","","","",,,,,,
+"136",":Person","1959","","Frank Darabont","","","","",,,,,,
+"137",":Movie","","","","","2008","400 million people were waiting for the truth.","Frost/Nixon",,,,,,
+"138",":Person","1938","","Frank Langella","","","","",,,,,,
+"139",":Person","1969","","Michael Sheen","","","","",,,,,,
+"140",":Person","1960","","Oliver Platt","","","","",,,,,,
+"141",":Movie","","","","","1992","He didn't want law. He wanted justice.","Hoffa",,,,,,
+"142",":Person","1944","","Danny DeVito","","","","",,,,,,
+"143",":Person","1965","","John C. Reilly","","","","",,,,,,
+"144",":Movie","","","","","1995","Houston, we have a problem.","Apollo 13",,,,,,
+"145",":Person","1950","","Ed Harris","","","","",,,,,,
+"146",":Person","1955","","Bill Paxton","","","","",,,,,,
+"147",":Movie","","","","","1996","Don't Breathe. Don't Look Back.","Twister",,,,,,
+"148",":Person","1967","","Philip Seymour Hoffman","","","","",,,,,,
+"149",":Person","1943","","Jan de Bont","","","","",,,,,,
+"150",":Movie","","","","","2000","At the edge of the world, his journey begins.","Cast Away",,,,,,
+"151",":Person","1951","","Robert Zemeckis","","","","",,,,,,
+"152",":Movie","","","","","1975","If he's crazy, what does that make you?","One Flew Over the Cuckoo's Nest",,,,,,
+"153",":Person","1932","","Milos Forman","","","","",,,,,,
+"154",":Movie","","","","","2003","","Something's Gotta Give",,,,,,
+"155",":Person","1946","","Diane Keaton","","","","",,,,,,
+"156",":Person","1949","","Nancy Meyers","","","","",,,,,,
+"157",":Movie","","","","","1999","One robot's 200 year journey to become an ordinary man.","Bicentennial Man",,,,,,
+"158",":Person","1958","","Chris Columbus","","","","",,,,,,
+"159",":Movie","","","","","2007","A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire.","Charlie Wilson's War",,,,,,
+"160",":Person","1967","","Julia Roberts","","","","",,,,,,
+"161",":Movie","","","","","2004","This Holiday Season… Believe","The Polar Express",,,,,,
+"162",":Movie","","","","","1992","Once in a lifetime you get a chance to do something different.","A League of Their Own",,,,,,
+"163",":Person","1954","","Madonna","","","","",,,,,,
+"164",":Person","1956","","Geena Davis","","","","",,,,,,
+"165",":Person","1963","","Lori Petty","","","","",,,,,,
+"166",":Person","1943","","Penny Marshall","","","","",,,,,,
+"167",":Person","","","Paul Blythe","","","","",,,,,,
+"168",":Person","","","Angela Scope","","","","",,,,,,
+"169",":Person","","","Jessica Thompson","","","","",,,,,,
+"170",":Person","","","James Thompson","","","","",,,,,,
+"171",":Software","","proprietary","Notion","freemium","","","",,,,,,
+"172",":Software","","","Libreoffice Calc
+","","","","",,,,,,
+"173",":Software","","","Trello","","","","",,,,,,
+"174",":Software","","","Word","","","","",,,,,,
+"175",":Software","","","Google Slides","","","","",,,,,,
+"176",":Software","","","Google Sheets","","","","",,,,,,
+"177",":Software","","","Excel","","","","",,,,,,
+"178",":Software","","","Libreoffice Writer
+","","","","",,,,,,
+"179",":Software","","","Libreoffice Impress
+","","","","",,,,,,
+"180",":Software","","","Powerpoint","","","","",,,,,,
+"181",":Software","","","Google Docs
+","","","","",,,,,,
+,,,,,,,,,"1","0","ACTED_IN","","[""Neo""]",""
+,,,,,,,,,"2","0","ACTED_IN","","[""Trinity""]",""
+,,,,,,,,,"3","0","ACTED_IN","","[""Morpheus""]",""
+,,,,,,,,,"4","0","ACTED_IN","","[""Agent Smith""]",""
+,,,,,,,,,"5","0","DIRECTED","","",""
+,,,,,,,,,"6","0","DIRECTED","","",""
+,,,,,,,,,"7","0","PRODUCED","","",""
+,,,,,,,,,"8","0","ACTED_IN","","[""Emil""]",""
+,,,,,,,,,"1","9","ACTED_IN","","[""Neo""]",""
+,,,,,,,,,"2","9","ACTED_IN","","[""Trinity""]",""
+,,,,,,,,,"3","9","ACTED_IN","","[""Morpheus""]",""
+,,,,,,,,,"4","9","ACTED_IN","","[""Agent Smith""]",""
+,,,,,,,,,"5","9","DIRECTED","","",""
+,,,,,,,,,"6","9","DIRECTED","","",""
+,,,,,,,,,"7","9","PRODUCED","","",""
+,,,,,,,,,"1","10","ACTED_IN","","[""Neo""]",""
+,,,,,,,,,"2","10","ACTED_IN","","[""Trinity""]",""
+,,,,,,,,,"3","10","ACTED_IN","","[""Morpheus""]",""
+,,,,,,,,,"4","10","ACTED_IN","","[""Agent Smith""]",""
+,,,,,,,,,"5","10","DIRECTED","","",""
+,,,,,,,,,"6","10","DIRECTED","","",""
+,,,,,,,,,"7","10","PRODUCED","","",""
+,,,,,,,,,"1","11","ACTED_IN","","[""Kevin Lomax""]",""
+,,,,,,,,,"12","11","ACTED_IN","","[""Mary Ann Lomax""]",""
+,,,,,,,,,"13","11","ACTED_IN","","[""John Milton""]",""
+,,,,,,,,,"14","11","DIRECTED","","",""
+,,,,,,,,,"16","15","ACTED_IN","","[""Lt. Daniel Kaffee""]",""
+,,,,,,,,,"17","15","ACTED_IN","","[""Col. Nathan R. Jessup""]",""
+,,,,,,,,,"18","15","ACTED_IN","","[""Lt. Cdr. JoAnne Galloway""]",""
+,,,,,,,,,"19","15","ACTED_IN","","[""Capt. Jack Ross""]",""
+,,,,,,,,,"20","15","ACTED_IN","","[""Lt. Jonathan Kendrick""]",""
+,,,,,,,,,"21","15","ACTED_IN","","[""Cpl. Jeffrey Barnes""]",""
+,,,,,,,,,"22","15","ACTED_IN","","[""Cpl. Carl Hammaker""]",""
+,,,,,,,,,"23","15","ACTED_IN","","[""Lt. Sam Weinberg""]",""
+,,,,,,,,,"24","15","ACTED_IN","","[""Lt. Col. Matthew Andrew Markinson""]",""
+,,,,,,,,,"25","15","ACTED_IN","","[""Pfc. Louden Downey""]",""
+,,,,,,,,,"26","15","ACTED_IN","","[""Dr. Stone""]",""
+,,,,,,,,,"28","15","ACTED_IN","","[""Man in Bar""]",""
+,,,,,,,,,"27","15","DIRECTED","","",""
+,,,,,,,,,"28","15","WROTE","","",""
+,,,,,,,,,"16","29","ACTED_IN","","[""Maverick""]",""
+,,,,,,,,,"30","29","ACTED_IN","","[""Charlie""]",""
+,,,,,,,,,"31","29","ACTED_IN","","[""Iceman""]",""
+,,,,,,,,,"32","29","ACTED_IN","","[""Goose""]",""
+,,,,,,,,,"33","29","ACTED_IN","","[""Viper""]",""
+,,,,,,,,,"34","29","ACTED_IN","","[""Carole""]",""
+,,,,,,,,,"35","29","DIRECTED","","",""
+,,,,,,,,,"36","29","WROTE","","",""
+,,,,,,,,,"16","37","ACTED_IN","","[""Jerry Maguire""]",""
+,,,,,,,,,"22","37","ACTED_IN","","[""Rod Tidwell""]",""
+,,,,,,,,,"38","37","ACTED_IN","","[""Dorothy Boyd""]",""
+,,,,,,,,,"39","37","ACTED_IN","","[""Avery Bishop""]",""
+,,,,,,,,,"40","37","ACTED_IN","","[""Frank Cushman""]",""
+,,,,,,,,,"41","37","ACTED_IN","","[""Bob Sugar""]",""
+,,,,,,,,,"42","37","ACTED_IN","","[""Laurel Boyd""]",""
+,,,,,,,,,"43","37","ACTED_IN","","[""Marcee Tidwell""]",""
+,,,,,,,,,"44","37","ACTED_IN","","[""Ray Boyd""]",""
+,,,,,,,,,"45","37","DIRECTED","","",""
+,,,,,,,,,"45","37","PRODUCED","","",""
+,,,,,,,,,"45","37","WROTE","","",""
+,,,,,,,,,"49","46","ACTED_IN","","[""Gordie Lachance""]",""
+,,,,,,,,,"47","46","ACTED_IN","","[""Chris Chambers""]",""
+,,,,,,,,,"40","46","ACTED_IN","","[""Vern Tessio""]",""
+,,,,,,,,,"48","46","ACTED_IN","","[""Teddy Duchamp""]",""
+,,,,,,,,,"50","46","ACTED_IN","","[""Denny Lachance""]",""
+,,,,,,,,,"20","46","ACTED_IN","","[""Ace Merrill""]",""
+,,,,,,,,,"51","46","ACTED_IN","","[""Mr. Lachance""]",""
+,,,,,,,,,"27","46","DIRECTED","","",""
+,,,,,,,,,"17","52","ACTED_IN","","[""Melvin Udall""]",""
+,,,,,,,,,"53","52","ACTED_IN","","[""Carol Connelly""]",""
+,,,,,,,,,"54","52","ACTED_IN","","[""Simon Bishop""]",""
+,,,,,,,,,"22","52","ACTED_IN","","[""Frank Sachs""]",""
+,,,,,,,,,"55","52","DIRECTED","","",""
+,,,,,,,,,"60","56","ACTED_IN","","[""Chris Nielsen""]",""
+,,,,,,,,,"22","56","ACTED_IN","","[""Albert Lewis""]",""
+,,,,,,,,,"57","56","ACTED_IN","","[""Annie Collins-Nielsen""]",""
+,,,,,,,,,"58","56","ACTED_IN","","[""The Tracker""]",""
+,,,,,,,,,"59","56","ACTED_IN","","[""The Face""]",""
+,,,,,,,,,"61","56","DIRECTED","","",""
+,,,,,,,,,"63","62","ACTED_IN","","[""Ishmael Chambers""]",""
+,,,,,,,,,"64","62","ACTED_IN","","[""Kazuo Miyamoto""]",""
+,,,,,,,,,"58","62","ACTED_IN","","[""Nels Gudmundsson""]",""
+,,,,,,,,,"65","62","ACTED_IN","","[""Judge Fielding""]",""
+,,,,,,,,,"66","62","DIRECTED","","",""
+,,,,,,,,,"71","67","ACTED_IN","","[""Joe Fox""]",""
+,,,,,,,,,"34","67","ACTED_IN","","[""Kathleen Kelly""]",""
+,,,,,,,,,"54","67","ACTED_IN","","[""Frank Navasky""]",""
+,,,,,,,,,"68","67","ACTED_IN","","[""Patricia Eden""]",""
+,,,,,,,,,"69","67","ACTED_IN","","[""Kevin Jackson""]",""
+,,,,,,,,,"70","67","ACTED_IN","","[""George Pappas""]",""
+,,,,,,,,,"72","67","DIRECTED","","",""
+,,,,,,,,,"71","73","ACTED_IN","","[""Sam Baldwin""]",""
+,,,,,,,,,"34","73","ACTED_IN","","[""Annie Reed""]",""
+,,,,,,,,,"74","73","ACTED_IN","","[""Suzy""]",""
+,,,,,,,,,"75","73","ACTED_IN","","[""Walter""]",""
+,,,,,,,,,"76","73","ACTED_IN","","[""Greg""]",""
+,,,,,,,,,"77","73","ACTED_IN","","[""Becky""]",""
+,,,,,,,,,"72","73","DIRECTED","","",""
+,,,,,,,,,"71","78","ACTED_IN","","[""Joe Banks""]",""
+,,,,,,,,,"34","78","ACTED_IN","","[""DeDe"",""Angelica Graynamore"",""Patricia Graynamore""]",""
+,,,,,,,,,"80","78","ACTED_IN","","[""Baw""]",""
+,,,,,,,,,"79","78","DIRECTED","","",""
+,,,,,,,,,"82","81","ACTED_IN","","[""Harry Burns""]",""
+,,,,,,,,,"34","81","ACTED_IN","","[""Sally Albright""]",""
+,,,,,,,,,"83","81","ACTED_IN","","[""Marie""]",""
+,,,,,,,,,"84","81","ACTED_IN","","[""Jess""]",""
+,,,,,,,,,"27","81","DIRECTED","","",""
+,,,,,,,,,"27","81","PRODUCED","","",""
+,,,,,,,,,"72","81","PRODUCED","","",""
+,,,,,,,,,"72","81","WROTE","","",""
+,,,,,,,,,"71","85","ACTED_IN","","[""Mr. White""]",""
+,,,,,,,,,"86","85","ACTED_IN","","[""Faye Dolan""]",""
+,,,,,,,,,"12","85","ACTED_IN","","[""Tina""]",""
+,,,,,,,,,"71","85","DIRECTED","","",""
+,,,,,,,,,"1","87","ACTED_IN","","[""Shane Falco""]",""
+,,,,,,,,,"88","87","ACTED_IN","","[""Annabelle Farrell""]",""
+,,,,,,,,,"89","87","ACTED_IN","","[""Jimmy McGinty""]",""
+,,,,,,,,,"90","87","ACTED_IN","","[""Clifford Franklin""]",""
+,,,,,,,,,"91","87","DIRECTED","","",""
+,,,,,,,,,"51","92","ACTED_IN","","[""Admiral""]",""
+,,,,,,,,,"93","92","ACTED_IN","","[""Dieter Dengler""]",""
+,,,,,,,,,"94","92","ACTED_IN","","[""Squad Leader""]",""
+,,,,,,,,,"70","92","ACTED_IN","","[""Duane""]",""
+,,,,,,,,,"59","92","DIRECTED","","",""
+,,,,,,,,,"60","95","ACTED_IN","","[""Armand Goldman""]",""
+,,,,,,,,,"80","95","ACTED_IN","","[""Albert Goldman""]",""
+,,,,,,,,,"89","95","ACTED_IN","","[""Sen. Kevin Keeley""]",""
+,,,,,,,,,"96","95","DIRECTED","","",""
+,,,,,,,,,"98","97","ACTED_IN","","[""English Bob""]",""
+,,,,,,,,,"99","97","ACTED_IN","","[""Bill Munny""]",""
+,,,,,,,,,"89","97","ACTED_IN","","[""Little Bill Daggett""]",""
+,,,,,,,,,"99","97","DIRECTED","","",""
+,,,,,,,,,"1","100","ACTED_IN","","[""Johnny Mnemonic""]",""
+,,,,,,,,,"101","100","ACTED_IN","","[""Takahashi""]",""
+,,,,,,,,,"102","100","ACTED_IN","","[""Jane""]",""
+,,,,,,,,,"103","100","ACTED_IN","","[""J-Bone""]",""
+,,,,,,,,,"104","100","DIRECTED","","",""
+,,,,,,,,,"71","105","ACTED_IN","","[""Zachry"",""Dr. Henry Goose"",""Isaac Sachs"",""Dermot Hoggins""]",""
+,,,,,,,,,"4","105","ACTED_IN","","[""Bill Smoke"",""Haskell Moore"",""Tadeusz Kesselring"",""Nurse Noakes"",""Boardman Mephi"",""Old Georgie""]",""
+,,,,,,,,,"106","105","ACTED_IN","","[""Luisa Rey"",""Jocasta Ayrs"",""Ovid"",""Meronym""]",""
+,,,,,,,,,"107","105","ACTED_IN","","[""Vyvyan Ayrs"",""Captain Molyneux"",""Timothy Cavendish""]",""
+,,,,,,,,,"108","105","DIRECTED","","",""
+,,,,,,,,,"5","105","DIRECTED","","",""
+,,,,,,,,,"6","105","DIRECTED","","",""
+,,,,,,,,,"109","105","WROTE","","",""
+,,,,,,,,,"110","105","PRODUCED","","",""
+,,,,,,,,,"71","111","ACTED_IN","","[""Dr. Robert Langdon""]",""
+,,,,,,,,,"112","111","ACTED_IN","","[""Sir Leight Teabing""]",""
+,,,,,,,,,"113","111","ACTED_IN","","[""Sophie Neveu""]",""
+,,,,,,,,,"114","111","ACTED_IN","","[""Silas""]",""
+,,,,,,,,,"115","111","DIRECTED","","",""
+,,,,,,,,,"4","116","ACTED_IN","","[""V""]",""
+,,,,,,,,,"117","116","ACTED_IN","","[""Evey Hammond""]",""
+,,,,,,,,,"118","116","ACTED_IN","","[""Eric Finch""]",""
+,,,,,,,,,"119","116","ACTED_IN","","[""High Chancellor Adam Sutler""]",""
+,,,,,,,,,"120","116","ACTED_IN","","[""Dascomb""]",""
+,,,,,,,,,"25","116","DIRECTED","","",""
+,,,,,,,,,"5","116","PRODUCED","","",""
+,,,,,,,,,"6","116","PRODUCED","","",""
+,,,,,,,,,"7","116","PRODUCED","","",""
+,,,,,,,,,"5","116","WROTE","","",""
+,,,,,,,,,"6","116","WROTE","","",""
+,,,,,,,,,"122","121","ACTED_IN","","[""Speed Racer""]",""
+,,,,,,,,,"123","121","ACTED_IN","","[""Pops""]",""
+,,,,,,,,,"124","121","ACTED_IN","","[""Mom""]",""
+,,,,,,,,,"125","121","ACTED_IN","","[""Racer X""]",""
+,,,,,,,,,"126","121","ACTED_IN","","[""Trixie""]",""
+,,,,,,,,,"127","121","ACTED_IN","","[""Taejo Togokahn""]",""
+,,,,,,,,,"120","121","ACTED_IN","","[""Cass Jones""]",""
+,,,,,,,,,"5","121","DIRECTED","","",""
+,,,,,,,,,"6","121","DIRECTED","","",""
+,,,,,,,,,"5","121","WROTE","","",""
+,,,,,,,,,"6","121","WROTE","","",""
+,,,,,,,,,"7","121","PRODUCED","","",""
+,,,,,,,,,"127","128","ACTED_IN","","[""Raizo""]",""
+,,,,,,,,,"129","128","ACTED_IN","","[""Mika Coretti""]",""
+,,,,,,,,,"64","128","ACTED_IN","","[""Takeshi""]",""
+,,,,,,,,,"120","128","ACTED_IN","","[""Ryan Maslow""]",""
+,,,,,,,,,"25","128","DIRECTED","","",""
+,,,,,,,,,"5","128","PRODUCED","","",""
+,,,,,,,,,"6","128","PRODUCED","","",""
+,,,,,,,,,"7","128","PRODUCED","","",""
+,,,,,,,,,"71","130","ACTED_IN","","[""Paul Edgecomb""]",""
+,,,,,,,,,"131","130","ACTED_IN","","[""John Coffey""]",""
+,,,,,,,,,"132","130","ACTED_IN","","[""Brutus \""Brutal\"" Howell""]",""
+,,,,,,,,,"42","130","ACTED_IN","","[""Jan Edgecomb""]",""
+,,,,,,,,,"65","130","ACTED_IN","","[""Warden Hal Moores""]",""
+,,,,,,,,,"133","130","ACTED_IN","","[""\""Wild Bill\"" Wharton""]",""
+,,,,,,,,,"134","130","ACTED_IN","","[""Burt Hammersmith""]",""
+,,,,,,,,,"135","130","ACTED_IN","","[""Melinda Moores""]",""
+,,,,,,,,,"136","130","DIRECTED","","",""
+,,,,,,,,,"138","137","ACTED_IN","","[""Richard Nixon""]",""
+,,,,,,,,,"139","137","ACTED_IN","","[""David Frost""]",""
+,,,,,,,,,"19","137","ACTED_IN","","[""Jack Brennan""]",""
+,,,,,,,,,"140","137","ACTED_IN","","[""Bob Zelnick""]",""
+,,,,,,,,,"133","137","ACTED_IN","","[""James Reston, Jr.""]",""
+,,,,,,,,,"115","137","DIRECTED","","",""
+,,,,,,,,,"17","141","ACTED_IN","","[""Hoffa""]",""
+,,,,,,,,,"142","141","ACTED_IN","","[""Robert \""Bobby\"" Ciaro""]",""
+,,,,,,,,,"24","141","ACTED_IN","","[""Frank Fitzsimmons""]",""
+,,,,,,,,,"143","141","ACTED_IN","","[""Peter \""Pete\"" Connelly""]",""
+,,,,,,,,,"142","141","DIRECTED","","",""
+,,,,,,,,,"71","144","ACTED_IN","","[""Jim Lovell""]",""
+,,,,,,,,,"19","144","ACTED_IN","","[""Jack Swigert""]",""
+,,,,,,,,,"145","144","ACTED_IN","","[""Gene Kranz""]",""
+,,,,,,,,,"146","144","ACTED_IN","","[""Fred Haise""]",""
+,,,,,,,,,"134","144","ACTED_IN","","[""Ken Mattingly""]",""
+,,,,,,,,,"115","144","DIRECTED","","",""
+,,,,,,,,,"146","147","ACTED_IN","","[""Bill Harding""]",""
+,,,,,,,,,"53","147","ACTED_IN","","[""Dr. Jo Harding""]",""
+,,,,,,,,,"94","147","ACTED_IN","","[""Eddie""]",""
+,,,,,,,,,"148","147","ACTED_IN","","[""Dustin \""Dusty\"" Davis""]",""
+,,,,,,,,,"149","147","DIRECTED","","",""
+,,,,,,,,,"71","150","ACTED_IN","","[""Chuck Noland""]",""
+,,,,,,,,,"53","150","ACTED_IN","","[""Kelly Frears""]",""
+,,,,,,,,,"151","150","DIRECTED","","",""
+,,,,,,,,,"17","152","ACTED_IN","","[""Randle McMurphy""]",""
+,,,,,,,,,"142","152","ACTED_IN","","[""Martini""]",""
+,,,,,,,,,"153","152","DIRECTED","","",""
+,,,,,,,,,"17","154","ACTED_IN","","[""Harry Sanborn""]",""
+,,,,,,,,,"155","154","ACTED_IN","","[""Erica Barry""]",""
+,,,,,,,,,"1","154","ACTED_IN","","[""Julian Mercer""]",""
+,,,,,,,,,"156","154","DIRECTED","","",""
+,,,,,,,,,"156","154","PRODUCED","","",""
+,,,,,,,,,"156","154","WROTE","","",""
+,,,,,,,,,"60","157","ACTED_IN","","[""Andrew Marin""]",""
+,,,,,,,,,"140","157","ACTED_IN","","[""Rupert Burns""]",""
+,,,,,,,,,"158","157","DIRECTED","","",""
+,,,,,,,,,"71","159","ACTED_IN","","[""Rep. Charlie Wilson""]",""
+,,,,,,,,,"160","159","ACTED_IN","","[""Joanne Herring""]",""
+,,,,,,,,,"148","159","ACTED_IN","","[""Gust Avrakotos""]",""
+,,,,,,,,,"96","159","DIRECTED","","",""
+,,,,,,,,,"71","161","ACTED_IN","","[""Hero Boy"",""Father"",""Conductor"",""Hobo"",""Scrooge"",""Santa Claus""]",""
+,,,,,,,,,"151","161","DIRECTED","","",""
+,,,,,,,,,"71","162","ACTED_IN","","[""Jimmy Dugan""]",""
+,,,,,,,,,"164","162","ACTED_IN","","[""Dottie Hinson""]",""
+,,,,,,,,,"165","162","ACTED_IN","","[""Kit Keller""]",""
+,,,,,,,,,"77","162","ACTED_IN","","[""Doris Murphy""]",""
+,,,,,,,,,"163","162","ACTED_IN","","[""\""All the Way\"" Mae Mordabito""]",""
+,,,,,,,,,"146","162","ACTED_IN","","[""Bob Hinson""]",""
+,,,,,,,,,"166","162","DIRECTED","","",""
+,,,,,,,,,"170","169","FOLLOWS","","",""
+,,,,,,,,,"168","169","FOLLOWS","","",""
+,,,,,,,,,"167","168","FOLLOWS","","",""
+,,,,,,,,,"169","105","REVIEWED","95","","An amazing journey"
+,,,,,,,,,"169","87","REVIEWED","65","","Silly, but fun"
+,,,,,,,,,"170","87","REVIEWED","100","","The coolest football movie ever"
+,,,,,,,,,"168","87","REVIEWED","62","","Pretty funny at times"
+,,,,,,,,,"169","97","REVIEWED","85","","Dark, but compelling"
+,,,,,,,,,"169","95","REVIEWED","45","","Slapstick redeemed only by the Robin Williams and Gene Hackman's stellar performances"
+,,,,,,,,,"169","111","REVIEWED","68","","A solid romp"
+,,,,,,,,,"170","111","REVIEWED","65","","Fun, but a little far fetched"
+,,,,,,,,,"169","37","REVIEWED","92","","You had me at Jerry"
+,,,,,,,,,"172","177","SIMILAR","","",""
+,,,,,,,,,"173","171","SIMILAR","","",""
+,,,,,,,,,"176","175","HAS_SAME_CREATOR","","",""
+,,,,,,,,,"171","181","SIMILAR","","",""
+,,,,,,,,,"181","174","SIMILAR","","",""
+,,,,,,,,,"174","177","HAS_SAME_CREATOR","","",""
+,,,,,,,,,"176","171","SIMILAR","","",""
+,,,,,,,,,"178","174","SIMILAR","","",""
+,,,,,,,,,"176","177","SIMILAR","","",""
+,,,,,,,,,"179","175","SIMILAR","","",""
+,,,,,,,,,"179","180","SIMILAR","","",""
+,,,,,,,,,"180","175","SIMILAR","","",""
+,,,,,,,,,"179","178","HAS_SAME_CREATOR","","",""
+,,,,,,,,,"180","177","HAS_SAME_CREATOR","","",""
+,,,,,,,,,"174","180","HAS_SAME_CREATOR","","",""
\ No newline at end of file
diff --git a/neo4j/import_old/data_cypher b/neo4j/import_old/data_cypher
new file mode 100755
index 0000000000000000000000000000000000000000..210a94eaddb5768b1e570d4f6677929b876f17d4
--- /dev/null
+++ b/neo4j/import_old/data_cypher
@@ -0,0 +1,110 @@
+:begin
+CREATE INDEX FOR (node:Person) ON (node.born);
+CREATE INDEX FOR (node:Movie) ON (node.released);
+CREATE CONSTRAINT ON (node:Person) ASSERT (node.name) IS UNIQUE;
+CREATE CONSTRAINT ON (node:Movie) ASSERT (node.title) IS UNIQUE;
+CREATE CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
+:commit
+CALL db.awaitIndexes(300);
+:begin
+UNWIND [{name:"Keanu Reeves", properties:{born:1964}}, {name:"Carrie-Anne Moss", properties:{born:1967}}, {name:"Laurence Fishburne", properties:{born:1961}}, {name:"Hugo Weaving", properties:{born:1960}}, {name:"Lilly Wachowski", properties:{born:1967}}, {name:"Lana Wachowski", properties:{born:1965}}, {name:"Joel Silver", properties:{born:1952}}, {name:"Emil Eifrem", properties:{born:1978}}, {name:"Charlize Theron", properties:{born:1975}}, {name:"Al Pacino", properties:{born:1940}}, {name:"Taylor Hackford", properties:{born:1944}}, {name:"Tom Cruise", properties:{born:1962}}, {name:"Jack Nicholson", properties:{born:1937}}, {name:"Demi Moore", properties:{born:1962}}, {name:"Kevin Bacon", properties:{born:1958}}, {name:"Kiefer Sutherland", properties:{born:1966}}, {name:"Noah Wyle", properties:{born:1971}}, {name:"Cuba Gooding Jr.", properties:{born:1968}}, {name:"Kevin Pollak", properties:{born:1957}}, {name:"J.T. Walsh", properties:{born:1943}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"James Marshall", properties:{born:1967}}, {name:"Christopher Guest", properties:{born:1948}}, {name:"Rob Reiner", properties:{born:1947}}, {name:"Aaron Sorkin", properties:{born:1961}}, {name:"Kelly McGillis", properties:{born:1957}}, {name:"Val Kilmer", properties:{born:1959}}, {name:"Anthony Edwards", properties:{born:1962}}, {name:"Tom Skerritt", properties:{born:1933}}, {name:"Meg Ryan", properties:{born:1961}}, {name:"Tony Scott", properties:{born:1944}}, {name:"Jim Cash", properties:{born:1941}}, {name:"Renee Zellweger", properties:{born:1969}}, {name:"Kelly Preston", properties:{born:1962}}, {name:"Jerry O'Connell", properties:{born:1974}}, {name:"Jay Mohr", properties:{born:1970}}, {name:"Bonnie Hunt", properties:{born:1961}}, {name:"Regina King", properties:{born:1971}}, {name:"Jonathan Lipnicki", properties:{born:1996}}, {name:"Cameron Crowe", properties:{born:1957}}, {name:"River Phoenix", properties:{born:1970}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Corey Feldman", properties:{born:1971}}, {name:"Wil Wheaton", properties:{born:1972}}, {name:"John Cusack", properties:{born:1966}}, {name:"Marshall Bell", properties:{born:1942}}, {name:"Helen Hunt", properties:{born:1963}}, {name:"Greg Kinnear", properties:{born:1963}}, {name:"James L. Brooks", properties:{born:1940}}, {name:"Annabella Sciorra", properties:{born:1960}}, {name:"Max von Sydow", properties:{born:1929}}, {name:"Werner Herzog", properties:{born:1942}}, {name:"Robin Williams", properties:{born:1951}}, {name:"Vincent Ward", properties:{born:1956}}, {name:"Ethan Hawke", properties:{born:1970}}, {name:"Rick Yune", properties:{born:1971}}, {name:"James Cromwell", properties:{born:1940}}, {name:"Scott Hicks", properties:{born:1953}}, {name:"Parker Posey", properties:{born:1968}}, {name:"Dave Chappelle", properties:{born:1973}}, {name:"Steve Zahn", properties:{born:1967}}, {name:"Tom Hanks", properties:{born:1956}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Nora Ephron", properties:{born:1941}}, {name:"Rita Wilson", properties:{born:1956}}, {name:"Bill Pullman", properties:{born:1953}}, {name:"Victor Garber", properties:{born:1949}}, {name:"Rosie O'Donnell", properties:{born:1962}}, {name:"John Patrick Stanley", properties:{born:1950}}, {name:"Nathan Lane", properties:{born:1956}}, {name:"Billy Crystal", properties:{born:1948}}, {name:"Carrie Fisher", properties:{born:1956}}, {name:"Bruno Kirby", properties:{born:1949}}, {name:"Liv Tyler", properties:{born:1977}}, {name:"Brooke Langton", properties:{born:1970}}, {name:"Gene Hackman", properties:{born:1930}}, {name:"Orlando Jones", properties:{born:1968}}, {name:"Howard Deutch", properties:{born:1950}}, {name:"Christian Bale", properties:{born:1974}}, {name:"Zach Grenier", properties:{born:1954}}, {name:"Mike Nichols", properties:{born:1931}}, {name:"Richard Harris", properties:{born:1930}}, {name:"Clint Eastwood", properties:{born:1930}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Takeshi Kitano", properties:{born:1947}}, {name:"Dina Meyer", properties:{born:1968}}, {name:"Ice-T", properties:{born:1958}}, {name:"Robert Longo", properties:{born:1953}}, {name:"Halle Berry", properties:{born:1966}}, {name:"Jim Broadbent", properties:{born:1949}}, {name:"Tom Tykwer", properties:{born:1965}}, {name:"David Mitchell", properties:{born:1969}}, {name:"Stefan Arndt", properties:{born:1961}}, {name:"Ian McKellen", properties:{born:1939}}, {name:"Audrey Tautou", properties:{born:1976}}, {name:"Paul Bettany", properties:{born:1971}}, {name:"Ron Howard", properties:{born:1954}}, {name:"Natalie Portman", properties:{born:1981}}, {name:"Stephen Rea", properties:{born:1946}}, {name:"John Hurt", properties:{born:1940}}, {name:"Ben Miles", properties:{born:1967}}, {name:"Emile Hirsch", properties:{born:1985}}, {name:"John Goodman", properties:{born:1960}}, {name:"Susan Sarandon", properties:{born:1946}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Matthew Fox", properties:{born:1966}}, {name:"Christina Ricci", properties:{born:1980}}, {name:"Rain", properties:{born:1982}}, {name:"Naomie Harris", properties:{}}, {name:"Michael Clarke Duncan", properties:{born:1957}}, {name:"David Morse", properties:{born:1953}}, {name:"Sam Rockwell", properties:{born:1968}}, {name:"Gary Sinise", properties:{born:1955}}, {name:"Patricia Clarkson", properties:{born:1959}}, {name:"Frank Darabont", properties:{born:1959}}, {name:"Frank Langella", properties:{born:1938}}, {name:"Michael Sheen", properties:{born:1969}}, {name:"Oliver Platt", properties:{born:1960}}, {name:"Danny DeVito", properties:{born:1944}}, {name:"John C. Reilly", properties:{born:1965}}, {name:"Ed Harris", properties:{born:1950}}, {name:"Bill Paxton", properties:{born:1955}}, {name:"Philip Seymour Hoffman", properties:{born:1967}}, {name:"Jan de Bont", properties:{born:1943}}, {name:"Robert Zemeckis", properties:{born:1951}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Milos Forman", properties:{born:1932}}, {name:"Diane Keaton", properties:{born:1946}}, {name:"Nancy Meyers", properties:{born:1949}}, {name:"Chris Columbus", properties:{born:1958}}, {name:"Julia Roberts", properties:{born:1967}}, {name:"Madonna", properties:{born:1954}}, {name:"Geena Davis", properties:{born:1956}}, {name:"Lori Petty", properties:{born:1963}}, {name:"Penny Marshall", properties:{born:1943}}, {name:"Paul Blythe", properties:{}}, {name:"Angela Scope", properties:{}}, {name:"Jessica Thompson", properties:{}}, {name:"James Thompson", properties:{}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{_id:171, properties:{license:"proprietary", price:"freemium", name:"Notion"}}, {_id:172, properties:{name:"Libreoffice Calc\n"}}, {_id:173, properties:{name:"Trello"}}, {_id:174, properties:{name:"Word"}}, {_id:175, properties:{name:"Google Slides"}}, {_id:176, properties:{name:"Google Sheets"}}, {_id:177, properties:{name:"Excel"}}, {_id:178, properties:{name:"Libreoffice Writer\n"}}, {_id:179, properties:{name:"Libreoffice Impress\n"}}, {_id:180, properties:{name:"Powerpoint"}}, {_id:181, properties:{name:"Google Docs\n"}}] AS row
+CREATE (n:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row._id}) SET n += row.properties SET n:Software;
+UNWIND [{title:"The Matrix", properties:{tagline:"Welcome to the Real World", released:1999}}, {title:"The Matrix Reloaded", properties:{tagline:"Free your mind", released:2003}}, {title:"The Matrix Revolutions", properties:{tagline:"Everything that has a beginning has an end", released:2003}}, {title:"The Devil's Advocate", properties:{tagline:"Evil has its winning ways", released:1997}}, {title:"A Few Good Men", properties:{tagline:"In the heart of the nation's capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth.", released:1992}}, {title:"Top Gun", properties:{tagline:"I feel the need, the need for speed.", released:1986}}, {title:"Jerry Maguire", properties:{tagline:"The rest of his life begins now.", released:2000}}, {title:"Stand By Me", properties:{tagline:"For some, it's the last real taste of innocence, and the first real taste of life. But for everyone, it's the time that memories are made of.", released:1986}}, {title:"As Good as It Gets", properties:{tagline:"A comedy from the heart that goes for the throat.", released:1997}}, {title:"What Dreams May Come", properties:{tagline:"After life there is more. The end is just the beginning.", released:1998}}, {title:"Snow Falling on Cedars", properties:{tagline:"First loves last. Forever.", released:1999}}, {title:"You've Got Mail", properties:{tagline:"At odds in life... in love on-line.", released:1998}}, {title:"Sleepless in Seattle", properties:{tagline:"What if someone you never met, someone you never saw, someone you never knew was the only someone for you?", released:1993}}, {title:"Joe Versus the Volcano", properties:{tagline:"A story of love, lava and burning desire.", released:1990}}, {title:"When Harry Met Sally", properties:{tagline:"Can two friends sleep together and still love each other in the morning?", released:1998}}, {title:"That Thing You Do", properties:{tagline:"In every life there comes a time when that thing you dream becomes that thing you do", released:1996}}, {title:"The Replacements", properties:{tagline:"Pain heals, Chicks dig scars... Glory lasts forever", released:2000}}, {title:"RescueDawn", properties:{tagline:"Based on the extraordinary true story of one man's fight for freedom", released:2006}}, {title:"The Birdcage", properties:{tagline:"Come as you are", released:1996}}, {title:"Unforgiven", properties:{tagline:"It's a hell of a thing, killing a man", released:1992}}] AS row
+CREATE (n:Movie{title: row.title}) SET n += row.properties;
+UNWIND [{title:"Johnny Mnemonic", properties:{tagline:"The hottest data on earth. In the coolest head in town", released:1995}}, {title:"Cloud Atlas", properties:{tagline:"Everything is connected", released:2012}}, {title:"The Da Vinci Code", properties:{tagline:"Break The Codes", released:2006}}, {title:"V for Vendetta", properties:{tagline:"Freedom! Forever!", released:2006}}, {title:"Speed Racer", properties:{tagline:"Speed has no limits", released:2008}}, {title:"Ninja Assassin", properties:{tagline:"Prepare to enter a secret world of assassins", released:2009}}, {title:"The Green Mile", properties:{tagline:"Walk a mile you'll never forget.", released:1999}}, {title:"Frost/Nixon", properties:{tagline:"400 million people were waiting for the truth.", released:2008}}, {title:"Hoffa", properties:{tagline:"He didn't want law. He wanted justice.", released:1992}}, {title:"Apollo 13", properties:{tagline:"Houston, we have a problem.", released:1995}}, {title:"Twister", properties:{tagline:"Don't Breathe. Don't Look Back.", released:1996}}, {title:"Cast Away", properties:{tagline:"At the edge of the world, his journey begins.", released:2000}}, {title:"One Flew Over the Cuckoo's Nest", properties:{tagline:"If he's crazy, what does that make you?", released:1975}}, {title:"Something's Gotta Give", properties:{released:2003}}, {title:"Bicentennial Man", properties:{tagline:"One robot's 200 year journey to become an ordinary man.", released:1999}}, {title:"Charlie Wilson's War", properties:{tagline:"A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire.", released:2007}}, {title:"The Polar Express", properties:{tagline:"This Holiday Season… Believe", released:2004}}, {title:"A League of Their Own", properties:{tagline:"Once in a lifetime you get a chance to do something different.", released:1992}}] AS row
+CREATE (n:Movie{title: row.title}) SET n += row.properties;
+:commit
+:begin
+UNWIND [{start: {name:"Joel Silver"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Stefan Arndt"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:PRODUCED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Aaron Sorkin"}, end: {title:"A Few Good Men"}, properties:{}}, {start: {name:"Jim Cash"}, end: {title:"Top Gun"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"David Mitchell"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:WROTE]->(end) SET r += row.properties;
+UNWIND [{start: {_id:172}, end: {_id:177}, properties:{}}, {start: {_id:173}, end: {_id:171}, properties:{}}, {start: {_id:171}, end: {_id:181}, properties:{}}, {start: {_id:181}, end: {_id:174}, properties:{}}, {start: {_id:176}, end: {_id:171}, properties:{}}, {start: {_id:178}, end: {_id:174}, properties:{}}, {start: {_id:176}, end: {_id:177}, properties:{}}, {start: {_id:179}, end: {_id:175}, properties:{}}, {start: {_id:179}, end: {_id:180}, properties:{}}, {start: {_id:180}, end: {_id:175}, properties:{}}] AS row
+MATCH (start:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.start._id})
+MATCH (end:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.end._id})
+CREATE (start)-[r:SIMILAR]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Keanu Reeves"}, end: {title:"The Matrix"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Emil Eifrem"}, end: {title:"The Matrix"}, properties:{roles:["Emil"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Devil's Advocate"}, properties:{roles:["Kevin Lomax"]}}, {start: {name:"Charlize Theron"}, end: {title:"The Devil's Advocate"}, properties:{roles:["Mary Ann Lomax"]}}, {start: {name:"Al Pacino"}, end: {title:"The Devil's Advocate"}, properties:{roles:["John Milton"]}}, {start: {name:"Tom Cruise"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Daniel Kaffee"]}}, {start: {name:"Jack Nicholson"}, end: {title:"A Few Good Men"}, properties:{roles:["Col. Nathan R. Jessup"]}}, {start: {name:"Demi Moore"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Cdr. JoAnne Galloway"]}}, {start: {name:"Kevin Bacon"}, end: {title:"A Few Good Men"}, properties:{roles:["Capt. Jack Ross"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Kiefer Sutherland"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Jonathan Kendrick"]}}, {start: {name:"Noah Wyle"}, end: {title:"A Few Good Men"}, properties:{roles:["Cpl. Jeffrey Barnes"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"A Few Good Men"}, properties:{roles:["Cpl. Carl Hammaker"]}}, {start: {name:"Kevin Pollak"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Sam Weinberg"]}}, {start: {name:"J.T. Walsh"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Col. Matthew Andrew Markinson"]}}, {start: {name:"James Marshall"}, end: {title:"A Few Good Men"}, properties:{roles:["Pfc. Louden Downey"]}}, {start: {name:"Christopher Guest"}, end: {title:"A Few Good Men"}, properties:{roles:["Dr. Stone"]}}, {start: {name:"Aaron Sorkin"}, end: {title:"A Few Good Men"}, properties:{roles:["Man in Bar"]}}, {start: {name:"Tom Cruise"}, end: {title:"Top Gun"}, properties:{roles:["Maverick"]}}, {start: {name:"Kelly McGillis"}, end: {title:"Top Gun"}, properties:{roles:["Charlie"]}}, {start: {name:"Val Kilmer"}, end: {title:"Top Gun"}, properties:{roles:["Iceman"]}}, {start: {name:"Anthony Edwards"}, end: {title:"Top Gun"}, properties:{roles:["Goose"]}}, {start: {name:"Tom Skerritt"}, end: {title:"Top Gun"}, properties:{roles:["Viper"]}}, {start: {name:"Meg Ryan"}, end: {title:"Top Gun"}, properties:{roles:["Carole"]}}, {start: {name:"Tom Cruise"}, end: {title:"Jerry Maguire"}, properties:{roles:["Jerry Maguire"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"Jerry Maguire"}, properties:{roles:["Rod Tidwell"]}}, {start: {name:"Renee Zellweger"}, end: {title:"Jerry Maguire"}, properties:{roles:["Dorothy Boyd"]}}, {start: {name:"Kelly Preston"}, end: {title:"Jerry Maguire"}, properties:{roles:["Avery Bishop"]}}, {start: {name:"Jerry O'Connell"}, end: {title:"Jerry Maguire"}, properties:{roles:["Frank Cushman"]}}, {start: {name:"Jay Mohr"}, end: {title:"Jerry Maguire"}, properties:{roles:["Bob Sugar"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Bonnie Hunt"}, end: {title:"Jerry Maguire"}, properties:{roles:["Laurel Boyd"]}}, {start: {name:"Regina King"}, end: {title:"Jerry Maguire"}, properties:{roles:["Marcee Tidwell"]}}, {start: {name:"Jonathan Lipnicki"}, end: {title:"Jerry Maguire"}, properties:{roles:["Ray Boyd"]}}, {start: {name:"Wil Wheaton"}, end: {title:"Stand By Me"}, properties:{roles:["Gordie Lachance"]}}, {start: {name:"River Phoenix"}, end: {title:"Stand By Me"}, properties:{roles:["Chris Chambers"]}}, {start: {name:"Jerry O'Connell"}, end: {title:"Stand By Me"}, properties:{roles:["Vern Tessio"]}}, {start: {name:"Corey Feldman"}, end: {title:"Stand By Me"}, properties:{roles:["Teddy Duchamp"]}}, {start: {name:"John Cusack"}, end: {title:"Stand By Me"}, properties:{roles:["Denny Lachance"]}}, {start: {name:"Kiefer Sutherland"}, end: {title:"Stand By Me"}, properties:{roles:["Ace Merrill"]}}, {start: {name:"Marshall Bell"}, end: {title:"Stand By Me"}, properties:{roles:["Mr. Lachance"]}}, {start: {name:"Jack Nicholson"}, end: {title:"As Good as It Gets"}, properties:{roles:["Melvin Udall"]}}, {start: {name:"Helen Hunt"}, end: {title:"As Good as It Gets"}, properties:{roles:["Carol Connelly"]}}, {start: {name:"Greg Kinnear"}, end: {title:"As Good as It Gets"}, properties:{roles:["Simon Bishop"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"As Good as It Gets"}, properties:{roles:["Frank Sachs"]}}, {start: {name:"Robin Williams"}, end: {title:"What Dreams May Come"}, properties:{roles:["Chris Nielsen"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"What Dreams May Come"}, properties:{roles:["Albert Lewis"]}}, {start: {name:"Annabella Sciorra"}, end: {title:"What Dreams May Come"}, properties:{roles:["Annie Collins-Nielsen"]}}, {start: {name:"Max von Sydow"}, end: {title:"What Dreams May Come"}, properties:{roles:["The Tracker"]}}, {start: {name:"Werner Herzog"}, end: {title:"What Dreams May Come"}, properties:{roles:["The Face"]}}, {start: {name:"Ethan Hawke"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Ishmael Chambers"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Rick Yune"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Kazuo Miyamoto"]}}, {start: {name:"Max von Sydow"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Nels Gudmundsson"]}}, {start: {name:"James Cromwell"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Judge Fielding"]}}, {start: {name:"Tom Hanks"}, end: {title:"You've Got Mail"}, properties:{roles:["Joe Fox"]}}, {start: {name:"Meg Ryan"}, end: {title:"You've Got Mail"}, properties:{roles:["Kathleen Kelly"]}}, {start: {name:"Greg Kinnear"}, end: {title:"You've Got Mail"}, properties:{roles:["Frank Navasky"]}}, {start: {name:"Parker Posey"}, end: {title:"You've Got Mail"}, properties:{roles:["Patricia Eden"]}}, {start: {name:"Dave Chappelle"}, end: {title:"You've Got Mail"}, properties:{roles:["Kevin Jackson"]}}, {start: {name:"Steve Zahn"}, end: {title:"You've Got Mail"}, properties:{roles:["George Pappas"]}}, {start: {name:"Tom Hanks"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Sam Baldwin"]}}, {start: {name:"Meg Ryan"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Annie Reed"]}}, {start: {name:"Rita Wilson"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Suzy"]}}, {start: {name:"Bill Pullman"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Walter"]}}, {start: {name:"Victor Garber"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Greg"]}}, {start: {name:"Rosie O'Donnell"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Becky"]}}, {start: {name:"Tom Hanks"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["Joe Banks"]}}, {start: {name:"Meg Ryan"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["DeDe", "Angelica Graynamore", "Patricia Graynamore"]}}, {start: {name:"Nathan Lane"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["Baw"]}}, {start: {name:"Billy Crystal"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Harry Burns"]}}, {start: {name:"Meg Ryan"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Sally Albright"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Carrie Fisher"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Marie"]}}, {start: {name:"Bruno Kirby"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Jess"]}}, {start: {name:"Tom Hanks"}, end: {title:"That Thing You Do"}, properties:{roles:["Mr. White"]}}, {start: {name:"Liv Tyler"}, end: {title:"That Thing You Do"}, properties:{roles:["Faye Dolan"]}}, {start: {name:"Charlize Theron"}, end: {title:"That Thing You Do"}, properties:{roles:["Tina"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Replacements"}, properties:{roles:["Shane Falco"]}}, {start: {name:"Brooke Langton"}, end: {title:"The Replacements"}, properties:{roles:["Annabelle Farrell"]}}, {start: {name:"Gene Hackman"}, end: {title:"The Replacements"}, properties:{roles:["Jimmy McGinty"]}}, {start: {name:"Orlando Jones"}, end: {title:"The Replacements"}, properties:{roles:["Clifford Franklin"]}}, {start: {name:"Marshall Bell"}, end: {title:"RescueDawn"}, properties:{roles:["Admiral"]}}, {start: {name:"Christian Bale"}, end: {title:"RescueDawn"}, properties:{roles:["Dieter Dengler"]}}, {start: {name:"Zach Grenier"}, end: {title:"RescueDawn"}, properties:{roles:["Squad Leader"]}}, {start: {name:"Steve Zahn"}, end: {title:"RescueDawn"}, properties:{roles:["Duane"]}}, {start: {name:"Robin Williams"}, end: {title:"The Birdcage"}, properties:{roles:["Armand Goldman"]}}, {start: {name:"Nathan Lane"}, end: {title:"The Birdcage"}, properties:{roles:["Albert Goldman"]}}, {start: {name:"Gene Hackman"}, end: {title:"The Birdcage"}, properties:{roles:["Sen. Kevin Keeley"]}}, {start: {name:"Richard Harris"}, end: {title:"Unforgiven"}, properties:{roles:["English Bob"]}}, {start: {name:"Clint Eastwood"}, end: {title:"Unforgiven"}, properties:{roles:["Bill Munny"]}}, {start: {name:"Gene Hackman"}, end: {title:"Unforgiven"}, properties:{roles:["Little Bill Daggett"]}}, {start: {name:"Keanu Reeves"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Johnny Mnemonic"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Takeshi Kitano"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Takahashi"]}}, {start: {name:"Dina Meyer"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Jane"]}}, {start: {name:"Ice-T"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["J-Bone"]}}, {start: {name:"Tom Hanks"}, end: {title:"Cloud Atlas"}, properties:{roles:["Zachry", "Dr. Henry Goose", "Isaac Sachs", "Dermot Hoggins"]}}, {start: {name:"Hugo Weaving"}, end: {title:"Cloud Atlas"}, properties:{roles:["Bill Smoke", "Haskell Moore", "Tadeusz Kesselring", "Nurse Noakes", "Boardman Mephi", "Old Georgie"]}}, {start: {name:"Halle Berry"}, end: {title:"Cloud Atlas"}, properties:{roles:["Luisa Rey", "Jocasta Ayrs", "Ovid", "Meronym"]}}, {start: {name:"Jim Broadbent"}, end: {title:"Cloud Atlas"}, properties:{roles:["Vyvyan Ayrs", "Captain Molyneux", "Timothy Cavendish"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Dr. Robert Langdon"]}}, {start: {name:"Ian McKellen"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Sir Leight Teabing"]}}, {start: {name:"Audrey Tautou"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Sophie Neveu"]}}, {start: {name:"Paul Bettany"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Silas"]}}, {start: {name:"Hugo Weaving"}, end: {title:"V for Vendetta"}, properties:{roles:["V"]}}, {start: {name:"Natalie Portman"}, end: {title:"V for Vendetta"}, properties:{roles:["Evey Hammond"]}}, {start: {name:"Stephen Rea"}, end: {title:"V for Vendetta"}, properties:{roles:["Eric Finch"]}}, {start: {name:"John Hurt"}, end: {title:"V for Vendetta"}, properties:{roles:["High Chancellor Adam Sutler"]}}, {start: {name:"Ben Miles"}, end: {title:"V for Vendetta"}, properties:{roles:["Dascomb"]}}, {start: {name:"Emile Hirsch"}, end: {title:"Speed Racer"}, properties:{roles:["Speed Racer"]}}, {start: {name:"John Goodman"}, end: {title:"Speed Racer"}, properties:{roles:["Pops"]}}, {start: {name:"Susan Sarandon"}, end: {title:"Speed Racer"}, properties:{roles:["Mom"]}}, {start: {name:"Matthew Fox"}, end: {title:"Speed Racer"}, properties:{roles:["Racer X"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Christina Ricci"}, end: {title:"Speed Racer"}, properties:{roles:["Trixie"]}}, {start: {name:"Rain"}, end: {title:"Speed Racer"}, properties:{roles:["Taejo Togokahn"]}}, {start: {name:"Ben Miles"}, end: {title:"Speed Racer"}, properties:{roles:["Cass Jones"]}}, {start: {name:"Rain"}, end: {title:"Ninja Assassin"}, properties:{roles:["Raizo"]}}, {start: {name:"Naomie Harris"}, end: {title:"Ninja Assassin"}, properties:{roles:["Mika Coretti"]}}, {start: {name:"Rick Yune"}, end: {title:"Ninja Assassin"}, properties:{roles:["Takeshi"]}}, {start: {name:"Ben Miles"}, end: {title:"Ninja Assassin"}, properties:{roles:["Ryan Maslow"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Green Mile"}, properties:{roles:["Paul Edgecomb"]}}, {start: {name:"Michael Clarke Duncan"}, end: {title:"The Green Mile"}, properties:{roles:["John Coffey"]}}, {start: {name:"David Morse"}, end: {title:"The Green Mile"}, properties:{roles:["Brutus \"Brutal\" Howell"]}}, {start: {name:"Bonnie Hunt"}, end: {title:"The Green Mile"}, properties:{roles:["Jan Edgecomb"]}}, {start: {name:"James Cromwell"}, end: {title:"The Green Mile"}, properties:{roles:["Warden Hal Moores"]}}, {start: {name:"Sam Rockwell"}, end: {title:"The Green Mile"}, properties:{roles:["\"Wild Bill\" Wharton"]}}, {start: {name:"Gary Sinise"}, end: {title:"The Green Mile"}, properties:{roles:["Burt Hammersmith"]}}, {start: {name:"Patricia Clarkson"}, end: {title:"The Green Mile"}, properties:{roles:["Melinda Moores"]}}, {start: {name:"Frank Langella"}, end: {title:"Frost/Nixon"}, properties:{roles:["Richard Nixon"]}}, {start: {name:"Michael Sheen"}, end: {title:"Frost/Nixon"}, properties:{roles:["David Frost"]}}, {start: {name:"Kevin Bacon"}, end: {title:"Frost/Nixon"}, properties:{roles:["Jack Brennan"]}}, {start: {name:"Oliver Platt"}, end: {title:"Frost/Nixon"}, properties:{roles:["Bob Zelnick"]}}, {start: {name:"Sam Rockwell"}, end: {title:"Frost/Nixon"}, properties:{roles:["James Reston, Jr."]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Jack Nicholson"}, end: {title:"Hoffa"}, properties:{roles:["Hoffa"]}}, {start: {name:"Danny DeVito"}, end: {title:"Hoffa"}, properties:{roles:["Robert \"Bobby\" Ciaro"]}}, {start: {name:"J.T. Walsh"}, end: {title:"Hoffa"}, properties:{roles:["Frank Fitzsimmons"]}}, {start: {name:"John C. Reilly"}, end: {title:"Hoffa"}, properties:{roles:["Peter \"Pete\" Connelly"]}}, {start: {name:"Tom Hanks"}, end: {title:"Apollo 13"}, properties:{roles:["Jim Lovell"]}}, {start: {name:"Kevin Bacon"}, end: {title:"Apollo 13"}, properties:{roles:["Jack Swigert"]}}, {start: {name:"Ed Harris"}, end: {title:"Apollo 13"}, properties:{roles:["Gene Kranz"]}}, {start: {name:"Bill Paxton"}, end: {title:"Apollo 13"}, properties:{roles:["Fred Haise"]}}, {start: {name:"Gary Sinise"}, end: {title:"Apollo 13"}, properties:{roles:["Ken Mattingly"]}}, {start: {name:"Bill Paxton"}, end: {title:"Twister"}, properties:{roles:["Bill Harding"]}}, {start: {name:"Helen Hunt"}, end: {title:"Twister"}, properties:{roles:["Dr. Jo Harding"]}}, {start: {name:"Zach Grenier"}, end: {title:"Twister"}, properties:{roles:["Eddie"]}}, {start: {name:"Philip Seymour Hoffman"}, end: {title:"Twister"}, properties:{roles:["Dustin \"Dusty\" Davis"]}}, {start: {name:"Tom Hanks"}, end: {title:"Cast Away"}, properties:{roles:["Chuck Noland"]}}, {start: {name:"Helen Hunt"}, end: {title:"Cast Away"}, properties:{roles:["Kelly Frears"]}}, {start: {name:"Jack Nicholson"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{roles:["Randle McMurphy"]}}, {start: {name:"Danny DeVito"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{roles:["Martini"]}}, {start: {name:"Jack Nicholson"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Harry Sanborn"]}}, {start: {name:"Diane Keaton"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Erica Barry"]}}, {start: {name:"Keanu Reeves"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Julian Mercer"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Robin Williams"}, end: {title:"Bicentennial Man"}, properties:{roles:["Andrew Marin"]}}, {start: {name:"Oliver Platt"}, end: {title:"Bicentennial Man"}, properties:{roles:["Rupert Burns"]}}, {start: {name:"Tom Hanks"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Rep. Charlie Wilson"]}}, {start: {name:"Julia Roberts"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Joanne Herring"]}}, {start: {name:"Philip Seymour Hoffman"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Gust Avrakotos"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Polar Express"}, properties:{roles:["Hero Boy", "Father", "Conductor", "Hobo", "Scrooge", "Santa Claus"]}}, {start: {name:"Tom Hanks"}, end: {title:"A League of Their Own"}, properties:{roles:["Jimmy Dugan"]}}, {start: {name:"Geena Davis"}, end: {title:"A League of Their Own"}, properties:{roles:["Dottie Hinson"]}}, {start: {name:"Lori Petty"}, end: {title:"A League of Their Own"}, properties:{roles:["Kit Keller"]}}, {start: {name:"Rosie O'Donnell"}, end: {title:"A League of Their Own"}, properties:{roles:["Doris Murphy"]}}, {start: {name:"Madonna"}, end: {title:"A League of Their Own"}, properties:{roles:["\"All the Way\" Mae Mordabito"]}}, {start: {name:"Bill Paxton"}, end: {title:"A League of Their Own"}, properties:{roles:["Bob Hinson"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Jessica Thompson"}, end: {title:"Cloud Atlas"}, properties:{summary:"An amazing journey", rating:95}}, {start: {name:"Jessica Thompson"}, end: {title:"The Replacements"}, properties:{summary:"Silly, but fun", rating:65}}, {start: {name:"James Thompson"}, end: {title:"The Replacements"}, properties:{summary:"The coolest football movie ever", rating:100}}, {start: {name:"Angela Scope"}, end: {title:"The Replacements"}, properties:{summary:"Pretty funny at times", rating:62}}, {start: {name:"Jessica Thompson"}, end: {title:"Unforgiven"}, properties:{summary:"Dark, but compelling", rating:85}}, {start: {name:"Jessica Thompson"}, end: {title:"The Birdcage"}, properties:{summary:"Slapstick redeemed only by the Robin Williams and Gene Hackman's stellar performances", rating:45}}, {start: {name:"Jessica Thompson"}, end: {title:"The Da Vinci Code"}, properties:{summary:"A solid romp", rating:68}}, {start: {name:"James Thompson"}, end: {title:"The Da Vinci Code"}, properties:{summary:"Fun, but a little far fetched", rating:65}}, {start: {name:"Jessica Thompson"}, end: {title:"Jerry Maguire"}, properties:{summary:"You had me at Jerry", rating:92}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:REVIEWED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"James Thompson"}, end: {name:"Jessica Thompson"}, properties:{}}, {start: {name:"Angela Scope"}, end: {name:"Jessica Thompson"}, properties:{}}, {start: {name:"Paul Blythe"}, end: {name:"Angela Scope"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Person{name: row.end.name})
+CREATE (start)-[r:FOLLOWS]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Lilly Wachowski"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Taylor Hackford"}, end: {title:"The Devil's Advocate"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"A Few Good Men"}, properties:{}}, {start: {name:"Tony Scott"}, end: {title:"Top Gun"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"Stand By Me"}, properties:{}}, {start: {name:"James L. Brooks"}, end: {title:"As Good as It Gets"}, properties:{}}, {start: {name:"Vincent Ward"}, end: {title:"What Dreams May Come"}, properties:{}}, {start: {name:"Scott Hicks"}, end: {title:"Snow Falling on Cedars"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"You've Got Mail"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"Sleepless in Seattle"}, properties:{}}, {start: {name:"John Patrick Stanley"}, end: {title:"Joe Versus the Volcano"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Tom Hanks"}, end: {title:"That Thing You Do"}, properties:{}}, {start: {name:"Howard Deutch"}, end: {title:"The Replacements"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Werner Herzog"}, end: {title:"RescueDawn"}, properties:{}}, {start: {name:"Mike Nichols"}, end: {title:"The Birdcage"}, properties:{}}, {start: {name:"Clint Eastwood"}, end: {title:"Unforgiven"}, properties:{}}, {start: {name:"Robert Longo"}, end: {title:"Johnny Mnemonic"}, properties:{}}, {start: {name:"Tom Tykwer"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"The Da Vinci Code"}, properties:{}}, {start: {name:"James Marshall"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"James Marshall"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Frank Darabont"}, end: {title:"The Green Mile"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"Frost/Nixon"}, properties:{}}, {start: {name:"Danny DeVito"}, end: {title:"Hoffa"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"Apollo 13"}, properties:{}}, {start: {name:"Jan de Bont"}, end: {title:"Twister"}, properties:{}}, {start: {name:"Robert Zemeckis"}, end: {title:"Cast Away"}, properties:{}}, {start: {name:"Milos Forman"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Chris Columbus"}, end: {title:"Bicentennial Man"}, properties:{}}, {start: {name:"Mike Nichols"}, end: {title:"Charlie Wilson's War"}, properties:{}}, {start: {name:"Robert Zemeckis"}, end: {title:"The Polar Express"}, properties:{}}, {start: {name:"Penny Marshall"}, end: {title:"A League of Their Own"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {_id:176}, end: {_id:175}, properties:{}}, {start: {_id:174}, end: {_id:177}, properties:{}}, {start: {_id:179}, end: {_id:178}, properties:{}}, {start: {_id:180}, end: {_id:177}, properties:{}}, {start: {_id:174}, end: {_id:180}, properties:{}}] AS row
+MATCH (start:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.start._id})
+MATCH (end:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.end._id})
+CREATE (start)-[r:HAS_SAME_CREATOR]->(end) SET r += row.properties;
+:commit
+:begin
+MATCH (n:`UNIQUE IMPORT LABEL`)  WITH n LIMIT 20000 REMOVE n:`UNIQUE IMPORT LABEL` REMOVE n.`UNIQUE IMPORT ID`;
+:commit
+:begin
+DROP CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
+:commit
\ No newline at end of file
diff --git a/neo4j/import_old/software-graph.dump b/neo4j/import_old/software-graph.dump
new file mode 100755
index 0000000000000000000000000000000000000000..d3c2c0526e869a66b25027c72d0fc5690a87d3e7
Binary files /dev/null and b/neo4j/import_old/software-graph.dump differ
diff --git a/neo4j/script.sh b/neo4j/script.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cd539d6f4a32b3b4128a1834a2978d865aecbad7
--- /dev/null
+++ b/neo4j/script.sh
@@ -0,0 +1 @@
+neo4j-admin load --from=import/software-graph.dump --database=neo4j --force
\ No newline at end of file
diff --git a/neo4j/scripts/insert.sh b/neo4j/scripts/insert.sh
new file mode 100644
index 0000000000000000000000000000000000000000..210a94eaddb5768b1e570d4f6677929b876f17d4
--- /dev/null
+++ b/neo4j/scripts/insert.sh
@@ -0,0 +1,110 @@
+:begin
+CREATE INDEX FOR (node:Person) ON (node.born);
+CREATE INDEX FOR (node:Movie) ON (node.released);
+CREATE CONSTRAINT ON (node:Person) ASSERT (node.name) IS UNIQUE;
+CREATE CONSTRAINT ON (node:Movie) ASSERT (node.title) IS UNIQUE;
+CREATE CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
+:commit
+CALL db.awaitIndexes(300);
+:begin
+UNWIND [{name:"Keanu Reeves", properties:{born:1964}}, {name:"Carrie-Anne Moss", properties:{born:1967}}, {name:"Laurence Fishburne", properties:{born:1961}}, {name:"Hugo Weaving", properties:{born:1960}}, {name:"Lilly Wachowski", properties:{born:1967}}, {name:"Lana Wachowski", properties:{born:1965}}, {name:"Joel Silver", properties:{born:1952}}, {name:"Emil Eifrem", properties:{born:1978}}, {name:"Charlize Theron", properties:{born:1975}}, {name:"Al Pacino", properties:{born:1940}}, {name:"Taylor Hackford", properties:{born:1944}}, {name:"Tom Cruise", properties:{born:1962}}, {name:"Jack Nicholson", properties:{born:1937}}, {name:"Demi Moore", properties:{born:1962}}, {name:"Kevin Bacon", properties:{born:1958}}, {name:"Kiefer Sutherland", properties:{born:1966}}, {name:"Noah Wyle", properties:{born:1971}}, {name:"Cuba Gooding Jr.", properties:{born:1968}}, {name:"Kevin Pollak", properties:{born:1957}}, {name:"J.T. Walsh", properties:{born:1943}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"James Marshall", properties:{born:1967}}, {name:"Christopher Guest", properties:{born:1948}}, {name:"Rob Reiner", properties:{born:1947}}, {name:"Aaron Sorkin", properties:{born:1961}}, {name:"Kelly McGillis", properties:{born:1957}}, {name:"Val Kilmer", properties:{born:1959}}, {name:"Anthony Edwards", properties:{born:1962}}, {name:"Tom Skerritt", properties:{born:1933}}, {name:"Meg Ryan", properties:{born:1961}}, {name:"Tony Scott", properties:{born:1944}}, {name:"Jim Cash", properties:{born:1941}}, {name:"Renee Zellweger", properties:{born:1969}}, {name:"Kelly Preston", properties:{born:1962}}, {name:"Jerry O'Connell", properties:{born:1974}}, {name:"Jay Mohr", properties:{born:1970}}, {name:"Bonnie Hunt", properties:{born:1961}}, {name:"Regina King", properties:{born:1971}}, {name:"Jonathan Lipnicki", properties:{born:1996}}, {name:"Cameron Crowe", properties:{born:1957}}, {name:"River Phoenix", properties:{born:1970}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Corey Feldman", properties:{born:1971}}, {name:"Wil Wheaton", properties:{born:1972}}, {name:"John Cusack", properties:{born:1966}}, {name:"Marshall Bell", properties:{born:1942}}, {name:"Helen Hunt", properties:{born:1963}}, {name:"Greg Kinnear", properties:{born:1963}}, {name:"James L. Brooks", properties:{born:1940}}, {name:"Annabella Sciorra", properties:{born:1960}}, {name:"Max von Sydow", properties:{born:1929}}, {name:"Werner Herzog", properties:{born:1942}}, {name:"Robin Williams", properties:{born:1951}}, {name:"Vincent Ward", properties:{born:1956}}, {name:"Ethan Hawke", properties:{born:1970}}, {name:"Rick Yune", properties:{born:1971}}, {name:"James Cromwell", properties:{born:1940}}, {name:"Scott Hicks", properties:{born:1953}}, {name:"Parker Posey", properties:{born:1968}}, {name:"Dave Chappelle", properties:{born:1973}}, {name:"Steve Zahn", properties:{born:1967}}, {name:"Tom Hanks", properties:{born:1956}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Nora Ephron", properties:{born:1941}}, {name:"Rita Wilson", properties:{born:1956}}, {name:"Bill Pullman", properties:{born:1953}}, {name:"Victor Garber", properties:{born:1949}}, {name:"Rosie O'Donnell", properties:{born:1962}}, {name:"John Patrick Stanley", properties:{born:1950}}, {name:"Nathan Lane", properties:{born:1956}}, {name:"Billy Crystal", properties:{born:1948}}, {name:"Carrie Fisher", properties:{born:1956}}, {name:"Bruno Kirby", properties:{born:1949}}, {name:"Liv Tyler", properties:{born:1977}}, {name:"Brooke Langton", properties:{born:1970}}, {name:"Gene Hackman", properties:{born:1930}}, {name:"Orlando Jones", properties:{born:1968}}, {name:"Howard Deutch", properties:{born:1950}}, {name:"Christian Bale", properties:{born:1974}}, {name:"Zach Grenier", properties:{born:1954}}, {name:"Mike Nichols", properties:{born:1931}}, {name:"Richard Harris", properties:{born:1930}}, {name:"Clint Eastwood", properties:{born:1930}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Takeshi Kitano", properties:{born:1947}}, {name:"Dina Meyer", properties:{born:1968}}, {name:"Ice-T", properties:{born:1958}}, {name:"Robert Longo", properties:{born:1953}}, {name:"Halle Berry", properties:{born:1966}}, {name:"Jim Broadbent", properties:{born:1949}}, {name:"Tom Tykwer", properties:{born:1965}}, {name:"David Mitchell", properties:{born:1969}}, {name:"Stefan Arndt", properties:{born:1961}}, {name:"Ian McKellen", properties:{born:1939}}, {name:"Audrey Tautou", properties:{born:1976}}, {name:"Paul Bettany", properties:{born:1971}}, {name:"Ron Howard", properties:{born:1954}}, {name:"Natalie Portman", properties:{born:1981}}, {name:"Stephen Rea", properties:{born:1946}}, {name:"John Hurt", properties:{born:1940}}, {name:"Ben Miles", properties:{born:1967}}, {name:"Emile Hirsch", properties:{born:1985}}, {name:"John Goodman", properties:{born:1960}}, {name:"Susan Sarandon", properties:{born:1946}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Matthew Fox", properties:{born:1966}}, {name:"Christina Ricci", properties:{born:1980}}, {name:"Rain", properties:{born:1982}}, {name:"Naomie Harris", properties:{}}, {name:"Michael Clarke Duncan", properties:{born:1957}}, {name:"David Morse", properties:{born:1953}}, {name:"Sam Rockwell", properties:{born:1968}}, {name:"Gary Sinise", properties:{born:1955}}, {name:"Patricia Clarkson", properties:{born:1959}}, {name:"Frank Darabont", properties:{born:1959}}, {name:"Frank Langella", properties:{born:1938}}, {name:"Michael Sheen", properties:{born:1969}}, {name:"Oliver Platt", properties:{born:1960}}, {name:"Danny DeVito", properties:{born:1944}}, {name:"John C. Reilly", properties:{born:1965}}, {name:"Ed Harris", properties:{born:1950}}, {name:"Bill Paxton", properties:{born:1955}}, {name:"Philip Seymour Hoffman", properties:{born:1967}}, {name:"Jan de Bont", properties:{born:1943}}, {name:"Robert Zemeckis", properties:{born:1951}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{name:"Milos Forman", properties:{born:1932}}, {name:"Diane Keaton", properties:{born:1946}}, {name:"Nancy Meyers", properties:{born:1949}}, {name:"Chris Columbus", properties:{born:1958}}, {name:"Julia Roberts", properties:{born:1967}}, {name:"Madonna", properties:{born:1954}}, {name:"Geena Davis", properties:{born:1956}}, {name:"Lori Petty", properties:{born:1963}}, {name:"Penny Marshall", properties:{born:1943}}, {name:"Paul Blythe", properties:{}}, {name:"Angela Scope", properties:{}}, {name:"Jessica Thompson", properties:{}}, {name:"James Thompson", properties:{}}] AS row
+CREATE (n:Person{name: row.name}) SET n += row.properties;
+UNWIND [{_id:171, properties:{license:"proprietary", price:"freemium", name:"Notion"}}, {_id:172, properties:{name:"Libreoffice Calc\n"}}, {_id:173, properties:{name:"Trello"}}, {_id:174, properties:{name:"Word"}}, {_id:175, properties:{name:"Google Slides"}}, {_id:176, properties:{name:"Google Sheets"}}, {_id:177, properties:{name:"Excel"}}, {_id:178, properties:{name:"Libreoffice Writer\n"}}, {_id:179, properties:{name:"Libreoffice Impress\n"}}, {_id:180, properties:{name:"Powerpoint"}}, {_id:181, properties:{name:"Google Docs\n"}}] AS row
+CREATE (n:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row._id}) SET n += row.properties SET n:Software;
+UNWIND [{title:"The Matrix", properties:{tagline:"Welcome to the Real World", released:1999}}, {title:"The Matrix Reloaded", properties:{tagline:"Free your mind", released:2003}}, {title:"The Matrix Revolutions", properties:{tagline:"Everything that has a beginning has an end", released:2003}}, {title:"The Devil's Advocate", properties:{tagline:"Evil has its winning ways", released:1997}}, {title:"A Few Good Men", properties:{tagline:"In the heart of the nation's capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth.", released:1992}}, {title:"Top Gun", properties:{tagline:"I feel the need, the need for speed.", released:1986}}, {title:"Jerry Maguire", properties:{tagline:"The rest of his life begins now.", released:2000}}, {title:"Stand By Me", properties:{tagline:"For some, it's the last real taste of innocence, and the first real taste of life. But for everyone, it's the time that memories are made of.", released:1986}}, {title:"As Good as It Gets", properties:{tagline:"A comedy from the heart that goes for the throat.", released:1997}}, {title:"What Dreams May Come", properties:{tagline:"After life there is more. The end is just the beginning.", released:1998}}, {title:"Snow Falling on Cedars", properties:{tagline:"First loves last. Forever.", released:1999}}, {title:"You've Got Mail", properties:{tagline:"At odds in life... in love on-line.", released:1998}}, {title:"Sleepless in Seattle", properties:{tagline:"What if someone you never met, someone you never saw, someone you never knew was the only someone for you?", released:1993}}, {title:"Joe Versus the Volcano", properties:{tagline:"A story of love, lava and burning desire.", released:1990}}, {title:"When Harry Met Sally", properties:{tagline:"Can two friends sleep together and still love each other in the morning?", released:1998}}, {title:"That Thing You Do", properties:{tagline:"In every life there comes a time when that thing you dream becomes that thing you do", released:1996}}, {title:"The Replacements", properties:{tagline:"Pain heals, Chicks dig scars... Glory lasts forever", released:2000}}, {title:"RescueDawn", properties:{tagline:"Based on the extraordinary true story of one man's fight for freedom", released:2006}}, {title:"The Birdcage", properties:{tagline:"Come as you are", released:1996}}, {title:"Unforgiven", properties:{tagline:"It's a hell of a thing, killing a man", released:1992}}] AS row
+CREATE (n:Movie{title: row.title}) SET n += row.properties;
+UNWIND [{title:"Johnny Mnemonic", properties:{tagline:"The hottest data on earth. In the coolest head in town", released:1995}}, {title:"Cloud Atlas", properties:{tagline:"Everything is connected", released:2012}}, {title:"The Da Vinci Code", properties:{tagline:"Break The Codes", released:2006}}, {title:"V for Vendetta", properties:{tagline:"Freedom! Forever!", released:2006}}, {title:"Speed Racer", properties:{tagline:"Speed has no limits", released:2008}}, {title:"Ninja Assassin", properties:{tagline:"Prepare to enter a secret world of assassins", released:2009}}, {title:"The Green Mile", properties:{tagline:"Walk a mile you'll never forget.", released:1999}}, {title:"Frost/Nixon", properties:{tagline:"400 million people were waiting for the truth.", released:2008}}, {title:"Hoffa", properties:{tagline:"He didn't want law. He wanted justice.", released:1992}}, {title:"Apollo 13", properties:{tagline:"Houston, we have a problem.", released:1995}}, {title:"Twister", properties:{tagline:"Don't Breathe. Don't Look Back.", released:1996}}, {title:"Cast Away", properties:{tagline:"At the edge of the world, his journey begins.", released:2000}}, {title:"One Flew Over the Cuckoo's Nest", properties:{tagline:"If he's crazy, what does that make you?", released:1975}}, {title:"Something's Gotta Give", properties:{released:2003}}, {title:"Bicentennial Man", properties:{tagline:"One robot's 200 year journey to become an ordinary man.", released:1999}}, {title:"Charlie Wilson's War", properties:{tagline:"A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire.", released:2007}}, {title:"The Polar Express", properties:{tagline:"This Holiday Season… Believe", released:2004}}, {title:"A League of Their Own", properties:{tagline:"Once in a lifetime you get a chance to do something different.", released:1992}}] AS row
+CREATE (n:Movie{title: row.title}) SET n += row.properties;
+:commit
+:begin
+UNWIND [{start: {name:"Joel Silver"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Stefan Arndt"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Joel Silver"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:PRODUCED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Aaron Sorkin"}, end: {title:"A Few Good Men"}, properties:{}}, {start: {name:"Jim Cash"}, end: {title:"Top Gun"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"David Mitchell"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:WROTE]->(end) SET r += row.properties;
+UNWIND [{start: {_id:172}, end: {_id:177}, properties:{}}, {start: {_id:173}, end: {_id:171}, properties:{}}, {start: {_id:171}, end: {_id:181}, properties:{}}, {start: {_id:181}, end: {_id:174}, properties:{}}, {start: {_id:176}, end: {_id:171}, properties:{}}, {start: {_id:178}, end: {_id:174}, properties:{}}, {start: {_id:176}, end: {_id:177}, properties:{}}, {start: {_id:179}, end: {_id:175}, properties:{}}, {start: {_id:179}, end: {_id:180}, properties:{}}, {start: {_id:180}, end: {_id:175}, properties:{}}] AS row
+MATCH (start:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.start._id})
+MATCH (end:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.end._id})
+CREATE (start)-[r:SIMILAR]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Keanu Reeves"}, end: {title:"The Matrix"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Emil Eifrem"}, end: {title:"The Matrix"}, properties:{roles:["Emil"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix Reloaded"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Neo"]}}, {start: {name:"Carrie-Anne Moss"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Trinity"]}}, {start: {name:"Laurence Fishburne"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Morpheus"]}}, {start: {name:"Hugo Weaving"}, end: {title:"The Matrix Revolutions"}, properties:{roles:["Agent Smith"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Devil's Advocate"}, properties:{roles:["Kevin Lomax"]}}, {start: {name:"Charlize Theron"}, end: {title:"The Devil's Advocate"}, properties:{roles:["Mary Ann Lomax"]}}, {start: {name:"Al Pacino"}, end: {title:"The Devil's Advocate"}, properties:{roles:["John Milton"]}}, {start: {name:"Tom Cruise"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Daniel Kaffee"]}}, {start: {name:"Jack Nicholson"}, end: {title:"A Few Good Men"}, properties:{roles:["Col. Nathan R. Jessup"]}}, {start: {name:"Demi Moore"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Cdr. JoAnne Galloway"]}}, {start: {name:"Kevin Bacon"}, end: {title:"A Few Good Men"}, properties:{roles:["Capt. Jack Ross"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Kiefer Sutherland"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Jonathan Kendrick"]}}, {start: {name:"Noah Wyle"}, end: {title:"A Few Good Men"}, properties:{roles:["Cpl. Jeffrey Barnes"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"A Few Good Men"}, properties:{roles:["Cpl. Carl Hammaker"]}}, {start: {name:"Kevin Pollak"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Sam Weinberg"]}}, {start: {name:"J.T. Walsh"}, end: {title:"A Few Good Men"}, properties:{roles:["Lt. Col. Matthew Andrew Markinson"]}}, {start: {name:"James Marshall"}, end: {title:"A Few Good Men"}, properties:{roles:["Pfc. Louden Downey"]}}, {start: {name:"Christopher Guest"}, end: {title:"A Few Good Men"}, properties:{roles:["Dr. Stone"]}}, {start: {name:"Aaron Sorkin"}, end: {title:"A Few Good Men"}, properties:{roles:["Man in Bar"]}}, {start: {name:"Tom Cruise"}, end: {title:"Top Gun"}, properties:{roles:["Maverick"]}}, {start: {name:"Kelly McGillis"}, end: {title:"Top Gun"}, properties:{roles:["Charlie"]}}, {start: {name:"Val Kilmer"}, end: {title:"Top Gun"}, properties:{roles:["Iceman"]}}, {start: {name:"Anthony Edwards"}, end: {title:"Top Gun"}, properties:{roles:["Goose"]}}, {start: {name:"Tom Skerritt"}, end: {title:"Top Gun"}, properties:{roles:["Viper"]}}, {start: {name:"Meg Ryan"}, end: {title:"Top Gun"}, properties:{roles:["Carole"]}}, {start: {name:"Tom Cruise"}, end: {title:"Jerry Maguire"}, properties:{roles:["Jerry Maguire"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"Jerry Maguire"}, properties:{roles:["Rod Tidwell"]}}, {start: {name:"Renee Zellweger"}, end: {title:"Jerry Maguire"}, properties:{roles:["Dorothy Boyd"]}}, {start: {name:"Kelly Preston"}, end: {title:"Jerry Maguire"}, properties:{roles:["Avery Bishop"]}}, {start: {name:"Jerry O'Connell"}, end: {title:"Jerry Maguire"}, properties:{roles:["Frank Cushman"]}}, {start: {name:"Jay Mohr"}, end: {title:"Jerry Maguire"}, properties:{roles:["Bob Sugar"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Bonnie Hunt"}, end: {title:"Jerry Maguire"}, properties:{roles:["Laurel Boyd"]}}, {start: {name:"Regina King"}, end: {title:"Jerry Maguire"}, properties:{roles:["Marcee Tidwell"]}}, {start: {name:"Jonathan Lipnicki"}, end: {title:"Jerry Maguire"}, properties:{roles:["Ray Boyd"]}}, {start: {name:"Wil Wheaton"}, end: {title:"Stand By Me"}, properties:{roles:["Gordie Lachance"]}}, {start: {name:"River Phoenix"}, end: {title:"Stand By Me"}, properties:{roles:["Chris Chambers"]}}, {start: {name:"Jerry O'Connell"}, end: {title:"Stand By Me"}, properties:{roles:["Vern Tessio"]}}, {start: {name:"Corey Feldman"}, end: {title:"Stand By Me"}, properties:{roles:["Teddy Duchamp"]}}, {start: {name:"John Cusack"}, end: {title:"Stand By Me"}, properties:{roles:["Denny Lachance"]}}, {start: {name:"Kiefer Sutherland"}, end: {title:"Stand By Me"}, properties:{roles:["Ace Merrill"]}}, {start: {name:"Marshall Bell"}, end: {title:"Stand By Me"}, properties:{roles:["Mr. Lachance"]}}, {start: {name:"Jack Nicholson"}, end: {title:"As Good as It Gets"}, properties:{roles:["Melvin Udall"]}}, {start: {name:"Helen Hunt"}, end: {title:"As Good as It Gets"}, properties:{roles:["Carol Connelly"]}}, {start: {name:"Greg Kinnear"}, end: {title:"As Good as It Gets"}, properties:{roles:["Simon Bishop"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"As Good as It Gets"}, properties:{roles:["Frank Sachs"]}}, {start: {name:"Robin Williams"}, end: {title:"What Dreams May Come"}, properties:{roles:["Chris Nielsen"]}}, {start: {name:"Cuba Gooding Jr."}, end: {title:"What Dreams May Come"}, properties:{roles:["Albert Lewis"]}}, {start: {name:"Annabella Sciorra"}, end: {title:"What Dreams May Come"}, properties:{roles:["Annie Collins-Nielsen"]}}, {start: {name:"Max von Sydow"}, end: {title:"What Dreams May Come"}, properties:{roles:["The Tracker"]}}, {start: {name:"Werner Herzog"}, end: {title:"What Dreams May Come"}, properties:{roles:["The Face"]}}, {start: {name:"Ethan Hawke"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Ishmael Chambers"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Rick Yune"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Kazuo Miyamoto"]}}, {start: {name:"Max von Sydow"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Nels Gudmundsson"]}}, {start: {name:"James Cromwell"}, end: {title:"Snow Falling on Cedars"}, properties:{roles:["Judge Fielding"]}}, {start: {name:"Tom Hanks"}, end: {title:"You've Got Mail"}, properties:{roles:["Joe Fox"]}}, {start: {name:"Meg Ryan"}, end: {title:"You've Got Mail"}, properties:{roles:["Kathleen Kelly"]}}, {start: {name:"Greg Kinnear"}, end: {title:"You've Got Mail"}, properties:{roles:["Frank Navasky"]}}, {start: {name:"Parker Posey"}, end: {title:"You've Got Mail"}, properties:{roles:["Patricia Eden"]}}, {start: {name:"Dave Chappelle"}, end: {title:"You've Got Mail"}, properties:{roles:["Kevin Jackson"]}}, {start: {name:"Steve Zahn"}, end: {title:"You've Got Mail"}, properties:{roles:["George Pappas"]}}, {start: {name:"Tom Hanks"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Sam Baldwin"]}}, {start: {name:"Meg Ryan"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Annie Reed"]}}, {start: {name:"Rita Wilson"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Suzy"]}}, {start: {name:"Bill Pullman"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Walter"]}}, {start: {name:"Victor Garber"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Greg"]}}, {start: {name:"Rosie O'Donnell"}, end: {title:"Sleepless in Seattle"}, properties:{roles:["Becky"]}}, {start: {name:"Tom Hanks"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["Joe Banks"]}}, {start: {name:"Meg Ryan"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["DeDe", "Angelica Graynamore", "Patricia Graynamore"]}}, {start: {name:"Nathan Lane"}, end: {title:"Joe Versus the Volcano"}, properties:{roles:["Baw"]}}, {start: {name:"Billy Crystal"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Harry Burns"]}}, {start: {name:"Meg Ryan"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Sally Albright"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Carrie Fisher"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Marie"]}}, {start: {name:"Bruno Kirby"}, end: {title:"When Harry Met Sally"}, properties:{roles:["Jess"]}}, {start: {name:"Tom Hanks"}, end: {title:"That Thing You Do"}, properties:{roles:["Mr. White"]}}, {start: {name:"Liv Tyler"}, end: {title:"That Thing You Do"}, properties:{roles:["Faye Dolan"]}}, {start: {name:"Charlize Theron"}, end: {title:"That Thing You Do"}, properties:{roles:["Tina"]}}, {start: {name:"Keanu Reeves"}, end: {title:"The Replacements"}, properties:{roles:["Shane Falco"]}}, {start: {name:"Brooke Langton"}, end: {title:"The Replacements"}, properties:{roles:["Annabelle Farrell"]}}, {start: {name:"Gene Hackman"}, end: {title:"The Replacements"}, properties:{roles:["Jimmy McGinty"]}}, {start: {name:"Orlando Jones"}, end: {title:"The Replacements"}, properties:{roles:["Clifford Franklin"]}}, {start: {name:"Marshall Bell"}, end: {title:"RescueDawn"}, properties:{roles:["Admiral"]}}, {start: {name:"Christian Bale"}, end: {title:"RescueDawn"}, properties:{roles:["Dieter Dengler"]}}, {start: {name:"Zach Grenier"}, end: {title:"RescueDawn"}, properties:{roles:["Squad Leader"]}}, {start: {name:"Steve Zahn"}, end: {title:"RescueDawn"}, properties:{roles:["Duane"]}}, {start: {name:"Robin Williams"}, end: {title:"The Birdcage"}, properties:{roles:["Armand Goldman"]}}, {start: {name:"Nathan Lane"}, end: {title:"The Birdcage"}, properties:{roles:["Albert Goldman"]}}, {start: {name:"Gene Hackman"}, end: {title:"The Birdcage"}, properties:{roles:["Sen. Kevin Keeley"]}}, {start: {name:"Richard Harris"}, end: {title:"Unforgiven"}, properties:{roles:["English Bob"]}}, {start: {name:"Clint Eastwood"}, end: {title:"Unforgiven"}, properties:{roles:["Bill Munny"]}}, {start: {name:"Gene Hackman"}, end: {title:"Unforgiven"}, properties:{roles:["Little Bill Daggett"]}}, {start: {name:"Keanu Reeves"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Johnny Mnemonic"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Takeshi Kitano"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Takahashi"]}}, {start: {name:"Dina Meyer"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["Jane"]}}, {start: {name:"Ice-T"}, end: {title:"Johnny Mnemonic"}, properties:{roles:["J-Bone"]}}, {start: {name:"Tom Hanks"}, end: {title:"Cloud Atlas"}, properties:{roles:["Zachry", "Dr. Henry Goose", "Isaac Sachs", "Dermot Hoggins"]}}, {start: {name:"Hugo Weaving"}, end: {title:"Cloud Atlas"}, properties:{roles:["Bill Smoke", "Haskell Moore", "Tadeusz Kesselring", "Nurse Noakes", "Boardman Mephi", "Old Georgie"]}}, {start: {name:"Halle Berry"}, end: {title:"Cloud Atlas"}, properties:{roles:["Luisa Rey", "Jocasta Ayrs", "Ovid", "Meronym"]}}, {start: {name:"Jim Broadbent"}, end: {title:"Cloud Atlas"}, properties:{roles:["Vyvyan Ayrs", "Captain Molyneux", "Timothy Cavendish"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Dr. Robert Langdon"]}}, {start: {name:"Ian McKellen"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Sir Leight Teabing"]}}, {start: {name:"Audrey Tautou"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Sophie Neveu"]}}, {start: {name:"Paul Bettany"}, end: {title:"The Da Vinci Code"}, properties:{roles:["Silas"]}}, {start: {name:"Hugo Weaving"}, end: {title:"V for Vendetta"}, properties:{roles:["V"]}}, {start: {name:"Natalie Portman"}, end: {title:"V for Vendetta"}, properties:{roles:["Evey Hammond"]}}, {start: {name:"Stephen Rea"}, end: {title:"V for Vendetta"}, properties:{roles:["Eric Finch"]}}, {start: {name:"John Hurt"}, end: {title:"V for Vendetta"}, properties:{roles:["High Chancellor Adam Sutler"]}}, {start: {name:"Ben Miles"}, end: {title:"V for Vendetta"}, properties:{roles:["Dascomb"]}}, {start: {name:"Emile Hirsch"}, end: {title:"Speed Racer"}, properties:{roles:["Speed Racer"]}}, {start: {name:"John Goodman"}, end: {title:"Speed Racer"}, properties:{roles:["Pops"]}}, {start: {name:"Susan Sarandon"}, end: {title:"Speed Racer"}, properties:{roles:["Mom"]}}, {start: {name:"Matthew Fox"}, end: {title:"Speed Racer"}, properties:{roles:["Racer X"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Christina Ricci"}, end: {title:"Speed Racer"}, properties:{roles:["Trixie"]}}, {start: {name:"Rain"}, end: {title:"Speed Racer"}, properties:{roles:["Taejo Togokahn"]}}, {start: {name:"Ben Miles"}, end: {title:"Speed Racer"}, properties:{roles:["Cass Jones"]}}, {start: {name:"Rain"}, end: {title:"Ninja Assassin"}, properties:{roles:["Raizo"]}}, {start: {name:"Naomie Harris"}, end: {title:"Ninja Assassin"}, properties:{roles:["Mika Coretti"]}}, {start: {name:"Rick Yune"}, end: {title:"Ninja Assassin"}, properties:{roles:["Takeshi"]}}, {start: {name:"Ben Miles"}, end: {title:"Ninja Assassin"}, properties:{roles:["Ryan Maslow"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Green Mile"}, properties:{roles:["Paul Edgecomb"]}}, {start: {name:"Michael Clarke Duncan"}, end: {title:"The Green Mile"}, properties:{roles:["John Coffey"]}}, {start: {name:"David Morse"}, end: {title:"The Green Mile"}, properties:{roles:["Brutus \"Brutal\" Howell"]}}, {start: {name:"Bonnie Hunt"}, end: {title:"The Green Mile"}, properties:{roles:["Jan Edgecomb"]}}, {start: {name:"James Cromwell"}, end: {title:"The Green Mile"}, properties:{roles:["Warden Hal Moores"]}}, {start: {name:"Sam Rockwell"}, end: {title:"The Green Mile"}, properties:{roles:["\"Wild Bill\" Wharton"]}}, {start: {name:"Gary Sinise"}, end: {title:"The Green Mile"}, properties:{roles:["Burt Hammersmith"]}}, {start: {name:"Patricia Clarkson"}, end: {title:"The Green Mile"}, properties:{roles:["Melinda Moores"]}}, {start: {name:"Frank Langella"}, end: {title:"Frost/Nixon"}, properties:{roles:["Richard Nixon"]}}, {start: {name:"Michael Sheen"}, end: {title:"Frost/Nixon"}, properties:{roles:["David Frost"]}}, {start: {name:"Kevin Bacon"}, end: {title:"Frost/Nixon"}, properties:{roles:["Jack Brennan"]}}, {start: {name:"Oliver Platt"}, end: {title:"Frost/Nixon"}, properties:{roles:["Bob Zelnick"]}}, {start: {name:"Sam Rockwell"}, end: {title:"Frost/Nixon"}, properties:{roles:["James Reston, Jr."]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Jack Nicholson"}, end: {title:"Hoffa"}, properties:{roles:["Hoffa"]}}, {start: {name:"Danny DeVito"}, end: {title:"Hoffa"}, properties:{roles:["Robert \"Bobby\" Ciaro"]}}, {start: {name:"J.T. Walsh"}, end: {title:"Hoffa"}, properties:{roles:["Frank Fitzsimmons"]}}, {start: {name:"John C. Reilly"}, end: {title:"Hoffa"}, properties:{roles:["Peter \"Pete\" Connelly"]}}, {start: {name:"Tom Hanks"}, end: {title:"Apollo 13"}, properties:{roles:["Jim Lovell"]}}, {start: {name:"Kevin Bacon"}, end: {title:"Apollo 13"}, properties:{roles:["Jack Swigert"]}}, {start: {name:"Ed Harris"}, end: {title:"Apollo 13"}, properties:{roles:["Gene Kranz"]}}, {start: {name:"Bill Paxton"}, end: {title:"Apollo 13"}, properties:{roles:["Fred Haise"]}}, {start: {name:"Gary Sinise"}, end: {title:"Apollo 13"}, properties:{roles:["Ken Mattingly"]}}, {start: {name:"Bill Paxton"}, end: {title:"Twister"}, properties:{roles:["Bill Harding"]}}, {start: {name:"Helen Hunt"}, end: {title:"Twister"}, properties:{roles:["Dr. Jo Harding"]}}, {start: {name:"Zach Grenier"}, end: {title:"Twister"}, properties:{roles:["Eddie"]}}, {start: {name:"Philip Seymour Hoffman"}, end: {title:"Twister"}, properties:{roles:["Dustin \"Dusty\" Davis"]}}, {start: {name:"Tom Hanks"}, end: {title:"Cast Away"}, properties:{roles:["Chuck Noland"]}}, {start: {name:"Helen Hunt"}, end: {title:"Cast Away"}, properties:{roles:["Kelly Frears"]}}, {start: {name:"Jack Nicholson"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{roles:["Randle McMurphy"]}}, {start: {name:"Danny DeVito"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{roles:["Martini"]}}, {start: {name:"Jack Nicholson"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Harry Sanborn"]}}, {start: {name:"Diane Keaton"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Erica Barry"]}}, {start: {name:"Keanu Reeves"}, end: {title:"Something's Gotta Give"}, properties:{roles:["Julian Mercer"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Robin Williams"}, end: {title:"Bicentennial Man"}, properties:{roles:["Andrew Marin"]}}, {start: {name:"Oliver Platt"}, end: {title:"Bicentennial Man"}, properties:{roles:["Rupert Burns"]}}, {start: {name:"Tom Hanks"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Rep. Charlie Wilson"]}}, {start: {name:"Julia Roberts"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Joanne Herring"]}}, {start: {name:"Philip Seymour Hoffman"}, end: {title:"Charlie Wilson's War"}, properties:{roles:["Gust Avrakotos"]}}, {start: {name:"Tom Hanks"}, end: {title:"The Polar Express"}, properties:{roles:["Hero Boy", "Father", "Conductor", "Hobo", "Scrooge", "Santa Claus"]}}, {start: {name:"Tom Hanks"}, end: {title:"A League of Their Own"}, properties:{roles:["Jimmy Dugan"]}}, {start: {name:"Geena Davis"}, end: {title:"A League of Their Own"}, properties:{roles:["Dottie Hinson"]}}, {start: {name:"Lori Petty"}, end: {title:"A League of Their Own"}, properties:{roles:["Kit Keller"]}}, {start: {name:"Rosie O'Donnell"}, end: {title:"A League of Their Own"}, properties:{roles:["Doris Murphy"]}}, {start: {name:"Madonna"}, end: {title:"A League of Their Own"}, properties:{roles:["\"All the Way\" Mae Mordabito"]}}, {start: {name:"Bill Paxton"}, end: {title:"A League of Their Own"}, properties:{roles:["Bob Hinson"]}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:ACTED_IN]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Jessica Thompson"}, end: {title:"Cloud Atlas"}, properties:{summary:"An amazing journey", rating:95}}, {start: {name:"Jessica Thompson"}, end: {title:"The Replacements"}, properties:{summary:"Silly, but fun", rating:65}}, {start: {name:"James Thompson"}, end: {title:"The Replacements"}, properties:{summary:"The coolest football movie ever", rating:100}}, {start: {name:"Angela Scope"}, end: {title:"The Replacements"}, properties:{summary:"Pretty funny at times", rating:62}}, {start: {name:"Jessica Thompson"}, end: {title:"Unforgiven"}, properties:{summary:"Dark, but compelling", rating:85}}, {start: {name:"Jessica Thompson"}, end: {title:"The Birdcage"}, properties:{summary:"Slapstick redeemed only by the Robin Williams and Gene Hackman's stellar performances", rating:45}}, {start: {name:"Jessica Thompson"}, end: {title:"The Da Vinci Code"}, properties:{summary:"A solid romp", rating:68}}, {start: {name:"James Thompson"}, end: {title:"The Da Vinci Code"}, properties:{summary:"Fun, but a little far fetched", rating:65}}, {start: {name:"Jessica Thompson"}, end: {title:"Jerry Maguire"}, properties:{summary:"You had me at Jerry", rating:92}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:REVIEWED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"James Thompson"}, end: {name:"Jessica Thompson"}, properties:{}}, {start: {name:"Angela Scope"}, end: {name:"Jessica Thompson"}, properties:{}}, {start: {name:"Paul Blythe"}, end: {name:"Angela Scope"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Person{name: row.end.name})
+CREATE (start)-[r:FOLLOWS]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Lilly Wachowski"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix Reloaded"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"The Matrix Revolutions"}, properties:{}}, {start: {name:"Taylor Hackford"}, end: {title:"The Devil's Advocate"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"A Few Good Men"}, properties:{}}, {start: {name:"Tony Scott"}, end: {title:"Top Gun"}, properties:{}}, {start: {name:"Cameron Crowe"}, end: {title:"Jerry Maguire"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"Stand By Me"}, properties:{}}, {start: {name:"James L. Brooks"}, end: {title:"As Good as It Gets"}, properties:{}}, {start: {name:"Vincent Ward"}, end: {title:"What Dreams May Come"}, properties:{}}, {start: {name:"Scott Hicks"}, end: {title:"Snow Falling on Cedars"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"You've Got Mail"}, properties:{}}, {start: {name:"Nora Ephron"}, end: {title:"Sleepless in Seattle"}, properties:{}}, {start: {name:"John Patrick Stanley"}, end: {title:"Joe Versus the Volcano"}, properties:{}}, {start: {name:"Rob Reiner"}, end: {title:"When Harry Met Sally"}, properties:{}}, {start: {name:"Tom Hanks"}, end: {title:"That Thing You Do"}, properties:{}}, {start: {name:"Howard Deutch"}, end: {title:"The Replacements"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Werner Herzog"}, end: {title:"RescueDawn"}, properties:{}}, {start: {name:"Mike Nichols"}, end: {title:"The Birdcage"}, properties:{}}, {start: {name:"Clint Eastwood"}, end: {title:"Unforgiven"}, properties:{}}, {start: {name:"Robert Longo"}, end: {title:"Johnny Mnemonic"}, properties:{}}, {start: {name:"Tom Tykwer"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Cloud Atlas"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"The Da Vinci Code"}, properties:{}}, {start: {name:"James Marshall"}, end: {title:"V for Vendetta"}, properties:{}}, {start: {name:"Lilly Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"Lana Wachowski"}, end: {title:"Speed Racer"}, properties:{}}, {start: {name:"James Marshall"}, end: {title:"Ninja Assassin"}, properties:{}}, {start: {name:"Frank Darabont"}, end: {title:"The Green Mile"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"Frost/Nixon"}, properties:{}}, {start: {name:"Danny DeVito"}, end: {title:"Hoffa"}, properties:{}}, {start: {name:"Ron Howard"}, end: {title:"Apollo 13"}, properties:{}}, {start: {name:"Jan de Bont"}, end: {title:"Twister"}, properties:{}}, {start: {name:"Robert Zemeckis"}, end: {title:"Cast Away"}, properties:{}}, {start: {name:"Milos Forman"}, end: {title:"One Flew Over the Cuckoo's Nest"}, properties:{}}, {start: {name:"Nancy Meyers"}, end: {title:"Something's Gotta Give"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {name:"Chris Columbus"}, end: {title:"Bicentennial Man"}, properties:{}}, {start: {name:"Mike Nichols"}, end: {title:"Charlie Wilson's War"}, properties:{}}, {start: {name:"Robert Zemeckis"}, end: {title:"The Polar Express"}, properties:{}}, {start: {name:"Penny Marshall"}, end: {title:"A League of Their Own"}, properties:{}}] AS row
+MATCH (start:Person{name: row.start.name})
+MATCH (end:Movie{title: row.end.title})
+CREATE (start)-[r:DIRECTED]->(end) SET r += row.properties;
+UNWIND [{start: {_id:176}, end: {_id:175}, properties:{}}, {start: {_id:174}, end: {_id:177}, properties:{}}, {start: {_id:179}, end: {_id:178}, properties:{}}, {start: {_id:180}, end: {_id:177}, properties:{}}, {start: {_id:174}, end: {_id:180}, properties:{}}] AS row
+MATCH (start:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.start._id})
+MATCH (end:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`: row.end._id})
+CREATE (start)-[r:HAS_SAME_CREATOR]->(end) SET r += row.properties;
+:commit
+:begin
+MATCH (n:`UNIQUE IMPORT LABEL`)  WITH n LIMIT 20000 REMOVE n:`UNIQUE IMPORT LABEL` REMOVE n.`UNIQUE IMPORT ID`;
+:commit
+:begin
+DROP CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
+:commit
\ No newline at end of file
diff --git a/neo4j/scripts/reset_db.sh b/neo4j/scripts/reset_db.sh
new file mode 100755
index 0000000000000000000000000000000000000000..638927e765ffc023270d4488ee8fe2ec3d98e91e
--- /dev/null
+++ b/neo4j/scripts/reset_db.sh
@@ -0,0 +1 @@
+docker exec -it neo4j cypher-shell -u neo4j -p test --non-interactive -f import/reset.cypher
\ No newline at end of file
diff --git a/neo4j/tempconf/apoc.conf b/neo4j/tempconf/apoc.conf
new file mode 100755
index 0000000000000000000000000000000000000000..4ff0e60503dde6e964ea4632d013211473546405
--- /dev/null
+++ b/neo4j/tempconf/apoc.conf
@@ -0,0 +1,2 @@
+apoc.import.file.enabled=true
+apoc.import.file.use_neo4j_config=true
\ No newline at end of file
diff --git a/redis-test/Dockerfile b/redis-test/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..9f99845f56a5d5262ae6b5e8e2bd001515e28eb6
--- /dev/null
+++ b/redis-test/Dockerfile
@@ -0,0 +1,5 @@
+FROM python:3.10-slim
+COPY client_example.py ./client.py
+COPY requirements.txt ./requirements.txt
+RUN pip3 install -r requirements.txt
+CMD [ "python", "./client.py"]
\ No newline at end of file
diff --git a/redis-test/client_example.py b/redis-test/client_example.py
new file mode 100644
index 0000000000000000000000000000000000000000..82818051f641fadcacf7a99a03850a034f55cc47
--- /dev/null
+++ b/redis-test/client_example.py
@@ -0,0 +1,6 @@
+import redis
+
+r = redis.Redis(host='redis-test', port=6379, db=0)
+r.set('foo', 'bar')
+result = r.get('foo')
+print(result)
\ No newline at end of file
diff --git a/redis-test/requirements.txt b/redis-test/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..88e78291e5f7f869a5497bc178db7e2cd476904f
--- /dev/null
+++ b/redis-test/requirements.txt
@@ -0,0 +1 @@
+redis==4.3.4
\ No newline at end of file
diff --git a/sg-backend/.dockerignore b/sg-backend/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..eba74f4cd2e2acfb1470300d69b58d8cff458c68
--- /dev/null
+++ b/sg-backend/.dockerignore
@@ -0,0 +1 @@
+venv/
\ No newline at end of file
diff --git a/sg-backend/.gitignore b/sg-backend/.gitignore
index 7eadfc2e0d6d84ab33f21560c7a679482c5f6d07..c8cf1b4303136ebcf07ce04dda4b39280b4c26fe 100644
--- a/sg-backend/.gitignore
+++ b/sg-backend/.gitignore
@@ -1 +1,2 @@
-__pycache
\ No newline at end of file
+__pycache
+.idea/
\ No newline at end of file
diff --git a/sg-backend/Dockerfile b/sg-backend/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..864704edf06108efae6e23eaa9af5600964c3f9b
--- /dev/null
+++ b/sg-backend/Dockerfile
@@ -0,0 +1,18 @@
+FROM python:3.10-slim
+WORKDIR /code
+ENV POETRY_VERSION=1.2.2
+
+RUN pip install "poetry==$POETRY_VERSION"
+
+COPY poetry.lock pyproject.toml /code/
+
+#RUN pip3 install -r requirements.txt
+
+RUN poetry config virtualenvs.create false && poetry install --no-interaction --no-ansi
+COPY . /code
+
+EXPOSE 8000
+
+ENV WAIT_VERSION 2.7.2
+ADD https://github.com/ufoscout/docker-compose-wait/releases/download/$WAIT_VERSION/wait /wait
+RUN chmod +x /wait
\ No newline at end of file
diff --git a/sg-backend/cache.py b/sg-backend/cache.py
new file mode 100644
index 0000000000000000000000000000000000000000..95a0cf009771b2c0a7dd532dbf422c944e428688
--- /dev/null
+++ b/sg-backend/cache.py
@@ -0,0 +1,15 @@
+from fastapi_cache import FastAPICache
+from fastapi_cache.backends.redis import RedisBackend
+
+from redis import asyncio as aioredis
+
+
+class RedisCache:
+    def __init__(self):
+        redis = aioredis.from_url("redis://redis", encoding="utf8", decode_responses=True)
+        FastAPICache.init(RedisBackend(redis), prefix="fastapi-cache")
+
+    @staticmethod
+    async def clear_softwares_cache():
+        await FastAPICache.clear(key="software")
+        await FastAPICache.clear(key="software-graph")
\ No newline at end of file
diff --git a/sg-backend/db.py b/sg-backend/db.py
index 7fd09f9c8e96078d1214422c597b3ce95622d2bd..76eff2bbae4118b24015f5b38ef6e416f101c396 100644
--- a/sg-backend/db.py
+++ b/sg-backend/db.py
@@ -50,4 +50,38 @@ class Neo4j:
                 return [node for node in data[0]['p'] if type(node) is dict]
                 # [node._properties.get('name') for node in results.graph().nodes]
             else:
-                return []
\ No newline at end of file
+                return []
+
+    def get_relations(self):
+        with self.driver.session() as session:
+            results = session.run("MATCH p = (a)-[r]->(b) RETURN a.name as source,b.name as target, r as relation_type")
+            return results.data()
+
+    def get_nodes(self):
+        with self.driver.session() as session:
+            results = session.run("MATCH (a:Software) return Id(a) as key, a.name as name")
+            return results.data()
+
+    def insert_software(self, insert_data):
+        with self.driver.session() as session:
+            # On check si le logiciel n'existe pas déjà
+            results = session.run("match (a:Software) where a.name = '%s' return a" % insert_data.newNodeName)
+            if results.data():
+                return {"Error": "%s already exist" % insert_data.newNodeName}
+
+            session.run("CREATE (n:Software {name: '%s'})" % insert_data.newNodeName)
+            return results.data()
+
+    def relation_insert(self, insert_data):
+        with self.driver.session() as session:
+            # On check si la node avec laquelle on se relie existe
+            results = session.run("match (a:Software) where (a.name = '%s' OR a.name = '%s') return a"
+                                  % (insert_data.software1, insert_data.software2))
+
+            if len(results.data()) != 2:
+                return {"Error": "%s/%s NOT FOUND" % (insert_data.software1, insert_data.software2)}
+
+            results = session.run(
+                "MATCH (a:Software), (b:Software) WHERE a.name = '%s' AND b.name = '%s' CREATE (a)-[r:%s]->(b) "
+                "RETURN type(r)" % (insert_data.software1, insert_data.software2, insert_data.relationType))
+            return results.data()
diff --git a/sg-backend/export_poetry_requirements.sh b/sg-backend/export_poetry_requirements.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3d9ffc248c8cde04b5a8c256025c2694736f9321
--- /dev/null
+++ b/sg-backend/export_poetry_requirements.sh
@@ -0,0 +1 @@
+poetry export -f requirements.txt --output requirements.txt
\ No newline at end of file
diff --git a/sg-backend/main.py b/sg-backend/main.py
index 0964d406fecd6e0643456bfbea81307d5bc8947f..006d15eb447edc226e057c9f745f9fe42a9b43db 100644
--- a/sg-backend/main.py
+++ b/sg-backend/main.py
@@ -1,10 +1,13 @@
 import json
 import os
+import random
 
 from fastapi import FastAPI
+from fastapi_cache.decorator import cache
 from pydantic import BaseModel
 from starlette.middleware.cors import CORSMiddleware
 
+from cache import RedisCache
 from db import Neo4j
 
 
@@ -13,11 +16,24 @@ class SoftwareSearch(BaseModel):
     software2: str
 
 
+class SoftwareInsert(BaseModel):
+    newNodeName: str
+
+
+class RelationInsert(BaseModel):
+    software1: str
+    software2: str
+    relationType: str
+
+
 driver = Neo4j(os.environ.get("NEO4J_URI"), os.environ.get("NEO4J_USER"), os.environ.get("NEO4J_PASSWORD"))
 app = FastAPI()
 
 origins = [
     os.getenv("FRONTEND_URL"),
+    "http://localhost",
+    "http://localhost:4173",
+    "http://localhost:5173",
 ]
 
 app.add_middleware(
@@ -29,30 +45,79 @@ app.add_middleware(
 )
 
 
-@app.get("/")
-async def root():
-    return {"message": "Hello World"}
-
-
-@app.get("/hello/{name}")
-async def say_hello(name: str):
-    return {"message": f"Hello {name}"}
-
-
-@app.get("/graph")
-async def graph():
-    results = driver.get_graph_data()
-    return json.loads(results[0]['data'])
-
-
 @app.get("/software")
+@cache(expire=60, key_builder=lambda *args, **kwargs: "software")
 async def software():
     results = driver.get_softwares()
     return {"softwares": json.loads(json.dumps(results))}
 
 
+@app.get("/software-graph")
+@cache(expire=60, key_builder=lambda *args, **kwargs: "software-graph")
+async def software():
+    nodes = driver.get_nodes()
+    jnodes = json.loads(json.dumps(nodes))
+    relations = driver.get_relations()
+    jrelations = json.loads(json.dumps(relations))
+
+    jsondata = {"nodes": jnodes, "edges": jrelations}
+
+    def findNodeIdWithName(nodes, name):
+        for node in nodes:
+            if node["name"] == name:
+                return node["key"]
+        return 0
+
+    for idx, relation in enumerate(jsondata["edges"]):
+        relation['key'] = str(idx)
+        relation['attributes'] = {}
+        relation['label'] = relation['relation_type'][1]
+        relation['source'] = findNodeIdWithName(jsondata["nodes"], relation["source"])
+        relation['target'] = findNodeIdWithName(jsondata["nodes"], relation["target"])
+        del relation['relation_type']
+
+    for node in jsondata["nodes"]:
+        node['attributes'] = {}
+        node['attributes']['label'] = node['name']
+        node['attributes']['x'] = random.random()
+        node['attributes']['y'] = random.random()
+        node['attributes']['size'] = 22
+        del node['name']
+
+    return jsondata
+
+
 @app.post("/software-search")
 async def software_search(search: SoftwareSearch):
     print(search.software1, search.software2)
     res = driver.get_softwares_shortest_path(search)
-    return {"softwares": res}
\ No newline at end of file
+    return {"softwares": res}
+
+
+@app.post("/software-insert")
+async def software_insert(insert_data: SoftwareInsert):
+    res = driver.insert_software(insert_data)
+    await RedisCache.clear_softwares_cache()
+    return res
+
+
+@app.post("/relation-insert")
+async def software_insert(insert_data: RelationInsert):
+    res = driver.relation_insert(insert_data)
+    await RedisCache.clear_softwares_cache()
+    return res
+
+
+@app.get("/")
+async def root():
+    return {"message": "Hello World"}
+
+
+@app.on_event("startup")
+async def startup():
+    RedisCache()
+
+# @app.get("/graph")
+# async def graph():
+#     results = driver.get_graph_data()
+#     return json.loads(results[0]['data'])
\ No newline at end of file
diff --git a/sg-backend/poetry.lock b/sg-backend/poetry.lock
index 85f00f4412394e4603a2f3a828e2e73b85718b59..ee53219b99dd03b4dfbed1b7d1291443bdc7a0e3 100644
--- a/sg-backend/poetry.lock
+++ b/sg-backend/poetry.lock
@@ -1,6 +1,6 @@
 [[package]]
 name = "anyio"
-version = "3.6.1"
+version = "3.6.2"
 description = "High level compatibility layer for multiple asynchronous event loop implementations"
 category = "main"
 optional = false
@@ -13,7 +13,15 @@ sniffio = ">=1.1"
 [package.extras]
 doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
 test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"]
-trio = ["trio (>=0.16)"]
+trio = ["trio (>=0.16,<0.22)"]
+
+[[package]]
+name = "async-timeout"
+version = "4.0.2"
+description = "Timeout context manager for asyncio programs"
+category = "main"
+optional = false
+python-versions = ">=3.6"
 
 [[package]]
 name = "click"
@@ -28,15 +36,15 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
 
 [[package]]
 name = "colorama"
-version = "0.4.5"
+version = "0.4.6"
 description = "Cross-platform colored terminal text."
 category = "main"
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 
 [[package]]
 name = "fastapi"
-version = "0.85.0"
+version = "0.85.2"
 description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
 category = "main"
 optional = false
@@ -49,16 +57,36 @@ starlette = "0.20.4"
 [package.extras]
 all = ["email-validator (>=1.1.1,<2.0.0)", "itsdangerous (>=1.1.0,<3.0.0)", "jinja2 (>=2.11.2,<4.0.0)", "orjson (>=3.2.1,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "requests (>=2.24.0,<3.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)", "uvicorn[standard] (>=0.12.0,<0.19.0)"]
 dev = ["autoflake (>=1.4.0,<2.0.0)", "flake8 (>=3.8.3,<6.0.0)", "pre-commit (>=2.17.0,<3.0.0)", "uvicorn[standard] (>=0.12.0,<0.19.0)"]
-doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer (>=0.4.1,<0.7.0)"]
-test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flake8 (>=3.8.3,<6.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.971)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "pytest-cov (>=2.12.0,<4.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "requests (>=2.24.0,<3.0.0)", "sqlalchemy (>=1.3.18,<1.5.0)", "types-orjson (==3.6.2)", "types-ujson (==5.4.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"]
+doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer[all] (>=0.6.1,<0.7.0)"]
+test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flake8 (>=3.8.3,<6.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "pytest-cov (>=2.12.0,<5.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "requests (>=2.24.0,<3.0.0)", "sqlalchemy (>=1.3.18,<=1.4.41)", "types-orjson (==3.6.2)", "types-ujson (==5.5.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"]
+
+[[package]]
+name = "fastapi-cache2"
+version = "0.1.9"
+description = "Cache for FastAPI"
+category = "main"
+optional = false
+python-versions = ">=3.7,<4.0"
+
+[package.dependencies]
+fastapi = "*"
+pendulum = "*"
+redis = {version = ">=4.2.0rc1,<5.0.0", optional = true, markers = "extra == \"redis\" or extra == \"all\""}
+uvicorn = "*"
+
+[package.extras]
+all = ["aiobotocore (>=1.4.1,<2.0.0)", "aiomcache", "redis (>=4.2.0rc1,<5.0.0)"]
+dynamodb = ["aiobotocore (>=1.4.1,<2.0.0)"]
+memcache = ["aiomcache"]
+redis = ["redis (>=4.2.0rc1,<5.0.0)"]
 
 [[package]]
 name = "h11"
-version = "0.13.0"
+version = "0.14.0"
 description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 
 [[package]]
 name = "idna"
@@ -70,7 +98,7 @@ python-versions = ">=3.5"
 
 [[package]]
 name = "neo4j"
-version = "5.0.1"
+version = "5.2.1"
 description = "Neo4j Bolt driver for Python"
 category = "main"
 optional = false
@@ -79,6 +107,21 @@ python-versions = ">=3.7"
 [package.dependencies]
 pytz = "*"
 
+[package.extras]
+pandas = ["pandas (>=1.0.0)"]
+
+[[package]]
+name = "pendulum"
+version = "2.1.2"
+description = "Python datetimes made easy"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+python-dateutil = ">=2.6,<3.0"
+pytzdata = ">=2020.1"
+
 [[package]]
 name = "pydantic"
 version = "1.10.2"
@@ -94,14 +137,56 @@ typing-extensions = ">=4.1.0"
 dotenv = ["python-dotenv (>=0.10.4)"]
 email = ["email-validator (>=1.0.3)"]
 
+[[package]]
+name = "python-dateutil"
+version = "2.8.2"
+description = "Extensions to the standard Python datetime module"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+
+[package.dependencies]
+six = ">=1.5"
+
 [[package]]
 name = "pytz"
-version = "2022.2.1"
+version = "2022.6"
 description = "World timezone definitions, modern and historical"
 category = "main"
 optional = false
 python-versions = "*"
 
+[[package]]
+name = "pytzdata"
+version = "2020.1"
+description = "The Olson timezone database for Python."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "redis"
+version = "4.4.0rc4"
+description = "Python client for Redis database and key-value store"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+async-timeout = ">=4.0.2"
+
+[package.extras]
+hiredis = ["hiredis (>=1.0.0)"]
+ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
 [[package]]
 name = "sniffio"
 version = "1.3.0"
@@ -126,7 +211,7 @@ full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"]
 
 [[package]]
 name = "typing-extensions"
-version = "4.3.0"
+version = "4.4.0"
 description = "Backported and Experimental Type Hints for Python 3.7+"
 category = "main"
 optional = false
@@ -150,35 +235,66 @@ standard = ["colorama (>=0.4)", "httptools (>=0.4.0)", "python-dotenv (>=0.13)",
 [metadata]
 lock-version = "1.1"
 python-versions = "^3.10"
-content-hash = "92d7313563fc036bb36381d94d139862865b3a018e3849a340b8bc16513df739"
+content-hash = "f15fbf471411ab63fc5fb485e394962433498aa9d266752113e6c296bcb9210e"
 
 [metadata.files]
 anyio = [
-    {file = "anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"},
-    {file = "anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"},
+    {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"},
+    {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"},
+]
+async-timeout = [
+    {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"},
+    {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"},
 ]
 click = [
     {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
     {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
 ]
 colorama = [
-    {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
-    {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
+    {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+    {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
 ]
 fastapi = [
-    {file = "fastapi-0.85.0-py3-none-any.whl", hash = "sha256:1803d962f169dc9f8dde54a64b22eb16f6d81573f54401971f90f0a67234a8b4"},
-    {file = "fastapi-0.85.0.tar.gz", hash = "sha256:bb219cfafd0d2ccf8f32310c9a257a06b0210bd8e2a03706a6f5a9f9f1416878"},
+    {file = "fastapi-0.85.2-py3-none-any.whl", hash = "sha256:6292db0edd4a11f0d938d6033ccec5f706e9d476958bf33b119e8ddb4e524bde"},
+    {file = "fastapi-0.85.2.tar.gz", hash = "sha256:3e10ea0992c700e0b17b6de8c2092d7b9cd763ce92c49ee8d4be10fee3b2f367"},
+]
+fastapi-cache2 = [
+    {file = "fastapi-cache2-0.1.9.tar.gz", hash = "sha256:816612f7b29b4ea4ed3b4e03c55b7f96b4e4d6dffce6a95e2cf5cf36a980eaaa"},
+    {file = "fastapi_cache2-0.1.9-py3-none-any.whl", hash = "sha256:5b6f32bc8e786d9fffe4f3ef343861cab276acc64fb5d8d09077524743ad3702"},
 ]
 h11 = [
-    {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"},
-    {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"},
+    {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
+    {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
 ]
 idna = [
     {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
     {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
 ]
 neo4j = [
-    {file = "neo4j-5.0.1.tar.gz", hash = "sha256:2330d1b8295b6afb39f23a001f5b0aecae6ca5895cc5b7af3413e326bbd1979c"},
+    {file = "neo4j-5.2.1.tar.gz", hash = "sha256:6f9941a45624cd81629ef88abd84b15648be1487f7168c2c7774a664ef4cbb1f"},
+]
+pendulum = [
+    {file = "pendulum-2.1.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:b6c352f4bd32dff1ea7066bd31ad0f71f8d8100b9ff709fb343f3b86cee43efe"},
+    {file = "pendulum-2.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:318f72f62e8e23cd6660dbafe1e346950281a9aed144b5c596b2ddabc1d19739"},
+    {file = "pendulum-2.1.2-cp35-cp35m-macosx_10_15_x86_64.whl", hash = "sha256:0731f0c661a3cb779d398803655494893c9f581f6488048b3fb629c2342b5394"},
+    {file = "pendulum-2.1.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3481fad1dc3f6f6738bd575a951d3c15d4b4ce7c82dce37cf8ac1483fde6e8b0"},
+    {file = "pendulum-2.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9702069c694306297ed362ce7e3c1ef8404ac8ede39f9b28b7c1a7ad8c3959e3"},
+    {file = "pendulum-2.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b"},
+    {file = "pendulum-2.1.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:c501749fdd3d6f9e726086bf0cd4437281ed47e7bca132ddb522f86a1645d360"},
+    {file = "pendulum-2.1.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c807a578a532eeb226150d5006f156632df2cc8c5693d778324b43ff8c515dd0"},
+    {file = "pendulum-2.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2d1619a721df661e506eff8db8614016f0720ac171fe80dda1333ee44e684087"},
+    {file = "pendulum-2.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f888f2d2909a414680a29ae74d0592758f2b9fcdee3549887779cd4055e975db"},
+    {file = "pendulum-2.1.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:e95d329384717c7bf627bf27e204bc3b15c8238fa8d9d9781d93712776c14002"},
+    {file = "pendulum-2.1.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4c9c689747f39d0d02a9f94fcee737b34a5773803a64a5fdb046ee9cac7442c5"},
+    {file = "pendulum-2.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1245cd0075a3c6d889f581f6325dd8404aca5884dea7223a5566c38aab94642b"},
+    {file = "pendulum-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:db0a40d8bcd27b4fb46676e8eb3c732c67a5a5e6bfab8927028224fbced0b40b"},
+    {file = "pendulum-2.1.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f5e236e7730cab1644e1b87aca3d2ff3e375a608542e90fe25685dae46310116"},
+    {file = "pendulum-2.1.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:de42ea3e2943171a9e95141f2eecf972480636e8e484ccffaf1e833929e9e052"},
+    {file = "pendulum-2.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7c5ec650cb4bec4c63a89a0242cc8c3cebcec92fcfe937c417ba18277d8560be"},
+    {file = "pendulum-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:33fb61601083f3eb1d15edeb45274f73c63b3c44a8524703dc143f4212bf3269"},
+    {file = "pendulum-2.1.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:29c40a6f2942376185728c9a0347d7c0f07905638c83007e1d262781f1e6953a"},
+    {file = "pendulum-2.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:94b1fc947bfe38579b28e1cccb36f7e28a15e841f30384b5ad6c5e31055c85d7"},
+    {file = "pendulum-2.1.2.tar.gz", hash = "sha256:b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207"},
 ]
 pydantic = [
     {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"},
@@ -218,9 +334,25 @@ pydantic = [
     {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"},
     {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"},
 ]
+python-dateutil = [
+    {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
+    {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
+]
 pytz = [
-    {file = "pytz-2022.2.1-py2.py3-none-any.whl", hash = "sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197"},
-    {file = "pytz-2022.2.1.tar.gz", hash = "sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5"},
+    {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"},
+    {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"},
+]
+pytzdata = [
+    {file = "pytzdata-2020.1-py2.py3-none-any.whl", hash = "sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f"},
+    {file = "pytzdata-2020.1.tar.gz", hash = "sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540"},
+]
+redis = [
+    {file = "redis-4.4.0rc4-py3-none-any.whl", hash = "sha256:7136c511137681002bde316341eeac565eaff966544fefc7729462c2d1c87c67"},
+    {file = "redis-4.4.0rc4.tar.gz", hash = "sha256:c8654c5ab28ec0a1876c588cdac2ad4a3dd71919ee21df5fe77dfe846716247f"},
+]
+six = [
+    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
 ]
 sniffio = [
     {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"},
@@ -231,8 +363,8 @@ starlette = [
     {file = "starlette-0.20.4.tar.gz", hash = "sha256:42fcf3122f998fefce3e2c5ad7e5edbf0f02cf685d646a83a08d404726af5084"},
 ]
 typing-extensions = [
-    {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"},
-    {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"},
+    {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"},
+    {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
 ]
 uvicorn = [
     {file = "uvicorn-0.18.3-py3-none-any.whl", hash = "sha256:0abd429ebb41e604ed8d2be6c60530de3408f250e8d2d84967d85ba9e86fe3af"},
diff --git a/sg-backend/pyproject.toml b/sg-backend/pyproject.toml
index b387455006abe661b14c57c9d8de62297cb55c8f..d81b6c1eecc163da07418df411994bd34f48babc 100644
--- a/sg-backend/pyproject.toml
+++ b/sg-backend/pyproject.toml
@@ -11,6 +11,7 @@ python = "^3.10"
 fastapi = "^0.85.0"
 uvicorn = "^0.18.3"
 neo4j = "^5.0.1"
+fastapi-cache2 = {extras = ["redis"], version = "^0.1.9"}
 
 
 [build-system]
diff --git a/sg-backend/requirements.txt b/sg-backend/requirements.txt
index ad7fa545ccf438d3ff7926d0de0d5f866e8867bc..60da924e1b56e4ca0df016748e6a3bae9594e0ab 100644
--- a/sg-backend/requirements.txt
+++ b/sg-backend/requirements.txt
@@ -1,23 +1,51 @@
-anyio==3.6.1 ; python_version >= "3.10" and python_version < "4.0" \
-    --hash=sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b \
-    --hash=sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be
+anyio==3.6.2 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421 \
+    --hash=sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3
+async-timeout==4.0.2 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15 \
+    --hash=sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c
 click==8.1.3 ; python_version >= "3.10" and python_version < "4.0" \
     --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \
     --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48
-colorama==0.4.5 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Windows" \
-    --hash=sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da \
-    --hash=sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4
-fastapi==0.85.0 ; python_version >= "3.10" and python_version < "4.0" \
-    --hash=sha256:1803d962f169dc9f8dde54a64b22eb16f6d81573f54401971f90f0a67234a8b4 \
-    --hash=sha256:bb219cfafd0d2ccf8f32310c9a257a06b0210bd8e2a03706a6f5a9f9f1416878
-h11==0.13.0 ; python_version >= "3.10" and python_version < "4.0" \
-    --hash=sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06 \
-    --hash=sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442
+colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Windows" \
+    --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
+    --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
+fastapi-cache2[redis]==0.1.9 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:5b6f32bc8e786d9fffe4f3ef343861cab276acc64fb5d8d09077524743ad3702 \
+    --hash=sha256:816612f7b29b4ea4ed3b4e03c55b7f96b4e4d6dffce6a95e2cf5cf36a980eaaa
+fastapi==0.85.2 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:3e10ea0992c700e0b17b6de8c2092d7b9cd763ce92c49ee8d4be10fee3b2f367 \
+    --hash=sha256:6292db0edd4a11f0d938d6033ccec5f706e9d476958bf33b119e8ddb4e524bde
+h11==0.14.0 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
+    --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761
 idna==3.4 ; python_version >= "3.10" and python_version < "4.0" \
     --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \
     --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2
-neo4j==5.0.1 ; python_version >= "3.10" and python_version < "4.0" \
-    --hash=sha256:2330d1b8295b6afb39f23a001f5b0aecae6ca5895cc5b7af3413e326bbd1979c
+neo4j==5.2.1 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:6f9941a45624cd81629ef88abd84b15648be1487f7168c2c7774a664ef4cbb1f
+pendulum==2.1.2 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:0731f0c661a3cb779d398803655494893c9f581f6488048b3fb629c2342b5394 \
+    --hash=sha256:1245cd0075a3c6d889f581f6325dd8404aca5884dea7223a5566c38aab94642b \
+    --hash=sha256:29c40a6f2942376185728c9a0347d7c0f07905638c83007e1d262781f1e6953a \
+    --hash=sha256:2d1619a721df661e506eff8db8614016f0720ac171fe80dda1333ee44e684087 \
+    --hash=sha256:318f72f62e8e23cd6660dbafe1e346950281a9aed144b5c596b2ddabc1d19739 \
+    --hash=sha256:33fb61601083f3eb1d15edeb45274f73c63b3c44a8524703dc143f4212bf3269 \
+    --hash=sha256:3481fad1dc3f6f6738bd575a951d3c15d4b4ce7c82dce37cf8ac1483fde6e8b0 \
+    --hash=sha256:4c9c689747f39d0d02a9f94fcee737b34a5773803a64a5fdb046ee9cac7442c5 \
+    --hash=sha256:7c5ec650cb4bec4c63a89a0242cc8c3cebcec92fcfe937c417ba18277d8560be \
+    --hash=sha256:94b1fc947bfe38579b28e1cccb36f7e28a15e841f30384b5ad6c5e31055c85d7 \
+    --hash=sha256:9702069c694306297ed362ce7e3c1ef8404ac8ede39f9b28b7c1a7ad8c3959e3 \
+    --hash=sha256:b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207 \
+    --hash=sha256:b6c352f4bd32dff1ea7066bd31ad0f71f8d8100b9ff709fb343f3b86cee43efe \
+    --hash=sha256:c501749fdd3d6f9e726086bf0cd4437281ed47e7bca132ddb522f86a1645d360 \
+    --hash=sha256:c807a578a532eeb226150d5006f156632df2cc8c5693d778324b43ff8c515dd0 \
+    --hash=sha256:db0a40d8bcd27b4fb46676e8eb3c732c67a5a5e6bfab8927028224fbced0b40b \
+    --hash=sha256:de42ea3e2943171a9e95141f2eecf972480636e8e484ccffaf1e833929e9e052 \
+    --hash=sha256:e95d329384717c7bf627bf27e204bc3b15c8238fa8d9d9781d93712776c14002 \
+    --hash=sha256:f5e236e7730cab1644e1b87aca3d2ff3e375a608542e90fe25685dae46310116 \
+    --hash=sha256:f888f2d2909a414680a29ae74d0592758f2b9fcdee3549887779cd4055e975db \
+    --hash=sha256:fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b
 pydantic==1.10.2 ; python_version >= "3.10" and python_version < "4.0" \
     --hash=sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42 \
     --hash=sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624 \
@@ -55,18 +83,30 @@ pydantic==1.10.2 ; python_version >= "3.10" and python_version < "4.0" \
     --hash=sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2 \
     --hash=sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d \
     --hash=sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236
-pytz==2022.2.1 ; python_version >= "3.10" and python_version < "4.0" \
-    --hash=sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197 \
-    --hash=sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5
+python-dateutil==2.8.2 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
+    --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
+pytz==2022.6 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427 \
+    --hash=sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2
+pytzdata==2020.1 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540 \
+    --hash=sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f
+redis==4.4.0rc4 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:7136c511137681002bde316341eeac565eaff966544fefc7729462c2d1c87c67 \
+    --hash=sha256:c8654c5ab28ec0a1876c588cdac2ad4a3dd71919ee21df5fe77dfe846716247f
+six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
+    --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
 sniffio==1.3.0 ; python_version >= "3.10" and python_version < "4.0" \
     --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \
     --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384
 starlette==0.20.4 ; python_version >= "3.10" and python_version < "4.0" \
     --hash=sha256:42fcf3122f998fefce3e2c5ad7e5edbf0f02cf685d646a83a08d404726af5084 \
     --hash=sha256:c0414d5a56297d37f3db96a84034d61ce29889b9eaccf65eb98a0b39441fcaa3
-typing-extensions==4.3.0 ; python_version >= "3.10" and python_version < "4.0" \
-    --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \
-    --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6
+typing-extensions==4.4.0 ; python_version >= "3.10" and python_version < "4.0" \
+    --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \
+    --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e
 uvicorn==0.18.3 ; python_version >= "3.10" and python_version < "4.0" \
     --hash=sha256:0abd429ebb41e604ed8d2be6c60530de3408f250e8d2d84967d85ba9e86fe3af \
     --hash=sha256:9a66e7c42a2a95222f76ec24a4b754c158261c4696e683b9dadc72b590e0311b
diff --git a/sg-frontend/.dockerignore b/sg-frontend/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..40b878db5b1c97fc77049537a71bb2e249abe5dc
--- /dev/null
+++ b/sg-frontend/.dockerignore
@@ -0,0 +1 @@
+node_modules/
\ No newline at end of file
diff --git a/sg-frontend/.env b/sg-frontend/.env
index 408a3f1b1a7426d3048342786c67d2281993047a..52596f9faf4838b83f2f1af5e881541864232cf7 100644
--- a/sg-frontend/.env
+++ b/sg-frontend/.env
@@ -1 +1 @@
-VITE_BACKEND_URL=
\ No newline at end of file
+VITE_BACKEND_URL=http://localhost:8000
\ No newline at end of file
diff --git a/sg-frontend/Dockerfile b/sg-frontend/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..2c1b8a3396c1980d081be523150cf2e7927aba62
--- /dev/null
+++ b/sg-frontend/Dockerfile
@@ -0,0 +1,12 @@
+FROM node:18
+COPY package.json /app/
+WORKDIR /app
+
+#RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
+RUN npm install
+
+
+ENV VITE_BACKEND_URL=http://sg-backend:8000
+EXPOSE 5173
+
+CMD ["npm","run", "dev", "--","--host", "0.0.0.0", "--port", "5173"]
\ No newline at end of file
diff --git a/sg-frontend/build.Dockerfile b/sg-frontend/build.Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..ad10dc9716a70275a45db402fe705686ca03f9f1
--- /dev/null
+++ b/sg-frontend/build.Dockerfile
@@ -0,0 +1,12 @@
+FROM node:18
+WORKDIR /app
+COPY . /app
+
+#RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
+RUN npm install
+
+RUN npm run build
+ENV VITE_BACKEND_URL=http://sg-backend:8000
+EXPOSE 4173
+
+CMD ["npm","run", "preview", "--","--host", "0.0.0.0", "--port", "4173"]
\ No newline at end of file
diff --git a/sg-frontend/index.html b/sg-frontend/index.html
index 87c3be8915161cd7daac3b12f3ee7dcf263ab74e..81e4661d915dd7d1a67214748d6d7fb185d8235e 100644
--- a/sg-frontend/index.html
+++ b/sg-frontend/index.html
@@ -1,14 +1,45 @@
 <!DOCTYPE html>
 <html lang="en">
-	<head>
-		<meta charset="UTF-8" />
-		<link rel="icon" type="image/svg+xml" href="/vite.svg" />
-		<link href="/dist/output.css" rel="stylesheet" />
-		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
-		<title>Software Graph</title>
-	</head>
-	<body>
-		<div id="app"></div>
-		<script type="module" src="/src/main.ts"></script>
-	</body>
+<head>
+    <meta charset="UTF-8"/>
+    <link rel="icon" type="image/svg+xml" href="/vite.svg"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+    <title>Software Graph</title>
+</head>
+<body>
+
+<div id="app">
+    <div class="topnav">
+        <a id="home" class="active" href="/">Home</a>
+        <a id="sigma" href="#/sigma-custom">Software graph</a>
+        <a id="add" href="#/add-node">Software insert</a>
+    </div>
+</div>
+<script type="module" src="/src/main.ts"></script>
+</body>
+
+<style>
+    .topnav {
+        overflow: hidden;
+        background-color: #333;
+    }
+
+    .topnav a {
+        float: left;
+        color: #f2f2f2;
+        text-align: center;
+        padding: 14px 16px;
+        text-decoration: none;
+        font-size: 17px;
+    }
+
+    .topnav a:hover {
+        background-color: #ddd;
+        color: black;
+    }
+
+    .topnav a.active {
+        background-color: #04AA6D;
+        color: white;
+    }</style>
 </html>
diff --git a/sg-frontend/package-lock.json b/sg-frontend/package-lock.json
index 014410bd5f956a5f525156e7e68962e0174b66b7..54ca3c28a85d4ab28b9f400fe296ef26373e2905 100644
--- a/sg-frontend/package-lock.json
+++ b/sg-frontend/package-lock.json
@@ -8,27 +8,29 @@
       "name": "sg-frontend",
       "version": "0.0.0",
       "dependencies": {
-        "daisyui": "^2.31.0",
-        "svelte-select": "^4.4.7"
+        "graphology": "^0.25.1",
+        "graphology-layout": "^0.6.1",
+        "graphology-layout-force": "^0.2.4",
+        "graphology-layout-forceatlas2": "^0.10.1",
+        "sigma": "^2.4.0",
+        "svelte-select": "^4.4.7",
+        "svelte-spa-router": "^3.3.0"
       },
       "devDependencies": {
         "@sveltejs/vite-plugin-svelte": "^1.0.2",
         "@tsconfig/svelte": "^3.0.0",
-        "autoprefixer": "^10.4.12",
-        "postcss": "^8.4.16",
         "svelte": "^3.49.0",
         "svelte-check": "^2.8.1",
         "svelte-preprocess": "^4.10.7",
-        "tailwindcss": "^3.1.8",
         "tslib": "^2.4.0",
         "typescript": "^4.6.4",
         "vite": "^3.1.0"
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.9.tgz",
-      "integrity": "sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.14.tgz",
+      "integrity": "sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==",
       "cpu": [
         "arm"
       ],
@@ -42,9 +44,9 @@
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.9.tgz",
-      "integrity": "sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz",
+      "integrity": "sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==",
       "cpu": [
         "loong64"
       ],
@@ -73,19 +75,20 @@
       "dev": true
     },
     "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.15",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
-      "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+      "version": "0.3.17",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
+        "@jridgewell/resolve-uri": "3.1.0",
+        "@jridgewell/sourcemap-codec": "1.4.14"
       }
     },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
       "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
       "dependencies": {
         "@nodelib/fs.stat": "2.0.5",
         "run-parallel": "^1.1.9"
@@ -98,6 +101,7 @@
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
       "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
       "engines": {
         "node": ">= 8"
       }
@@ -106,6 +110,7 @@
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
       "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
       "dependencies": {
         "@nodelib/fs.scandir": "2.1.5",
         "fastq": "^1.6.0"
@@ -114,31 +119,18 @@
         "node": ">= 8"
       }
     },
-    "node_modules/@rollup/pluginutils": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
-      "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
-      "dev": true,
-      "dependencies": {
-        "estree-walker": "^2.0.1",
-        "picomatch": "^2.2.2"
-      },
-      "engines": {
-        "node": ">= 8.0.0"
-      }
-    },
     "node_modules/@sveltejs/vite-plugin-svelte": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.8.tgz",
-      "integrity": "sha512-1xkVTB4pm6zuign858FzVYE9Fdw9MQBOlxrdd85STV0NvTDmcofcRpcrK+zcIyT8SZ2dseHLu8hvDwzssF6RfA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.2.0.tgz",
+      "integrity": "sha512-DT2oUkWAloH1tO7X5cQ4uDxQofaIS76skyFMElKtoqT6HJao+D82LI5i+0jPaSSmO7ex3Pa6jGYMlWy9ZJ1cdQ==",
       "dev": true,
       "dependencies": {
-        "@rollup/pluginutils": "^4.2.1",
         "debug": "^4.3.4",
         "deepmerge": "^4.2.2",
         "kleur": "^4.1.5",
-        "magic-string": "^0.26.3",
-        "svelte-hmr": "^0.15.0"
+        "magic-string": "^0.26.7",
+        "svelte-hmr": "^0.15.1",
+        "vitefu": "^0.2.1"
       },
       "engines": {
         "node": "^14.18.0 || >= 16"
@@ -161,9 +153,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "18.7.18",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz",
-      "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==",
+      "version": "18.11.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
+      "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==",
       "dev": true
     },
     "node_modules/@types/pug": {
@@ -181,39 +173,16 @@
         "@types/node": "*"
       }
     },
-    "node_modules/acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-node": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
-      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
-      "dependencies": {
-        "acorn": "^7.0.0",
-        "acorn-walk": "^7.0.0",
-        "xtend": "^4.0.2"
-      }
-    },
-    "node_modules/acorn-walk": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
-      "engines": {
-        "node": ">=0.4.0"
-      }
+    "node_modules/@yomguithereal/helpers": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@yomguithereal/helpers/-/helpers-1.1.1.tgz",
+      "integrity": "sha512-UYvAq/XCA7xoh1juWDYsq3W0WywOB+pz8cgVnE1b45ZfdMhBvHDrgmSFG3jXeZSr2tMTYLGHFHON+ekG05Jebg=="
     },
     "node_modules/anymatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
       "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "dev": true,
       "dependencies": {
         "normalize-path": "^3.0.0",
         "picomatch": "^2.0.4"
@@ -222,43 +191,6 @@
         "node": ">= 8"
       }
     },
-    "node_modules/arg": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
-      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
-    },
-    "node_modules/autoprefixer": {
-      "version": "10.4.12",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
-      "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/autoprefixer"
-        }
-      ],
-      "dependencies": {
-        "browserslist": "^4.21.4",
-        "caniuse-lite": "^1.0.30001407",
-        "fraction.js": "^4.2.0",
-        "normalize-range": "^0.1.2",
-        "picocolors": "^1.0.0",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "bin": {
-        "autoprefixer": "bin/autoprefixer"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      },
-      "peerDependencies": {
-        "postcss": "^8.1.0"
-      }
-    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -269,6 +201,7 @@
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "dev": true,
       "engines": {
         "node": ">=8"
       }
@@ -287,6 +220,7 @@
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
       "dependencies": {
         "fill-range": "^7.0.1"
       },
@@ -294,33 +228,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/browserslist": {
-      "version": "4.21.4",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
-      "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        }
-      ],
-      "dependencies": {
-        "caniuse-lite": "^1.0.30001400",
-        "electron-to-chromium": "^1.4.251",
-        "node-releases": "^2.0.6",
-        "update-browserslist-db": "^1.0.9"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      },
-      "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-      }
-    },
     "node_modules/buffer-crc32": {
       "version": "0.2.13",
       "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -339,33 +246,11 @@
         "node": ">=6"
       }
     },
-    "node_modules/camelcase-css": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
-      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001412",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001412.tgz",
-      "integrity": "sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        }
-      ]
-    },
     "node_modules/chokidar": {
       "version": "3.5.3",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
       "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "dev": true,
       "funding": [
         {
           "type": "individual",
@@ -388,84 +273,12 @@
         "fsevents": "~2.3.2"
       }
     },
-    "node_modules/color": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
-      "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
-      "dependencies": {
-        "color-convert": "^2.0.1",
-        "color-string": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=12.5.0"
-      }
-    },
-    "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-    },
-    "node_modules/color-string": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
-      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
-      "dependencies": {
-        "color-name": "^1.0.0",
-        "simple-swizzle": "^0.2.2"
-      }
-    },
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
       "dev": true
     },
-    "node_modules/css-selector-tokenizer": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz",
-      "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==",
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "fastparse": "^1.1.2"
-      }
-    },
-    "node_modules/cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-      "bin": {
-        "cssesc": "bin/cssesc"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/daisyui": {
-      "version": "2.31.0",
-      "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.31.0.tgz",
-      "integrity": "sha512-qepRXgQPLNcJ8ZPZy+dUvsC7mRWvMLRcVMe85/wZA60Tnhm/bkidhOzdllL8aAk2JX+W/xlIsTJ8NZFpPm+eyw==",
-      "dependencies": {
-        "color": "^4.2",
-        "css-selector-tokenizer": "^0.8.0",
-        "postcss-js": "^4.0.0",
-        "tailwindcss": "^3"
-      },
-      "peerDependencies": {
-        "autoprefixer": "^10.0.2",
-        "postcss": "^8.1.6"
-      }
-    },
     "node_modules/debug": {
       "version": "4.3.4",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -492,11 +305,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/defined": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
-      "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ=="
-    },
     "node_modules/detect-indent": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
@@ -506,37 +314,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/detective": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
-      "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
-      "dependencies": {
-        "acorn-node": "^1.8.2",
-        "defined": "^1.0.0",
-        "minimist": "^1.2.6"
-      },
-      "bin": {
-        "detective": "bin/detective.js"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/didyoumean": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
-      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
-    },
-    "node_modules/dlv": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
-      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
-    },
-    "node_modules/electron-to-chromium": {
-      "version": "1.4.261",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.261.tgz",
-      "integrity": "sha512-fVXliNUGJ7XUVJSAasPseBbVgJIeyw5M1xIkgXdTSRjlmCqBbiSTsEdLOCJS31Fc8B7CaloQ/BFAg8By3ODLdg=="
-    },
     "node_modules/es6-promise": {
       "version": "3.3.1",
       "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
@@ -544,9 +321,9 @@
       "dev": true
     },
     "node_modules/esbuild": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.9.tgz",
-      "integrity": "sha512-OnYr1rkMVxtmMHIAKZLMcEUlJmqcbxBz9QoBU8G9v455na0fuzlT/GLu6l+SRghrk0Mm2fSSciMmzV43Q8e0Gg==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.14.tgz",
+      "integrity": "sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==",
       "dev": true,
       "hasInstallScript": true,
       "bin": {
@@ -556,34 +333,32 @@
         "node": ">=12"
       },
       "optionalDependencies": {
-        "@esbuild/android-arm": "0.15.9",
-        "@esbuild/linux-loong64": "0.15.9",
-        "esbuild-android-64": "0.15.9",
-        "esbuild-android-arm64": "0.15.9",
-        "esbuild-darwin-64": "0.15.9",
-        "esbuild-darwin-arm64": "0.15.9",
-        "esbuild-freebsd-64": "0.15.9",
-        "esbuild-freebsd-arm64": "0.15.9",
-        "esbuild-linux-32": "0.15.9",
-        "esbuild-linux-64": "0.15.9",
-        "esbuild-linux-arm": "0.15.9",
-        "esbuild-linux-arm64": "0.15.9",
-        "esbuild-linux-mips64le": "0.15.9",
-        "esbuild-linux-ppc64le": "0.15.9",
-        "esbuild-linux-riscv64": "0.15.9",
-        "esbuild-linux-s390x": "0.15.9",
-        "esbuild-netbsd-64": "0.15.9",
-        "esbuild-openbsd-64": "0.15.9",
-        "esbuild-sunos-64": "0.15.9",
-        "esbuild-windows-32": "0.15.9",
-        "esbuild-windows-64": "0.15.9",
-        "esbuild-windows-arm64": "0.15.9"
+        "@esbuild/android-arm": "0.15.14",
+        "@esbuild/linux-loong64": "0.15.14",
+        "esbuild-android-64": "0.15.14",
+        "esbuild-android-arm64": "0.15.14",
+        "esbuild-freebsd-64": "0.15.14",
+        "esbuild-freebsd-arm64": "0.15.14",
+        "esbuild-linux-32": "0.15.14",
+        "esbuild-linux-64": "0.15.14",
+        "esbuild-linux-arm": "0.15.14",
+        "esbuild-linux-arm64": "0.15.14",
+        "esbuild-linux-mips64le": "0.15.14",
+        "esbuild-linux-ppc64le": "0.15.14",
+        "esbuild-linux-riscv64": "0.15.14",
+        "esbuild-linux-s390x": "0.15.14",
+        "esbuild-netbsd-64": "0.15.14",
+        "esbuild-openbsd-64": "0.15.14",
+        "esbuild-sunos-64": "0.15.14",
+        "esbuild-windows-32": "0.15.14",
+        "esbuild-windows-64": "0.15.14",
+        "esbuild-windows-arm64": "0.15.14"
       }
     },
     "node_modules/esbuild-android-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.9.tgz",
-      "integrity": "sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz",
+      "integrity": "sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==",
       "cpu": [
         "x64"
       ],
@@ -597,9 +372,9 @@
       }
     },
     "node_modules/esbuild-android-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.9.tgz",
-      "integrity": "sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz",
+      "integrity": "sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==",
       "cpu": [
         "arm64"
       ],
@@ -613,9 +388,9 @@
       }
     },
     "node_modules/esbuild-darwin-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.9.tgz",
-      "integrity": "sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz",
+      "integrity": "sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==",
       "cpu": [
         "x64"
       ],
@@ -629,9 +404,9 @@
       }
     },
     "node_modules/esbuild-darwin-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.9.tgz",
-      "integrity": "sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz",
+      "integrity": "sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==",
       "cpu": [
         "arm64"
       ],
@@ -645,9 +420,9 @@
       }
     },
     "node_modules/esbuild-freebsd-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.9.tgz",
-      "integrity": "sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz",
+      "integrity": "sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==",
       "cpu": [
         "x64"
       ],
@@ -661,9 +436,9 @@
       }
     },
     "node_modules/esbuild-freebsd-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.9.tgz",
-      "integrity": "sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz",
+      "integrity": "sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==",
       "cpu": [
         "arm64"
       ],
@@ -677,9 +452,9 @@
       }
     },
     "node_modules/esbuild-linux-32": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.9.tgz",
-      "integrity": "sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz",
+      "integrity": "sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==",
       "cpu": [
         "ia32"
       ],
@@ -693,9 +468,9 @@
       }
     },
     "node_modules/esbuild-linux-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.9.tgz",
-      "integrity": "sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz",
+      "integrity": "sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==",
       "cpu": [
         "x64"
       ],
@@ -709,9 +484,9 @@
       }
     },
     "node_modules/esbuild-linux-arm": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.9.tgz",
-      "integrity": "sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz",
+      "integrity": "sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==",
       "cpu": [
         "arm"
       ],
@@ -725,9 +500,9 @@
       }
     },
     "node_modules/esbuild-linux-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.9.tgz",
-      "integrity": "sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz",
+      "integrity": "sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==",
       "cpu": [
         "arm64"
       ],
@@ -741,9 +516,9 @@
       }
     },
     "node_modules/esbuild-linux-mips64le": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.9.tgz",
-      "integrity": "sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz",
+      "integrity": "sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==",
       "cpu": [
         "mips64el"
       ],
@@ -757,9 +532,9 @@
       }
     },
     "node_modules/esbuild-linux-ppc64le": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.9.tgz",
-      "integrity": "sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz",
+      "integrity": "sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==",
       "cpu": [
         "ppc64"
       ],
@@ -773,9 +548,9 @@
       }
     },
     "node_modules/esbuild-linux-riscv64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.9.tgz",
-      "integrity": "sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz",
+      "integrity": "sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==",
       "cpu": [
         "riscv64"
       ],
@@ -789,9 +564,9 @@
       }
     },
     "node_modules/esbuild-linux-s390x": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.9.tgz",
-      "integrity": "sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz",
+      "integrity": "sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==",
       "cpu": [
         "s390x"
       ],
@@ -805,9 +580,9 @@
       }
     },
     "node_modules/esbuild-netbsd-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.9.tgz",
-      "integrity": "sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz",
+      "integrity": "sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==",
       "cpu": [
         "x64"
       ],
@@ -821,9 +596,9 @@
       }
     },
     "node_modules/esbuild-openbsd-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.9.tgz",
-      "integrity": "sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz",
+      "integrity": "sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==",
       "cpu": [
         "x64"
       ],
@@ -837,9 +612,9 @@
       }
     },
     "node_modules/esbuild-sunos-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.9.tgz",
-      "integrity": "sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz",
+      "integrity": "sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==",
       "cpu": [
         "x64"
       ],
@@ -853,9 +628,9 @@
       }
     },
     "node_modules/esbuild-windows-32": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.9.tgz",
-      "integrity": "sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz",
+      "integrity": "sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==",
       "cpu": [
         "ia32"
       ],
@@ -869,9 +644,9 @@
       }
     },
     "node_modules/esbuild-windows-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.9.tgz",
-      "integrity": "sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz",
+      "integrity": "sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==",
       "cpu": [
         "x64"
       ],
@@ -885,9 +660,9 @@
       }
     },
     "node_modules/esbuild-windows-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.9.tgz",
-      "integrity": "sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz",
+      "integrity": "sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==",
       "cpu": [
         "arm64"
       ],
@@ -900,24 +675,19 @@
         "node": ">=12"
       }
     },
-    "node_modules/escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+    "node_modules/events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
       "engines": {
-        "node": ">=6"
+        "node": ">=0.8.x"
       }
     },
-    "node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "dev": true
-    },
     "node_modules/fast-glob": {
       "version": "3.2.12",
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
       "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+      "dev": true,
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
         "@nodelib/fs.walk": "^1.2.3",
@@ -929,15 +699,11 @@
         "node": ">=8.6.0"
       }
     },
-    "node_modules/fastparse": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
-      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ=="
-    },
     "node_modules/fastq": {
       "version": "1.13.0",
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
       "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+      "dev": true,
       "dependencies": {
         "reusify": "^1.0.4"
       }
@@ -946,6 +712,7 @@
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
       "dependencies": {
         "to-regex-range": "^5.0.1"
       },
@@ -953,18 +720,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "type": "patreon",
-        "url": "https://www.patreon.com/infusion"
-      }
-    },
     "node_modules/fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -975,6 +730,7 @@
       "version": "2.3.2",
       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
       "hasInstallScript": true,
       "optional": true,
       "os": [
@@ -987,7 +743,8 @@
     "node_modules/function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
     },
     "node_modules/glob": {
       "version": "7.2.3",
@@ -1013,6 +770,7 @@
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
       "dependencies": {
         "is-glob": "^4.0.1"
       },
@@ -1026,10 +784,71 @@
       "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
       "dev": true
     },
+    "node_modules/graphology": {
+      "version": "0.25.1",
+      "resolved": "https://registry.npmjs.org/graphology/-/graphology-0.25.1.tgz",
+      "integrity": "sha512-yYA7BJCcXN2DrKNQQ9Qf22zBHm/yTbyBR71T1MYBbGtywNHsv0QZtk8zaR6zxNcp2hCCZayUkHp9DyMSZCpoxQ==",
+      "dependencies": {
+        "events": "^3.3.0",
+        "obliterator": "^2.0.2"
+      },
+      "peerDependencies": {
+        "graphology-types": ">=0.24.0"
+      }
+    },
+    "node_modules/graphology-layout": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/graphology-layout/-/graphology-layout-0.6.1.tgz",
+      "integrity": "sha512-m9aMvbd0uDPffUCFPng5ibRkb2pmfNvdKjQWeZrf71RS1aOoat5874+DcyNfMeCT4aQguKC7Lj9eCbqZj/h8Ag==",
+      "dependencies": {
+        "graphology-utils": "^2.3.0",
+        "pandemonium": "^2.4.0"
+      },
+      "peerDependencies": {
+        "graphology-types": ">=0.19.0"
+      }
+    },
+    "node_modules/graphology-layout-force": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/graphology-layout-force/-/graphology-layout-force-0.2.4.tgz",
+      "integrity": "sha512-NYZz0YAnDkn5pkm30cvB0IScFoWGtbzJMrqaiH070dYlYJiag12Oc89dbVfaMaVR/w8DMIKxn/ix9Bqj+Umm9Q==",
+      "dependencies": {
+        "graphology-utils": "^2.4.2"
+      },
+      "peerDependencies": {
+        "graphology-types": ">=0.19.0"
+      }
+    },
+    "node_modules/graphology-layout-forceatlas2": {
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/graphology-layout-forceatlas2/-/graphology-layout-forceatlas2-0.10.1.tgz",
+      "integrity": "sha512-ogzBeF1FvWzjkikrIFwxhlZXvD2+wlY54lqhsrWprcdPjopM2J9HoMweUmIgwaTvY4bUYVimpSsOdvDv1gPRFQ==",
+      "dependencies": {
+        "graphology-utils": "^2.1.0"
+      },
+      "peerDependencies": {
+        "graphology-types": ">=0.19.0"
+      }
+    },
+    "node_modules/graphology-types": {
+      "version": "0.24.5",
+      "resolved": "https://registry.npmjs.org/graphology-types/-/graphology-types-0.24.5.tgz",
+      "integrity": "sha512-m8FVoj9b6MwIaTN+/AvoxXhcK5n0uSe7ZnhbQNTcjh94vzN6m5hU501LihtCfRjF35QEMVrXYOrTNO0wAR1Gxw==",
+      "peer": true
+    },
+    "node_modules/graphology-utils": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/graphology-utils/-/graphology-utils-2.5.2.tgz",
+      "integrity": "sha512-ckHg8MXrXJkOARk56ZaSCM1g1Wihe2d6iTmz1enGOz4W/l831MBCKSayeFQfowgF8wd+PQ4rlch/56Vs/VZLDQ==",
+      "peerDependencies": {
+        "graphology-types": ">=0.23.0"
+      }
+    },
     "node_modules/has": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
       "dependencies": {
         "function-bind": "^1.1.1"
       },
@@ -1069,15 +888,11 @@
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
       "dev": true
     },
-    "node_modules/is-arrayish": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
-    },
     "node_modules/is-binary-path": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
       "dependencies": {
         "binary-extensions": "^2.0.0"
       },
@@ -1086,9 +901,10 @@
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
-      "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+      "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+      "dev": true,
       "dependencies": {
         "has": "^1.0.3"
       },
@@ -1100,6 +916,7 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -1108,6 +925,7 @@
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
       "dependencies": {
         "is-extglob": "^2.1.1"
       },
@@ -1119,6 +937,7 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
       "engines": {
         "node": ">=0.12.0"
       }
@@ -1132,18 +951,10 @@
         "node": ">=6"
       }
     },
-    "node_modules/lilconfig": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
-      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/magic-string": {
-      "version": "0.26.4",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.4.tgz",
-      "integrity": "sha512-e5uXtVJ22aEpK9u1+eQf0fSxHeqwyV19K+uGnlROCxUhzwRip9tBsaMViK/0vC3viyPd5Gtucp3UmEp/Q2cPTQ==",
+      "version": "0.26.7",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz",
+      "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==",
       "dev": true,
       "dependencies": {
         "sourcemap-codec": "^1.4.8"
@@ -1156,6 +967,7 @@
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
       "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
       "engines": {
         "node": ">= 8"
       }
@@ -1164,6 +976,7 @@
       "version": "4.0.5",
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
       "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dev": true,
       "dependencies": {
         "braces": "^3.0.2",
         "picomatch": "^2.3.1"
@@ -1194,9 +1007,13 @@
       }
     },
     "node_modules/minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
     "node_modules/mkdirp": {
       "version": "0.5.6",
@@ -1210,6 +1027,14 @@
         "mkdirp": "bin/cmd.js"
       }
     },
+    "node_modules/mnemonist": {
+      "version": "0.39.5",
+      "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.5.tgz",
+      "integrity": "sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==",
+      "dependencies": {
+        "obliterator": "^2.0.1"
+      }
+    },
     "node_modules/mri": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
@@ -1229,6 +1054,7 @@
       "version": "3.3.4",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
       "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+      "dev": true,
       "bin": {
         "nanoid": "bin/nanoid.cjs"
       },
@@ -1236,34 +1062,19 @@
         "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
       }
     },
-    "node_modules/node-releases": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
-      "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
-    },
     "node_modules/normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true,
       "engines": {
         "node": ">=0.10.0"
       }
     },
-    "node_modules/normalize-range": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-hash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
-      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
-      "engines": {
-        "node": ">= 6"
-      }
+    "node_modules/obliterator": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz",
+      "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ=="
     },
     "node_modules/once": {
       "version": "1.4.0",
@@ -1274,6 +1085,14 @@
         "wrappy": "1"
       }
     },
+    "node_modules/pandemonium": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/pandemonium/-/pandemonium-2.4.1.tgz",
+      "integrity": "sha512-wRqjisUyiUfXowgm7MFH2rwJzKIr20rca5FsHXCMNm1W5YPP1hCtrZfgmQ62kP7OZ7Xt+cR858aB28lu5NX55g==",
+      "dependencies": {
+        "mnemonist": "^0.39.2"
+      }
+    },
     "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -1298,17 +1117,20 @@
     "node_modules/path-parse": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
     },
     "node_modules/picocolors": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
     },
     "node_modules/picomatch": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
       "engines": {
         "node": ">=8.6"
       },
@@ -1316,18 +1138,11 @@
         "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/postcss": {
-      "version": "8.4.16",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
-      "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
+      "version": "8.4.19",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
+      "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==",
+      "dev": true,
       "funding": [
         {
           "type": "opencollective",
@@ -1347,107 +1162,11 @@
         "node": "^10 || ^12 || >=14"
       }
     },
-    "node_modules/postcss-import": {
-      "version": "14.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
-      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
-      "dependencies": {
-        "postcss-value-parser": "^4.0.0",
-        "read-cache": "^1.0.0",
-        "resolve": "^1.1.7"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.0.0"
-      }
-    },
-    "node_modules/postcss-js": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
-      "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
-      "dependencies": {
-        "camelcase-css": "^2.0.1"
-      },
-      "engines": {
-        "node": "^12 || ^14 || >= 16"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      },
-      "peerDependencies": {
-        "postcss": "^8.3.3"
-      }
-    },
-    "node_modules/postcss-load-config": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
-      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
-      "dependencies": {
-        "lilconfig": "^2.0.5",
-        "yaml": "^1.10.2"
-      },
-      "engines": {
-        "node": ">= 10"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      },
-      "peerDependencies": {
-        "postcss": ">=8.0.9",
-        "ts-node": ">=9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "postcss": {
-          "optional": true
-        },
-        "ts-node": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/postcss-nested": {
-      "version": "5.0.6",
-      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
-      "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
-      "dependencies": {
-        "postcss-selector-parser": "^6.0.6"
-      },
-      "engines": {
-        "node": ">=12.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.14"
-      }
-    },
-    "node_modules/postcss-selector-parser": {
-      "version": "6.0.10",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
-      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/postcss-value-parser": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
-    },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
       "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -1463,29 +1182,11 @@
         }
       ]
     },
-    "node_modules/quick-lru": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/read-cache": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
-      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
-      "dependencies": {
-        "pify": "^2.3.0"
-      }
-    },
     "node_modules/readdirp": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
       "dependencies": {
         "picomatch": "^2.2.1"
       },
@@ -1493,10 +1194,19 @@
         "node": ">=8.10.0"
       }
     },
+    "node_modules/regexparam": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.1.tgz",
+      "integrity": "sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/resolve": {
       "version": "1.22.1",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
       "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+      "dev": true,
       "dependencies": {
         "is-core-module": "^2.9.0",
         "path-parse": "^1.0.7",
@@ -1522,6 +1232,7 @@
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
       "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true,
       "engines": {
         "iojs": ">=1.0.0",
         "node": ">=0.10.0"
@@ -1540,9 +1251,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "2.78.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
-      "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
+      "version": "2.79.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
+      "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
       "dev": true,
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -1558,6 +1269,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
       "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -1600,12 +1312,14 @@
         "rimraf": "^2.5.2"
       }
     },
-    "node_modules/simple-swizzle": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
-      "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+    "node_modules/sigma": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/sigma/-/sigma-2.4.0.tgz",
+      "integrity": "sha512-spi4C+c3cjlhCklT+RvAxJJcarMmjRpF6RPNvBIBYDduALq8iSNm7FwSpijQNGtI+ryeZ2EfvyBNLp36OFaZiw==",
       "dependencies": {
-        "is-arrayish": "^0.3.1"
+        "@yomguithereal/helpers": "^1.1.1",
+        "events": "^3.3.0",
+        "graphology-utils": "^2.5.0"
       }
     },
     "node_modules/sorcery": {
@@ -1627,6 +1341,7 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
       "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -1653,6 +1368,7 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
       "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true,
       "engines": {
         "node": ">= 0.4"
       },
@@ -1661,18 +1377,18 @@
       }
     },
     "node_modules/svelte": {
-      "version": "3.50.1",
-      "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.50.1.tgz",
-      "integrity": "sha512-bS4odcsdj5D5jEg6riZuMg5NKelzPtmsCbD9RG+8umU03TeNkdWnP6pqbCm0s8UQNBkqk29w/Bdubn3C+HWSwA==",
+      "version": "3.53.1",
+      "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.53.1.tgz",
+      "integrity": "sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==",
       "dev": true,
       "engines": {
         "node": ">= 8"
       }
     },
     "node_modules/svelte-check": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.9.0.tgz",
-      "integrity": "sha512-9AVrtP7WbfDgCdqTZNPdj5CCCy1OrYMxFVWAWzNw7fl93c9klFJFtqzVXa6fovfQ050CcpUyJE2dPFL9TFAREw==",
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.9.2.tgz",
+      "integrity": "sha512-DRi8HhnCiqiGR2YF9ervPGvtoYrheE09cXieCTEqeTPOTJzfoa54Py8rovIBv4bH4n5HgZYIyTQ3DDLHQLl2uQ==",
       "dev": true,
       "dependencies": {
         "@jridgewell/trace-mapping": "^0.3.9",
@@ -1692,9 +1408,9 @@
       }
     },
     "node_modules/svelte-hmr": {
-      "version": "0.15.0",
-      "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.0.tgz",
-      "integrity": "sha512-Aw21SsyoohyVn4yiKXWPNCSW2DQNH/76kvUnE9kpt4h9hcg9tfyQc6xshx9hzgMfGF0kVx0EGD8oBMWSnATeOg==",
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz",
+      "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==",
       "dev": true,
       "engines": {
         "node": "^12.20 || ^14.13.1 || >= 16"
@@ -1783,60 +1499,22 @@
       "resolved": "https://registry.npmjs.org/svelte-select/-/svelte-select-4.4.7.tgz",
       "integrity": "sha512-fIf9Z8rPI6F8naHZ9wjXT0Pv5gLyhdHAFkHFJnCfVVfELE8e82uOoF0xEVQP6Kir+b4Q5yOvNAzZ61WbSU6A0A=="
     },
-    "node_modules/tailwindcss": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz",
-      "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==",
-      "dependencies": {
-        "arg": "^5.0.2",
-        "chokidar": "^3.5.3",
-        "color-name": "^1.1.4",
-        "detective": "^5.2.1",
-        "didyoumean": "^1.2.2",
-        "dlv": "^1.1.3",
-        "fast-glob": "^3.2.11",
-        "glob-parent": "^6.0.2",
-        "is-glob": "^4.0.3",
-        "lilconfig": "^2.0.6",
-        "normalize-path": "^3.0.0",
-        "object-hash": "^3.0.0",
-        "picocolors": "^1.0.0",
-        "postcss": "^8.4.14",
-        "postcss-import": "^14.1.0",
-        "postcss-js": "^4.0.0",
-        "postcss-load-config": "^3.1.4",
-        "postcss-nested": "5.0.6",
-        "postcss-selector-parser": "^6.0.10",
-        "postcss-value-parser": "^4.2.0",
-        "quick-lru": "^5.1.1",
-        "resolve": "^1.22.1"
-      },
-      "bin": {
-        "tailwind": "lib/cli.js",
-        "tailwindcss": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=12.13.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.0.9"
-      }
-    },
-    "node_modules/tailwindcss/node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+    "node_modules/svelte-spa-router": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/svelte-spa-router/-/svelte-spa-router-3.3.0.tgz",
+      "integrity": "sha512-cwRNe7cxD43sCvSfEeaKiNZg3FCizGxeMcf7CPiWRP3jKXjEma3vxyyuDtPOam6nWbVxl9TNM3hlE/i87ZlqcQ==",
       "dependencies": {
-        "is-glob": "^4.0.3"
+        "regexparam": "2.0.1"
       },
-      "engines": {
-        "node": ">=10.13.0"
+      "funding": {
+        "url": "https://github.com/sponsors/ItalyPaleAle"
       }
     },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
       "dependencies": {
         "is-number": "^7.0.0"
       },
@@ -1845,15 +1523,15 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
-      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+      "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
       "dev": true
     },
     "node_modules/typescript": {
-      "version": "4.8.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
-      "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
+      "version": "4.9.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
+      "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -1863,46 +1541,16 @@
         "node": ">=4.2.0"
       }
     },
-    "node_modules/update-browserslist-db": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
-      "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        }
-      ],
-      "dependencies": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
-      },
-      "bin": {
-        "browserslist-lint": "cli.js"
-      },
-      "peerDependencies": {
-        "browserslist": ">= 4.21.0"
-      }
-    },
-    "node_modules/util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
-    },
     "node_modules/vite": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.3.tgz",
-      "integrity": "sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz",
+      "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==",
       "dev": true,
       "dependencies": {
-        "esbuild": "^0.15.6",
-        "postcss": "^8.4.16",
+        "esbuild": "^0.15.9",
+        "postcss": "^8.4.18",
         "resolve": "^1.22.1",
-        "rollup": "~2.78.0"
+        "rollup": "^2.79.1"
       },
       "bin": {
         "vite": "bin/vite.js"
@@ -1914,12 +1562,17 @@
         "fsevents": "~2.3.2"
       },
       "peerDependencies": {
+        "@types/node": ">= 14",
         "less": "*",
         "sass": "*",
         "stylus": "*",
+        "sugarss": "*",
         "terser": "^5.4.0"
       },
       "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
         "less": {
           "optional": true
         },
@@ -1929,46 +1582,47 @@
         "stylus": {
           "optional": true
         },
+        "sugarss": {
+          "optional": true
+        },
         "terser": {
           "optional": true
         }
       }
     },
+    "node_modules/vitefu": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.1.tgz",
+      "integrity": "sha512-clkvXTAeUf+XQKm3bhWUhT4pye+3acm6YCTGaWhxxIvZZ/QjnA3JA8Zud+z/mO5y5XYvJJhevs5Sjkv/FI8nRw==",
+      "dev": true,
+      "peerDependencies": {
+        "vite": "^3.0.0"
+      },
+      "peerDependenciesMeta": {
+        "vite": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
       "dev": true
-    },
-    "node_modules/xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-      "engines": {
-        "node": ">=0.4"
-      }
-    },
-    "node_modules/yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-      "engines": {
-        "node": ">= 6"
-      }
     }
   },
   "dependencies": {
     "@esbuild/android-arm": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.9.tgz",
-      "integrity": "sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.14.tgz",
+      "integrity": "sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==",
       "dev": true,
       "optional": true
     },
     "@esbuild/linux-loong64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.9.tgz",
-      "integrity": "sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz",
+      "integrity": "sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==",
       "dev": true,
       "optional": true
     },
@@ -1985,19 +1639,20 @@
       "dev": true
     },
     "@jridgewell/trace-mapping": {
-      "version": "0.3.15",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
-      "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+      "version": "0.3.17",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
       "dev": true,
       "requires": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
+        "@jridgewell/resolve-uri": "3.1.0",
+        "@jridgewell/sourcemap-codec": "1.4.14"
       }
     },
     "@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
       "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
       "requires": {
         "@nodelib/fs.stat": "2.0.5",
         "run-parallel": "^1.1.9"
@@ -2006,39 +1661,31 @@
     "@nodelib/fs.stat": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true
     },
     "@nodelib/fs.walk": {
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
       "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
       "requires": {
         "@nodelib/fs.scandir": "2.1.5",
         "fastq": "^1.6.0"
       }
     },
-    "@rollup/pluginutils": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
-      "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
-      "dev": true,
-      "requires": {
-        "estree-walker": "^2.0.1",
-        "picomatch": "^2.2.2"
-      }
-    },
     "@sveltejs/vite-plugin-svelte": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.8.tgz",
-      "integrity": "sha512-1xkVTB4pm6zuign858FzVYE9Fdw9MQBOlxrdd85STV0NvTDmcofcRpcrK+zcIyT8SZ2dseHLu8hvDwzssF6RfA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.2.0.tgz",
+      "integrity": "sha512-DT2oUkWAloH1tO7X5cQ4uDxQofaIS76skyFMElKtoqT6HJao+D82LI5i+0jPaSSmO7ex3Pa6jGYMlWy9ZJ1cdQ==",
       "dev": true,
       "requires": {
-        "@rollup/pluginutils": "^4.2.1",
         "debug": "^4.3.4",
         "deepmerge": "^4.2.2",
         "kleur": "^4.1.5",
-        "magic-string": "^0.26.3",
-        "svelte-hmr": "^0.15.0"
+        "magic-string": "^0.26.7",
+        "svelte-hmr": "^0.15.1",
+        "vitefu": "^0.2.1"
       }
     },
     "@tsconfig/svelte": {
@@ -2048,9 +1695,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "18.7.18",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz",
-      "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==",
+      "version": "18.11.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
+      "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==",
       "dev": true
     },
     "@types/pug": {
@@ -2068,53 +1715,21 @@
         "@types/node": "*"
       }
     },
-    "acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
-    },
-    "acorn-node": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
-      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
-      "requires": {
-        "acorn": "^7.0.0",
-        "acorn-walk": "^7.0.0",
-        "xtend": "^4.0.2"
-      }
-    },
-    "acorn-walk": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
+    "@yomguithereal/helpers": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@yomguithereal/helpers/-/helpers-1.1.1.tgz",
+      "integrity": "sha512-UYvAq/XCA7xoh1juWDYsq3W0WywOB+pz8cgVnE1b45ZfdMhBvHDrgmSFG3jXeZSr2tMTYLGHFHON+ekG05Jebg=="
     },
     "anymatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
       "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "dev": true,
       "requires": {
         "normalize-path": "^3.0.0",
         "picomatch": "^2.0.4"
       }
     },
-    "arg": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
-      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
-    },
-    "autoprefixer": {
-      "version": "10.4.12",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
-      "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
-      "requires": {
-        "browserslist": "^4.21.4",
-        "caniuse-lite": "^1.0.30001407",
-        "fraction.js": "^4.2.0",
-        "normalize-range": "^0.1.2",
-        "picocolors": "^1.0.0",
-        "postcss-value-parser": "^4.2.0"
-      }
-    },
     "balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -2124,7 +1739,8 @@
     "binary-extensions": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "dev": true
     },
     "brace-expansion": {
       "version": "1.1.11",
@@ -2140,21 +1756,11 @@
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
       "requires": {
         "fill-range": "^7.0.1"
       }
     },
-    "browserslist": {
-      "version": "4.21.4",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
-      "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
-      "requires": {
-        "caniuse-lite": "^1.0.30001400",
-        "electron-to-chromium": "^1.4.251",
-        "node-releases": "^2.0.6",
-        "update-browserslist-db": "^1.0.9"
-      }
-    },
     "buffer-crc32": {
       "version": "0.2.13",
       "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -2167,20 +1773,11 @@
       "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
       "dev": true
     },
-    "camelcase-css": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
-      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
-    },
-    "caniuse-lite": {
-      "version": "1.0.30001412",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001412.tgz",
-      "integrity": "sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA=="
-    },
     "chokidar": {
       "version": "3.5.3",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
       "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "dev": true,
       "requires": {
         "anymatch": "~3.1.2",
         "braces": "~3.0.2",
@@ -2192,68 +1789,12 @@
         "readdirp": "~3.6.0"
       }
     },
-    "color": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
-      "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
-      "requires": {
-        "color-convert": "^2.0.1",
-        "color-string": "^1.9.0"
-      }
-    },
-    "color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "requires": {
-        "color-name": "~1.1.4"
-      }
-    },
-    "color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-    },
-    "color-string": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
-      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
-      "requires": {
-        "color-name": "^1.0.0",
-        "simple-swizzle": "^0.2.2"
-      }
-    },
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
       "dev": true
     },
-    "css-selector-tokenizer": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz",
-      "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==",
-      "requires": {
-        "cssesc": "^3.0.0",
-        "fastparse": "^1.1.2"
-      }
-    },
-    "cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
-    },
-    "daisyui": {
-      "version": "2.31.0",
-      "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.31.0.tgz",
-      "integrity": "sha512-qepRXgQPLNcJ8ZPZy+dUvsC7mRWvMLRcVMe85/wZA60Tnhm/bkidhOzdllL8aAk2JX+W/xlIsTJ8NZFpPm+eyw==",
-      "requires": {
-        "color": "^4.2",
-        "css-selector-tokenizer": "^0.8.0",
-        "postcss-js": "^4.0.0",
-        "tailwindcss": "^3"
-      }
-    },
     "debug": {
       "version": "4.3.4",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2269,42 +1810,12 @@
       "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
       "dev": true
     },
-    "defined": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
-      "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ=="
-    },
     "detect-indent": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
       "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
       "dev": true
     },
-    "detective": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
-      "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
-      "requires": {
-        "acorn-node": "^1.8.2",
-        "defined": "^1.0.0",
-        "minimist": "^1.2.6"
-      }
-    },
-    "didyoumean": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
-      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
-    },
-    "dlv": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
-      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
-    },
-    "electron-to-chromium": {
-      "version": "1.4.261",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.261.tgz",
-      "integrity": "sha512-fVXliNUGJ7XUVJSAasPseBbVgJIeyw5M1xIkgXdTSRjlmCqBbiSTsEdLOCJS31Fc8B7CaloQ/BFAg8By3ODLdg=="
-    },
     "es6-promise": {
       "version": "3.3.1",
       "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
@@ -2312,190 +1823,185 @@
       "dev": true
     },
     "esbuild": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.9.tgz",
-      "integrity": "sha512-OnYr1rkMVxtmMHIAKZLMcEUlJmqcbxBz9QoBU8G9v455na0fuzlT/GLu6l+SRghrk0Mm2fSSciMmzV43Q8e0Gg==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.14.tgz",
+      "integrity": "sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==",
       "dev": true,
       "requires": {
-        "@esbuild/android-arm": "0.15.9",
-        "@esbuild/linux-loong64": "0.15.9",
-        "esbuild-android-64": "0.15.9",
-        "esbuild-android-arm64": "0.15.9",
-        "esbuild-darwin-64": "0.15.9",
-        "esbuild-darwin-arm64": "0.15.9",
-        "esbuild-freebsd-64": "0.15.9",
-        "esbuild-freebsd-arm64": "0.15.9",
-        "esbuild-linux-32": "0.15.9",
-        "esbuild-linux-64": "0.15.9",
-        "esbuild-linux-arm": "0.15.9",
-        "esbuild-linux-arm64": "0.15.9",
-        "esbuild-linux-mips64le": "0.15.9",
-        "esbuild-linux-ppc64le": "0.15.9",
-        "esbuild-linux-riscv64": "0.15.9",
-        "esbuild-linux-s390x": "0.15.9",
-        "esbuild-netbsd-64": "0.15.9",
-        "esbuild-openbsd-64": "0.15.9",
-        "esbuild-sunos-64": "0.15.9",
-        "esbuild-windows-32": "0.15.9",
-        "esbuild-windows-64": "0.15.9",
-        "esbuild-windows-arm64": "0.15.9"
+        "@esbuild/android-arm": "0.15.14",
+        "@esbuild/linux-loong64": "0.15.14",
+        "esbuild-android-64": "0.15.14",
+        "esbuild-android-arm64": "0.15.14",
+        "esbuild-darwin-64": "0.15.14",
+        "esbuild-darwin-arm64": "0.15.14",
+        "esbuild-freebsd-64": "0.15.14",
+        "esbuild-freebsd-arm64": "0.15.14",
+        "esbuild-linux-32": "0.15.14",
+        "esbuild-linux-64": "0.15.14",
+        "esbuild-linux-arm": "0.15.14",
+        "esbuild-linux-arm64": "0.15.14",
+        "esbuild-linux-mips64le": "0.15.14",
+        "esbuild-linux-ppc64le": "0.15.14",
+        "esbuild-linux-riscv64": "0.15.14",
+        "esbuild-linux-s390x": "0.15.14",
+        "esbuild-netbsd-64": "0.15.14",
+        "esbuild-openbsd-64": "0.15.14",
+        "esbuild-sunos-64": "0.15.14",
+        "esbuild-windows-32": "0.15.14",
+        "esbuild-windows-64": "0.15.14",
+        "esbuild-windows-arm64": "0.15.14"
       }
     },
     "esbuild-android-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.9.tgz",
-      "integrity": "sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz",
+      "integrity": "sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==",
       "dev": true,
       "optional": true
     },
     "esbuild-android-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.9.tgz",
-      "integrity": "sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz",
+      "integrity": "sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==",
       "dev": true,
       "optional": true
     },
     "esbuild-darwin-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.9.tgz",
-      "integrity": "sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz",
+      "integrity": "sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==",
       "dev": true,
       "optional": true
     },
     "esbuild-darwin-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.9.tgz",
-      "integrity": "sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz",
+      "integrity": "sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==",
       "dev": true,
       "optional": true
     },
     "esbuild-freebsd-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.9.tgz",
-      "integrity": "sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz",
+      "integrity": "sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==",
       "dev": true,
       "optional": true
     },
     "esbuild-freebsd-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.9.tgz",
-      "integrity": "sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz",
+      "integrity": "sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-32": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.9.tgz",
-      "integrity": "sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz",
+      "integrity": "sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.9.tgz",
-      "integrity": "sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz",
+      "integrity": "sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-arm": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.9.tgz",
-      "integrity": "sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz",
+      "integrity": "sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.9.tgz",
-      "integrity": "sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz",
+      "integrity": "sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-mips64le": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.9.tgz",
-      "integrity": "sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz",
+      "integrity": "sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-ppc64le": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.9.tgz",
-      "integrity": "sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz",
+      "integrity": "sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-riscv64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.9.tgz",
-      "integrity": "sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz",
+      "integrity": "sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-s390x": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.9.tgz",
-      "integrity": "sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz",
+      "integrity": "sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==",
       "dev": true,
       "optional": true
     },
     "esbuild-netbsd-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.9.tgz",
-      "integrity": "sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz",
+      "integrity": "sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==",
       "dev": true,
       "optional": true
     },
     "esbuild-openbsd-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.9.tgz",
-      "integrity": "sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz",
+      "integrity": "sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==",
       "dev": true,
       "optional": true
     },
     "esbuild-sunos-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.9.tgz",
-      "integrity": "sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz",
+      "integrity": "sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==",
       "dev": true,
       "optional": true
     },
     "esbuild-windows-32": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.9.tgz",
-      "integrity": "sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz",
+      "integrity": "sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==",
       "dev": true,
       "optional": true
     },
     "esbuild-windows-64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.9.tgz",
-      "integrity": "sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz",
+      "integrity": "sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==",
       "dev": true,
       "optional": true
     },
     "esbuild-windows-arm64": {
-      "version": "0.15.9",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.9.tgz",
-      "integrity": "sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==",
+      "version": "0.15.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz",
+      "integrity": "sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==",
       "dev": true,
       "optional": true
     },
-    "escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
-    },
-    "estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "dev": true
+    "events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
     },
     "fast-glob": {
       "version": "3.2.12",
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
       "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+      "dev": true,
       "requires": {
         "@nodelib/fs.stat": "^2.0.2",
         "@nodelib/fs.walk": "^1.2.3",
@@ -2504,15 +2010,11 @@
         "micromatch": "^4.0.4"
       }
     },
-    "fastparse": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
-      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ=="
-    },
     "fastq": {
       "version": "1.13.0",
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
       "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+      "dev": true,
       "requires": {
         "reusify": "^1.0.4"
       }
@@ -2521,15 +2023,11 @@
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
       "requires": {
         "to-regex-range": "^5.0.1"
       }
     },
-    "fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
-    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2540,12 +2038,14 @@
       "version": "2.3.2",
       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
       "optional": true
     },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
     },
     "glob": {
       "version": "7.2.3",
@@ -2565,6 +2065,7 @@
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
       "requires": {
         "is-glob": "^4.0.1"
       }
@@ -2575,10 +2076,57 @@
       "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
       "dev": true
     },
+    "graphology": {
+      "version": "0.25.1",
+      "resolved": "https://registry.npmjs.org/graphology/-/graphology-0.25.1.tgz",
+      "integrity": "sha512-yYA7BJCcXN2DrKNQQ9Qf22zBHm/yTbyBR71T1MYBbGtywNHsv0QZtk8zaR6zxNcp2hCCZayUkHp9DyMSZCpoxQ==",
+      "requires": {
+        "events": "^3.3.0",
+        "obliterator": "^2.0.2"
+      }
+    },
+    "graphology-layout": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/graphology-layout/-/graphology-layout-0.6.1.tgz",
+      "integrity": "sha512-m9aMvbd0uDPffUCFPng5ibRkb2pmfNvdKjQWeZrf71RS1aOoat5874+DcyNfMeCT4aQguKC7Lj9eCbqZj/h8Ag==",
+      "requires": {
+        "graphology-utils": "^2.3.0",
+        "pandemonium": "^2.4.0"
+      }
+    },
+    "graphology-layout-force": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/graphology-layout-force/-/graphology-layout-force-0.2.4.tgz",
+      "integrity": "sha512-NYZz0YAnDkn5pkm30cvB0IScFoWGtbzJMrqaiH070dYlYJiag12Oc89dbVfaMaVR/w8DMIKxn/ix9Bqj+Umm9Q==",
+      "requires": {
+        "graphology-utils": "^2.4.2"
+      }
+    },
+    "graphology-layout-forceatlas2": {
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/graphology-layout-forceatlas2/-/graphology-layout-forceatlas2-0.10.1.tgz",
+      "integrity": "sha512-ogzBeF1FvWzjkikrIFwxhlZXvD2+wlY54lqhsrWprcdPjopM2J9HoMweUmIgwaTvY4bUYVimpSsOdvDv1gPRFQ==",
+      "requires": {
+        "graphology-utils": "^2.1.0"
+      }
+    },
+    "graphology-types": {
+      "version": "0.24.5",
+      "resolved": "https://registry.npmjs.org/graphology-types/-/graphology-types-0.24.5.tgz",
+      "integrity": "sha512-m8FVoj9b6MwIaTN+/AvoxXhcK5n0uSe7ZnhbQNTcjh94vzN6m5hU501LihtCfRjF35QEMVrXYOrTNO0wAR1Gxw==",
+      "peer": true
+    },
+    "graphology-utils": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/graphology-utils/-/graphology-utils-2.5.2.tgz",
+      "integrity": "sha512-ckHg8MXrXJkOARk56ZaSCM1g1Wihe2d6iTmz1enGOz4W/l831MBCKSayeFQfowgF8wd+PQ4rlch/56Vs/VZLDQ==",
+      "requires": {}
+    },
     "has": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
       "requires": {
         "function-bind": "^1.1.1"
       }
@@ -2609,23 +2157,20 @@
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
       "dev": true
     },
-    "is-arrayish": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
-    },
     "is-binary-path": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
       "requires": {
         "binary-extensions": "^2.0.0"
       }
     },
     "is-core-module": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
-      "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+      "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+      "dev": true,
       "requires": {
         "has": "^1.0.3"
       }
@@ -2633,12 +2178,14 @@
     "is-extglob": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true
     },
     "is-glob": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
       "requires": {
         "is-extglob": "^2.1.1"
       }
@@ -2646,7 +2193,8 @@
     "is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true
     },
     "kleur": {
       "version": "4.1.5",
@@ -2654,15 +2202,10 @@
       "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
       "dev": true
     },
-    "lilconfig": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
-      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg=="
-    },
     "magic-string": {
-      "version": "0.26.4",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.4.tgz",
-      "integrity": "sha512-e5uXtVJ22aEpK9u1+eQf0fSxHeqwyV19K+uGnlROCxUhzwRip9tBsaMViK/0vC3viyPd5Gtucp3UmEp/Q2cPTQ==",
+      "version": "0.26.7",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz",
+      "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==",
       "dev": true,
       "requires": {
         "sourcemap-codec": "^1.4.8"
@@ -2671,12 +2214,14 @@
     "merge2": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true
     },
     "micromatch": {
       "version": "4.0.5",
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
       "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dev": true,
       "requires": {
         "braces": "^3.0.2",
         "picomatch": "^2.3.1"
@@ -2698,9 +2243,10 @@
       }
     },
     "minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "dev": true
     },
     "mkdirp": {
       "version": "0.5.6",
@@ -2711,6 +2257,14 @@
         "minimist": "^1.2.6"
       }
     },
+    "mnemonist": {
+      "version": "0.39.5",
+      "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.5.tgz",
+      "integrity": "sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==",
+      "requires": {
+        "obliterator": "^2.0.1"
+      }
+    },
     "mri": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
@@ -2726,27 +2280,19 @@
     "nanoid": {
       "version": "3.3.4",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
-      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
-    },
-    "node-releases": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
-      "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
+      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+      "dev": true
     },
     "normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
-    },
-    "normalize-range": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true
     },
-    "object-hash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
-      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
+    "obliterator": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz",
+      "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ=="
     },
     "once": {
       "version": "1.4.0",
@@ -2757,6 +2303,14 @@
         "wrappy": "1"
       }
     },
+    "pandemonium": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/pandemonium/-/pandemonium-2.4.1.tgz",
+      "integrity": "sha512-wRqjisUyiUfXowgm7MFH2rwJzKIr20rca5FsHXCMNm1W5YPP1hCtrZfgmQ62kP7OZ7Xt+cR858aB28lu5NX55g==",
+      "requires": {
+        "mnemonist": "^0.39.2"
+      }
+    },
     "parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -2775,112 +2329,57 @@
     "path-parse": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
     },
     "picocolors": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
     },
     "picomatch": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
-    },
-    "pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true
     },
     "postcss": {
-      "version": "8.4.16",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
-      "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
+      "version": "8.4.19",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
+      "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==",
+      "dev": true,
       "requires": {
         "nanoid": "^3.3.4",
         "picocolors": "^1.0.0",
         "source-map-js": "^1.0.2"
       }
     },
-    "postcss-import": {
-      "version": "14.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
-      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
-      "requires": {
-        "postcss-value-parser": "^4.0.0",
-        "read-cache": "^1.0.0",
-        "resolve": "^1.1.7"
-      }
-    },
-    "postcss-js": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
-      "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
-      "requires": {
-        "camelcase-css": "^2.0.1"
-      }
-    },
-    "postcss-load-config": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
-      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
-      "requires": {
-        "lilconfig": "^2.0.5",
-        "yaml": "^1.10.2"
-      }
-    },
-    "postcss-nested": {
-      "version": "5.0.6",
-      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
-      "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
-      "requires": {
-        "postcss-selector-parser": "^6.0.6"
-      }
-    },
-    "postcss-selector-parser": {
-      "version": "6.0.10",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
-      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
-      "requires": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      }
-    },
-    "postcss-value-parser": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
-    },
     "queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
-    },
-    "quick-lru": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
-    },
-    "read-cache": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
-      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
-      "requires": {
-        "pify": "^2.3.0"
-      }
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true
     },
     "readdirp": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
       "requires": {
         "picomatch": "^2.2.1"
       }
     },
+    "regexparam": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.1.tgz",
+      "integrity": "sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw=="
+    },
     "resolve": {
       "version": "1.22.1",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
       "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+      "dev": true,
       "requires": {
         "is-core-module": "^2.9.0",
         "path-parse": "^1.0.7",
@@ -2896,7 +2395,8 @@
     "reusify": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
     },
     "rimraf": {
       "version": "2.7.1",
@@ -2908,9 +2408,9 @@
       }
     },
     "rollup": {
-      "version": "2.78.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
-      "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
+      "version": "2.79.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
+      "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
       "dev": true,
       "requires": {
         "fsevents": "~2.3.2"
@@ -2920,6 +2420,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
       "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
       "requires": {
         "queue-microtask": "^1.2.2"
       }
@@ -2945,12 +2446,14 @@
         "rimraf": "^2.5.2"
       }
     },
-    "simple-swizzle": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
-      "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+    "sigma": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/sigma/-/sigma-2.4.0.tgz",
+      "integrity": "sha512-spi4C+c3cjlhCklT+RvAxJJcarMmjRpF6RPNvBIBYDduALq8iSNm7FwSpijQNGtI+ryeZ2EfvyBNLp36OFaZiw==",
       "requires": {
-        "is-arrayish": "^0.3.1"
+        "@yomguithereal/helpers": "^1.1.1",
+        "events": "^3.3.0",
+        "graphology-utils": "^2.5.0"
       }
     },
     "sorcery": {
@@ -2968,7 +2471,8 @@
     "source-map-js": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true
     },
     "sourcemap-codec": {
       "version": "1.4.8",
@@ -2988,18 +2492,19 @@
     "supports-preserve-symlinks-flag": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true
     },
     "svelte": {
-      "version": "3.50.1",
-      "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.50.1.tgz",
-      "integrity": "sha512-bS4odcsdj5D5jEg6riZuMg5NKelzPtmsCbD9RG+8umU03TeNkdWnP6pqbCm0s8UQNBkqk29w/Bdubn3C+HWSwA==",
+      "version": "3.53.1",
+      "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.53.1.tgz",
+      "integrity": "sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==",
       "dev": true
     },
     "svelte-check": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.9.0.tgz",
-      "integrity": "sha512-9AVrtP7WbfDgCdqTZNPdj5CCCy1OrYMxFVWAWzNw7fl93c9klFJFtqzVXa6fovfQ050CcpUyJE2dPFL9TFAREw==",
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.9.2.tgz",
+      "integrity": "sha512-DRi8HhnCiqiGR2YF9ervPGvtoYrheE09cXieCTEqeTPOTJzfoa54Py8rovIBv4bH4n5HgZYIyTQ3DDLHQLl2uQ==",
       "dev": true,
       "requires": {
         "@jridgewell/trace-mapping": "^0.3.9",
@@ -3013,9 +2518,9 @@
       }
     },
     "svelte-hmr": {
-      "version": "0.15.0",
-      "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.0.tgz",
-      "integrity": "sha512-Aw21SsyoohyVn4yiKXWPNCSW2DQNH/76kvUnE9kpt4h9hcg9tfyQc6xshx9hzgMfGF0kVx0EGD8oBMWSnATeOg==",
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz",
+      "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==",
       "dev": true,
       "requires": {}
     },
@@ -3049,107 +2554,60 @@
       "resolved": "https://registry.npmjs.org/svelte-select/-/svelte-select-4.4.7.tgz",
       "integrity": "sha512-fIf9Z8rPI6F8naHZ9wjXT0Pv5gLyhdHAFkHFJnCfVVfELE8e82uOoF0xEVQP6Kir+b4Q5yOvNAzZ61WbSU6A0A=="
     },
-    "tailwindcss": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz",
-      "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==",
+    "svelte-spa-router": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/svelte-spa-router/-/svelte-spa-router-3.3.0.tgz",
+      "integrity": "sha512-cwRNe7cxD43sCvSfEeaKiNZg3FCizGxeMcf7CPiWRP3jKXjEma3vxyyuDtPOam6nWbVxl9TNM3hlE/i87ZlqcQ==",
       "requires": {
-        "arg": "^5.0.2",
-        "chokidar": "^3.5.3",
-        "color-name": "^1.1.4",
-        "detective": "^5.2.1",
-        "didyoumean": "^1.2.2",
-        "dlv": "^1.1.3",
-        "fast-glob": "^3.2.11",
-        "glob-parent": "^6.0.2",
-        "is-glob": "^4.0.3",
-        "lilconfig": "^2.0.6",
-        "normalize-path": "^3.0.0",
-        "object-hash": "^3.0.0",
-        "picocolors": "^1.0.0",
-        "postcss": "^8.4.14",
-        "postcss-import": "^14.1.0",
-        "postcss-js": "^4.0.0",
-        "postcss-load-config": "^3.1.4",
-        "postcss-nested": "5.0.6",
-        "postcss-selector-parser": "^6.0.10",
-        "postcss-value-parser": "^4.2.0",
-        "quick-lru": "^5.1.1",
-        "resolve": "^1.22.1"
-      },
-      "dependencies": {
-        "glob-parent": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-          "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-          "requires": {
-            "is-glob": "^4.0.3"
-          }
-        }
+        "regexparam": "2.0.1"
       }
     },
     "to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
       "requires": {
         "is-number": "^7.0.0"
       }
     },
     "tslib": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
-      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+      "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
       "dev": true
     },
     "typescript": {
-      "version": "4.8.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
-      "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
+      "version": "4.9.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
+      "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
       "dev": true
     },
-    "update-browserslist-db": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
-      "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
-      "requires": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
-      }
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
-    },
     "vite": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.3.tgz",
-      "integrity": "sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz",
+      "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==",
       "dev": true,
       "requires": {
-        "esbuild": "^0.15.6",
+        "esbuild": "^0.15.9",
         "fsevents": "~2.3.2",
-        "postcss": "^8.4.16",
+        "postcss": "^8.4.18",
         "resolve": "^1.22.1",
-        "rollup": "~2.78.0"
+        "rollup": "^2.79.1"
       }
     },
+    "vitefu": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.1.tgz",
+      "integrity": "sha512-clkvXTAeUf+XQKm3bhWUhT4pye+3acm6YCTGaWhxxIvZZ/QjnA3JA8Zud+z/mO5y5XYvJJhevs5Sjkv/FI8nRw==",
+      "dev": true,
+      "requires": {}
+    },
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
       "dev": true
-    },
-    "xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
-    },
-    "yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
     }
   }
 }
diff --git a/sg-frontend/package.json b/sg-frontend/package.json
index 30a3410eb36c9449bb81db7c0fe56ccf18350672..25a5c5dd0ceb642487ac908f9b2b85c030110ba5 100644
--- a/sg-frontend/package.json
+++ b/sg-frontend/package.json
@@ -12,18 +12,20 @@
   "devDependencies": {
     "@sveltejs/vite-plugin-svelte": "^1.0.2",
     "@tsconfig/svelte": "^3.0.0",
-    "autoprefixer": "^10.4.12",
-    "postcss": "^8.4.16",
     "svelte": "^3.49.0",
     "svelte-check": "^2.8.1",
     "svelte-preprocess": "^4.10.7",
-    "tailwindcss": "^3.1.8",
     "tslib": "^2.4.0",
     "typescript": "^4.6.4",
     "vite": "^3.1.0"
   },
   "dependencies": {
-    "daisyui": "^2.31.0",
-    "svelte-select": "^4.4.7"
+    "graphology": "^0.25.1",
+    "graphology-layout": "^0.6.1",
+    "graphology-layout-force": "^0.2.4",
+    "graphology-layout-forceatlas2": "^0.10.1",
+    "sigma": "^2.4.0",
+    "svelte-select": "^4.4.7",
+    "svelte-spa-router": "^3.3.0"
   }
 }
diff --git a/sg-frontend/pnpm-lock.yaml b/sg-frontend/pnpm-lock.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..077f39a144cee0d5997b2507f6588aa46f887d46
--- /dev/null
+++ b/sg-frontend/pnpm-lock.yaml
@@ -0,0 +1,923 @@
+lockfileVersion: 5.4
+
+specifiers:
+  '@sveltejs/vite-plugin-svelte': ^1.0.2
+  '@tsconfig/svelte': ^3.0.0
+  svelte: ^3.49.0
+  svelte-check: ^2.8.1
+  svelte-preprocess: ^4.10.7
+  svelte-select: ^4.4.7
+  svelte-spa-router: ^3.3.0
+  tslib: ^2.4.0
+  typescript: ^4.6.4
+  vite: ^3.1.0
+
+dependencies:
+  svelte-select: 4.4.7
+  svelte-spa-router: 3.3.0
+
+devDependencies:
+  '@sveltejs/vite-plugin-svelte': 1.2.0_svelte@3.53.1+vite@3.2.4
+  '@tsconfig/svelte': 3.0.0
+  svelte: 3.53.1
+  svelte-check: 2.9.2_svelte@3.53.1
+  svelte-preprocess: 4.10.7_7dvewpees4iyn2tkw2qzal77a4
+  tslib: 2.4.1
+  typescript: 4.9.3
+  vite: 3.2.4
+
+packages:
+
+  /@esbuild/android-arm/0.15.14:
+    resolution: {integrity: sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-loong64/0.15.14:
+    resolution: {integrity: sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==}
+    engines: {node: '>=12'}
+    cpu: [loong64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@jridgewell/resolve-uri/3.1.0:
+    resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
+    engines: {node: '>=6.0.0'}
+    dev: true
+
+  /@jridgewell/sourcemap-codec/1.4.14:
+    resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+    dev: true
+
+  /@jridgewell/trace-mapping/0.3.17:
+    resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.0
+      '@jridgewell/sourcemap-codec': 1.4.14
+    dev: true
+
+  /@nodelib/fs.scandir/2.1.5:
+    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+    engines: {node: '>= 8'}
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      run-parallel: 1.2.0
+    dev: true
+
+  /@nodelib/fs.stat/2.0.5:
+    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+    engines: {node: '>= 8'}
+    dev: true
+
+  /@nodelib/fs.walk/1.2.8:
+    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+    engines: {node: '>= 8'}
+    dependencies:
+      '@nodelib/fs.scandir': 2.1.5
+      fastq: 1.13.0
+    dev: true
+
+  /@sveltejs/vite-plugin-svelte/1.2.0_svelte@3.53.1+vite@3.2.4:
+    resolution: {integrity: sha512-DT2oUkWAloH1tO7X5cQ4uDxQofaIS76skyFMElKtoqT6HJao+D82LI5i+0jPaSSmO7ex3Pa6jGYMlWy9ZJ1cdQ==}
+    engines: {node: ^14.18.0 || >= 16}
+    peerDependencies:
+      diff-match-patch: ^1.0.5
+      svelte: ^3.44.0
+      vite: ^3.0.0
+    peerDependenciesMeta:
+      diff-match-patch:
+        optional: true
+    dependencies:
+      debug: 4.3.4
+      deepmerge: 4.2.2
+      kleur: 4.1.5
+      magic-string: 0.26.7
+      svelte: 3.53.1
+      svelte-hmr: 0.15.1
+      vite: 3.2.4
+      vitefu: 0.2.1
+    transitivePeerDependencies:
+      - '@types/node'
+      - less
+      - sass
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+    dev: true
+
+  /@tsconfig/svelte/3.0.0:
+    resolution: {integrity: sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg==}
+    dev: true
+
+  /@types/node/18.11.9:
+    resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
+    dev: true
+
+  /@types/pug/2.0.6:
+    resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
+    dev: true
+
+  /@types/sass/1.43.1:
+    resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
+    dependencies:
+      '@types/node': 18.11.9
+    dev: true
+
+  /anymatch/3.1.2:
+    resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
+    engines: {node: '>= 8'}
+    dependencies:
+      normalize-path: 3.0.0
+      picomatch: 2.3.1
+    dev: true
+
+  /balanced-match/1.0.2:
+    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+    dev: true
+
+  /binary-extensions/2.2.0:
+    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /brace-expansion/1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+    dependencies:
+      balanced-match: 1.0.2
+      concat-map: 0.0.1
+    dev: true
+
+  /braces/3.0.2:
+    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+    engines: {node: '>=8'}
+    dependencies:
+      fill-range: 7.0.1
+    dev: true
+
+  /buffer-crc32/0.2.13:
+    resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+    dev: true
+
+  /callsites/3.1.0:
+    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /chokidar/3.5.3:
+    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+    engines: {node: '>= 8.10.0'}
+    dependencies:
+      anymatch: 3.1.2
+      braces: 3.0.2
+      glob-parent: 5.1.2
+      is-binary-path: 2.1.0
+      is-glob: 4.0.3
+      normalize-path: 3.0.0
+      readdirp: 3.6.0
+    optionalDependencies:
+      fsevents: 2.3.2
+    dev: true
+
+  /concat-map/0.0.1:
+    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+    dev: true
+
+  /debug/4.3.4:
+    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+    engines: {node: '>=6.0'}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+    dependencies:
+      ms: 2.1.2
+    dev: true
+
+  /deepmerge/4.2.2:
+    resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /detect-indent/6.1.0:
+    resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /es6-promise/3.3.1:
+    resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
+    dev: true
+
+  /esbuild-android-64/0.15.14:
+    resolution: {integrity: sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-android-arm64/0.15.14:
+    resolution: {integrity: sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-darwin-64/0.15.14:
+    resolution: {integrity: sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-darwin-arm64/0.15.14:
+    resolution: {integrity: sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-freebsd-64/0.15.14:
+    resolution: {integrity: sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-freebsd-arm64/0.15.14:
+    resolution: {integrity: sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-32/0.15.14:
+    resolution: {integrity: sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-64/0.15.14:
+    resolution: {integrity: sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-arm/0.15.14:
+    resolution: {integrity: sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-arm64/0.15.14:
+    resolution: {integrity: sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-mips64le/0.15.14:
+    resolution: {integrity: sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-ppc64le/0.15.14:
+    resolution: {integrity: sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-riscv64/0.15.14:
+    resolution: {integrity: sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-s390x/0.15.14:
+    resolution: {integrity: sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-netbsd-64/0.15.14:
+    resolution: {integrity: sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-openbsd-64/0.15.14:
+    resolution: {integrity: sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-sunos-64/0.15.14:
+    resolution: {integrity: sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-windows-32/0.15.14:
+    resolution: {integrity: sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-windows-64/0.15.14:
+    resolution: {integrity: sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-windows-arm64/0.15.14:
+    resolution: {integrity: sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild/0.15.14:
+    resolution: {integrity: sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==}
+    engines: {node: '>=12'}
+    requiresBuild: true
+    optionalDependencies:
+      '@esbuild/android-arm': 0.15.14
+      '@esbuild/linux-loong64': 0.15.14
+      esbuild-android-64: 0.15.14
+      esbuild-android-arm64: 0.15.14
+      esbuild-darwin-64: 0.15.14
+      esbuild-darwin-arm64: 0.15.14
+      esbuild-freebsd-64: 0.15.14
+      esbuild-freebsd-arm64: 0.15.14
+      esbuild-linux-32: 0.15.14
+      esbuild-linux-64: 0.15.14
+      esbuild-linux-arm: 0.15.14
+      esbuild-linux-arm64: 0.15.14
+      esbuild-linux-mips64le: 0.15.14
+      esbuild-linux-ppc64le: 0.15.14
+      esbuild-linux-riscv64: 0.15.14
+      esbuild-linux-s390x: 0.15.14
+      esbuild-netbsd-64: 0.15.14
+      esbuild-openbsd-64: 0.15.14
+      esbuild-sunos-64: 0.15.14
+      esbuild-windows-32: 0.15.14
+      esbuild-windows-64: 0.15.14
+      esbuild-windows-arm64: 0.15.14
+    dev: true
+
+  /fast-glob/3.2.12:
+    resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
+    engines: {node: '>=8.6.0'}
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      '@nodelib/fs.walk': 1.2.8
+      glob-parent: 5.1.2
+      merge2: 1.4.1
+      micromatch: 4.0.5
+    dev: true
+
+  /fastq/1.13.0:
+    resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
+    dependencies:
+      reusify: 1.0.4
+    dev: true
+
+  /fill-range/7.0.1:
+    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+    engines: {node: '>=8'}
+    dependencies:
+      to-regex-range: 5.0.1
+    dev: true
+
+  /fs.realpath/1.0.0:
+    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+    dev: true
+
+  /fsevents/2.3.2:
+    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /function-bind/1.1.1:
+    resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
+    dev: true
+
+  /glob-parent/5.1.2:
+    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+    engines: {node: '>= 6'}
+    dependencies:
+      is-glob: 4.0.3
+    dev: true
+
+  /glob/7.2.3:
+    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+    dependencies:
+      fs.realpath: 1.0.0
+      inflight: 1.0.6
+      inherits: 2.0.4
+      minimatch: 3.1.2
+      once: 1.4.0
+      path-is-absolute: 1.0.1
+    dev: true
+
+  /graceful-fs/4.2.10:
+    resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+    dev: true
+
+  /has/1.0.3:
+    resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
+    engines: {node: '>= 0.4.0'}
+    dependencies:
+      function-bind: 1.1.1
+    dev: true
+
+  /import-fresh/3.3.0:
+    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+    engines: {node: '>=6'}
+    dependencies:
+      parent-module: 1.0.1
+      resolve-from: 4.0.0
+    dev: true
+
+  /inflight/1.0.6:
+    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+    dependencies:
+      once: 1.4.0
+      wrappy: 1.0.2
+    dev: true
+
+  /inherits/2.0.4:
+    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+    dev: true
+
+  /is-binary-path/2.1.0:
+    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+    engines: {node: '>=8'}
+    dependencies:
+      binary-extensions: 2.2.0
+    dev: true
+
+  /is-core-module/2.11.0:
+    resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
+    dependencies:
+      has: 1.0.3
+    dev: true
+
+  /is-extglob/2.1.1:
+    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /is-glob/4.0.3:
+    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      is-extglob: 2.1.1
+    dev: true
+
+  /is-number/7.0.0:
+    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+    engines: {node: '>=0.12.0'}
+    dev: true
+
+  /kleur/4.1.5:
+    resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /magic-string/0.25.9:
+    resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+    dependencies:
+      sourcemap-codec: 1.4.8
+    dev: true
+
+  /magic-string/0.26.7:
+    resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
+    engines: {node: '>=12'}
+    dependencies:
+      sourcemap-codec: 1.4.8
+    dev: true
+
+  /merge2/1.4.1:
+    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+    engines: {node: '>= 8'}
+    dev: true
+
+  /micromatch/4.0.5:
+    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+    engines: {node: '>=8.6'}
+    dependencies:
+      braces: 3.0.2
+      picomatch: 2.3.1
+    dev: true
+
+  /min-indent/1.0.1:
+    resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /minimatch/3.1.2:
+    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+    dependencies:
+      brace-expansion: 1.1.11
+    dev: true
+
+  /minimist/1.2.7:
+    resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
+    dev: true
+
+  /mkdirp/0.5.6:
+    resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+    dependencies:
+      minimist: 1.2.7
+    dev: true
+
+  /mri/1.2.0:
+    resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /ms/2.1.2:
+    resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+    dev: true
+
+  /nanoid/3.3.4:
+    resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
+    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+    dev: true
+
+  /normalize-path/3.0.0:
+    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /once/1.4.0:
+    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+    dependencies:
+      wrappy: 1.0.2
+    dev: true
+
+  /parent-module/1.0.1:
+    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+    engines: {node: '>=6'}
+    dependencies:
+      callsites: 3.1.0
+    dev: true
+
+  /path-is-absolute/1.0.1:
+    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /path-parse/1.0.7:
+    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+    dev: true
+
+  /picocolors/1.0.0:
+    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+    dev: true
+
+  /picomatch/2.3.1:
+    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+    engines: {node: '>=8.6'}
+    dev: true
+
+  /postcss/8.4.19:
+    resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==}
+    engines: {node: ^10 || ^12 || >=14}
+    dependencies:
+      nanoid: 3.3.4
+      picocolors: 1.0.0
+      source-map-js: 1.0.2
+    dev: true
+
+  /queue-microtask/1.2.3:
+    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+    dev: true
+
+  /readdirp/3.6.0:
+    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+    engines: {node: '>=8.10.0'}
+    dependencies:
+      picomatch: 2.3.1
+    dev: true
+
+  /regexparam/2.0.1:
+    resolution: {integrity: sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw==}
+    engines: {node: '>=8'}
+    dev: false
+
+  /resolve-from/4.0.0:
+    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /resolve/1.22.1:
+    resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
+    dependencies:
+      is-core-module: 2.11.0
+      path-parse: 1.0.7
+      supports-preserve-symlinks-flag: 1.0.0
+    dev: true
+
+  /reusify/1.0.4:
+    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+    dev: true
+
+  /rimraf/2.7.1:
+    resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
+    dependencies:
+      glob: 7.2.3
+    dev: true
+
+  /rollup/2.79.1:
+    resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
+    engines: {node: '>=10.0.0'}
+    optionalDependencies:
+      fsevents: 2.3.2
+    dev: true
+
+  /run-parallel/1.2.0:
+    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+    dependencies:
+      queue-microtask: 1.2.3
+    dev: true
+
+  /sade/1.8.1:
+    resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+    engines: {node: '>=6'}
+    dependencies:
+      mri: 1.2.0
+    dev: true
+
+  /sander/0.5.1:
+    resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
+    dependencies:
+      es6-promise: 3.3.1
+      graceful-fs: 4.2.10
+      mkdirp: 0.5.6
+      rimraf: 2.7.1
+    dev: true
+
+  /sorcery/0.10.0:
+    resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==}
+    dependencies:
+      buffer-crc32: 0.2.13
+      minimist: 1.2.7
+      sander: 0.5.1
+      sourcemap-codec: 1.4.8
+    dev: true
+
+  /source-map-js/1.0.2:
+    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /sourcemap-codec/1.4.8:
+    resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+    dev: true
+
+  /strip-indent/3.0.0:
+    resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+    engines: {node: '>=8'}
+    dependencies:
+      min-indent: 1.0.1
+    dev: true
+
+  /supports-preserve-symlinks-flag/1.0.0:
+    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /svelte-check/2.9.2_svelte@3.53.1:
+    resolution: {integrity: sha512-DRi8HhnCiqiGR2YF9ervPGvtoYrheE09cXieCTEqeTPOTJzfoa54Py8rovIBv4bH4n5HgZYIyTQ3DDLHQLl2uQ==}
+    hasBin: true
+    peerDependencies:
+      svelte: ^3.24.0
+    dependencies:
+      '@jridgewell/trace-mapping': 0.3.17
+      chokidar: 3.5.3
+      fast-glob: 3.2.12
+      import-fresh: 3.3.0
+      picocolors: 1.0.0
+      sade: 1.8.1
+      svelte: 3.53.1
+      svelte-preprocess: 4.10.7_7dvewpees4iyn2tkw2qzal77a4
+      typescript: 4.9.3
+    transitivePeerDependencies:
+      - '@babel/core'
+      - coffeescript
+      - less
+      - node-sass
+      - postcss
+      - postcss-load-config
+      - pug
+      - sass
+      - stylus
+      - sugarss
+    dev: true
+
+  /svelte-hmr/0.15.1:
+    resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==}
+    engines: {node: ^12.20 || ^14.13.1 || >= 16}
+    dependencies:
+      svelte: 3.53.1
+    dev: true
+
+  /svelte-preprocess/4.10.7_7dvewpees4iyn2tkw2qzal77a4:
+    resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==}
+    engines: {node: '>= 9.11.2'}
+    requiresBuild: true
+    peerDependencies:
+      '@babel/core': ^7.10.2
+      coffeescript: ^2.5.1
+      less: ^3.11.3 || ^4.0.0
+      node-sass: '*'
+      postcss: ^7 || ^8
+      postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
+      pug: ^3.0.0
+      sass: ^1.26.8
+      stylus: ^0.55.0
+      sugarss: ^2.0.0
+      svelte: ^3.23.0
+      typescript: ^3.9.5 || ^4.0.0
+    peerDependenciesMeta:
+      '@babel/core':
+        optional: true
+      coffeescript:
+        optional: true
+      less:
+        optional: true
+      node-sass:
+        optional: true
+      postcss:
+        optional: true
+      postcss-load-config:
+        optional: true
+      pug:
+        optional: true
+      sass:
+        optional: true
+      stylus:
+        optional: true
+      sugarss:
+        optional: true
+      typescript:
+        optional: true
+    dependencies:
+      '@types/pug': 2.0.6
+      '@types/sass': 1.43.1
+      detect-indent: 6.1.0
+      magic-string: 0.25.9
+      sorcery: 0.10.0
+      strip-indent: 3.0.0
+      svelte: 3.53.1
+      typescript: 4.9.3
+    dev: true
+
+  /svelte-select/4.4.7:
+    resolution: {integrity: sha512-fIf9Z8rPI6F8naHZ9wjXT0Pv5gLyhdHAFkHFJnCfVVfELE8e82uOoF0xEVQP6Kir+b4Q5yOvNAzZ61WbSU6A0A==}
+    dev: false
+
+  /svelte-spa-router/3.3.0:
+    resolution: {integrity: sha512-cwRNe7cxD43sCvSfEeaKiNZg3FCizGxeMcf7CPiWRP3jKXjEma3vxyyuDtPOam6nWbVxl9TNM3hlE/i87ZlqcQ==}
+    dependencies:
+      regexparam: 2.0.1
+    dev: false
+
+  /svelte/3.53.1:
+    resolution: {integrity: sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==}
+    engines: {node: '>= 8'}
+    dev: true
+
+  /to-regex-range/5.0.1:
+    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+    engines: {node: '>=8.0'}
+    dependencies:
+      is-number: 7.0.0
+    dev: true
+
+  /tslib/2.4.1:
+    resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
+    dev: true
+
+  /typescript/4.9.3:
+    resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==}
+    engines: {node: '>=4.2.0'}
+    dev: true
+
+  /vite/3.2.4:
+    resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    hasBin: true
+    peerDependencies:
+      '@types/node': '>= 14'
+      less: '*'
+      sass: '*'
+      stylus: '*'
+      sugarss: '*'
+      terser: ^5.4.0
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+      less:
+        optional: true
+      sass:
+        optional: true
+      stylus:
+        optional: true
+      sugarss:
+        optional: true
+      terser:
+        optional: true
+    dependencies:
+      esbuild: 0.15.14
+      postcss: 8.4.19
+      resolve: 1.22.1
+      rollup: 2.79.1
+    optionalDependencies:
+      fsevents: 2.3.2
+    dev: true
+
+  /vitefu/0.2.1:
+    resolution: {integrity: sha512-clkvXTAeUf+XQKm3bhWUhT4pye+3acm6YCTGaWhxxIvZZ/QjnA3JA8Zud+z/mO5y5XYvJJhevs5Sjkv/FI8nRw==}
+    peerDependenciesMeta:
+      vite:
+        optional: true
+    dependencies:
+      vite: 3.2.4
+    transitivePeerDependencies:
+      - '@types/node'
+      - less
+      - sass
+      - stylus
+      - sugarss
+      - terser
+    dev: true
+
+  /wrappy/1.0.2:
+    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+    dev: true
diff --git a/sg-frontend/src/App.svelte b/sg-frontend/src/App.svelte
index 06183724a42b876e04052ec87024fb7b13a2142f..1ffb7ff7af9939f4e675697c57b62525817d9805 100644
--- a/sg-frontend/src/App.svelte
+++ b/sg-frontend/src/App.svelte
@@ -1,13 +1,22 @@
-<script lang="ts">
-	import Header from "./components/Header.svelte";
-	import SoftwareMerger from "./components/SoftwareMerger.svelte";
+<script>
+  	import Router from "svelte-spa-router";
+	import Index from "./routes/Index.svelte";
+	import Add from "./routes/Add.svelte";
+	import Graph from "./routes/Graph.svelte";
+	import NotFound from "./routes/NotFound.svelte";
+    import Sigma from "./routes/Sigma.svelte";
+    import SigmaCustom from "./routes/SigmaCustom.svelte";
+    import AddNode from "./routes/AddNode.svelte";
+
+		let routes = {
+			"/": Index,
+			"/add": Add,
+			"/graph": Graph,
+            "/sigma": Sigma,
+            "/sigma-custom": SigmaCustom,
+            "/add-node": AddNode,
+			"*": NotFound
+		}
 </script>
 
-<main>
-	<Header />
-	<h1>Software Merger</h1>
-	<p>Find alternatives that have similar features between two softwares.</p>
-	<br />
-	<br />
-	<SoftwareMerger />
-</main>
+<Router {routes} />
\ No newline at end of file
diff --git a/sg-frontend/src/app.css b/sg-frontend/src/app.css
index d469b298d745b12f236d7ebb3d3e8598351cf640..187092b3f3d0def897811a28fc4b29cffa8f4698 100644
--- a/sg-frontend/src/app.css
+++ b/sg-frontend/src/app.css
@@ -1,86 +1,98 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+/* Dark theme settings are commented */
 
 :root {
-	font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
-	font-size: 16px;
-	line-height: 24px;
-	font-weight: 400;
-
-	color-scheme: light dark;
-	color: rgba(255, 255, 255, 0.87);
-	background-color: #242424;
-
-	font-synthesis: none;
-	text-rendering: optimizeLegibility;
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
-	-webkit-text-size-adjust: 100%;
+    font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
+    font-size: 16px;
+    line-height: 24px;
+    font-weight: 400;
+
+    /*color-scheme: light dark;*/
+    /*color: rgba(255, 255, 255, 0.87);*/
+    /*background-color: #242424;*/
+    color: #213547;
+    background-color: #ffffff;
+
+    font-synthesis: none;
+    text-rendering: optimizeLegibility;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    -webkit-text-size-adjust: 100%;
 }
 
 a {
-	font-weight: 500;
-	color: #646cff;
-	text-decoration: inherit;
+    font-weight: 500;
+    /*color: #646cff;*/
+    text-decoration: inherit;
 }
+
 a:hover {
-	color: #535bf2;
+    /*color: #535bf2;*/
+    color: #747bff;
 }
 
 body {
-	padding-top: 100px;
-	margin: 0;
-	display: flex;
-	justify-items: center;
-	min-width: 320px;
-	min-height: 100vh;
+    margin: 0;
+    display: flex;
+    place-items: center;
+    min-width: 320px;
+    min-height: 100vh;
 }
 
 h1 {
-	font-size: 3.2em;
-	line-height: 1.1;
+    font-size: 3.2em;
+    line-height: 1.1;
 }
 
 .card {
-	padding: 2em;
+    padding: 2em;
+}
+
+#app-base {
+    max-width: 1280px;
+    margin: 0 auto;
+    padding: 2rem;
+    text-align: center;
 }
 
 #app {
-	max-width: 1280px;
-	margin: 0 auto;
-	padding: 2rem;
-	text-align: center;
+    width: 100vw;
+    height: 100vh;
 }
 
 button {
-	border-radius: 8px;
-	border: 1px solid transparent;
-	padding: 0.6em 1.2em;
-	font-size: 1em;
-	font-weight: 500;
-	font-family: inherit;
-	background-color: #1a1a1a;
-	cursor: pointer;
-	transition: border-color 0.25s;
+    border-radius: 8px;
+    border: 1px solid transparent;
+    padding: 0.6em 1.2em;
+    font-size: 1em;
+    font-weight: 500;
+    font-family: inherit;
+    /*background-color: #1a1a1a;*/
+    background-color: #f9f9f9;
+    color: #1a1a1a;
+    cursor: pointer;
+    transition: border-color 0.25s;
 }
+
 button:hover {
-	border-color: #646cff;
+    border-color: #646cff;
 }
+
 button:focus,
 button:focus-visible {
-	outline: 4px auto -webkit-focus-ring-color;
+    outline: 4px auto -webkit-focus-ring-color;
 }
 
-@media (prefers-color-scheme: light) {
-	:root {
-		color: #213547;
-		background-color: #ffffff;
-	}
-	a:hover {
-		color: #747bff;
-	}
-	button {
-		background-color: #f9f9f9;
-	}
-}
+/*@media (prefers-color-scheme: light) {*/
+/*    :root {*/
+/*        color: #213547;*/
+/*        background-color: #ffffff;*/
+/*    }*/
+
+/*    a:hover {*/
+/*        color: #747bff;*/
+/*    }*/
+
+/*    button {*/
+/*        background-color: #f9f9f9;*/
+/*    }*/
+/*}*/
\ No newline at end of file
diff --git a/sg-frontend/src/components/RelationInsert.svelte b/sg-frontend/src/components/RelationInsert.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..7d0386f95ac05d78dba22e7da7dd285618c402e2
--- /dev/null
+++ b/sg-frontend/src/components/RelationInsert.svelte
@@ -0,0 +1,117 @@
+<script>
+    import SoftwareSelect from "./SoftwareSelect.svelte";
+    import {onMount} from "svelte";
+
+    let softwares = [],
+        software1,
+        software2,
+        result,
+        node;
+    const BACKEND_URL = import.meta.env.VITE_BACKEND_URL;
+    onMount(async () => {
+
+        const relationAddButton = document.getElementById("relationAddButton");
+        relationAddButton.addEventListener("click", async (e) => {
+            const response = await fetch(BACKEND_URL + "/relation-insert", {
+                method: "POST",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                body: JSON.stringify({
+                    software1: software1.label,
+                    software2: software2.label,
+                    relationType: document.querySelector('input[name="relationType"]:checked').value
+                }),
+            });
+            if (response.ok) {
+                result = await response.json();
+                node = result.node;
+            }
+            e.preventDefault();
+        });
+
+        await fetch(BACKEND_URL + "/software")
+            .then((response) => response.json())
+            .then((data) => {
+                console.log(data);
+                let tempSoft = [];
+                data["softwares"].forEach((element) => {
+                    node = Object.values(Object.values(element))[0];
+                    delete Object.assign(node, {["label"]: node["name"]})["name"];
+                    tempSoft.push(node);
+                });
+                softwares = tempSoft;
+                console.log(softwares);
+            })
+            .catch((error) => {
+                console.log(error);
+                return [];
+            });
+    });
+</script>
+
+<form>
+    <SoftwareSelect items="{softwares}" bind:selectedSoftware="{software1}"/>
+    <div>
+        <label class="radio-inline">
+            <input type="radio" id="SIMILAR" name="relationType" value="SIMILAR" checked>SIMILAR
+        </label>
+        <label class="radio-inline">
+            <input type="radio" id="HAS_SAME_CREATOR" name="relationType" value="HAS_SAME_CREATOR">HAS SAME CREATOR
+        </label>
+    </div>
+    <SoftwareSelect items="{softwares}" bind:selectedSoftware="{software2}"/>
+    <button id="relationAddButton">Add</button>
+</form>
+
+<style>
+    /* Style the form - display items horizontally */
+    .form-inline {
+        display: flex;
+        flex-flow: row wrap;
+        align-items: center;
+    }
+
+    /* Add some margins for each label */
+    .form-inline label {
+        margin: 5px 10px 5px 0;
+    }
+
+    p {
+        display: none !important;
+    }
+
+    /* Style the input fields */
+    .form-inline input {
+        vertical-align: middle;
+        margin: 5px 10px 5px 0;
+        padding: 10px;
+        background-color: #fff;
+        border: 1px solid #ddd;
+    }
+
+    /* Add responsiveness - display the form controls vertically instead of horizontally on screens that are less than 800px wide */
+    @media (max-width: 800px) {
+        .form-inline input {
+            margin: 10px 0;
+        }
+
+        .form-inline {
+            flex-direction: column;
+            align-items: stretch;
+        }
+    }
+
+    form {
+        max-width: 400px;
+        background: #f4f4f4;
+        padding: 20px;
+        border-radius: 4px;
+        color: black;
+        margin: auto;
+    }
+
+    label {
+        margin: 0 0 10px;
+    }
+</style>
\ No newline at end of file
diff --git a/sg-frontend/src/components/SoftwareInsert.svelte b/sg-frontend/src/components/SoftwareInsert.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..702fc318d9c8038854a6d5720fca4907f8bc4019
--- /dev/null
+++ b/sg-frontend/src/components/SoftwareInsert.svelte
@@ -0,0 +1,88 @@
+<script>
+    import {onMount} from "svelte";
+
+    const BACKEND_URL = import.meta.env.VITE_BACKEND_URL;
+
+
+    let softwares = [],
+        result,
+        node;
+
+
+    onMount(async () => {
+        const softwareName = document.getElementById("softwareName");
+        const newNodeButton = document.getElementById("newNodeButton");
+
+        newNodeButton.addEventListener("click", (e) => {
+            postSoftwareInsert();
+            e.preventDefault();
+        });
+
+        async function postSoftwareInsert() {
+            const res = await fetch(BACKEND_URL + "/software-insert", {
+                method: "POST",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                body: JSON.stringify({"newNodeName": softwareName.value}),
+            });
+        }
+
+    });
+</script>
+
+
+<form class="form-inline">
+    <label for="softwareName">Software Name :</label>
+    <input type="text" id="softwareName" placeholder="" name="softwareName">
+    <button id="newNodeButton">Submit</button>
+</form>
+
+<style>
+
+    /* Style the form - display items horizontally */
+    .form-inline {
+        display: flex;
+        flex-flow: row wrap;
+        align-items: center;
+    }
+
+    /* Add some margins for each label */
+    .form-inline label {
+        margin: 5px 10px 5px 0;
+    }
+
+    /* Style the input fields */
+    .form-inline input {
+        vertical-align: middle;
+        margin: 5px 10px 5px 0;
+        padding: 10px;
+        background-color: #fff;
+        border: 1px solid #ddd;
+    }
+
+    /* Add responsiveness - display the form controls vertically instead of horizontally on screens that are less than 800px wide */
+    @media (max-width: 800px) {
+        .form-inline input {
+            margin: 10px 0;
+        }
+
+        .form-inline {
+            flex-direction: column;
+            align-items: stretch;
+        }
+    }
+
+    form {
+        max-width: 400px;
+        background: #f4f4f4;
+        padding: 20px;
+        border-radius: 4px;
+        color: black;
+        margin: auto;
+    }
+
+    label {
+        margin: 0 0 10px;
+    }
+</style>
\ No newline at end of file
diff --git a/sg-frontend/src/components/SoftwareMerger.svelte b/sg-frontend/src/components/SoftwareMerger.svelte
index e6b6a04b94d50d826ebbc8eeae38c5d6936261cc..6466e824eaa3949ad16d75595f4746c043a4e678 100644
--- a/sg-frontend/src/components/SoftwareMerger.svelte
+++ b/sg-frontend/src/components/SoftwareMerger.svelte
@@ -65,7 +65,7 @@
 <SoftwareSelect items="{softwares}" bind:selectedSoftware="{software2}" />
 
 {#if result}
-	<div style="text-align: left;">
+	<div style="max-width: 470px; text-align: left;    margin: auto;">
 		<h2>Results</h2>
 		{#if result.length > 0}
 			<p>
diff --git a/sg-frontend/src/components/SoftwareSelect.svelte b/sg-frontend/src/components/SoftwareSelect.svelte
index 99acdc542f20a81febba07532e531fd31149bbf3..844318ec249f54ed6f110133c51af17057cda1c9 100644
--- a/sg-frontend/src/components/SoftwareSelect.svelte
+++ b/sg-frontend/src/components/SoftwareSelect.svelte
@@ -35,6 +35,7 @@
 		padding: 20px;
 		border-radius: 4px;
 		color: black;
+		margin: auto;
 	}
 
 	label {
diff --git a/sg-frontend/src/routes/Add.svelte b/sg-frontend/src/routes/Add.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/sg-frontend/src/routes/AddNode.svelte b/sg-frontend/src/routes/AddNode.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..e869809e21f7da454c2e149543b3f294485f6246
--- /dev/null
+++ b/sg-frontend/src/routes/AddNode.svelte
@@ -0,0 +1,22 @@
+<script lang="ts">
+
+    import {onMount} from 'svelte';
+    import SotfwareInsert from "../components/SoftwareInsert.svelte";
+    import RelationInsert from "../components/RelationInsert.svelte";
+
+    onMount(() => {
+        const link = document.getElementById("sigma") as HTMLElement;
+        const home = document.getElementById("home") as HTMLElement;
+        const add = document.getElementById("add") as HTMLElement;
+        add.classList.add("active");
+        home.classList.remove("active");
+        link.classList.remove("active");
+
+    });
+</script>
+<div id="app-base">
+    <h1>Add new node</h1>
+    <SotfwareInsert></SotfwareInsert>
+    <h1>Add new relation</h1>
+    <RelationInsert></RelationInsert>
+</div>
\ No newline at end of file
diff --git a/sg-frontend/src/routes/Graph.svelte b/sg-frontend/src/routes/Graph.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..327e027b4c582689c7088105b8f2cb42307b8c87
--- /dev/null
+++ b/sg-frontend/src/routes/Graph.svelte
@@ -0,0 +1,3 @@
+<div>
+    Hello
+</div>
\ No newline at end of file
diff --git a/sg-frontend/src/routes/Index.svelte b/sg-frontend/src/routes/Index.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..53f779416021abf9da45ec54eadf62c159743d11
--- /dev/null
+++ b/sg-frontend/src/routes/Index.svelte
@@ -0,0 +1,37 @@
+<script lang="ts">
+    import SoftwareMerger from "../components/SoftwareMerger.svelte";
+	const link = document.getElementById("sigma");
+	const home = document.getElementById("home");
+	const add = document.getElementById("add");
+	home.classList.add("active");
+	link.classList.remove("active");
+	add.classList.remove("active");
+</script>
+
+<div id="app-base">
+    <h1>Software Merger</h1>
+    <p>Find alternatives that have similar features between two softwares.</p>
+    <br/>
+    <br/>
+    <SoftwareMerger/>
+</div>
+
+<style>
+    .logo {
+        height: 6em;
+        padding: 1.5em;
+        will-change: filter;
+    }
+
+    .logo:hover {
+        filter: drop-shadow(0 0 2em #646cffaa);
+    }
+
+    .logo.svelte:hover {
+        filter: drop-shadow(0 0 2em #ff3e00aa);
+    }
+
+    .read-the-docs {
+        color: #888;
+    }
+</style>
\ No newline at end of file
diff --git a/sg-frontend/src/routes/NotFound.svelte b/sg-frontend/src/routes/NotFound.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..c678e375b97ef72ecf7208194772948ef1d3a00b
--- /dev/null
+++ b/sg-frontend/src/routes/NotFound.svelte
@@ -0,0 +1 @@
+<p>Not found</p>
\ No newline at end of file
diff --git a/sg-frontend/src/routes/Sigma.svelte b/sg-frontend/src/routes/Sigma.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..8b7d8637752cf83102e52a6e5043aaa78c906135
--- /dev/null
+++ b/sg-frontend/src/routes/Sigma.svelte
@@ -0,0 +1,174 @@
+<script lang="ts">
+import Graph from "graphology";
+import Sigma from "sigma";
+
+import { Coordinates, EdgeDisplayData, NodeDisplayData } from "sigma/types";
+
+import data from "./data.json";
+  import { onMount } from 'svelte';
+
+  onMount(() => {
+/**
+ * This example showcases sigma's reducers, which aim to facilitate dynamically
+ * changing the appearance of nodes and edges, without actually changing the
+ * main graphology data.
+ */
+
+
+
+// Retrieve some useful DOM elements:
+const container = document.getElementById("sigma-container") as HTMLElement;
+const searchInput = document.getElementById("search-input") as HTMLInputElement;
+const searchSuggestions = document.getElementById("suggestions") as HTMLDataListElement;
+
+// Instantiate sigma:
+const graph = new Graph();
+graph.import(data);
+const renderer = new Sigma(graph, container);
+
+// Type and declare internal state:
+interface State {
+  hoveredNode?: string;
+  searchQuery: string;
+
+  // State derived from query:
+  selectedNode?: string;
+  suggestions?: Set<string>;
+
+  // State derived from hovered node:
+  hoveredNeighbors?: Set<string>;
+}
+const state: State = { searchQuery: "" };
+
+// Feed the datalist autocomplete values:
+searchSuggestions.innerHTML = graph
+  .nodes()
+  .map((node) => `<option value="${graph.getNodeAttribute(node, "label")}"></option>`)
+  .join("\n");
+
+// Actions:
+function setSearchQuery(query: string) {
+  state.searchQuery = query;
+
+  if (searchInput.value !== query) searchInput.value = query;
+
+  if (query) {
+    const lcQuery = query.toLowerCase();
+    const suggestions = graph
+      .nodes()
+      .map((n) => ({ id: n, label: graph.getNodeAttribute(n, "label") as string }))
+      .filter(({ label }) => label.toLowerCase().includes(lcQuery));
+
+    // If we have a single perfect match, them we remove the suggestions, and
+    // we consider the user has selected a node through the datalist
+    // autocomplete:
+    if (suggestions.length === 1 && suggestions[0].label === query) {
+      state.selectedNode = suggestions[0].id;
+      state.suggestions = undefined;
+
+      // Move the camera to center it on the selected node:
+      const nodePosition = renderer.getNodeDisplayData(state.selectedNode) as Coordinates;
+      renderer.getCamera().animate(nodePosition, {
+        duration: 500,
+      });
+    }
+    // Else, we display the suggestions list:
+    else {
+      state.selectedNode = undefined;
+      state.suggestions = new Set(suggestions.map(({ id }) => id));
+    }
+  }
+  // If the query is empty, then we reset the selectedNode / suggestions state:
+  else {
+    state.selectedNode = undefined;
+    state.suggestions = undefined;
+  }
+
+  // Refresh rendering:
+  renderer.refresh();
+}
+function setHoveredNode(node?: string) {
+  if (node) {
+    state.hoveredNode = node;
+    state.hoveredNeighbors = new Set(graph.neighbors(node));
+  } else {
+    state.hoveredNode = undefined;
+    state.hoveredNeighbors = undefined;
+  }
+
+  // Refresh rendering:
+  renderer.refresh();
+}
+
+// Bind search input interactions:
+searchInput.addEventListener("input", () => {
+  setSearchQuery(searchInput.value || "");
+});
+searchInput.addEventListener("blur", () => {
+  setSearchQuery("");
+});
+
+// Bind graph interactions:
+renderer.on("enterNode", ({ node }) => {
+  setHoveredNode(node);
+});
+renderer.on("leaveNode", () => {
+  setHoveredNode(undefined);
+});
+
+// Render nodes accordingly to the internal state:
+// 1. If a node is selected, it is highlighted
+// 2. If there is query, all non-matching nodes are greyed
+// 3. If there is a hovered node, all non-neighbor nodes are greyed
+renderer.setSetting("nodeReducer", (node, data) => {
+  const res: Partial<NodeDisplayData> = { ...data };
+
+  if (state.hoveredNeighbors && !state.hoveredNeighbors.has(node) && state.hoveredNode !== node) {
+    res.label = "";
+    res.color = "#f6f6f6";
+  }
+
+  if (state.selectedNode === node) {
+    res.highlighted = true;
+  } else if (state.suggestions && !state.suggestions.has(node)) {
+    res.label = "";
+    res.color = "#f6f6f6";
+  }
+
+  return res;
+});
+
+// Render edges accordingly to the internal state:
+// 1. If a node is hovered, the edge is hidden if it is not connected to the
+//    node
+// 2. If there is a query, the edge is only visible if it connects two
+//    suggestions
+renderer.setSetting("edgeReducer", (edge, data) => {
+  const res: Partial<EdgeDisplayData> = { ...data };
+
+  if (state.hoveredNode && !graph.hasExtremity(edge, state.hoveredNode)) {
+    res.hidden = true;
+  }
+
+  if (state.suggestions && (!state.suggestions.has(graph.source(edge)) || !state.suggestions.has(graph.target(edge)))) {
+    res.hidden = true;
+  }
+
+  return res;
+});
+
+  });
+
+
+
+
+</script>
+<h1> Sigma graph exemple</h1>
+<div id="sigma-container" />
+
+<style>
+  #sigma-container {
+      width: 550px;
+      height: 450px;
+  }
+</style>
\ No newline at end of file
diff --git a/sg-frontend/src/routes/SigmaCustom.svelte b/sg-frontend/src/routes/SigmaCustom.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..430516090a0c42783bc1e0066f89681b0d399851
--- /dev/null
+++ b/sg-frontend/src/routes/SigmaCustom.svelte
@@ -0,0 +1,215 @@
+<script lang="ts">
+    import {Coordinates, EdgeDisplayData, NodeDisplayData} from "sigma/types";
+    import FA2Layout from "graphology-layout-forceatlas2/worker";
+    import forceAtlas2 from "graphology-layout-forceatlas2";
+    import {circular} from "graphology-layout";
+    import Graph from "graphology";
+    import Sigma from "sigma";
+    import ForceSupervisor from "graphology-layout-force/worker";
+
+    import {onMount} from 'svelte';
+
+    onMount(() => {
+        fetch("http://localhost:8000/software-graph")
+            .then(response => response.json())
+            .then(data => {
+
+
+// Retrieve some useful DOM elements:
+                const container = document.getElementById("sigma-container") as HTMLElement;
+                const link = document.getElementById("sigma") as HTMLElement;
+                const home = document.getElementById("home") as HTMLElement;
+                const add = document.getElementById("add") as HTMLElement;
+                link.classList.add("active");
+                home.classList.remove("active");
+                add.classList.remove("active");
+
+// Instantiate sigma:
+                const graph = new Graph();
+                graph.import(data);
+                const renderer = new Sigma(graph, container);
+
+// Type and declare internal state:
+                interface State {
+                    hoveredNode?: string;
+                    searchQuery: string;
+
+                    // State derived from query:
+                    selectedNode?: string;
+                    suggestions?: Set<string>;
+
+                    // State derived from hovered node:
+                    hoveredNeighbors?: Set<string>;
+                }
+
+                const state: State = {searchQuery: ""};
+
+
+                function setHoveredNode(node?: string) {
+                    if (node) {
+                        state.hoveredNode = node;
+                        state.hoveredNeighbors = new Set(graph.neighbors(node));
+                    } else {
+                        state.hoveredNode = undefined;
+                        state.hoveredNeighbors = undefined;
+                    }
+
+                    // Refresh rendering:
+                    renderer.refresh();
+                }
+
+// Bind graph interactions:
+                renderer.on("enterNode", ({node}) => {
+                    setHoveredNode(node);
+                });
+                renderer.on("leaveNode", () => {
+                    setHoveredNode(undefined);
+                });
+
+// Render nodes accordingly to the internal state:
+// 1. If a node is selected, it is highlighted
+// 2. If there is query, all non-matching nodes are greyed
+// 3. If there is a hovered node, all non-neighbor nodes are greyed
+                renderer.setSetting("nodeReducer", (node, data) => {
+                    const res: Partial<NodeDisplayData> = {...data};
+
+                    if (state.hoveredNeighbors && !state.hoveredNeighbors.has(node) && state.hoveredNode !== node) {
+                        res.label = "";
+                        res.color = "#f6f6f6";
+                    }
+
+                    if (state.selectedNode === node) {
+                        res.highlighted = true;
+                    } else if (state.suggestions && !state.suggestions.has(node)) {
+                        res.label = "";
+                        res.color = "#f6f6f6";
+                    }
+
+                    return res;
+                });
+
+
+// Render edges accordingly to the internal state:
+// 1. If a node is hovered, the edge is hidden if it is not connected to the
+//    node
+// 2. If there is a query, the edge is only visible if it connects two
+//    suggestions
+                renderer.setSetting("edgeReducer", (edge, data) => {
+                    const res: Partial<EdgeDisplayData> = {...data};
+
+                    if (state.hoveredNode && !graph.hasExtremity(edge, state.hoveredNode)) {
+                        res.hidden = true;
+                    }
+
+                    if (state.suggestions && (!state.suggestions.has(graph.source(edge)) || !state.suggestions.has(graph.target(edge)))) {
+                        res.hidden = true;
+                    }
+
+                    return res;
+                });
+
+
+                // Graphology provides a easy to use implementation of Force Atlas 2 in a web worker
+                const sensibleSettings = forceAtlas2.inferSettings(graph);
+                const fa2Layout = new FA2Layout(graph, {
+                    settings: sensibleSettings,
+                });
+
+                circular.assign(graph, {scale: 100});
+                fa2Layout.start();
+
+                // Create the spring layout and start it
+                const layout = new ForceSupervisor(graph, {isNodeFixed: (_, attr) => attr.highlighted});
+                layout.start();
+
+
+//
+// Drag'n'drop feature
+// ~~~~~~~~~~~~~~~~~~~
+//
+
+// State for drag'n'drop
+                let draggedNode: string | null = null;
+                let isDragging = false;
+
+// On mouse down on a node
+//  - we enable the drag mode
+//  - save in the dragged node in the state
+//  - highlight the node
+//  - disable the camera so its state is not updated
+                renderer.on("downNode", (e) => {
+                    isDragging = true;
+                    draggedNode = e.node;
+                    graph.setNodeAttribute(draggedNode, "highlighted", true);
+                });
+
+// On mouse move, if the drag mode is enabled, we change the position of the draggedNode
+                renderer.getMouseCaptor().on("mousemovebody", (e) => {
+                    if (!isDragging || !draggedNode) return;
+
+                    setHoveredNode(undefined);
+
+                    fa2Layout.stop();
+
+                    // Get new position of node
+                    const pos = renderer.viewportToGraph(e);
+
+                    graph.setNodeAttribute(draggedNode, "x", pos.x);
+                    graph.setNodeAttribute(draggedNode, "y", pos.y);
+
+                    // Prevent sigma to move camera:
+                    e.preventSigmaDefault();
+                    e.original.preventDefault();
+                    e.original.stopPropagation();
+                });
+
+// On mouse up, we reset the autoscale and the dragging mode
+                renderer.getMouseCaptor().on("mouseup", () => {
+                    if (draggedNode) {
+                        graph.removeNodeAttribute(draggedNode, "highlighted");
+                    }
+                    isDragging = false;
+                    draggedNode = null;
+                    renderer.getCamera()
+                });
+
+// Disable the autoscale at the first down interaction
+                renderer.getMouseCaptor().on("mousedown", () => {
+                    if (!renderer.getCustomBBox()) renderer.setCustomBBox(renderer.getBBox());
+                });
+            });
+    });
+
+
+</script>
+<h1>Software Map</h1>
+<div id="content">
+    <div id="sigma-container"/>
+</div>
+<style>
+
+    #content{
+        max-width: none !important;
+        margin: 0;
+        padding: 0;
+    }
+    h1 {
+        position: absolute;
+        z-index: 1;
+        margin-left: auto;
+        margin-right: auto;
+        left: 0;
+        right: 0;
+        text-align: center;
+    }
+
+    html,
+    body,
+    #sigma-container {
+        width: 95vw;
+        height: 93vh;
+        margin: 0;
+        text-align: left;
+        display: block;
+    }
+</style>
\ No newline at end of file
diff --git a/sg-frontend/src/routes/data.json b/sg-frontend/src/routes/data.json
new file mode 100644
index 0000000000000000000000000000000000000000..0a8e7ba7928d660e3589ea08bf086544bb67ccd7
--- /dev/null
+++ b/sg-frontend/src/routes/data.json
@@ -0,0 +1,2808 @@
+{
+  "nodes": [
+    {
+      "key": "0.0",
+      "attributes": {
+        "x": 268.72385,
+        "y": 91.18155,
+        "size": 22.714287,
+        "label": "Myriel",
+        "color": "#D8482D"
+      }
+    },
+    {
+      "key": "1.0",
+      "attributes": {
+        "x": 296.39902,
+        "y": 57.118374,
+        "size": 15,
+        "label": "Napoleon",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "2.0",
+      "attributes": {
+        "x": 248.45229,
+        "y": 52.22656,
+        "size": 16.714285,
+        "label": "MlleBaptistine",
+        "color": "#BB100A"
+      }
+    },
+    {
+      "key": "3.0",
+      "attributes": {
+        "x": 224.83313,
+        "y": 98.01885,
+        "size": 16.714285,
+        "label": "MmeMagloire",
+        "color": "#BB100A"
+      }
+    },
+    {
+      "key": "4.0",
+      "attributes": {
+        "x": 270.9098,
+        "y": 149.2961,
+        "size": 15,
+        "label": "CountessDeLo",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "5.0",
+      "attributes": {
+        "x": 318.6509,
+        "y": 85.41602,
+        "size": 15,
+        "label": "Geborand",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "6.0",
+      "attributes": {
+        "x": 330.3126,
+        "y": 117.94921,
+        "size": 15,
+        "label": "Champtercier",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "7.0",
+      "attributes": {
+        "x": 310.513,
+        "y": 155.66956,
+        "size": 15,
+        "label": "Cravatte",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "8.0",
+      "attributes": {
+        "x": 295.74683,
+        "y": 124.78035,
+        "size": 15,
+        "label": "Count",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "9.0",
+      "attributes": {
+        "x": 241.03372,
+        "y": 131.8897,
+        "size": 15,
+        "label": "OldMan",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "10.0",
+      "attributes": {
+        "x": -55.532795,
+        "y": -246.75798,
+        "size": 15,
+        "label": "Labarre",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "11.0",
+      "attributes": {
+        "x": -8.81755,
+        "y": -60.480377,
+        "size": 45,
+        "label": "Valjean",
+        "color": "#FEF0D9"
+      }
+    },
+    {
+      "key": "12.0",
+      "attributes": {
+        "x": 116.85369,
+        "y": -100.77216,
+        "size": 15.857142,
+        "label": "Marguerite",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "13.0",
+      "attributes": {
+        "x": 78.10812,
+        "y": -16.99423,
+        "size": 15,
+        "label": "MmeDeR",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "14.0",
+      "attributes": {
+        "x": 47.669666,
+        "y": -96.23158,
+        "size": 15,
+        "label": "Isabeau",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "15.0",
+      "attributes": {
+        "x": 20.945133,
+        "y": -118.35298,
+        "size": 15,
+        "label": "Gervais",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "16.0",
+      "attributes": {
+        "x": 232.50653,
+        "y": -165.75543,
+        "size": 21.857143,
+        "label": "Tholomyes",
+        "color": "#D44028"
+      }
+    },
+    {
+      "key": "17.0",
+      "attributes": {
+        "x": 322.50223,
+        "y": -210.94756,
+        "size": 20.142857,
+        "label": "Listolier",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "18.0",
+      "attributes": {
+        "x": 322.0389,
+        "y": -162.5361,
+        "size": 20.142857,
+        "label": "Fameuil",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "19.0",
+      "attributes": {
+        "x": 282.84045,
+        "y": -234.37758,
+        "size": 20.142857,
+        "label": "Blacheville",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "20.0",
+      "attributes": {
+        "x": 282.14212,
+        "y": -141.3707,
+        "size": 20.142857,
+        "label": "Favourite",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "21.0",
+      "attributes": {
+        "x": 279.24896,
+        "y": -186.69917,
+        "size": 20.142857,
+        "label": "Dahlia",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "22.0",
+      "attributes": {
+        "x": 240.49136,
+        "y": -212.45226,
+        "size": 20.142857,
+        "label": "Zephine",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "23.0",
+      "attributes": {
+        "x": 185.86234,
+        "y": -128.47615,
+        "size": 27,
+        "label": "Fantine",
+        "color": "#ED7047"
+      }
+    },
+    {
+      "key": "24.0",
+      "attributes": {
+        "x": -15.730793,
+        "y": 46.37429,
+        "size": 23.57143,
+        "label": "MmeThenardier",
+        "color": "#DC5032"
+      }
+    },
+    {
+      "key": "25.0",
+      "attributes": {
+        "x": 3.6068764,
+        "y": 98.60965,
+        "size": 27.857143,
+        "label": "Thenardier",
+        "color": "#F1784C"
+      }
+    },
+    {
+      "key": "26.0",
+      "attributes": {
+        "x": -69.92912,
+        "y": -15.777599,
+        "size": 23.57143,
+        "label": "Cosette",
+        "color": "#DC5032"
+      }
+    },
+    {
+      "key": "27.0",
+      "attributes": {
+        "x": 54.198936,
+        "y": 49.115128,
+        "size": 28.714287,
+        "label": "Javert",
+        "color": "#F58051"
+      }
+    },
+    {
+      "key": "28.0",
+      "attributes": {
+        "x": 58.138313,
+        "y": -56.714897,
+        "size": 17.571428,
+        "label": "Fauchelevent",
+        "color": "#BF180F"
+      }
+    },
+    {
+      "key": "29.0",
+      "attributes": {
+        "x": 97.39532,
+        "y": -157.35661,
+        "size": 21,
+        "label": "Bamatabois",
+        "color": "#D03823"
+      }
+    },
+    {
+      "key": "30.0",
+      "attributes": {
+        "x": 157.66608,
+        "y": -88.86034,
+        "size": 15.857142,
+        "label": "Perpetue",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "31.0",
+      "attributes": {
+        "x": 130.24326,
+        "y": -62.113045,
+        "size": 17.571428,
+        "label": "Simplice",
+        "color": "#BF180F"
+      }
+    },
+    {
+      "key": "32.0",
+      "attributes": {
+        "x": -31.725157,
+        "y": -124.8531,
+        "size": 15,
+        "label": "Scaufflaire",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "33.0",
+      "attributes": {
+        "x": 45.4282,
+        "y": -2.6807823,
+        "size": 15.857142,
+        "label": "Woman1",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "34.0",
+      "attributes": {
+        "x": -2.146402,
+        "y": -152.7878,
+        "size": 19.285715,
+        "label": "Judge",
+        "color": "#C72819"
+      }
+    },
+    {
+      "key": "35.0",
+      "attributes": {
+        "x": 54.183117,
+        "y": -142.10239,
+        "size": 19.285715,
+        "label": "Champmathieu",
+        "color": "#C72819"
+      }
+    },
+    {
+      "key": "36.0",
+      "attributes": {
+        "x": -21.096437,
+        "y": -192.47128,
+        "size": 19.285715,
+        "label": "Brevet",
+        "color": "#C72819"
+      }
+    },
+    {
+      "key": "37.0",
+      "attributes": {
+        "x": 56.919018,
+        "y": -184.99847,
+        "size": 19.285715,
+        "label": "Chenildieu",
+        "color": "#C72819"
+      }
+    },
+    {
+      "key": "38.0",
+      "attributes": {
+        "x": 21.456747,
+        "y": -211.19899,
+        "size": 19.285715,
+        "label": "Cochepaille",
+        "color": "#C72819"
+      }
+    },
+    {
+      "key": "39.0",
+      "attributes": {
+        "x": -69.42261,
+        "y": 66.22773,
+        "size": 16.714285,
+        "label": "Pontmercy",
+        "color": "#BB100A"
+      }
+    },
+    {
+      "key": "40.0",
+      "attributes": {
+        "x": 52.13746,
+        "y": 97.863976,
+        "size": 15,
+        "label": "Boulatruelle",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "41.0",
+      "attributes": {
+        "x": -84.15585,
+        "y": 140.50175,
+        "size": 23.57143,
+        "label": "Eponine",
+        "color": "#DC5032"
+      }
+    },
+    {
+      "key": "42.0",
+      "attributes": {
+        "x": -47.696083,
+        "y": 112.90357,
+        "size": 16.714285,
+        "label": "Anzelma",
+        "color": "#BB100A"
+      }
+    },
+    {
+      "key": "43.0",
+      "attributes": {
+        "x": 10.037987,
+        "y": 7.8234367,
+        "size": 16.714285,
+        "label": "Woman2",
+        "color": "#BB100A"
+      }
+    },
+    {
+      "key": "44.0",
+      "attributes": {
+        "x": 82.99555,
+        "y": -87.651726,
+        "size": 15.857142,
+        "label": "MotherInnocent",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "45.0",
+      "attributes": {
+        "x": 94.93769,
+        "y": -47.799778,
+        "size": 15,
+        "label": "Gribier",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "46.0",
+      "attributes": {
+        "x": -293.23438,
+        "y": -146.10257,
+        "size": 15,
+        "label": "Jondrette",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "47.0",
+      "attributes": {
+        "x": -294.94247,
+        "y": -108.07895,
+        "size": 15.857142,
+        "label": "MmeBurgon",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "48.0",
+      "attributes": {
+        "x": -215.57619,
+        "y": 34.40003,
+        "size": 33,
+        "label": "Gavroche",
+        "color": "#FCA072"
+      }
+    },
+    {
+      "key": "49.0",
+      "attributes": {
+        "x": -119.18742,
+        "y": -17.39732,
+        "size": 20.142857,
+        "label": "Gillenormand",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "50.0",
+      "attributes": {
+        "x": -57.473045,
+        "y": 29.63873,
+        "size": 15.857142,
+        "label": "Magnon",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "51.0",
+      "attributes": {
+        "x": -93.255005,
+        "y": -60.657784,
+        "size": 20.142857,
+        "label": "MlleGillenormand",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "52.0",
+      "attributes": {
+        "x": -93.764046,
+        "y": 22.565668,
+        "size": 15.857142,
+        "label": "MmePontmercy",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "53.0",
+      "attributes": {
+        "x": -132.14008,
+        "y": -66.85538,
+        "size": 15,
+        "label": "MlleVaubois",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "54.0",
+      "attributes": {
+        "x": -95.75337,
+        "y": -102.71505,
+        "size": 17.571428,
+        "label": "LtGillenormand",
+        "color": "#BF180F"
+      }
+    },
+    {
+      "key": "55.0",
+      "attributes": {
+        "x": -142.15263,
+        "y": 36.388676,
+        "size": 30.428574,
+        "label": "Marius",
+        "color": "#FC8F5C"
+      }
+    },
+    {
+      "key": "56.0",
+      "attributes": {
+        "x": -160.2533,
+        "y": -24.29684,
+        "size": 15.857142,
+        "label": "BaronessT",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "57.0",
+      "attributes": {
+        "x": -267.16248,
+        "y": 196.98003,
+        "size": 23.57143,
+        "label": "Mabeuf",
+        "color": "#DC5032"
+      }
+    },
+    {
+      "key": "58.0",
+      "attributes": {
+        "x": -190.88988,
+        "y": 96.44671,
+        "size": 27,
+        "label": "Enjolras",
+        "color": "#ED7047"
+      }
+    },
+    {
+      "key": "59.0",
+      "attributes": {
+        "x": -222.5417,
+        "y": 144.66484,
+        "size": 23.57143,
+        "label": "Combeferre",
+        "color": "#DC5032"
+      }
+    },
+    {
+      "key": "60.0",
+      "attributes": {
+        "x": -325.61102,
+        "y": 166.71417,
+        "size": 21.857143,
+        "label": "Prouvaire",
+        "color": "#D44028"
+      }
+    },
+    {
+      "key": "61.0",
+      "attributes": {
+        "x": -276.3468,
+        "y": 145.79153,
+        "size": 23.57143,
+        "label": "Feuilly",
+        "color": "#DC5032"
+      }
+    },
+    {
+      "key": "62.0",
+      "attributes": {
+        "x": -251.45561,
+        "y": 97.83937,
+        "size": 25.285713,
+        "label": "Courfeyrac",
+        "color": "#E5603D"
+      }
+    },
+    {
+      "key": "63.0",
+      "attributes": {
+        "x": -318.40936,
+        "y": 114.202415,
+        "size": 24.428572,
+        "label": "Bahorel",
+        "color": "#E05837"
+      }
+    },
+    {
+      "key": "64.0",
+      "attributes": {
+        "x": -278.9682,
+        "y": 45.932438,
+        "size": 25.285713,
+        "label": "Bossuet",
+        "color": "#E5603D"
+      }
+    },
+    {
+      "key": "65.0",
+      "attributes": {
+        "x": -333.04984,
+        "y": 62.438156,
+        "size": 24.428572,
+        "label": "Joly",
+        "color": "#E05837"
+      }
+    },
+    {
+      "key": "66.0",
+      "attributes": {
+        "x": -370.2446,
+        "y": 101.73884,
+        "size": 22.714287,
+        "label": "Grantaire",
+        "color": "#D8482D"
+      }
+    },
+    {
+      "key": "67.0",
+      "attributes": {
+        "x": -253.54378,
+        "y": 237.9443,
+        "size": 15,
+        "label": "MotherPlutarch",
+        "color": "#B30000"
+      }
+    },
+    {
+      "key": "68.0",
+      "attributes": {
+        "x": -16.550194,
+        "y": 152.69055,
+        "size": 22.714287,
+        "label": "Gueulemer",
+        "color": "#D8482D"
+      }
+    },
+    {
+      "key": "69.0",
+      "attributes": {
+        "x": 35.653145,
+        "y": 144.49445,
+        "size": 22.714287,
+        "label": "Babet",
+        "color": "#D8482D"
+      }
+    },
+    {
+      "key": "70.0",
+      "attributes": {
+        "x": 58.97649,
+        "y": 188.46011,
+        "size": 22.714287,
+        "label": "Claquesous",
+        "color": "#D8482D"
+      }
+    },
+    {
+      "key": "71.0",
+      "attributes": {
+        "x": -2.9325058,
+        "y": 200.66508,
+        "size": 21.857143,
+        "label": "Montparnasse",
+        "color": "#D44028"
+      }
+    },
+    {
+      "key": "72.0",
+      "attributes": {
+        "x": -30.056648,
+        "y": 3.5053203,
+        "size": 16.714285,
+        "label": "Toussaint",
+        "color": "#BB100A"
+      }
+    },
+    {
+      "key": "73.0",
+      "attributes": {
+        "x": -244.859,
+        "y": -11.3161335,
+        "size": 15.857142,
+        "label": "Child1",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "74.0",
+      "attributes": {
+        "x": -280.33203,
+        "y": -1.466383,
+        "size": 15.857142,
+        "label": "Child2",
+        "color": "#B70805"
+      }
+    },
+    {
+      "key": "75.0",
+      "attributes": {
+        "x": -56.819256,
+        "y": 182.0544,
+        "size": 20.142857,
+        "label": "Brujon",
+        "color": "#CC301E"
+      }
+    },
+    {
+      "key": "76.0",
+      "attributes": {
+        "x": -382.06223,
+        "y": 47.045475,
+        "size": 20.142857,
+        "label": "MmeHucheloup",
+        "color": "#CC301E"
+      }
+    }
+  ],
+  "edges": [
+    {
+      "key": "0",
+      "source": "1.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "1",
+      "source": "2.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 8
+      }
+    },
+    {
+      "key": "2",
+      "source": "3.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 10
+      }
+    },
+    {
+      "key": "3",
+      "source": "3.0",
+      "target": "2.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "4",
+      "source": "4.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "5",
+      "source": "5.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "6",
+      "source": "6.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "7",
+      "source": "7.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "8",
+      "source": "8.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "9",
+      "source": "9.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "13",
+      "source": "11.0",
+      "target": "0.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "12",
+      "source": "11.0",
+      "target": "2.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "11",
+      "source": "11.0",
+      "target": "3.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "10",
+      "source": "11.0",
+      "target": "10.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "14",
+      "source": "12.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "15",
+      "source": "13.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "16",
+      "source": "14.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "17",
+      "source": "15.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "18",
+      "source": "17.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "19",
+      "source": "18.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "20",
+      "source": "18.0",
+      "target": "17.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "21",
+      "source": "19.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "22",
+      "source": "19.0",
+      "target": "17.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "23",
+      "source": "19.0",
+      "target": "18.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "24",
+      "source": "20.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "25",
+      "source": "20.0",
+      "target": "17.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "26",
+      "source": "20.0",
+      "target": "18.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "27",
+      "source": "20.0",
+      "target": "19.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "28",
+      "source": "21.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "29",
+      "source": "21.0",
+      "target": "17.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "30",
+      "source": "21.0",
+      "target": "18.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "31",
+      "source": "21.0",
+      "target": "19.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "32",
+      "source": "21.0",
+      "target": "20.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "33",
+      "source": "22.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "34",
+      "source": "22.0",
+      "target": "17.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "35",
+      "source": "22.0",
+      "target": "18.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "36",
+      "source": "22.0",
+      "target": "19.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "37",
+      "source": "22.0",
+      "target": "20.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "38",
+      "source": "22.0",
+      "target": "21.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "47",
+      "source": "23.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 9
+      }
+    },
+    {
+      "key": "46",
+      "source": "23.0",
+      "target": "12.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "39",
+      "source": "23.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "40",
+      "source": "23.0",
+      "target": "17.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "41",
+      "source": "23.0",
+      "target": "18.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "42",
+      "source": "23.0",
+      "target": "19.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "43",
+      "source": "23.0",
+      "target": "20.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "44",
+      "source": "23.0",
+      "target": "21.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "45",
+      "source": "23.0",
+      "target": "22.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "49",
+      "source": "24.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 7
+      }
+    },
+    {
+      "key": "48",
+      "source": "24.0",
+      "target": "23.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "52",
+      "source": "25.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 12
+      }
+    },
+    {
+      "key": "51",
+      "source": "25.0",
+      "target": "23.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "50",
+      "source": "25.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 13
+      }
+    },
+    {
+      "key": "54",
+      "source": "26.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 31
+      }
+    },
+    {
+      "key": "55",
+      "source": "26.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "53",
+      "source": "26.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "56",
+      "source": "26.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "57",
+      "source": "27.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 17
+      }
+    },
+    {
+      "key": "58",
+      "source": "27.0",
+      "target": "23.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "60",
+      "source": "27.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "59",
+      "source": "27.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "61",
+      "source": "27.0",
+      "target": "26.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "62",
+      "source": "28.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 8
+      }
+    },
+    {
+      "key": "63",
+      "source": "28.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "66",
+      "source": "29.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "64",
+      "source": "29.0",
+      "target": "23.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "65",
+      "source": "29.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "67",
+      "source": "30.0",
+      "target": "23.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "69",
+      "source": "31.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "70",
+      "source": "31.0",
+      "target": "23.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "71",
+      "source": "31.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "68",
+      "source": "31.0",
+      "target": "30.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "72",
+      "source": "32.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "73",
+      "source": "33.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "74",
+      "source": "33.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "75",
+      "source": "34.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "76",
+      "source": "34.0",
+      "target": "29.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "77",
+      "source": "35.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "79",
+      "source": "35.0",
+      "target": "29.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "78",
+      "source": "35.0",
+      "target": "34.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "82",
+      "source": "36.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "83",
+      "source": "36.0",
+      "target": "29.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "80",
+      "source": "36.0",
+      "target": "34.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "81",
+      "source": "36.0",
+      "target": "35.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "87",
+      "source": "37.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "88",
+      "source": "37.0",
+      "target": "29.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "84",
+      "source": "37.0",
+      "target": "34.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "85",
+      "source": "37.0",
+      "target": "35.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "86",
+      "source": "37.0",
+      "target": "36.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "93",
+      "source": "38.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "94",
+      "source": "38.0",
+      "target": "29.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "89",
+      "source": "38.0",
+      "target": "34.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "90",
+      "source": "38.0",
+      "target": "35.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "91",
+      "source": "38.0",
+      "target": "36.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "92",
+      "source": "38.0",
+      "target": "37.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "95",
+      "source": "39.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "96",
+      "source": "40.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "97",
+      "source": "41.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "98",
+      "source": "41.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "101",
+      "source": "42.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "100",
+      "source": "42.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "99",
+      "source": "42.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "102",
+      "source": "43.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "103",
+      "source": "43.0",
+      "target": "26.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "104",
+      "source": "43.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "106",
+      "source": "44.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "105",
+      "source": "44.0",
+      "target": "28.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "107",
+      "source": "45.0",
+      "target": "28.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "108",
+      "source": "47.0",
+      "target": "46.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "112",
+      "source": "48.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "110",
+      "source": "48.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "111",
+      "source": "48.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "109",
+      "source": "48.0",
+      "target": "47.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "114",
+      "source": "49.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "113",
+      "source": "49.0",
+      "target": "26.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "116",
+      "source": "50.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "115",
+      "source": "50.0",
+      "target": "49.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "119",
+      "source": "51.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "118",
+      "source": "51.0",
+      "target": "26.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "117",
+      "source": "51.0",
+      "target": "49.0",
+      "attributes": {
+        "size": 9
+      }
+    },
+    {
+      "key": "121",
+      "source": "52.0",
+      "target": "39.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "120",
+      "source": "52.0",
+      "target": "51.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "122",
+      "source": "53.0",
+      "target": "51.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "125",
+      "source": "54.0",
+      "target": "26.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "124",
+      "source": "54.0",
+      "target": "49.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "123",
+      "source": "54.0",
+      "target": "51.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "131",
+      "source": "55.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 19
+      }
+    },
+    {
+      "key": "132",
+      "source": "55.0",
+      "target": "16.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "133",
+      "source": "55.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "130",
+      "source": "55.0",
+      "target": "26.0",
+      "attributes": {
+        "size": 21
+      }
+    },
+    {
+      "key": "128",
+      "source": "55.0",
+      "target": "39.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "134",
+      "source": "55.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "135",
+      "source": "55.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "127",
+      "source": "55.0",
+      "target": "49.0",
+      "attributes": {
+        "size": 12
+      }
+    },
+    {
+      "key": "126",
+      "source": "55.0",
+      "target": "51.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "129",
+      "source": "55.0",
+      "target": "54.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "136",
+      "source": "56.0",
+      "target": "49.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "137",
+      "source": "56.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "139",
+      "source": "57.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "140",
+      "source": "57.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "138",
+      "source": "57.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "145",
+      "source": "58.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "143",
+      "source": "58.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "142",
+      "source": "58.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 7
+      }
+    },
+    {
+      "key": "141",
+      "source": "58.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 7
+      }
+    },
+    {
+      "key": "144",
+      "source": "58.0",
+      "target": "57.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "148",
+      "source": "59.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "147",
+      "source": "59.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "149",
+      "source": "59.0",
+      "target": "57.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "146",
+      "source": "59.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 15
+      }
+    },
+    {
+      "key": "150",
+      "source": "60.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "151",
+      "source": "60.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "152",
+      "source": "60.0",
+      "target": "59.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "153",
+      "source": "61.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "158",
+      "source": "61.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "157",
+      "source": "61.0",
+      "target": "57.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "154",
+      "source": "61.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "156",
+      "source": "61.0",
+      "target": "59.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "155",
+      "source": "61.0",
+      "target": "60.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "164",
+      "source": "62.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "162",
+      "source": "62.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 7
+      }
+    },
+    {
+      "key": "159",
+      "source": "62.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 9
+      }
+    },
+    {
+      "key": "163",
+      "source": "62.0",
+      "target": "57.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "160",
+      "source": "62.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 17
+      }
+    },
+    {
+      "key": "161",
+      "source": "62.0",
+      "target": "59.0",
+      "attributes": {
+        "size": 13
+      }
+    },
+    {
+      "key": "166",
+      "source": "62.0",
+      "target": "60.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "165",
+      "source": "62.0",
+      "target": "61.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "168",
+      "source": "63.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "174",
+      "source": "63.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "170",
+      "source": "63.0",
+      "target": "57.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "171",
+      "source": "63.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "167",
+      "source": "63.0",
+      "target": "59.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "173",
+      "source": "63.0",
+      "target": "60.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "172",
+      "source": "63.0",
+      "target": "61.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "169",
+      "source": "63.0",
+      "target": "62.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "184",
+      "source": "64.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "177",
+      "source": "64.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "175",
+      "source": "64.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "183",
+      "source": "64.0",
+      "target": "57.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "179",
+      "source": "64.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 10
+      }
+    },
+    {
+      "key": "182",
+      "source": "64.0",
+      "target": "59.0",
+      "attributes": {
+        "size": 9
+      }
+    },
+    {
+      "key": "181",
+      "source": "64.0",
+      "target": "60.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "180",
+      "source": "64.0",
+      "target": "61.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "176",
+      "source": "64.0",
+      "target": "62.0",
+      "attributes": {
+        "size": 12
+      }
+    },
+    {
+      "key": "178",
+      "source": "64.0",
+      "target": "63.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "187",
+      "source": "65.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "194",
+      "source": "65.0",
+      "target": "55.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "193",
+      "source": "65.0",
+      "target": "57.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "189",
+      "source": "65.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "192",
+      "source": "65.0",
+      "target": "59.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "191",
+      "source": "65.0",
+      "target": "60.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "190",
+      "source": "65.0",
+      "target": "61.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "188",
+      "source": "65.0",
+      "target": "62.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "185",
+      "source": "65.0",
+      "target": "63.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "186",
+      "source": "65.0",
+      "target": "64.0",
+      "attributes": {
+        "size": 7
+      }
+    },
+    {
+      "key": "200",
+      "source": "66.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "196",
+      "source": "66.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "197",
+      "source": "66.0",
+      "target": "59.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "203",
+      "source": "66.0",
+      "target": "60.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "202",
+      "source": "66.0",
+      "target": "61.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "198",
+      "source": "66.0",
+      "target": "62.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "201",
+      "source": "66.0",
+      "target": "63.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "195",
+      "source": "66.0",
+      "target": "64.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "199",
+      "source": "66.0",
+      "target": "65.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "204",
+      "source": "67.0",
+      "target": "57.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "206",
+      "source": "68.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "207",
+      "source": "68.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "205",
+      "source": "68.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 5
+      }
+    },
+    {
+      "key": "208",
+      "source": "68.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "210",
+      "source": "68.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "209",
+      "source": "68.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "213",
+      "source": "69.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "214",
+      "source": "69.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "211",
+      "source": "69.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "215",
+      "source": "69.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "217",
+      "source": "69.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "216",
+      "source": "69.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "212",
+      "source": "69.0",
+      "target": "68.0",
+      "attributes": {
+        "size": 6
+      }
+    },
+    {
+      "key": "221",
+      "source": "70.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "222",
+      "source": "70.0",
+      "target": "24.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "218",
+      "source": "70.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "223",
+      "source": "70.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "224",
+      "source": "70.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "225",
+      "source": "70.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "220",
+      "source": "70.0",
+      "target": "68.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "219",
+      "source": "70.0",
+      "target": "69.0",
+      "attributes": {
+        "size": 4
+      }
+    },
+    {
+      "key": "230",
+      "source": "71.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "233",
+      "source": "71.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "226",
+      "source": "71.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "232",
+      "source": "71.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "231",
+      "source": "71.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "228",
+      "source": "71.0",
+      "target": "68.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "227",
+      "source": "71.0",
+      "target": "69.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "229",
+      "source": "71.0",
+      "target": "70.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "236",
+      "source": "72.0",
+      "target": "11.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "234",
+      "source": "72.0",
+      "target": "26.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "235",
+      "source": "72.0",
+      "target": "27.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "237",
+      "source": "73.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "238",
+      "source": "74.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 2
+      }
+    },
+    {
+      "key": "239",
+      "source": "74.0",
+      "target": "73.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "242",
+      "source": "75.0",
+      "target": "25.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "244",
+      "source": "75.0",
+      "target": "41.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "243",
+      "source": "75.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "241",
+      "source": "75.0",
+      "target": "68.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "240",
+      "source": "75.0",
+      "target": "69.0",
+      "attributes": {
+        "size": 3
+      }
+    },
+    {
+      "key": "245",
+      "source": "75.0",
+      "target": "70.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "246",
+      "source": "75.0",
+      "target": "71.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "252",
+      "source": "76.0",
+      "target": "48.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "253",
+      "source": "76.0",
+      "target": "58.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "251",
+      "source": "76.0",
+      "target": "62.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "250",
+      "source": "76.0",
+      "target": "63.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "247",
+      "source": "76.0",
+      "target": "64.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "248",
+      "source": "76.0",
+      "target": "65.0",
+      "attributes": {
+        "size": 1
+      }
+    },
+    {
+      "key": "249",
+      "source": "76.0",
+      "target": "66.0",
+      "attributes": {
+        "size": 1
+      }
+    }
+  ]
+}
diff --git a/sg-frontend/src/routes/index.ts b/sg-frontend/src/routes/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..20df61bb402335b1f00d54a281ef177791759e0f
--- /dev/null
+++ b/sg-frontend/src/routes/index.ts
@@ -0,0 +1,152 @@
+/**
+ * This example showcases sigma's reducers, which aim to facilitate dynamically
+ * changing the appearance of nodes and edges, without actually changing the
+ * main graphology data.
+ */
+
+import Sigma from "sigma";
+import { Coordinates, EdgeDisplayData, NodeDisplayData } from "sigma/types";
+import Graph from "graphology";
+
+import data from "./data.json";
+
+// Retrieve some useful DOM elements:
+const container = document.getElementById("sigma-container") as HTMLElement;
+const searchInput = document.getElementById("search-input") as HTMLInputElement;
+const searchSuggestions = document.getElementById("suggestions") as HTMLDataListElement;
+
+// Instantiate sigma:
+const graph = new Graph();
+graph.import(data);
+const renderer = new Sigma(graph, container);
+
+// Type and declare internal state:
+interface State {
+  hoveredNode?: string;
+  searchQuery: string;
+
+  // State derived from query:
+  selectedNode?: string;
+  suggestions?: Set<string>;
+
+  // State derived from hovered node:
+  hoveredNeighbors?: Set<string>;
+}
+const state: State = { searchQuery: "" };
+
+// Feed the datalist autocomplete values:
+searchSuggestions.innerHTML = graph
+  .nodes()
+  .map((node) => `<option value="${graph.getNodeAttribute(node, "label")}"></option>`)
+  .join("\n");
+
+// Actions:
+function setSearchQuery(query: string) {
+  state.searchQuery = query;
+
+  if (searchInput.value !== query) searchInput.value = query;
+
+  if (query) {
+    const lcQuery = query.toLowerCase();
+    const suggestions = graph
+      .nodes()
+      .map((n) => ({ id: n, label: graph.getNodeAttribute(n, "label") as string }))
+      .filter(({ label }) => label.toLowerCase().includes(lcQuery));
+
+    // If we have a single perfect match, them we remove the suggestions, and
+    // we consider the user has selected a node through the datalist
+    // autocomplete:
+    if (suggestions.length === 1 && suggestions[0].label === query) {
+      state.selectedNode = suggestions[0].id;
+      state.suggestions = undefined;
+
+      // Move the camera to center it on the selected node:
+      const nodePosition = renderer.getNodeDisplayData(state.selectedNode) as Coordinates;
+      renderer.getCamera().animate(nodePosition, {
+        duration: 500,
+      });
+    }
+    // Else, we display the suggestions list:
+    else {
+      state.selectedNode = undefined;
+      state.suggestions = new Set(suggestions.map(({ id }) => id));
+    }
+  }
+  // If the query is empty, then we reset the selectedNode / suggestions state:
+  else {
+    state.selectedNode = undefined;
+    state.suggestions = undefined;
+  }
+
+  // Refresh rendering:
+  renderer.refresh();
+}
+function setHoveredNode(node?: string) {
+  if (node) {
+    state.hoveredNode = node;
+    state.hoveredNeighbors = new Set(graph.neighbors(node));
+  } else {
+    state.hoveredNode = undefined;
+    state.hoveredNeighbors = undefined;
+  }
+
+  // Refresh rendering:
+  renderer.refresh();
+}
+
+// Bind search input interactions:
+searchInput.addEventListener("input", () => {
+  setSearchQuery(searchInput.value || "");
+});
+searchInput.addEventListener("blur", () => {
+  setSearchQuery("");
+});
+
+// Bind graph interactions:
+renderer.on("enterNode", ({ node }) => {
+  setHoveredNode(node);
+});
+renderer.on("leaveNode", () => {
+  setHoveredNode(undefined);
+});
+
+// Render nodes accordingly to the internal state:
+// 1. If a node is selected, it is highlighted
+// 2. If there is query, all non-matching nodes are greyed
+// 3. If there is a hovered node, all non-neighbor nodes are greyed
+renderer.setSetting("nodeReducer", (node, data) => {
+  const res: Partial<NodeDisplayData> = { ...data };
+
+  if (state.hoveredNeighbors && !state.hoveredNeighbors.has(node) && state.hoveredNode !== node) {
+    res.label = "";
+    res.color = "#f6f6f6";
+  }
+
+  if (state.selectedNode === node) {
+    res.highlighted = true;
+  } else if (state.suggestions && !state.suggestions.has(node)) {
+    res.label = "";
+    res.color = "#f6f6f6";
+  }
+
+  return res;
+});
+
+// Render edges accordingly to the internal state:
+// 1. If a node is hovered, the edge is hidden if it is not connected to the
+//    node
+// 2. If there is a query, the edge is only visible if it connects two
+//    suggestions
+renderer.setSetting("edgeReducer", (edge, data) => {
+  const res: Partial<EdgeDisplayData> = { ...data };
+
+  if (state.hoveredNode && !graph.hasExtremity(edge, state.hoveredNode)) {
+    res.hidden = true;
+  }
+
+  if (state.suggestions && (!state.suggestions.has(graph.source(edge)) || !state.suggestions.has(graph.target(edge)))) {
+    res.hidden = true;
+  }
+
+  return res;
+});
diff --git a/sg-frontend/src/routes/thumbnail.png b/sg-frontend/src/routes/thumbnail.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f8a1960afc749f836b24cb36893dcf4916ae72d
Binary files /dev/null and b/sg-frontend/src/routes/thumbnail.png differ
diff --git a/sg-frontend/tsconfig.json b/sg-frontend/tsconfig.json
index d38303196ae8dc159f2a1ba5caa554ebd2df6ad5..6ac0459e3a3c63ebc831712d5dc393b50489d045 100644
--- a/sg-frontend/tsconfig.json
+++ b/sg-frontend/tsconfig.json
@@ -18,4 +18,4 @@
   },
   "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],
   "references": [{ "path": "./tsconfig.node.json" }]
-}
+}
\ No newline at end of file
diff --git a/sg-frontend/vite.config.ts b/sg-frontend/vite.config.ts
index cff47d77fe4739b726bbd0fd1520891b4447805b..0ece1a173327e1bdb26a76f9f3d8fb21179bdcf7 100644
--- a/sg-frontend/vite.config.ts
+++ b/sg-frontend/vite.config.ts
@@ -1,6 +1,7 @@
-import { defineConfig } from "vite";
-import { svelte } from "@sveltejs/vite-plugin-svelte";
+import { defineConfig } from 'vite'
+import { svelte } from '@sveltejs/vite-plugin-svelte'
 
+// https://vitejs.dev/config/
 export default defineConfig({
-	plugins: [svelte()],
-});
+  plugins: [svelte()]
+})
\ No newline at end of file