website: initial version
Signed-off-by: Steffen Vogel <post@steffenvogel.de>
32
README.md
@@ -1,5 +1,5 @@
|
|||||||
<p align="center" >
|
<p align="center" >
|
||||||
<img style="width: 40%; margin: 4em 0" src="docs/images/cunicu_logo.svg" alt="cunīcu logo" />
|
<img style="width: 40%; margin: 4em 0" src="website/static/img/cunicu_logo.svg" alt="cunīcu logo" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
[](https://github.com/stv0g/cunicu/actions)
|
[](https://github.com/stv0g/cunicu/actions)
|
||||||
@@ -16,39 +16,15 @@
|
|||||||
|
|
||||||
[cunīcu][cunicu] is a user-space daemon managing [WireGuard®][wireguard] interfaces to establish peer-to-peer connections in harsh network environments.
|
[cunīcu][cunicu] is a user-space daemon managing [WireGuard®][wireguard] interfaces to establish peer-to-peer connections in harsh network environments.
|
||||||
|
|
||||||
It relies on the [awesome](https://github.com/pion/awesome-pion) [pion/ice][pion-ice] package for the interactive connectivity establishment as well as bundles the Go user-space implementation of WireGuard in a single binary for environments in which WireGuard kernel support has not landed yet.
|
|
||||||
|
|
||||||
## Getting started
|
|
||||||
|
|
||||||
To use cunīcu follow these steps on each host:
|
|
||||||
|
|
||||||
1. [Install cunīcu](docs/Installation.md)
|
|
||||||
2. Configure your WireGuard interfaces using `wg`, `wg-quick` or [NetworkManager](https://blogs.gnome.org/thaller/2019/03/15/wireguard-in-networkmanager/)
|
|
||||||
3. Start the cunīcu daemon by running: `sudo cunicu daemon`
|
|
||||||
|
|
||||||
Make sure that in step 2. you have created WireGuard keys and exchanged them by hand between the hosts.
|
|
||||||
cunīcu does not (yet) discover available peers. You are responsible to add the peers to the WireGuard interface by yourself.
|
|
||||||
|
|
||||||
After the cunīcu daemons have been started, they will attempt to discover valid endpoint addresses using the ICE protocol (e.g. contacting STUN servers).
|
|
||||||
These _ICE candidates_ are then exchanged via the signaling server and cunīcu will update the endpoint addresses of the WireGuard peers accordingly.
|
|
||||||
Once this has been done, the cunīcu logs should show a line `state=connected`.
|
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
Documentation of cunīcu can be found in the [`docs/`](./docs) directory.
|
cunīcu's documentation can be found here: [cunicu.li/docs]](https://cunicu.li/docs).
|
||||||
|
|
||||||
## Authors
|
## Authors
|
||||||
|
|
||||||
- Steffen Vogel ([@stv0g](https://github.com/stv0g), Institute for Automation of Complex Power Systems, RWTH Aachen University)
|
- Steffen Vogel ([@stv0g](https://github.com/stv0g), Institute for Automation of Complex Power Systems, RWTH Aachen University)
|
||||||
|
|
||||||
## Join us
|
|
||||||
|
|
||||||
Please feel free to [join our Slack channel](https://join.slack.com/t/gophers/shared_invite/zt-1447h1rgj-s9W5BcyRzBxUwNAZJUKmaQ) `#cunicu` in the [Gophers workspace](https://gophers.slack.com/) and say 👋.
|
|
||||||
|
|
||||||
## Name
|
|
||||||
|
|
||||||
The project name _cunīcu_ [kʊˈniːkʊ] is derived from the [latin noun cunīculus](https://en.wiktionary.org/wiki/cuniculus#Latin) which means rabbit, a rabbit burrow or underground tunnel. We have choosen it as a name for this project as _cunīcu_ builds tunnels between otherwise hard to reach network locations.
|
|
||||||
It has been changed from the former name _wice_ in order to broaden the scope of the project and avoid any potential trademark violations.
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
@@ -58,7 +34,7 @@ Copyright 2022 Institute for Automation of Complex Power Systems, RWTH Aachen Un
|
|||||||
|
|
||||||
## Funding acknowledgement
|
## Funding acknowledgement
|
||||||
|
|
||||||
<img alt="European Flag" src="./docs/images/flag_of_europe.svg" align="left" style="height: 4em; margin-right: 10px"/> The development of cunīcu has been supported by the [ERIGrid 2.0][erigrid] project of the H2020 Programme under [Grant Agreement No. 870620](https://cordis.europa.eu/project/id/870620)
|
<img alt="European Flag" src="website/static/img/flag_of_europe.svg" align="left" style="height: 4em; margin-right: 10px"/> The development of cunīcu has been supported by the [ERIGrid 2.0][erigrid] project of the H2020 Programme under [Grant Agreement No. 870620](https://cordis.europa.eu/project/id/870620)
|
||||||
|
|
||||||
[wireguard]: https://wireguard.com
|
[wireguard]: https://wireguard.com
|
||||||
|
|
||||||
@@ -70,4 +46,4 @@ Copyright 2022 Institute for Automation of Complex Power Systems, RWTH Aachen Un
|
|||||||
|
|
||||||
## Trademark
|
## Trademark
|
||||||
|
|
||||||
"WireGuard" and the "WireGuard" logo are [registered trademarks](https://www.wireguard.com/trademark-policy/) of Jason A. Donenfeld.
|
""WireGuard" and the "WireGuard" logo are [registered trademarks](https://www.wireguard.com/trademark-policy/) of Jason A. Donenfeld.
|
||||||
|
@@ -1,9 +1,14 @@
|
|||||||
|
---
|
||||||
|
title: Comparison
|
||||||
|
sidebar_position: 99
|
||||||
|
---
|
||||||
|
|
||||||
# Comparison with other P2P VPN solutions
|
# Comparison with other P2P VPN solutions
|
||||||
|
|
||||||
There exist a suite of other peer-to-peer VPN solutions comparable to cunīcu:
|
There exist a suite of other peer-to-peer VPN solutions comparable to cunīcu:
|
||||||
|
|
||||||
| Name | Commercial |
|
| Name | Commercial |
|
||||||
| :-- | |
|
| :-- | :-- |
|
||||||
| [Tinc-VPN](https://www.tinc-vpn.org/) | |
|
| [Tinc-VPN](https://www.tinc-vpn.org/) | |
|
||||||
| [weron](https://github.com/pojntfx/weron) | |
|
| [weron](https://github.com/pojntfx/weron) | |
|
||||||
| [Tailscale](https://tailscale.com/) | |
|
| [Tailscale](https://tailscale.com/) | |
|
||||||
@@ -11,4 +16,4 @@ There exist a suite of other peer-to-peer VPN solutions comparable to cunīcu:
|
|||||||
| [netbird](https://netbird.io/) (formerly Wiretrustee) | |
|
| [netbird](https://netbird.io/) (formerly Wiretrustee) | |
|
||||||
| [wg-dynamic](https://github.com/WireGuard/wg-dynamic/blob/master/docs/idea.md)
|
| [wg-dynamic](https://github.com/WireGuard/wg-dynamic/blob/master/docs/idea.md)
|
||||||
| [Nebula](https://github.com/slackhq/nebula) | |
|
| [Nebula](https://github.com/slackhq/nebula) | |
|
||||||
| [Netmaker](https://www.netmaker.org/) | |
|
| [Netmaker](https://www.netmaker.org/) | |
|
||||||
|
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 7
|
||||||
|
---
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
|
|
||||||
This page describes the ways of configuring the cunicu daemon (`cunicu daemon`).
|
This page describes the ways of configuring the cunicu daemon (`cunicu daemon`).
|
||||||
@@ -181,4 +185,4 @@ This feature can be combined with the DNS auto-configuration method by providing
|
|||||||
example.com. 3600 IN TXT "cunicu-config=https://example.com/cunicu.yaml"
|
example.com. 3600 IN TXT "cunicu-config=https://example.com/cunicu.yaml"
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note:** Remote configuration files must be fetched via HTTPS if they are not hosted locally and required a trusted server certificate.
|
**Note:** Remote configuration files must be fetched via HTTPS if they are not hosted locally and required a trusted server certificate.
|
||||||
|
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 20
|
||||||
|
---
|
||||||
|
|
||||||
# Design
|
# Design
|
||||||
|
|
||||||
## Objectives
|
## Objectives
|
||||||
@@ -50,7 +54,7 @@
|
|||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Related RFCs
|
## Related RFCs
|
||||||
|
|
||||||
|
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 5
|
||||||
|
---
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
This guide shows how to install cunīcu.
|
This guide shows how to install cunīcu.
|
||||||
@@ -27,12 +31,12 @@ You can fetch that script, and then execute it locally.
|
|||||||
It's well documented so that you can read through it and understand what it is doing before you run it.
|
It's well documented so that you can read through it and understand what it is doing before you run it.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL -o get_cunicu.sh https://get.cunicu.li
|
curl -fsSL -o get_cunicu.sh https://raw.githubusercontent.com/stv0g/cunicu/master/scripts/get_cunicu.sh
|
||||||
chmod 700 get_cunicu.sh
|
chmod 700 get_cunicu.sh
|
||||||
./get_cunicu.sh
|
./get_cunicu.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Yes, you can `curl -fsSL https://get.cunicu.li | bash` if you want to live on the edge.
|
Yes, you can `curl https://raw.githubusercontent.com/stv0g/cunicu/master/scripts/get_cunicu.sh | bash` if you want to live on the edge.
|
||||||
|
|
||||||
## Through Package Managers
|
## Through Package Managers
|
||||||
|
|
||||||
@@ -42,7 +46,7 @@ cunīcu provides the ability to install via operating system package managers.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install apt-transport-https --yes
|
sudo apt-get install apt-transport-https --yes
|
||||||
echo "deb [arch=$(dpkg --print-architecture) trusted=yes] https://packages.cunicu.li/apt/ /" | sudo tee /etc/apt/sources.list.d/cunicu.list
|
echo "deb [arch=$(dpkg --print-architecture) trusted=yes] https://packages.riasc.eu/apt/ /" | sudo tee /etc/apt/sources.list.d/riasc.list
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install cunicu
|
sudo apt-get install cunicu
|
||||||
```
|
```
|
||||||
@@ -50,10 +54,10 @@ sudo apt-get install cunicu
|
|||||||
### From Yum (Redhat, Fedora, RockyLinux)
|
### From Yum (Redhat, Fedora, RockyLinux)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo cat > /etc/yum.repos.d/cunicu.repo <<EOF
|
sudo cat > /etc/yum.repos.d/riasc.repo <<EOF
|
||||||
[cunicu]
|
[riasc]
|
||||||
name=cunicu
|
name=RIasC
|
||||||
baseurl=https://packages.cunicu/yum/
|
baseurl=https://packages.riasc.eu/yum/
|
||||||
enabled=1
|
enabled=1
|
||||||
gpgcheck=0
|
gpgcheck=0
|
||||||
EOF
|
EOF
|
||||||
@@ -78,4 +82,4 @@ It will then compile cunīcu and place it in `${GOPATH}/bin/cunicu`.
|
|||||||
In most cases, installation is as simple as getting a pre-built cunīcu binary.
|
In most cases, installation is as simple as getting a pre-built cunīcu binary.
|
||||||
This document covers additional cases for those who want to do more sophisticated things with cunīcu.
|
This document covers additional cases for those who want to do more sophisticated things with cunīcu.
|
||||||
|
|
||||||
Once you have cunīcu successfully installed, you can move on to [using cunīcu](Usage.md) to setup your mesh VPN network.
|
Once you have cunīcu successfully installed, you can move on to [using cunīcu](./usage/index.md) to setup your mesh VPN network.
|
||||||
|
19
docs/comparison.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
title: Comparison
|
||||||
|
sidebar_position: 99
|
||||||
|
---
|
||||||
|
|
||||||
|
# Comparison with other P2P VPN solutions
|
||||||
|
|
||||||
|
There exist a suite of other peer-to-peer VPN solutions comparable to cunīcu:
|
||||||
|
|
||||||
|
| Name | Commercial |
|
||||||
|
| :-- | :-- |
|
||||||
|
| [Tinc-VPN](https://www.tinc-vpn.org/) | |
|
||||||
|
| [weron](https://github.com/pojntfx/weron) | |
|
||||||
|
| [Tailscale](https://tailscale.com/) | |
|
||||||
|
| [Zerotier](https://www.zerotier.com/) | |
|
||||||
|
| [netbird](https://netbird.io/) (formerly Wiretrustee) | |
|
||||||
|
| [wg-dynamic](https://github.com/WireGuard/wg-dynamic/blob/master/docs/idea.md)
|
||||||
|
| [Nebula](https://github.com/slackhq/nebula) | |
|
||||||
|
| [Netmaker](https://www.netmaker.org/) | |
|
188
docs/configuration.md
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 7
|
||||||
|
---
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
This page describes the ways of configuring the cunicu daemon (`cunicu daemon`).
|
||||||
|
|
||||||
|
## Command Line Flags
|
||||||
|
|
||||||
|
The `cunicu daemon` can almost fully be configured by passing command line arguments.
|
||||||
|
A full overview is available in its [manpage](./usage/md/cunicu_daemon.md).
|
||||||
|
|
||||||
|
## Configuration File
|
||||||
|
|
||||||
|
Alternatively a configuration file can be used for a persistent configuration:
|
||||||
|
|
||||||
|
```yaml title="cunicu.yaml"
|
||||||
|
watch_interval: 1s
|
||||||
|
|
||||||
|
backends:
|
||||||
|
- grpc://localhost:8080?insecure=true&skip_verify=true
|
||||||
|
- k8s:///path/to/your/kubeconfig.yaml?namespace=default
|
||||||
|
|
||||||
|
# WireGuard settings
|
||||||
|
wireguard:
|
||||||
|
# Create WireGuard interfaces using bundled wireguard-go Userspace implementation
|
||||||
|
# This will be the default if there is no WireGuard kernel module present.
|
||||||
|
userspace: false
|
||||||
|
|
||||||
|
# Ignore WireGuard interface which do not match this regular expression
|
||||||
|
interface_filter: .*
|
||||||
|
|
||||||
|
# A list of WireGuard interfaces which should be configured
|
||||||
|
interfaces:
|
||||||
|
- wg-vpn
|
||||||
|
|
||||||
|
# Port range for ListenPort setting of newly created WireGuard interfaces
|
||||||
|
# cunīcu will select the first available port in this range.
|
||||||
|
port:
|
||||||
|
min: 52820
|
||||||
|
max: 65535
|
||||||
|
|
||||||
|
# Control socket settings
|
||||||
|
socket:
|
||||||
|
path: /var/run/cunicu.sock
|
||||||
|
|
||||||
|
# Start of cunīcu daemon will block until its unblocked via the control socket
|
||||||
|
# Mostly useful for testing automation
|
||||||
|
wait: false
|
||||||
|
|
||||||
|
# Synchronize WireGuard interface configurations with wg(8) config-files.
|
||||||
|
config_sync:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Directory where Wireguard configuration files are located.
|
||||||
|
# We expect the same format as used by wg(8) and wg-quick(8).
|
||||||
|
# Filenames must match the interface name with a '.conf' suffix.
|
||||||
|
path: /etc/wireguard
|
||||||
|
|
||||||
|
# Watch the configuration files for changes and apply them accordingly.
|
||||||
|
watch: false
|
||||||
|
|
||||||
|
# Synchronize WireGuard AllowedIPs with Kernel routing table
|
||||||
|
route_sync:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
table: main
|
||||||
|
|
||||||
|
# Discovery of other WireGuard peers
|
||||||
|
peer_disc:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# A list of WireGuard public keys which are accepted peers
|
||||||
|
whitelist:
|
||||||
|
- coNsGPwVPdpahc8U+dbbWGzTAdCd6+1BvPIYg10wDCI=
|
||||||
|
- AOZzBaNsoV7P8vo0D5UmuIJUQ7AjMbHbGt2EA8eAuEc=
|
||||||
|
|
||||||
|
# A passphrase shared among all peers of the same community
|
||||||
|
community: "some-common-password"
|
||||||
|
|
||||||
|
# Discovery of WireGuard endpoint addressesendpoint_disc:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# Interactive Connectivity Establishment parameters
|
||||||
|
ice:
|
||||||
|
# A list of STUN and TURN servers used by ICE
|
||||||
|
urls:
|
||||||
|
- stun:stun.l.google.com:19302
|
||||||
|
|
||||||
|
# Credentials for STUN/TURN servers configured above
|
||||||
|
username: ""
|
||||||
|
password: ""
|
||||||
|
|
||||||
|
# Allow connections to STUNS/TURNS servers for which
|
||||||
|
# we cant validate their TLS certificates
|
||||||
|
insecure_skip_verify: false
|
||||||
|
|
||||||
|
# Limit available network and candidate types
|
||||||
|
network_types: [udp4, udp6, tcp4, tcp6]
|
||||||
|
candidate_types: [host, srflx, prflx ,relay]
|
||||||
|
|
||||||
|
# Regular expression whitelist of interfaces which are used to gather ICE candidates.
|
||||||
|
interface_filter: .*
|
||||||
|
|
||||||
|
# Lite agents do not perform connectivity check and only provide host candidates.
|
||||||
|
lite: false
|
||||||
|
|
||||||
|
# Attempt to find candidates via mDNS discovery
|
||||||
|
mdns: false
|
||||||
|
|
||||||
|
# Sets the max amount of binding requests the agent will send over a candidate pair for validation or nomination.
|
||||||
|
# If after the the configured number, the candidate is yet to answer a binding request or a nomination we set the pair as failed.
|
||||||
|
max_binding_requests: 7
|
||||||
|
|
||||||
|
# SetNAT1To1IPs sets a list of external IP addresses of 1:1 (D)NAT and a candidate type for which the external IP address is used.
|
||||||
|
# This is useful when you are host a server using Pion on an AWS EC2 instance which has a private address, behind a 1:1 DNAT with a public IP (e.g. Elastic IP).
|
||||||
|
# In this case, you can give the public IP address so that Pion will use the public IP address in its candidate instead of the private IP address.
|
||||||
|
nat_1to1_ips: []
|
||||||
|
|
||||||
|
# Limit the port range used by ICE
|
||||||
|
port:
|
||||||
|
min: 49152
|
||||||
|
max: 65535
|
||||||
|
|
||||||
|
# The check interval controls how often our task loop runs when in the connecting state.
|
||||||
|
check_interval: 200ms
|
||||||
|
|
||||||
|
# If the duration is 0, the ICE Agent will never go to disconnected
|
||||||
|
disconnected_timeout: 5s
|
||||||
|
|
||||||
|
# If the duration is 0, we will never go to failed.
|
||||||
|
failed_timeout: 5s
|
||||||
|
restart_timeout: 5s
|
||||||
|
|
||||||
|
# Determines how often should we send ICE keepalives (should be less then connection timeout above).
|
||||||
|
# A keepalive interval of 0 means we never send keepalive packets
|
||||||
|
keepalive_interval: 2s
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
All the settings from the configuration file can also be passed via environment variables by following the following rules:
|
||||||
|
|
||||||
|
- Convert the setting name to uppercase
|
||||||
|
- Prefixing the setting name with `CUNICU_`
|
||||||
|
- Nested settings are separated by underscores
|
||||||
|
|
||||||
|
**Example:** The setting `endpoint_disc.ice.max_binding_requests` can be set by the environment variable `CUNICU_ENDPOINT_DISC_ICE_MAX_BINDING_REQUESTS`
|
||||||
|
|
||||||
|
**Note:** Setting lists such as `endpoint_disc.ice.urls` or `backends` can currently not be set via environment variables.
|
||||||
|
|
||||||
|
## DNS Auto-configuration
|
||||||
|
|
||||||
|
cunīcu als supports retrieving parts of the configuration via DNS lookups.
|
||||||
|
|
||||||
|
When `cunicu daemon` is started with a `--domain example.com` parameter it will look for the following DNS records to obtain its configuration.
|
||||||
|
|
||||||
|
STUN and TURN servers used for ICE are retrieved by SVR lookups and other cunīcu settings are retrieved via TXT lookups:
|
||||||
|
|
||||||
|
```text
|
||||||
|
_stun._udp.example.com. 3600 IN SRV 10 0 3478 stun.example.com.
|
||||||
|
_stuns._tcp.example.com. 3600 IN SRV 10 0 3478 stun.example.com.
|
||||||
|
_turn._udp.example.com. 3600 IN SRV 10 0 3478 turn.example.com.
|
||||||
|
_turn._tcp.example.com. 3600 IN SRV 10 0 3478 turn.example.com.
|
||||||
|
_turns._tcp.example.com. 3600 IN SRV 10 0 5349 turn.example.com.
|
||||||
|
|
||||||
|
example.com. 3600 IN TXT "cunicu-backend=p2p"
|
||||||
|
example.com. 3600 IN TXT "cunicu-peer-disc-community=my-community-password"
|
||||||
|
example.com. 3600 IN TXT "cunicu-endpoint-disc-ice-username=user1"
|
||||||
|
example.com. 3600 IN TXT "cunicu-endpoint-disc-ice-password=pass1"
|
||||||
|
example.com. 3600 IN TXT "cunicu-config=https://example.com/cunicu.yaml"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** The `cunicu-backend` and `cunicu-config` TXT records can be provided multiple times. Others not.
|
||||||
|
|
||||||
|
## Remote Configuration File
|
||||||
|
|
||||||
|
When `cunicu daemon` can be started with `--config` options pointing to HTTPS URIs.
|
||||||
|
cunīcu will download all configuration files in the order they are specified on the command line and merge them subsequently.
|
||||||
|
|
||||||
|
This feature can be combined with the DNS auto-configuration method by providing a TXT record pointing to the configuration file:
|
||||||
|
|
||||||
|
```text
|
||||||
|
example.com. 3600 IN TXT "cunicu-config=https://example.com/cunicu.yaml"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** Remote configuration files must be fetched via HTTPS if they are not hosted locally and required a trusted server certificate.
|
104
docs/design.md
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 20
|
||||||
|
---
|
||||||
|
|
||||||
|
# Design
|
||||||
|
|
||||||
|
## Objectives
|
||||||
|
|
||||||
|
- Encrypt all signaling messages
|
||||||
|
|
||||||
|
- Plug-able signaling backends:
|
||||||
|
- GRPC
|
||||||
|
- Kubernetes API-server
|
||||||
|
- WebSocket
|
||||||
|
|
||||||
|
- Support [Trickle ICE][rfc8838]
|
||||||
|
|
||||||
|
- Support [ICE restart][rfc8445-ice-restart]
|
||||||
|
|
||||||
|
- Support [ICE-TCP][rfc6544]
|
||||||
|
|
||||||
|
- Encrypt exchanged ICE offers with WireGuard keys
|
||||||
|
|
||||||
|
- Seamless switch between ICE candidates and relays
|
||||||
|
|
||||||
|
- Zero configuration
|
||||||
|
- Alleviate users of exchanging endpoint IPs & ports
|
||||||
|
|
||||||
|
- Enables direct communication of WireGuard peers behind NAT / UDP-blocking firewalls
|
||||||
|
|
||||||
|
- Single-binary, zero dependency installation
|
||||||
|
- Bundled ICE agent & [WireGuard user-space daemon][wireguard-go]
|
||||||
|
- Portability
|
||||||
|
|
||||||
|
- Support for user and kernel-space WireGuard implementations
|
||||||
|
|
||||||
|
- Zero performance impact
|
||||||
|
- Kernel-side filtering / redirection of WireGuard traffic
|
||||||
|
- Fallback to user-space proxying only if no Kernel features are available
|
||||||
|
|
||||||
|
- Minimized attack surface
|
||||||
|
- Drop privileges after initial configuration
|
||||||
|
|
||||||
|
- Compatible with existing WireGuard configuration utilities like:
|
||||||
|
- [NetworkManager][network-manager]
|
||||||
|
- [systemd-networkd][systemd-networkd]
|
||||||
|
- [wg-quick][wg-quick]
|
||||||
|
- [Kilo][kilo]
|
||||||
|
- [drago][drago]
|
||||||
|
|
||||||
|
- Monitoring for new WireGuard interfaces and peers
|
||||||
|
- Inotify for new UAPI sockets in /var/run/wireguard
|
||||||
|
- Netlink subscription for link updates (patch is pending)
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Related RFCs
|
||||||
|
|
||||||
|
- [RFC6544][rfc6544] TCP Candidates with Interactive Connectivity Establishment (ICE)
|
||||||
|
- [RFC8838][rfc8838] Trickle ICE: Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (ICE) Protocol
|
||||||
|
- [RFC8445][rfc8445] Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal
|
||||||
|
- [RFC8863][rfc8863] Interactive Connectivity Establishment Patiently Awaiting Connectivity (ICE PAC)
|
||||||
|
- [RFC8839][rfc8839] Session Description Protocol (SDP) Offer/Answer Procedures for Interactive Connectivity Establishment (ICE)
|
||||||
|
- [RFC6062][rfc6062] Traversal Using Relays around NAT (TURN) Extensions for TCP Allocations
|
||||||
|
- [RFC8656][rfc8656] Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)
|
||||||
|
- [RFC8489][rfc8489] Session Traversal Utilities for NAT (STUN)
|
||||||
|
- [RFC8866][rfc8866] SDP: Session Description Protocol
|
||||||
|
- [RFC3264][rfc3264] An Offer/Answer Model with the Session Description Protocol (SDP)
|
||||||
|
|
||||||
|
[wireguard-go]: https://git.zx2c4.com/wireguard-go
|
||||||
|
|
||||||
|
[kilo]: https://kilo.squat.ai
|
||||||
|
|
||||||
|
[drago]: https://seashell.github.io/drago/
|
||||||
|
|
||||||
|
[network-manager]: https://github.com/max-moser/network-manager-wireguard
|
||||||
|
|
||||||
|
[systemd-networkd]: https://www.freedesktop.org/software/systemd/man/systemd.netdev.html#%5BWireGuard%5D%20Section%20Options
|
||||||
|
|
||||||
|
[wg-quick]: https://manpages.debian.org/unstable/wireguard-tools/wg-quick.8.en.html
|
||||||
|
|
||||||
|
[rfc6544]: https://datatracker.ietf.org/doc/html/rfc6544
|
||||||
|
|
||||||
|
[rfc8838]: https://datatracker.ietf.org/doc/html/rfc8838
|
||||||
|
|
||||||
|
[rfc8445-ice-restart]: https://datatracker.ietf.org/doc/html/rfc8445#section-2.4
|
||||||
|
|
||||||
|
[rfc8445]: https://datatracker.ietf.org/doc/html/rfc8445
|
||||||
|
|
||||||
|
[rfc8863]: https://datatracker.ietf.org/doc/html/rfc8863
|
||||||
|
|
||||||
|
[rfc8839]: https://datatracker.ietf.org/doc/html/rfc8839
|
||||||
|
|
||||||
|
[rfc6062]: https://datatracker.ietf.org/doc/html/rfc6062
|
||||||
|
|
||||||
|
[rfc8656]: https://datatracker.ietf.org/doc/html/rfc8656
|
||||||
|
|
||||||
|
[rfc8489]: https://datatracker.ietf.org/doc/html/rfc8489
|
||||||
|
|
||||||
|
[rfc8866]: https://datatracker.ietf.org/doc/html/rfc8866
|
||||||
|
|
||||||
|
[rfc3264]: https://datatracker.ietf.org/doc/html/rfc3264
|
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 199
|
||||||
|
---
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
cunīcu is written in 100% Go and as such we heavily rely on the awesome tooling and packages for Golang:
|
cunīcu is written in 100% Go and as such we heavily rely on the awesome tooling and packages for Golang:
|
@@ -65,7 +65,7 @@ No round-trip through the kernel stack is required.
|
|||||||
|
|
||||||
## Flowchart
|
## Flowchart
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
[nftables]: https://www.netfilter.org/projects/nftables/manpage.html
|
[nftables]: https://www.netfilter.org/projects/nftables/manpage.html
|
||||||
|
|
@@ -53,7 +53,7 @@ The _envelopes_ are containers which encrypt the carried _message_ via asymmetri
|
|||||||
|
|
||||||
Both the _envelope_ and the _message_ are serialized using Protobuf.
|
Both the _envelope_ and the _message_ are serialized using Protobuf.
|
||||||
|
|
||||||
Checkout the [`pkg/pb/signaling.proto`](../pkg/pb/signaling.proto) for details.
|
Checkout the [`pkg/pb/signaling.proto`](https://github.com/stv0g/cunicu/blob/master/proto/signaling.proto) for details.
|
||||||
|
|
||||||
## Backends
|
## Backends
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ cunīcu can support multiple backends for signaling session information such as
|
|||||||
- Kubernetes API server
|
- Kubernetes API server
|
||||||
|
|
||||||
For the use within a Kubernetes cluster also a dedicated backend using the Kubernetes api-server is available.
|
For the use within a Kubernetes cluster also a dedicated backend using the Kubernetes api-server is available.
|
||||||
Checkout the [`Backend`](../pkg/signaling/backend.go) interface for implementing your own backend.
|
Checkout the [`Backend`](https://github.com/stv0g/cunicu/blob/master/pkg/signaling/backend.go) interface for implementing your own backend.
|
||||||
|
|
||||||
### Semantics
|
### Semantics
|
||||||
|
|
||||||
@@ -103,4 +103,4 @@ type Backend interface {
|
|||||||
// Returns the backends type identifier
|
// Returns the backends type identifier
|
||||||
Type() pb.BackendType
|
Type() pb.BackendType
|
||||||
}
|
}
|
||||||
```
|
```
|
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Hooks
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hooks
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
||||||
|
6
docs/features/_category_.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"position": 9,
|
||||||
|
"label": "Features",
|
||||||
|
"collapsible": true,
|
||||||
|
"collapsed": true
|
||||||
|
}
|
11
docs/features/autocfg.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Auto-configuration
|
||||||
|
---
|
||||||
|
|
||||||
|
# Auto-configuration
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
11
docs/features/cfgsync.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Config-file Synchronization
|
||||||
|
---
|
||||||
|
|
||||||
|
# Config-file Synchronization
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
11
docs/features/epdisc.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Endpoint Discovery
|
||||||
|
---
|
||||||
|
|
||||||
|
# Endpoint Discovery
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
11
docs/features/hooks.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Hooks
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hooks
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
11
docs/features/hsync.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Hosts-file Synchronization
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hosts-file Synchronization
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
11
docs/features/pdisc.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Peer Discovery
|
||||||
|
---
|
||||||
|
|
||||||
|
# Peer Discovery
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
11
docs/features/pske.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Pre-shared Key Establishment
|
||||||
|
---
|
||||||
|
|
||||||
|
# Pre-shared Key Establishment
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
11
docs/features/rtsync.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Route Synchronization
|
||||||
|
---
|
||||||
|
|
||||||
|
# Route Synchronization
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
🚧 This page is under construction
|
||||||
|
|
||||||
|
:::
|
85
docs/index.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
---
|
||||||
|
title: Welcome
|
||||||
|
sidebar_position: 1
|
||||||
|
hide_title: true
|
||||||
|
---
|
||||||
|
|
||||||
|
<p align="center" >
|
||||||
|
<img style={{width: '60%'}} src="/img/cunicu_logo.svg" alt="cunīcu logo" />
|
||||||
|
|
||||||
|
[](https://github.com/stv0g/cunicu/actions)
|
||||||
|
[](https://goreportcard.com/report/github.com/stv0g/cunicu)
|
||||||
|
[](https://app.codacy.com/gh/stv0g/cunicu/)
|
||||||
|
[](https://app.codecov.io/gh/stv0g/cunicu)
|
||||||
|
[](https://github.com/stv0g/cunicu/blob/master/LICENSE)
|
||||||
|

|
||||||
|
[](https://pkg.go.dev/github.com/stv0g/cunicu)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- [](https://zenodo.org/badge/latestdoi/413409974) -->
|
||||||
|
|
||||||
|
:::danger
|
||||||
|
|
||||||
|
**🚧 cunīcu is currently still in an Alpha state and not usable yet**
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
[cunīcu][cunicu] is a user-space daemon managing [WireGuard®][wireguard] interfaces to establish peer-to-peer connections in harsh network environments.
|
||||||
|
|
||||||
|
It relies on the [awesome](https://github.com/pion/awesome-pion) [pion/ice][pion-ice] package for the interactive connectivity establishment as well as bundles the Go user-space implementation of WireGuard in a single binary for environments in which WireGuard kernel support has not landed yet.
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
To use cunīcu follow these steps on each host:
|
||||||
|
|
||||||
|
1. [Install cunīcu](./installation.md)
|
||||||
|
2. Configure your WireGuard interfaces using `wg`, `wg-quick` or [NetworkManager](https://blogs.gnome.org/thaller/2019/03/15/wireguard-in-networkmanager/)
|
||||||
|
3. Start the cunīcu daemon by running: `sudo cunicu daemon`
|
||||||
|
|
||||||
|
Make sure that in step 2. you have created WireGuard keys and exchanged them by hand between the hosts.
|
||||||
|
cunīcu does not (yet) discover available peers. You are responsible to add the peers to the WireGuard interface by yourself.
|
||||||
|
|
||||||
|
After the cunīcu daemons have been started, they will attempt to discover valid endpoint addresses using the ICE protocol (e.g. contacting STUN servers).
|
||||||
|
These _ICE candidates_ are then exchanged via the signaling server and cunīcu will update the endpoint addresses of the WireGuard peers accordingly.
|
||||||
|
Once this has been done, the cunīcu logs should show a line `state=connected`.
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
Documentation of cunīcu can be found in the [`docs/`](./docs) directory.
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
- Steffen Vogel ([@stv0g](https://github.com/stv0g), Institute for Automation of Complex Power Systems, RWTH Aachen University)
|
||||||
|
|
||||||
|
## Join us
|
||||||
|
|
||||||
|
Please feel free to [join our Slack channel](https://join.slack.com/t/gophers/shared_invite/zt-1447h1rgj-s9W5BcyRzBxUwNAZJUKmaQ) `#cunicu` in the [Gophers workspace](https://gophers.slack.com/) and say 👋.
|
||||||
|
|
||||||
|
## Name
|
||||||
|
|
||||||
|
The project name _cunīcu_ [kʊˈniːkʊ] is derived from the [latin noun cunīculus](https://en.wiktionary.org/wiki/cuniculus#Latin) which means rabbit, a rabbit burrow or underground tunnel. We have choosen it as a name for this project as _cunīcu_ builds tunnels between otherwise hard to reach network locations.
|
||||||
|
It has been changed from the former name _wice_ in order to broaden the scope of the project and avoid any potential trademark violations.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
cunīcu is licensed under the [Apache 2.0](https://github.com/stv0g/cunicu/blob/master/LICENSE) license.
|
||||||
|
|
||||||
|
Copyright 2022 Institute for Automation of Complex Power Systems, RWTH Aachen University
|
||||||
|
|
||||||
|
## Funding acknowledgement
|
||||||
|
|
||||||
|
<img alt="European Flag" style={{height: '4em', marginRight: '10px'}} src="/img/flag_of_europe.svg" align="left" />
|
||||||
|
|
||||||
|
The development of cunīcu has been supported by the [ERIGrid 2.0][erigrid] project of the H2020 Programme under [Grant Agreement No. 870620](https://cordis.europa.eu/project/id/870620)
|
||||||
|
|
||||||
|
[wireguard]: https://wireguard.com
|
||||||
|
|
||||||
|
[pion-ice]: https://github.com/pion/ice
|
||||||
|
|
||||||
|
[cunicu]: https://github.com/stv0g/cunicu
|
||||||
|
|
||||||
|
[erigrid]: https://erigrid2.eu
|
||||||
|
|
||||||
|
## Trademark
|
||||||
|
|
||||||
|
_WireGuard_ and the _WireGuard_ logo are [registered trademarks](https://www.wireguard.com/trademark-policy/) of Jason A. Donenfeld.
|
85
docs/installation.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 5
|
||||||
|
---
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
|
||||||
|
This guide shows how to install cunīcu.
|
||||||
|
cunīcu can be installed either from source, or from pre-built binary releases.
|
||||||
|
|
||||||
|
## From the Binary Releases
|
||||||
|
|
||||||
|
Every release of cunīcu provides binary releases for a variety of OSes.
|
||||||
|
These binary versions can be manually downloaded and installed.
|
||||||
|
|
||||||
|
## By Hand
|
||||||
|
|
||||||
|
1. [Download your desired version](https://github.com/stv0g/cunicu/releases)
|
||||||
|
2. Unzip it: `gunzip cunicu_0.0.1_linux_amd64.gz`
|
||||||
|
3. Move the unzipped binary to its desired destination: `mv cunicu_0.0.1_linux_amd64 /usr/local/bin/cunicu`
|
||||||
|
4. Make it executable: `chmod +x /usr/local/bin/cunicu`
|
||||||
|
5. From there, you should be able to run the client and add the stable repo: `cunicu help`.
|
||||||
|
|
||||||
|
**Note:** cunīcu automated tests are performed for Linux, macOS and Windows on x86_64, ARMv6, ARMv8 amd ARM64 architectures.
|
||||||
|
Testing of other OSes are the responsibility of the community requesting cunīcu for the OS in question.
|
||||||
|
|
||||||
|
## From Script
|
||||||
|
|
||||||
|
cunīcu also has an installer script that will automatically grab the latest version of cunīcu and install it locally.
|
||||||
|
|
||||||
|
You can fetch that script, and then execute it locally.
|
||||||
|
It's well documented so that you can read through it and understand what it is doing before you run it.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL -o get_cunicu.sh https://raw.githubusercontent.com/stv0g/cunicu/master/scripts/get_cunicu.sh
|
||||||
|
chmod 700 get_cunicu.sh
|
||||||
|
./get_cunicu.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Yes, you can `curl https://raw.githubusercontent.com/stv0g/cunicu/master/scripts/get_cunicu.sh | bash` if you want to live on the edge.
|
||||||
|
|
||||||
|
## Through Package Managers
|
||||||
|
|
||||||
|
cunīcu provides the ability to install via operating system package managers.
|
||||||
|
|
||||||
|
### From Apt (Debian, Ubuntu)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get install apt-transport-https --yes
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) trusted=yes] https://packages.riasc.eu/apt/ /" | sudo tee /etc/apt/sources.list.d/riasc.list
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install cunicu
|
||||||
|
```
|
||||||
|
|
||||||
|
### From Yum (Redhat, Fedora, RockyLinux)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo cat > /etc/yum.repos.d/riasc.repo <<EOF
|
||||||
|
[riasc]
|
||||||
|
name=RIasC
|
||||||
|
baseurl=https://packages.riasc.eu/yum/
|
||||||
|
enabled=1
|
||||||
|
gpgcheck=0
|
||||||
|
EOF
|
||||||
|
sudo yum install cunīcu
|
||||||
|
```
|
||||||
|
|
||||||
|
## From Source (all)
|
||||||
|
|
||||||
|
Building cunīcu is fairly easy and allows you to install the latest unreleased version.
|
||||||
|
|
||||||
|
You must have a working Go environment.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go install github.com/stv0g/cunicu/cmd/cunicu@latest
|
||||||
|
```
|
||||||
|
|
||||||
|
If required, it will fetch the dependencies and cache them, and validate configuration.
|
||||||
|
It will then compile cunīcu and place it in `${GOPATH}/bin/cunicu`.
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
In most cases, installation is as simple as getting a pre-built cunīcu binary.
|
||||||
|
This document covers additional cases for those who want to do more sophisticated things with cunīcu.
|
||||||
|
|
||||||
|
Once you have cunīcu successfully installed, you can move on to [using cunīcu](./usage/index.md) to setup your mesh VPN network.
|
6
docs/usage/_category_.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"position": 10,
|
||||||
|
"label": "Usage",
|
||||||
|
"collapsible": true,
|
||||||
|
"collapsed": true
|
||||||
|
}
|
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
For a detailed documentation of the `cunicu` command-line tool please have a look at the following page:
|
For a detailed documentation of the `cunicu` command-line tool please have a look at the following page:
|
||||||
|
|
||||||
- [`cunicu`](./usage/md/cunicu.md)
|
- [`cunicu`](./md/cunicu.md)
|
||||||
|
|
||||||
## Daemon
|
## Daemon
|
||||||
|
|
6
docs/usage/md/_category_.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"position": 3.5,
|
||||||
|
"label": "Man Pages",
|
||||||
|
"collapsible": true,
|
||||||
|
"collapsed": true
|
||||||
|
}
|
@@ -23,6 +23,6 @@ WireGuard commands
|
|||||||
* [cunicu wg genkey](cunicu_wg_genkey.md) - Generates a random private key in base64 and prints it to standard output.
|
* [cunicu wg genkey](cunicu_wg_genkey.md) - Generates a random private key in base64 and prints it to standard output.
|
||||||
* [cunicu wg genpsk](cunicu_wg_genpsk.md) - Generates a random preshared key in base64 and prints it to standard output.
|
* [cunicu wg genpsk](cunicu_wg_genpsk.md) - Generates a random preshared key in base64 and prints it to standard output.
|
||||||
* [cunicu wg pubkey](cunicu_wg_pubkey.md) - Calculates a public key and prints it in base64 to standard output.
|
* [cunicu wg pubkey](cunicu_wg_pubkey.md) - Calculates a public key and prints it in base64 to standard output.
|
||||||
* [cunicu wg show](cunicu_wg_show.md) - Shows current WireGuard configuration and runtime information of specified <interface>.
|
* [cunicu wg show](cunicu_wg_show.md) - Shows current WireGuard configuration and runtime information of specified \<interface\>.
|
||||||
* [cunicu wg showconf](cunicu_wg_showconf.md) - Shows the current configuration and device information
|
* [cunicu wg showconf](cunicu_wg_showconf.md) - Shows the current configuration and device information
|
||||||
|
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
## cunicu wg show
|
## cunicu wg show
|
||||||
|
|
||||||
Shows current WireGuard configuration and runtime information of specified <interface>.
|
Shows current WireGuard configuration and runtime information of specified \<interface\>.
|
||||||
|
|
||||||
### Synopsis
|
### Synopsis
|
||||||
|
|
||||||
Shows current WireGuard configuration and runtime information of specified <interface>.
|
Shows current WireGuard configuration and runtime information of specified \<interface\>.
|
||||||
|
|
||||||
If no <interface> is specified, <interface> defaults to all.
|
If no \<interface\> is specified, \<interface\> defaults to all.
|
||||||
|
|
||||||
If 'interfaces' is specified, prints a list of all WireGuard interaces, one per line, and quits.
|
If 'interfaces' is specified, prints a list of all WireGuard interaces, one per line, and quits.
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ If 'dump' is specified, then several lines are printed; the first contains in or
|
|||||||
Subsequent lines are printed for each peer and contain in order separated by tab: public-key, preshared-key, endpoint, allowed-ips, latest-handshake, transfer-rx, transfer-tx, persistent-keepalive.
|
Subsequent lines are printed for each peer and contain in order separated by tab: public-key, preshared-key, endpoint, allowed-ips, latest-handshake, transfer-rx, transfer-tx, persistent-keepalive.
|
||||||
|
|
||||||
```
|
```
|
||||||
cunicu wg show [flags] { <interface> | all | interfaces } [public-key | private-key | listen-port | fwmark | peers | preshared-keys | endpoints | allowed-ips | latest-handshakes | transfer | persistent-keepalive | dump]
|
cunicu wg show [flags] { \<interface\> | all | interfaces } [public-key | private-key | listen-port | fwmark | peers | preshared-keys | endpoints | allowed-ips | latest-handshakes | transfer | persistent-keepalive | dump]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
@@ -4,10 +4,10 @@ Shows the current configuration and device information
|
|||||||
|
|
||||||
### Synopsis
|
### Synopsis
|
||||||
|
|
||||||
Sets the current configuration of <interface> to the contents of <configuration-filename>, which must be in the wg(8) format.
|
Sets the current configuration of \<interface\> to the contents of \<configuration-filename\>, which must be in the wg(8) format.
|
||||||
|
|
||||||
```
|
```
|
||||||
cunicu wg showconf [flags] <interface>
|
cunicu wg showconf [flags] \<interface\>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
20
website/.gitignore
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Dependencies
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# Production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# Generated files
|
||||||
|
.docusaurus
|
||||||
|
.cache-loader
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
.DS_Store
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
41
website/README.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Website
|
||||||
|
|
||||||
|
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
$ yarn
|
||||||
|
```
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
|
||||||
|
```
|
||||||
|
$ yarn start
|
||||||
|
```
|
||||||
|
|
||||||
|
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
```
|
||||||
|
$ yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
||||||
|
|
||||||
|
### Deployment
|
||||||
|
|
||||||
|
Using SSH:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ USE_SSH=true yarn deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
Not using SSH:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ GIT_USER=<Your GitHub username> yarn deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
3
website/babel.config.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
module.exports = {
|
||||||
|
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
||||||
|
};
|
BIN
website/blog/2022-09-08-welcome/docusaurus-plushie-banner.jpeg
Normal file
After Width: | Height: | Size: 94 KiB |
10
website/blog/2022-09-08-welcome/index.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
slug: welcome
|
||||||
|
title: Welcome
|
||||||
|
authors:
|
||||||
|
- stv0g
|
||||||
|
tags:
|
||||||
|
- hello
|
||||||
|
---
|
||||||
|
|
||||||
|
Hello, welcome to the cunīcu blog. We will start posting some updates here soon.
|
5
website/blog/authors.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
stv0g:
|
||||||
|
name: Steffen Vogel
|
||||||
|
title: Maintainer of cunīcu
|
||||||
|
url: https://github.com/stv0g
|
||||||
|
image_url: https://github.com/stv0g.png
|
1
website/docs
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../docs
|
181
website/docusaurus.config.js
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
// @ts-check
|
||||||
|
// Note: type annotations allow type checking and IDEs autocompletion
|
||||||
|
|
||||||
|
const lightCodeTheme = require('prism-react-renderer/themes/github');
|
||||||
|
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
|
||||||
|
const math = require('remark-math');
|
||||||
|
const katex = require('rehype-katex');
|
||||||
|
|
||||||
|
async function createConfig() {
|
||||||
|
const mdxMermaid = await import('mdx-mermaid')
|
||||||
|
|
||||||
|
/** @type {import('@docusaurus/types').Config} */
|
||||||
|
return {
|
||||||
|
title: 'cunīcu',
|
||||||
|
tagline: 'zeroconf • p2p • mesh • vpn',
|
||||||
|
url: 'https://cunicu.li',
|
||||||
|
baseUrl: '/',
|
||||||
|
onBrokenLinks: 'throw',
|
||||||
|
onBrokenMarkdownLinks: 'warn',
|
||||||
|
favicon: 'img/favicon.ico',
|
||||||
|
trailingSlash: false,
|
||||||
|
|
||||||
|
stylesheets: [
|
||||||
|
{
|
||||||
|
href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',
|
||||||
|
type: 'text/css',
|
||||||
|
integrity:
|
||||||
|
'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',
|
||||||
|
crossorigin: 'anonymous',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
[
|
||||||
|
require.resolve('@cmfcmf/docusaurus-search-local'),
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
require.resolve("@gabrielcsapo/docusaurus-plugin-matomo"),
|
||||||
|
{
|
||||||
|
siteId: "5",
|
||||||
|
matomoUrl: "https://matomo.0l.de",
|
||||||
|
siteUrl: "https://cunicu.li",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
function (context, options) {
|
||||||
|
return {
|
||||||
|
name: 'webpack-configuration-plugin',
|
||||||
|
configureWebpack(config, isServer, utils) {
|
||||||
|
return {
|
||||||
|
resolve: {
|
||||||
|
symlinks: false,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
// GitHub pages deployment config.
|
||||||
|
// If you aren't using GitHub pages, you don't need these.
|
||||||
|
organizationName: 'stv0g', // Usually your GitHub org/user name.
|
||||||
|
projectName: 'cunicu', // Usually your repo name.
|
||||||
|
|
||||||
|
// Even if you don't use internalization, you can use this field to set useful
|
||||||
|
// metadata like html lang. For example, if your site is Chinese, you may want
|
||||||
|
// to replace "en" with "zh-Hans".
|
||||||
|
i18n: {
|
||||||
|
defaultLocale: 'en',
|
||||||
|
locales: ['en'],
|
||||||
|
},
|
||||||
|
|
||||||
|
presets: [
|
||||||
|
[
|
||||||
|
'classic',
|
||||||
|
/** @type {import('@docusaurus/preset-classic').Options} */
|
||||||
|
({
|
||||||
|
docs: {
|
||||||
|
sidebarPath: require.resolve('./sidebars.js'),
|
||||||
|
// Please change this to your repo.
|
||||||
|
// Remove this to remove the "edit this page" links.
|
||||||
|
editUrl:
|
||||||
|
'https://github.com/stv0g/cunicu/tree/master/website/',
|
||||||
|
remarkPlugins: [
|
||||||
|
mdxMermaid.default,
|
||||||
|
math
|
||||||
|
],
|
||||||
|
rehypePlugins: [
|
||||||
|
katex
|
||||||
|
],
|
||||||
|
},
|
||||||
|
blog: {
|
||||||
|
showReadingTime: true,
|
||||||
|
// Please change this to your repo.
|
||||||
|
// Remove this to remove the "edit this page" links.
|
||||||
|
editUrl:
|
||||||
|
'https://github.com/stv0g/cunicu/master/website',
|
||||||
|
},
|
||||||
|
theme: {
|
||||||
|
customCss: require.resolve('./src/css/custom.css'),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
themeConfig:
|
||||||
|
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||||
|
({
|
||||||
|
navbar: {
|
||||||
|
title: 'cunīcu',
|
||||||
|
logo: {
|
||||||
|
alt: 'cunīcu logo',
|
||||||
|
src: 'img/cunicu_icon.svg',
|
||||||
|
},
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'doc',
|
||||||
|
docId: 'index',
|
||||||
|
position: 'left',
|
||||||
|
label: 'Docs',
|
||||||
|
},
|
||||||
|
{to: '/blog', label: 'Blog', position: 'left'},
|
||||||
|
{
|
||||||
|
href: 'https://github.com/stv0g/cunicu',
|
||||||
|
label: 'GitHub',
|
||||||
|
position: 'right',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
style: 'dark',
|
||||||
|
links: [
|
||||||
|
{
|
||||||
|
title: 'Docs',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
label: 'Tutorial',
|
||||||
|
to: '/docs/',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Community',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
label: 'Slack',
|
||||||
|
href: 'https://gophers.slack.com/archives/C036CTEGJFN',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Twitter',
|
||||||
|
href: 'https://twitter.com/cunicuVPN',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'More',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
label: 'Blog',
|
||||||
|
to: '/blog',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'GitHub',
|
||||||
|
href: 'https://github.com/stv0g/cunicu',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
copyright: `Copyright © ${new Date().getFullYear()} Institute for Automation of Complex Power Systems, RWTH Aachen University.`,
|
||||||
|
},
|
||||||
|
prism: {
|
||||||
|
theme: lightCodeTheme,
|
||||||
|
darkTheme: darkCodeTheme,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = createConfig;
|
1
website/index.md
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../README.md
|
21183
website/package-lock.json
generated
Normal file
51
website/package.json
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"name": "wice",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"docusaurus": "docusaurus",
|
||||||
|
"start": "docusaurus start",
|
||||||
|
"build": "docusaurus build",
|
||||||
|
"swizzle": "docusaurus swizzle",
|
||||||
|
"deploy": "docusaurus deploy",
|
||||||
|
"clear": "docusaurus clear",
|
||||||
|
"serve": "docusaurus serve",
|
||||||
|
"write-translations": "docusaurus write-translations",
|
||||||
|
"write-heading-ids": "docusaurus write-heading-ids"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@cmfcmf/docusaurus-search-local": "^0.11.0",
|
||||||
|
"@docusaurus/core": "^2.1.0",
|
||||||
|
"@docusaurus/preset-classic": "^2.1.0",
|
||||||
|
"@gabrielcsapo/docusaurus-plugin-matomo": "^0.1.2",
|
||||||
|
"@mdx-js/react": "^1.6.22",
|
||||||
|
"clsx": "^1.2.1",
|
||||||
|
"hast-util-is-element": "1.1.0",
|
||||||
|
"mdx-mermaid": "^2.0.0-rc2",
|
||||||
|
"mermaid": "^9.1.6",
|
||||||
|
"prism-react-renderer": "^1.3.5",
|
||||||
|
"react": "^17.0.2",
|
||||||
|
"react-dom": "^17.0.2",
|
||||||
|
"rehype-katex": "5",
|
||||||
|
"remark-math": "3",
|
||||||
|
"unist-util-visit": "^4.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@docusaurus/module-type-aliases": "^2.1.0"
|
||||||
|
},
|
||||||
|
"browserslist": {
|
||||||
|
"production": [
|
||||||
|
">0.5%",
|
||||||
|
"not dead",
|
||||||
|
"not op_mini all"
|
||||||
|
],
|
||||||
|
"development": [
|
||||||
|
"last 1 chrome version",
|
||||||
|
"last 1 firefox version",
|
||||||
|
"last 1 safari version"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.14"
|
||||||
|
}
|
||||||
|
}
|
14
website/sidebars.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// @ts-check
|
||||||
|
|
||||||
|
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||||
|
const sidebars = {
|
||||||
|
// By default, Docusaurus generates a sidebar from the docs folder structure
|
||||||
|
tutorialSidebar: [
|
||||||
|
{
|
||||||
|
type: 'autogenerated',
|
||||||
|
dirName: '.'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = sidebars;
|
62
website/src/components/HomepageFeatures/index.js
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import clsx from 'clsx';
|
||||||
|
import styles from './styles.module.css';
|
||||||
|
|
||||||
|
const FeatureList = [
|
||||||
|
{
|
||||||
|
title: 'Easy to Use',
|
||||||
|
Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
|
||||||
|
description: (
|
||||||
|
<>
|
||||||
|
Docusaurus was designed from the ground up to be easily installed and
|
||||||
|
used to get your website up and running quickly.
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Connectivity everywhere',
|
||||||
|
Svg: require('@site/static/img/webrtc_logo.svg').default,
|
||||||
|
description: (
|
||||||
|
<>
|
||||||
|
cunīcu embraces open standards and uses various WebRTC-related RFCs like the Interactive Connectivity Establishment (ICE) to establish peer-to-peer connections even in restrictive network environments.
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Powered by WireGuard®',
|
||||||
|
Svg: require('@site/static/img/wireguard_logo.svg').default,
|
||||||
|
description: (
|
||||||
|
<>
|
||||||
|
cunīcu is using user- or kernelspace WireGuard® implementation to provide state-of-the-art security and performance.
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
function Feature({Svg, title, description}) {
|
||||||
|
return (
|
||||||
|
<div className={clsx('col col--4')}>
|
||||||
|
<div className="text--center">
|
||||||
|
<Svg className={styles.featureSvg} role="img" />
|
||||||
|
</div>
|
||||||
|
<div className="text--center padding-horiz--md">
|
||||||
|
<h3>{title}</h3>
|
||||||
|
<p>{description}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function HomepageFeatures() {
|
||||||
|
return (
|
||||||
|
<section className={styles.features}>
|
||||||
|
<div className="container">
|
||||||
|
<div className="row">
|
||||||
|
{FeatureList.map((props, idx) => (
|
||||||
|
<Feature key={idx} {...props} />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
11
website/src/components/HomepageFeatures/styles.module.css
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
.features {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 2rem 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featureSvg {
|
||||||
|
height: 200px;
|
||||||
|
width: 200px;
|
||||||
|
}
|
34
website/src/css/custom.css
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/**
|
||||||
|
* Any CSS included here will be global. The classic template
|
||||||
|
* bundles Infima by default. Infima is a CSS framework designed to
|
||||||
|
* work well for content-centric websites.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* You can override the default Infima variables here. */
|
||||||
|
:root {
|
||||||
|
--ifm-color-primary: #215f3d;
|
||||||
|
--ifm-color-primary-dark: #29784c;
|
||||||
|
--ifm-color-primary-darker: #277148;
|
||||||
|
--ifm-color-primary-darkest: #205d3b;
|
||||||
|
--ifm-color-primary-light: #33925d;
|
||||||
|
--ifm-color-primary-lighter: #359962;
|
||||||
|
--ifm-color-primary-lightest: #3cad6e;
|
||||||
|
--ifm-code-font-size: 95%;
|
||||||
|
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For readability concerns, you should choose a lighter palette in dark mode. */
|
||||||
|
[data-theme='dark'] {
|
||||||
|
--ifm-color-primary: #215f3d;
|
||||||
|
--ifm-color-primary-dark: #21af90;
|
||||||
|
--ifm-color-primary-darker: #1fa588;
|
||||||
|
--ifm-color-primary-darkest: #1a8870;
|
||||||
|
--ifm-color-primary-light: #29d5b0;
|
||||||
|
--ifm-color-primary-lighter: #32d8b4;
|
||||||
|
--ifm-color-primary-lightest: #4fddbf;
|
||||||
|
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-logo {
|
||||||
|
margin-bottom: 2em;
|
||||||
|
}
|
40
website/src/pages/index.js
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import clsx from 'clsx';
|
||||||
|
import Link from '@docusaurus/Link';
|
||||||
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||||
|
import Layout from '@theme/Layout';
|
||||||
|
import HomepageFeatures from '@site/src/components/HomepageFeatures';
|
||||||
|
|
||||||
|
import styles from './index.module.css';
|
||||||
|
|
||||||
|
function HomepageHeader() {
|
||||||
|
const {siteConfig} = useDocusaurusContext();
|
||||||
|
return (
|
||||||
|
<header className={clsx('hero hero--primary', styles.heroBanner)}>
|
||||||
|
<div className="container">
|
||||||
|
<img className="project-logo" style={{width: '40%'}} src="img/cunicu_logo_dark.svg" alt={siteConfig.title + ' - ' + siteConfig.tagline} />
|
||||||
|
<div className={styles.buttons}>
|
||||||
|
<Link
|
||||||
|
className="button button--secondary button--lg"
|
||||||
|
to="/docs/">
|
||||||
|
cunīcu Tutorial - 5min ⏱️
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
const {siteConfig} = useDocusaurusContext();
|
||||||
|
return (
|
||||||
|
<Layout
|
||||||
|
title={`Hello from ${siteConfig.title}`}
|
||||||
|
description="Description will go into a meta tag in <head />">
|
||||||
|
<HomepageHeader />
|
||||||
|
<main>
|
||||||
|
<HomepageFeatures />
|
||||||
|
</main>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
}
|
23
website/src/pages/index.module.css
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* CSS files with the .module.css suffix will be treated as CSS modules
|
||||||
|
* and scoped locally.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.heroBanner {
|
||||||
|
padding: 4rem 0;
|
||||||
|
text-align: center;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 996px) {
|
||||||
|
.heroBanner {
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttons {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
7
website/src/pages/markdown-page.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Markdown page example
|
||||||
|
---
|
||||||
|
|
||||||
|
# Markdown page example
|
||||||
|
|
||||||
|
You don't need React to write simple standalone pages.
|
1
website/static/CNAME
Normal file
@@ -0,0 +1 @@
|
|||||||
|
cunicu.li
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
BIN
website/static/img/cunicu_icon.png
Normal file
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
BIN
website/static/img/cunicu_logo.png
Normal file
After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
BIN
website/static/img/docusaurus.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
website/static/img/favicon.ico
Normal file
After Width: | Height: | Size: 3.5 KiB |
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="810" height="540"><desc>European flag</desc>
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="810" height="540"><desc>European flag</desc>
|
||||||
<defs><g id="s"><g id="c"><path id="t" d="M0,0v1h0.5z" transform="translate(0,-1)rotate(18)"/><use xlink:href="#t" transform="scale(-1,1)"/></g><g id="a"><use xlink:href="#c" transform="rotate(72)"/><use xlink:href="#c" transform="rotate(144)"/></g><use xlink:href="#a" transform="scale(-1,1)"/></g></defs>
|
<defs><g id="s"><g id="c"><path id="t" d="M0,0v1h0.5z" transform="translate(0,-1)rotate(18)"/><use xlink:href="#t" transform="scale(-1,1)"/></g><g id="a"><use xlink:href="#c" transform="rotate(72)"/><use xlink:href="#c" transform="rotate(144)"/></g><use xlink:href="#a" transform="scale(-1,1)"/></g></defs>
|
||||||
<rect fill="#039" width="810" height="540"/><g fill="#fc0" transform="scale(30)translate(13.5,9)"><use xlink:href="#s" y="-6"/><use xlink:href="#s" y="6"/><g id="l"><use xlink:href="#s" x="-6"/><use xlink:href="#s" transform="rotate(150)translate(0,6)rotate(66)"/><use xlink:href="#s" transform="rotate(120)translate(0,6)rotate(24)"/><use xlink:href="#s" transform="rotate(60)translate(0,6)rotate(12)"/><use xlink:href="#s" transform="rotate(30)translate(0,6)rotate(42)"/></g><use xlink:href="#l" transform="scale(-1,1)"/></g>
|
<rect fill="#039" width="810" height="540"/><g fill="#fc0" transform="scale(30)translate(13.5,9)"><use xlink:href="#s" y="-6"/><use xlink:href="#s" y="6"/><g id="l"><use xlink:href="#s" x="-6"/><use xlink:href="#s" transform="rotate(150)translate(0,6)rotate(66)"/><use xlink:href="#s" transform="rotate(120)translate(0,6)rotate(24)"/><use xlink:href="#s" transform="rotate(60)translate(0,6)rotate(12)"/><use xlink:href="#s" transform="rotate(30)translate(0,6)rotate(42)"/></g><use xlink:href="#l" transform="scale(-1,1)"/></g>
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
1
website/static/img/logo.svg
Normal file
After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
171
website/static/img/undraw_docusaurus_mountain.svg
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1088" height="687.962" viewBox="0 0 1088 687.962">
|
||||||
|
<title>Easy to Use</title>
|
||||||
|
<g id="Group_12" data-name="Group 12" transform="translate(-57 -56)">
|
||||||
|
<g id="Group_11" data-name="Group 11" transform="translate(57 56)">
|
||||||
|
<path id="Path_83" data-name="Path 83" d="M1017.81,560.461c-5.27,45.15-16.22,81.4-31.25,110.31-20,38.52-54.21,54.04-84.77,70.28a193.275,193.275,0,0,1-27.46,11.94c-55.61,19.3-117.85,14.18-166.74,3.99a657.282,657.282,0,0,0-104.09-13.16q-14.97-.675-29.97-.67c-15.42.02-293.07,5.29-360.67-131.57-16.69-33.76-28.13-75-32.24-125.27-11.63-142.12,52.29-235.46,134.74-296.47,155.97-115.41,369.76-110.57,523.43,7.88C941.15,276.621,1036.99,396.031,1017.81,560.461Z" transform="translate(-56 -106.019)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_84" data-name="Path 84" d="M986.56,670.771c-20,38.52-47.21,64.04-77.77,80.28a193.272,193.272,0,0,1-27.46,11.94c-55.61,19.3-117.85,14.18-166.74,3.99a657.3,657.3,0,0,0-104.09-13.16q-14.97-.675-29.97-.67-23.13.03-46.25,1.72c-100.17,7.36-253.82-6.43-321.42-143.29L382,283.981,444.95,445.6l20.09,51.59,55.37-75.98L549,381.981l130.2,149.27,36.8-81.27L970.78,657.9l14.21,11.59Z" transform="translate(-56 -106.019)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_85" data-name="Path 85" d="M302,282.962l26-57,36,83-31-60Z" opacity="0.1"/>
|
||||||
|
<path id="Path_86" data-name="Path 86" d="M610.5,753.821q-14.97-.675-29.97-.67L465.04,497.191Z" transform="translate(-56 -106.019)" opacity="0.1"/>
|
||||||
|
<path id="Path_87" data-name="Path 87" d="M464.411,315.191,493,292.962l130,150-132-128Z" opacity="0.1"/>
|
||||||
|
<path id="Path_88" data-name="Path 88" d="M908.79,751.051a193.265,193.265,0,0,1-27.46,11.94L679.2,531.251Z" transform="translate(-56 -106.019)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_11" data-name="Ellipse 11" cx="3" cy="3" r="3" transform="translate(479 98.962)" fill="#f2f2f2"/>
|
||||||
|
<circle id="Ellipse_12" data-name="Ellipse 12" cx="3" cy="3" r="3" transform="translate(396 201.962)" fill="#f2f2f2"/>
|
||||||
|
<circle id="Ellipse_13" data-name="Ellipse 13" cx="2" cy="2" r="2" transform="translate(600 220.962)" fill="#f2f2f2"/>
|
||||||
|
<circle id="Ellipse_14" data-name="Ellipse 14" cx="2" cy="2" r="2" transform="translate(180 265.962)" fill="#f2f2f2"/>
|
||||||
|
<circle id="Ellipse_15" data-name="Ellipse 15" cx="2" cy="2" r="2" transform="translate(612 96.962)" fill="#f2f2f2"/>
|
||||||
|
<circle id="Ellipse_16" data-name="Ellipse 16" cx="2" cy="2" r="2" transform="translate(736 192.962)" fill="#f2f2f2"/>
|
||||||
|
<circle id="Ellipse_17" data-name="Ellipse 17" cx="2" cy="2" r="2" transform="translate(858 344.962)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_89" data-name="Path 89" d="M306,121.222h-2.76v-2.76h-1.48v2.76H299V122.7h2.76v2.759h1.48V122.7H306Z" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_90" data-name="Path 90" d="M848,424.222h-2.76v-2.76h-1.48v2.76H841V425.7h2.76v2.759h1.48V425.7H848Z" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_91" data-name="Path 91" d="M1144,719.981c0,16.569-243.557,74-544,74s-544-57.431-544-74,243.557,14,544,14S1144,703.413,1144,719.981Z" transform="translate(-56 -106.019)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_92" data-name="Path 92" d="M1144,719.981c0,16.569-243.557,74-544,74s-544-57.431-544-74,243.557,14,544,14S1144,703.413,1144,719.981Z" transform="translate(-56 -106.019)" opacity="0.1"/>
|
||||||
|
<ellipse id="Ellipse_18" data-name="Ellipse 18" cx="544" cy="30" rx="544" ry="30" transform="translate(0 583.962)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_93" data-name="Path 93" d="M624,677.981c0,33.137-14.775,24-33,24s-33,9.137-33-24,33-96,33-96S624,644.844,624,677.981Z" transform="translate(-56 -106.019)" fill="#ff6584"/>
|
||||||
|
<path id="Path_94" data-name="Path 94" d="M606,690.66c0,15.062-6.716,10.909-15,10.909s-15,4.153-15-10.909,15-43.636,15-43.636S606,675.6,606,690.66Z" transform="translate(-56 -106.019)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_97" data-name="Rectangle 97" width="92" height="18" rx="9" transform="translate(489 604.962)" fill="#2f2e41"/>
|
||||||
|
<rect id="Rectangle_98" data-name="Rectangle 98" width="92" height="18" rx="9" transform="translate(489 586.962)" fill="#2f2e41"/>
|
||||||
|
<path id="Path_95" data-name="Path 95" d="M193,596.547c0,55.343,34.719,100.126,77.626,100.126" transform="translate(-56 -106.019)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_96" data-name="Path 96" d="M270.626,696.673c0-55.965,38.745-101.251,86.626-101.251" transform="translate(-56 -106.019)" fill="#6c63ff"/>
|
||||||
|
<path id="Path_97" data-name="Path 97" d="M221.125,601.564c0,52.57,22.14,95.109,49.5,95.109" transform="translate(-56 -106.019)" fill="#6c63ff"/>
|
||||||
|
<path id="Path_98" data-name="Path 98" d="M270.626,696.673c0-71.511,44.783-129.377,100.126-129.377" transform="translate(-56 -106.019)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_99" data-name="Path 99" d="M254.3,697.379s11.009-.339,14.326-2.7,16.934-5.183,17.757-1.395,16.544,18.844,4.115,18.945-28.879-1.936-32.19-3.953S254.3,697.379,254.3,697.379Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
|
||||||
|
<path id="Path_100" data-name="Path 100" d="M290.716,710.909c-12.429.1-28.879-1.936-32.19-3.953-2.522-1.536-3.527-7.048-3.863-9.591l-.368.014s.7,8.879,4.009,10.9,19.761,4.053,32.19,3.953c3.588-.029,4.827-1.305,4.759-3.2C294.755,710.174,293.386,710.887,290.716,710.909Z" transform="translate(-56 -106.019)" opacity="0.2"/>
|
||||||
|
<path id="Path_101" data-name="Path 101" d="M777.429,633.081c0,38.029,23.857,68.8,53.341,68.8" transform="translate(-56 -106.019)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_102" data-name="Path 102" d="M830.769,701.882c0-38.456,26.623-69.575,59.525-69.575" transform="translate(-56 -106.019)" fill="#6c63ff"/>
|
||||||
|
<path id="Path_103" data-name="Path 103" d="M796.755,636.528c0,36.124,15.213,65.354,34.014,65.354" transform="translate(-56 -106.019)" fill="#6c63ff"/>
|
||||||
|
<path id="Path_104" data-name="Path 104" d="M830.769,701.882c0-49.139,30.773-88.9,68.8-88.9" transform="translate(-56 -106.019)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_105" data-name="Path 105" d="M819.548,702.367s7.565-.233,9.844-1.856,11.636-3.562,12.2-.958,11.368,12.949,2.828,13.018-19.844-1.33-22.119-2.716S819.548,702.367,819.548,702.367Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
|
||||||
|
<path id="Path_106" data-name="Path 106" d="M844.574,711.664c-8.54.069-19.844-1.33-22.119-2.716-1.733-1.056-2.423-4.843-2.654-6.59l-.253.01s.479,6.1,2.755,7.487,13.579,2.785,22.119,2.716c2.465-.02,3.317-.9,3.27-2.2C847.349,711.159,846.409,711.649,844.574,711.664Z" transform="translate(-56 -106.019)" opacity="0.2"/>
|
||||||
|
<path id="Path_107" data-name="Path 107" d="M949.813,724.718s11.36-1.729,14.5-4.591,16.89-7.488,18.217-3.667,19.494,17.447,6.633,19.107-30.153,1.609-33.835-.065S949.813,724.718,949.813,724.718Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
|
||||||
|
<path id="Path_108" data-name="Path 108" d="M989.228,734.173c-12.86,1.659-30.153,1.609-33.835-.065-2.8-1.275-4.535-6.858-5.2-9.45l-.379.061s1.833,9.109,5.516,10.783,20.975,1.725,33.835.065c3.712-.479,4.836-1.956,4.529-3.906C993.319,732.907,991.991,733.817,989.228,734.173Z" transform="translate(-56 -106.019)" opacity="0.2"/>
|
||||||
|
<path id="Path_109" data-name="Path 109" d="M670.26,723.9s9.587-1.459,12.237-3.875,14.255-6.32,15.374-3.095,16.452,14.725,5.6,16.125-25.448,1.358-28.555-.055S670.26,723.9,670.26,723.9Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
|
||||||
|
<path id="Path_110" data-name="Path 110" d="M703.524,731.875c-10.853,1.4-25.448,1.358-28.555-.055-2.367-1.076-3.827-5.788-4.39-7.976l-.32.051s1.547,7.687,4.655,9.1,17.7,1.456,28.555.055c3.133-.4,4.081-1.651,3.822-3.3C706.977,730.807,705.856,731.575,703.524,731.875Z" transform="translate(-56 -106.019)" opacity="0.2"/>
|
||||||
|
<path id="Path_111" data-name="Path 111" d="M178.389,719.109s7.463-1.136,9.527-3.016,11.1-4.92,11.969-2.409,12.808,11.463,4.358,12.553-19.811,1.057-22.23-.043S178.389,719.109,178.389,719.109Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
|
||||||
|
<path id="Path_112" data-name="Path 112" d="M204.285,725.321c-8.449,1.09-19.811,1.057-22.23-.043-1.842-.838-2.979-4.506-3.417-6.209l-.249.04s1.2,5.984,3.624,7.085,13.781,1.133,22.23.043c2.439-.315,3.177-1.285,2.976-2.566C206.973,724.489,206.1,725.087,204.285,725.321Z" transform="translate(-56 -106.019)" opacity="0.2"/>
|
||||||
|
<path id="Path_113" data-name="Path 113" d="M439.7,707.337c0,30.22-42.124,20.873-93.7,20.873s-93.074,9.347-93.074-20.873,42.118-36.793,93.694-36.793S439.7,677.117,439.7,707.337Z" transform="translate(-56 -106.019)" opacity="0.1"/>
|
||||||
|
<path id="Path_114" data-name="Path 114" d="M439.7,699.9c0,30.22-42.124,20.873-93.7,20.873s-93.074,9.347-93.074-20.873S295.04,663.1,346.616,663.1,439.7,669.676,439.7,699.9Z" transform="translate(-56 -106.019)" fill="#3f3d56"/>
|
||||||
|
</g>
|
||||||
|
<g id="docusaurus_keytar" transform="translate(312.271 493.733)">
|
||||||
|
<path id="Path_40" data-name="Path 40" d="M99,52h91.791V89.153H99Z" transform="translate(5.904 -14.001)" fill="#fff" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_41" data-name="Path 41" d="M24.855,163.927A21.828,21.828,0,0,1,5.947,153a21.829,21.829,0,0,0,18.908,32.782H46.71V163.927Z" transform="translate(-3 -4.634)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_42" data-name="Path 42" d="M121.861,61.1l76.514-4.782V45.39A21.854,21.854,0,0,0,176.52,23.535H78.173L75.441,18.8a3.154,3.154,0,0,0-5.464,0l-2.732,4.732L64.513,18.8a3.154,3.154,0,0,0-5.464,0l-2.732,4.732L53.586,18.8a3.154,3.154,0,0,0-5.464,0L45.39,23.535c-.024,0-.046,0-.071,0l-4.526-4.525a3.153,3.153,0,0,0-5.276,1.414l-1.5,5.577-5.674-1.521a3.154,3.154,0,0,0-3.863,3.864L26,34.023l-5.575,1.494a3.155,3.155,0,0,0-1.416,5.278l4.526,4.526c0,.023,0,.046,0,.07L18.8,48.122a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,59.05a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,69.977a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,80.9a3.154,3.154,0,0,0,0,5.464L23.535,89.1,18.8,91.832a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,102.76a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,113.687a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,124.615a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,135.542a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,146.469a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,157.4a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,168.324a3.154,3.154,0,0,0,0,5.464l4.732,2.732A21.854,21.854,0,0,0,45.39,198.375H176.52a21.854,21.854,0,0,0,21.855-21.855V89.1l-76.514-4.782a11.632,11.632,0,0,1,0-23.219" transform="translate(-1.681 -17.226)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_43" data-name="Path 43" d="M143,186.71h32.782V143H143Z" transform="translate(9.984 -5.561)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_44" data-name="Path 44" d="M196.71,159.855a5.438,5.438,0,0,0-.7.07c-.042-.164-.081-.329-.127-.493a5.457,5.457,0,1,0-5.4-9.372q-.181-.185-.366-.367a5.454,5.454,0,1,0-9.384-5.4c-.162-.046-.325-.084-.486-.126a5.467,5.467,0,1,0-10.788,0c-.162.042-.325.08-.486.126a5.457,5.457,0,1,0-9.384,5.4,21.843,21.843,0,1,0,36.421,21.02,5.452,5.452,0,1,0,.7-10.858" transform="translate(10.912 -6.025)" fill="#44d860" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_45" data-name="Path 45" d="M153,124.855h32.782V103H153Z" transform="translate(10.912 -9.271)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_46" data-name="Path 46" d="M194.855,116.765a2.732,2.732,0,1,0,0-5.464,2.811,2.811,0,0,0-.349.035c-.022-.082-.04-.164-.063-.246a2.733,2.733,0,0,0-1.052-5.253,2.7,2.7,0,0,0-1.648.566q-.09-.093-.184-.184a2.7,2.7,0,0,0,.553-1.633,2.732,2.732,0,0,0-5.245-1.07,10.928,10.928,0,1,0,0,21.031,2.732,2.732,0,0,0,5.245-1.07,2.7,2.7,0,0,0-.553-1.633q.093-.09.184-.184a2.7,2.7,0,0,0,1.648.566,2.732,2.732,0,0,0,1.052-5.253c.023-.081.042-.164.063-.246a2.814,2.814,0,0,0,.349.035" transform="translate(12.767 -9.377)" fill="#44d860" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_47" data-name="Path 47" d="M65.087,56.891a2.732,2.732,0,0,1-2.732-2.732,8.2,8.2,0,0,0-16.391,0,2.732,2.732,0,0,1-5.464,0,13.659,13.659,0,0,1,27.319,0,2.732,2.732,0,0,1-2.732,2.732" transform="translate(0.478 -15.068)" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_48" data-name="Path 48" d="M103,191.347h65.565a21.854,21.854,0,0,0,21.855-21.855V93H124.855A21.854,21.854,0,0,0,103,114.855Z" transform="translate(6.275 -10.199)" fill="#ffff50" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_49" data-name="Path 49" d="M173.216,129.787H118.535a1.093,1.093,0,1,1,0-2.185h54.681a1.093,1.093,0,0,1,0,2.185m0,21.855H118.535a1.093,1.093,0,1,1,0-2.186h54.681a1.093,1.093,0,0,1,0,2.186m0,21.855H118.535a1.093,1.093,0,1,1,0-2.185h54.681a1.093,1.093,0,0,1,0,2.185m0-54.434H118.535a1.093,1.093,0,1,1,0-2.185h54.681a1.093,1.093,0,0,1,0,2.185m0,21.652H118.535a1.093,1.093,0,1,1,0-2.186h54.681a1.093,1.093,0,0,1,0,2.186m0,21.855H118.535a1.093,1.093,0,1,1,0-2.186h54.681a1.093,1.093,0,0,1,0,2.186M189.585,61.611c-.013,0-.024-.007-.037-.005-3.377.115-4.974,3.492-6.384,6.472-1.471,3.114-2.608,5.139-4.473,5.078-2.064-.074-3.244-2.406-4.494-4.874-1.436-2.835-3.075-6.049-6.516-5.929-3.329.114-4.932,3.053-6.346,5.646-1.5,2.762-2.529,4.442-4.5,4.364-2.106-.076-3.225-1.972-4.52-4.167-1.444-2.443-3.112-5.191-6.487-5.1-3.272.113-4.879,2.606-6.3,4.808-1.5,2.328-2.552,3.746-4.551,3.662-2.156-.076-3.27-1.65-4.558-3.472-1.447-2.047-3.077-4.363-6.442-4.251-3.2.109-4.807,2.153-6.224,3.954-1.346,1.709-2.4,3.062-4.621,2.977a1.093,1.093,0,0,0-.079,2.186c3.3.11,4.967-1.967,6.417-3.81,1.286-1.635,2.4-3.045,4.582-3.12,2.1-.09,3.091,1.218,4.584,3.327,1.417,2,3.026,4.277,6.263,4.394,3.391.114,5.022-2.42,6.467-4.663,1.292-2,2.406-3.734,4.535-3.807,1.959-.073,3.026,1.475,4.529,4.022,1.417,2.4,3.023,5.121,6.324,5.241,3.415.118,5.064-2.863,6.5-5.5,1.245-2.282,2.419-4.437,4.5-4.509,1.959-.046,2.981,1.743,4.492,4.732,1.412,2.79,3.013,5.95,6.365,6.071l.185,0c3.348,0,4.937-3.36,6.343-6.331,1.245-2.634,2.423-5.114,4.444-5.216Z" transform="translate(7.109 -13.11)" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_50" data-name="Path 50" d="M83,186.71h43.71V143H83Z" transform="translate(4.42 -5.561)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<g id="Group_8" data-name="Group 8" transform="matrix(0.966, -0.259, 0.259, 0.966, 109.327, 91.085)">
|
||||||
|
<rect id="Rectangle_3" data-name="Rectangle 3" width="92.361" height="36.462" rx="2" transform="translate(0 0)" fill="#d8d8d8"/>
|
||||||
|
<g id="Group_2" data-name="Group 2" transform="translate(1.531 23.03)">
|
||||||
|
<rect id="Rectangle_4" data-name="Rectangle 4" width="5.336" height="5.336" rx="1" transform="translate(16.797 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_5" data-name="Rectangle 5" width="5.336" height="5.336" rx="1" transform="translate(23.12 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_6" data-name="Rectangle 6" width="5.336" height="5.336" rx="1" transform="translate(29.444 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_7" data-name="Rectangle 7" width="5.336" height="5.336" rx="1" transform="translate(35.768 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_8" data-name="Rectangle 8" width="5.336" height="5.336" rx="1" transform="translate(42.091 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_9" data-name="Rectangle 9" width="5.336" height="5.336" rx="1" transform="translate(48.415 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_10" data-name="Rectangle 10" width="5.336" height="5.336" rx="1" transform="translate(54.739 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_11" data-name="Rectangle 11" width="5.336" height="5.336" rx="1" transform="translate(61.063 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_12" data-name="Rectangle 12" width="5.336" height="5.336" rx="1" transform="translate(67.386 0)" fill="#4a4a4a"/>
|
||||||
|
<path id="Path_51" data-name="Path 51" d="M1.093,0H14.518a1.093,1.093,0,0,1,1.093,1.093V4.243a1.093,1.093,0,0,1-1.093,1.093H1.093A1.093,1.093,0,0,1,0,4.243V1.093A1.093,1.093,0,0,1,1.093,0ZM75,0H88.426a1.093,1.093,0,0,1,1.093,1.093V4.243a1.093,1.093,0,0,1-1.093,1.093H75a1.093,1.093,0,0,1-1.093-1.093V1.093A1.093,1.093,0,0,1,75,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_3" data-name="Group 3" transform="translate(1.531 10.261)">
|
||||||
|
<path id="Path_52" data-name="Path 52" d="M1.093,0H6.218A1.093,1.093,0,0,1,7.31,1.093V4.242A1.093,1.093,0,0,1,6.218,5.335H1.093A1.093,1.093,0,0,1,0,4.242V1.093A1.093,1.093,0,0,1,1.093,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
<rect id="Rectangle_13" data-name="Rectangle 13" width="5.336" height="5.336" rx="1" transform="translate(8.299 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_14" data-name="Rectangle 14" width="5.336" height="5.336" rx="1" transform="translate(14.623 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_15" data-name="Rectangle 15" width="5.336" height="5.336" rx="1" transform="translate(20.947 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_16" data-name="Rectangle 16" width="5.336" height="5.336" rx="1" transform="translate(27.271 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_17" data-name="Rectangle 17" width="5.336" height="5.336" rx="1" transform="translate(33.594 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_18" data-name="Rectangle 18" width="5.336" height="5.336" rx="1" transform="translate(39.918 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_19" data-name="Rectangle 19" width="5.336" height="5.336" rx="1" transform="translate(46.242 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_20" data-name="Rectangle 20" width="5.336" height="5.336" rx="1" transform="translate(52.565 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_21" data-name="Rectangle 21" width="5.336" height="5.336" rx="1" transform="translate(58.888 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_22" data-name="Rectangle 22" width="5.336" height="5.336" rx="1" transform="translate(65.212 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_23" data-name="Rectangle 23" width="5.336" height="5.336" rx="1" transform="translate(71.536 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_24" data-name="Rectangle 24" width="5.336" height="5.336" rx="1" transform="translate(77.859 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_25" data-name="Rectangle 25" width="5.336" height="5.336" rx="1" transform="translate(84.183 0)" fill="#4a4a4a"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_4" data-name="Group 4" transform="translate(91.05 9.546) rotate(180)">
|
||||||
|
<path id="Path_53" data-name="Path 53" d="M1.093,0H6.219A1.093,1.093,0,0,1,7.312,1.093v3.15A1.093,1.093,0,0,1,6.219,5.336H1.093A1.093,1.093,0,0,1,0,4.243V1.093A1.093,1.093,0,0,1,1.093,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
<rect id="Rectangle_26" data-name="Rectangle 26" width="5.336" height="5.336" rx="1" transform="translate(8.299 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_27" data-name="Rectangle 27" width="5.336" height="5.336" rx="1" transform="translate(14.623 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_28" data-name="Rectangle 28" width="5.336" height="5.336" rx="1" transform="translate(20.947 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_29" data-name="Rectangle 29" width="5.336" height="5.336" rx="1" transform="translate(27.271 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_30" data-name="Rectangle 30" width="5.336" height="5.336" rx="1" transform="translate(33.594 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_31" data-name="Rectangle 31" width="5.336" height="5.336" rx="1" transform="translate(39.918 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_32" data-name="Rectangle 32" width="5.336" height="5.336" rx="1" transform="translate(46.242 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_33" data-name="Rectangle 33" width="5.336" height="5.336" rx="1" transform="translate(52.565 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_34" data-name="Rectangle 34" width="5.336" height="5.336" rx="1" transform="translate(58.889 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_35" data-name="Rectangle 35" width="5.336" height="5.336" rx="1" transform="translate(65.213 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_36" data-name="Rectangle 36" width="5.336" height="5.336" rx="1" transform="translate(71.537 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_37" data-name="Rectangle 37" width="5.336" height="5.336" rx="1" transform="translate(77.86 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_38" data-name="Rectangle 38" width="5.336" height="5.336" rx="1" transform="translate(84.183 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_39" data-name="Rectangle 39" width="5.336" height="5.336" rx="1" transform="translate(8.299 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_40" data-name="Rectangle 40" width="5.336" height="5.336" rx="1" transform="translate(14.623 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_41" data-name="Rectangle 41" width="5.336" height="5.336" rx="1" transform="translate(20.947 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_42" data-name="Rectangle 42" width="5.336" height="5.336" rx="1" transform="translate(27.271 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_43" data-name="Rectangle 43" width="5.336" height="5.336" rx="1" transform="translate(33.594 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_44" data-name="Rectangle 44" width="5.336" height="5.336" rx="1" transform="translate(39.918 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_45" data-name="Rectangle 45" width="5.336" height="5.336" rx="1" transform="translate(46.242 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_46" data-name="Rectangle 46" width="5.336" height="5.336" rx="1" transform="translate(52.565 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_47" data-name="Rectangle 47" width="5.336" height="5.336" rx="1" transform="translate(58.889 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_48" data-name="Rectangle 48" width="5.336" height="5.336" rx="1" transform="translate(65.213 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_49" data-name="Rectangle 49" width="5.336" height="5.336" rx="1" transform="translate(71.537 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_50" data-name="Rectangle 50" width="5.336" height="5.336" rx="1" transform="translate(77.86 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_51" data-name="Rectangle 51" width="5.336" height="5.336" rx="1" transform="translate(84.183 0)" fill="#4a4a4a"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_6" data-name="Group 6" transform="translate(1.531 16.584)">
|
||||||
|
<path id="Path_54" data-name="Path 54" d="M1.093,0h7.3A1.093,1.093,0,0,1,9.485,1.093v3.15A1.093,1.093,0,0,1,8.392,5.336h-7.3A1.093,1.093,0,0,1,0,4.243V1.094A1.093,1.093,0,0,1,1.093,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
<g id="Group_5" data-name="Group 5" transform="translate(10.671 0)">
|
||||||
|
<rect id="Rectangle_52" data-name="Rectangle 52" width="5.336" height="5.336" rx="1" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_53" data-name="Rectangle 53" width="5.336" height="5.336" rx="1" transform="translate(6.324 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_54" data-name="Rectangle 54" width="5.336" height="5.336" rx="1" transform="translate(12.647 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_55" data-name="Rectangle 55" width="5.336" height="5.336" rx="1" transform="translate(18.971 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_56" data-name="Rectangle 56" width="5.336" height="5.336" rx="1" transform="translate(25.295 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_57" data-name="Rectangle 57" width="5.336" height="5.336" rx="1" transform="translate(31.619 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_58" data-name="Rectangle 58" width="5.336" height="5.336" rx="1" transform="translate(37.942 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_59" data-name="Rectangle 59" width="5.336" height="5.336" rx="1" transform="translate(44.265 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_60" data-name="Rectangle 60" width="5.336" height="5.336" rx="1" transform="translate(50.589 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_61" data-name="Rectangle 61" width="5.336" height="5.336" rx="1" transform="translate(56.912 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_62" data-name="Rectangle 62" width="5.336" height="5.336" rx="1" transform="translate(63.236 0)" fill="#4a4a4a"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_55" data-name="Path 55" d="M1.094,0H8A1.093,1.093,0,0,1,9.091,1.093v3.15A1.093,1.093,0,0,1,8,5.336H1.093A1.093,1.093,0,0,1,0,4.243V1.094A1.093,1.093,0,0,1,1.093,0Z" transform="translate(80.428 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_7" data-name="Group 7" transform="translate(1.531 29.627)">
|
||||||
|
<rect id="Rectangle_63" data-name="Rectangle 63" width="5.336" height="5.336" rx="1" transform="translate(0 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_64" data-name="Rectangle 64" width="5.336" height="5.336" rx="1" transform="translate(6.324 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_65" data-name="Rectangle 65" width="5.336" height="5.336" rx="1" transform="translate(12.647 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_66" data-name="Rectangle 66" width="5.336" height="5.336" rx="1" transform="translate(18.971 0)" fill="#4a4a4a"/>
|
||||||
|
<path id="Path_56" data-name="Path 56" d="M1.093,0H31.515a1.093,1.093,0,0,1,1.093,1.093V4.244a1.093,1.093,0,0,1-1.093,1.093H1.093A1.093,1.093,0,0,1,0,4.244V1.093A1.093,1.093,0,0,1,1.093,0ZM34.687,0h3.942a1.093,1.093,0,0,1,1.093,1.093V4.244a1.093,1.093,0,0,1-1.093,1.093H34.687a1.093,1.093,0,0,1-1.093-1.093V1.093A1.093,1.093,0,0,1,34.687,0Z" transform="translate(25.294 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
<rect id="Rectangle_67" data-name="Rectangle 67" width="5.336" height="5.336" rx="1" transform="translate(66.003 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_68" data-name="Rectangle 68" width="5.336" height="5.336" rx="1" transform="translate(72.327 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_69" data-name="Rectangle 69" width="5.336" height="5.336" rx="1" transform="translate(84.183 0)" fill="#4a4a4a"/>
|
||||||
|
<path id="Path_57" data-name="Path 57" d="M5.336,0V1.18A1.093,1.093,0,0,1,4.243,2.273H1.093A1.093,1.093,0,0,1,0,1.18V0Z" transform="translate(83.59 2.273) rotate(180)" fill="#4a4a4a"/>
|
||||||
|
<path id="Path_58" data-name="Path 58" d="M5.336,0V1.18A1.093,1.093,0,0,1,4.243,2.273H1.093A1.093,1.093,0,0,1,0,1.18V0Z" transform="translate(78.255 3.063)" fill="#4a4a4a"/>
|
||||||
|
</g>
|
||||||
|
<rect id="Rectangle_70" data-name="Rectangle 70" width="88.927" height="2.371" rx="1.085" transform="translate(1.925 1.17)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_71" data-name="Rectangle 71" width="4.986" height="1.581" rx="0.723" transform="translate(4.1 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_72" data-name="Rectangle 72" width="4.986" height="1.581" rx="0.723" transform="translate(10.923 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_73" data-name="Rectangle 73" width="4.986" height="1.581" rx="0.723" transform="translate(16.173 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_74" data-name="Rectangle 74" width="4.986" height="1.581" rx="0.723" transform="translate(21.421 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_75" data-name="Rectangle 75" width="4.986" height="1.581" rx="0.723" transform="translate(26.671 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_76" data-name="Rectangle 76" width="4.986" height="1.581" rx="0.723" transform="translate(33.232 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_77" data-name="Rectangle 77" width="4.986" height="1.581" rx="0.723" transform="translate(38.48 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_78" data-name="Rectangle 78" width="4.986" height="1.581" rx="0.723" transform="translate(43.73 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_79" data-name="Rectangle 79" width="4.986" height="1.581" rx="0.723" transform="translate(48.978 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_80" data-name="Rectangle 80" width="4.986" height="1.581" rx="0.723" transform="translate(55.54 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_81" data-name="Rectangle 81" width="4.986" height="1.581" rx="0.723" transform="translate(60.788 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_82" data-name="Rectangle 82" width="4.986" height="1.581" rx="0.723" transform="translate(66.038 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_83" data-name="Rectangle 83" width="4.986" height="1.581" rx="0.723" transform="translate(72.599 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_84" data-name="Rectangle 84" width="4.986" height="1.581" rx="0.723" transform="translate(77.847 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_85" data-name="Rectangle 85" width="4.986" height="1.581" rx="0.723" transform="translate(83.097 1.566)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_59" data-name="Path 59" d="M146.71,159.855a5.439,5.439,0,0,0-.7.07c-.042-.164-.081-.329-.127-.493a5.457,5.457,0,1,0-5.4-9.372q-.181-.185-.366-.367a5.454,5.454,0,1,0-9.384-5.4c-.162-.046-.325-.084-.486-.126a5.467,5.467,0,1,0-10.788,0c-.162.042-.325.08-.486.126a5.457,5.457,0,1,0-9.384,5.4,21.843,21.843,0,1,0,36.421,21.02,5.452,5.452,0,1,0,.7-10.858" transform="translate(6.275 -6.025)" fill="#44d860" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_60" data-name="Path 60" d="M83,124.855h43.71V103H83Z" transform="translate(4.42 -9.271)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_61" data-name="Path 61" d="M134.855,116.765a2.732,2.732,0,1,0,0-5.464,2.811,2.811,0,0,0-.349.035c-.022-.082-.04-.164-.063-.246a2.733,2.733,0,0,0-1.052-5.253,2.7,2.7,0,0,0-1.648.566q-.09-.093-.184-.184a2.7,2.7,0,0,0,.553-1.633,2.732,2.732,0,0,0-5.245-1.07,10.928,10.928,0,1,0,0,21.031,2.732,2.732,0,0,0,5.245-1.07,2.7,2.7,0,0,0-.553-1.633q.093-.09.184-.184a2.7,2.7,0,0,0,1.648.566,2.732,2.732,0,0,0,1.052-5.253c.023-.081.042-.164.063-.246a2.811,2.811,0,0,0,.349.035" transform="translate(7.202 -9.377)" fill="#44d860" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_62" data-name="Path 62" d="M143.232,42.33a2.967,2.967,0,0,1-.535-.055,2.754,2.754,0,0,1-.514-.153,2.838,2.838,0,0,1-.471-.251,4.139,4.139,0,0,1-.415-.339,3.2,3.2,0,0,1-.338-.415A2.7,2.7,0,0,1,140.5,39.6a2.968,2.968,0,0,1,.055-.535,3.152,3.152,0,0,1,.152-.514,2.874,2.874,0,0,1,.252-.47,2.633,2.633,0,0,1,.753-.754,2.837,2.837,0,0,1,.471-.251,2.753,2.753,0,0,1,.514-.153,2.527,2.527,0,0,1,1.071,0,2.654,2.654,0,0,1,.983.4,4.139,4.139,0,0,1,.415.339,4.019,4.019,0,0,1,.339.415,2.786,2.786,0,0,1,.251.47,2.864,2.864,0,0,1,.208,1.049,2.77,2.77,0,0,1-.8,1.934,4.139,4.139,0,0,1-.415.339,2.722,2.722,0,0,1-1.519.459m21.855-1.366a2.789,2.789,0,0,1-1.935-.8,4.162,4.162,0,0,1-.338-.415,2.7,2.7,0,0,1-.459-1.519,2.789,2.789,0,0,1,.8-1.934,4.139,4.139,0,0,1,.415-.339,2.838,2.838,0,0,1,.471-.251,2.752,2.752,0,0,1,.514-.153,2.527,2.527,0,0,1,1.071,0,2.654,2.654,0,0,1,.983.4,4.139,4.139,0,0,1,.415.339,2.79,2.79,0,0,1,.8,1.934,3.069,3.069,0,0,1-.055.535,2.779,2.779,0,0,1-.153.514,3.885,3.885,0,0,1-.251.47,4.02,4.02,0,0,1-.339.415,4.138,4.138,0,0,1-.415.339,2.722,2.722,0,0,1-1.519.459" transform="translate(9.753 -15.532)" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 31 KiB |
170
website/static/img/undraw_docusaurus_react.svg
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1041.277" height="554.141" viewBox="0 0 1041.277 554.141">
|
||||||
|
<title>Powered by React</title>
|
||||||
|
<g id="Group_24" data-name="Group 24" transform="translate(-440 -263)">
|
||||||
|
<g id="Group_23" data-name="Group 23" transform="translate(439.989 262.965)">
|
||||||
|
<path id="Path_299" data-name="Path 299" d="M1040.82,611.12q-1.74,3.75-3.47,7.4-2.7,5.67-5.33,11.12c-.78,1.61-1.56,3.19-2.32,4.77-8.6,17.57-16.63,33.11-23.45,45.89A73.21,73.21,0,0,1,942.44,719l-151.65,1.65h-1.6l-13,.14-11.12.12-34.1.37h-1.38l-17.36.19h-.53l-107,1.16-95.51,1-11.11.12-69,.75H429l-44.75.48h-.48l-141.5,1.53-42.33.46a87.991,87.991,0,0,1-10.79-.54h0c-1.22-.14-2.44-.3-3.65-.49a87.38,87.38,0,0,1-51.29-27.54C116,678.37,102.75,655,93.85,629.64q-1.93-5.49-3.6-11.12C59.44,514.37,97,380,164.6,290.08q4.25-5.64,8.64-11l.07-.08c20.79-25.52,44.1-46.84,68.93-62,44-26.91,92.75-34.49,140.7-11.9,40.57,19.12,78.45,28.11,115.17,30.55,3.71.24,7.42.42,11.11.53,84.23,2.65,163.17-27.7,255.87-47.29,3.69-.78,7.39-1.55,11.12-2.28,66.13-13.16,139.49-20.1,226.73-5.51a189.089,189.089,0,0,1,26.76,6.4q5.77,1.86,11.12,4c41.64,16.94,64.35,48.24,74,87.46q1.37,5.46,2.37,11.11C1134.3,384.41,1084.19,518.23,1040.82,611.12Z" transform="translate(-79.34 -172.91)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_300" data-name="Path 300" d="M576.36,618.52a95.21,95.21,0,0,1-1.87,11.12h93.7V618.52Zm-78.25,62.81,11.11-.09V653.77c-3.81-.17-7.52-.34-11.11-.52ZM265.19,618.52v11.12h198.5V618.52ZM1114.87,279h-74V191.51q-5.35-2.17-11.12-4V279H776.21V186.58c-3.73.73-7.43,1.5-11.12,2.28V279H509.22V236.15c-3.69-.11-7.4-.29-11.11-.53V279H242.24V217c-24.83,15.16-48.14,36.48-68.93,62h-.07v.08q-4.4,5.4-8.64,11h8.64V618.52h-83q1.66,5.63,3.6,11.12h79.39v93.62a87,87,0,0,0,12.2,2.79c1.21.19,2.43.35,3.65.49h0a87.991,87.991,0,0,0,10.79.54l42.33-.46v-97H498.11v94.21l11.11-.12V629.64H765.09V721l11.12-.12V629.64H1029.7v4.77c.76-1.58,1.54-3.16,2.32-4.77q2.63-5.45,5.33-11.12,1.73-3.64,3.47-7.4v-321h76.42Q1116.23,284.43,1114.87,279ZM242.24,618.52V290.08H498.11V618.52Zm267,0V290.08H765.09V618.52Zm520.48,0H776.21V290.08H1029.7Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
|
||||||
|
<path id="Path_301" data-name="Path 301" d="M863.09,533.65v13l-151.92,1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99L349.77,551.4h-.15l-44.65.42-.48.01-198.4,1.82v-15l46.65-28,93.6-.78,2-.01.66-.01,2-.03,44.94-.37,2.01-.01.64-.01,2-.01L315,509.3l.38-.01,35.55-.3h.29l277.4-2.34,6.79-.05h.68l5.18-.05,37.65-.31,2-.03,1.85-.02h.96l11.71-.09,2.32-.03,3.11-.02,9.75-.09,15.47-.13,2-.02,3.48-.02h.65l74.71-.64Z" fill="#65617d"/>
|
||||||
|
<path id="Path_302" data-name="Path 302" d="M863.09,533.65v13l-151.92,1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99L349.77,551.4h-.15l-44.65.42-.48.01-198.4,1.82v-15l46.65-28,93.6-.78,2-.01.66-.01,2-.03,44.94-.37,2.01-.01.64-.01,2-.01L315,509.3l.38-.01,35.55-.3h.29l277.4-2.34,6.79-.05h.68l5.18-.05,37.65-.31,2-.03,1.85-.02h.96l11.71-.09,2.32-.03,3.11-.02,9.75-.09,15.47-.13,2-.02,3.48-.02h.65l74.71-.64Z" opacity="0.2"/>
|
||||||
|
<path id="Path_303" data-name="Path 303" d="M375.44,656.57v24.49a6.13,6.13,0,0,1-3.5,5.54,6,6,0,0,1-2.5.6l-34.9.74a6,6,0,0,1-2.7-.57,6.12,6.12,0,0,1-3.57-5.57V656.57Z" transform="translate(-79.34 -172.91)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_304" data-name="Path 304" d="M375.44,656.57v24.49a6.13,6.13,0,0,1-3.5,5.54,6,6,0,0,1-2.5.6l-34.9.74a6,6,0,0,1-2.7-.57,6.12,6.12,0,0,1-3.57-5.57V656.57Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
|
||||||
|
<path id="Path_305" data-name="Path 305" d="M377.44,656.57v24.49a6.13,6.13,0,0,1-3.5,5.54,6,6,0,0,1-2.5.6l-34.9.74a6,6,0,0,1-2.7-.57,6.12,6.12,0,0,1-3.57-5.57V656.57Z" transform="translate(-79.34 -172.91)" fill="#3f3d56"/>
|
||||||
|
<rect id="Rectangle_137" data-name="Rectangle 137" width="47.17" height="31.5" transform="translate(680.92 483.65)" fill="#3f3d56"/>
|
||||||
|
<rect id="Rectangle_138" data-name="Rectangle 138" width="47.17" height="31.5" transform="translate(680.92 483.65)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_139" data-name="Rectangle 139" width="47.17" height="31.5" transform="translate(678.92 483.65)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_306" data-name="Path 306" d="M298.09,483.65v4.97l-47.17,1.26v-6.23Z" opacity="0.1"/>
|
||||||
|
<path id="Path_307" data-name="Path 307" d="M460.69,485.27v168.2a4,4,0,0,1-3.85,3.95l-191.65,5.1h-.05a4,4,0,0,1-3.95-3.95V485.27a4,4,0,0,1,3.95-3.95h191.6a4,4,0,0,1,3.95,3.95Z" transform="translate(-79.34 -172.91)" fill="#65617d"/>
|
||||||
|
<path id="Path_308" data-name="Path 308" d="M265.19,481.32v181.2h-.05a4,4,0,0,1-3.95-3.95V485.27a4,4,0,0,1,3.95-3.95Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
|
||||||
|
<path id="Path_309" data-name="Path 309" d="M194.59,319.15h177.5V467.4l-177.5,4Z" fill="#39374d"/>
|
||||||
|
<path id="Path_310" data-name="Path 310" d="M726.09,483.65v6.41l-47.17-1.26v-5.15Z" opacity="0.1"/>
|
||||||
|
<path id="Path_311" data-name="Path 311" d="M867.69,485.27v173.3a4,4,0,0,1-4,3.95h0L672,657.42a4,4,0,0,1-3.85-3.95V485.27a4,4,0,0,1,3.95-3.95H863.7a4,4,0,0,1,3.99,3.95Z" transform="translate(-79.34 -172.91)" fill="#65617d"/>
|
||||||
|
<path id="Path_312" data-name="Path 312" d="M867.69,485.27v173.3a4,4,0,0,1-4,3.95h0V481.32h0a4,4,0,0,1,4,3.95Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
|
||||||
|
<path id="Path_313" data-name="Path 313" d="M775.59,319.15H598.09V467.4l177.5,4Z" fill="#39374d"/>
|
||||||
|
<path id="Path_314" data-name="Path 314" d="M663.19,485.27v168.2a4,4,0,0,1-3.85,3.95l-191.65,5.1h0a4,4,0,0,1-4-3.95V485.27a4,4,0,0,1,3.95-3.95h191.6A4,4,0,0,1,663.19,485.27Z" transform="translate(-79.34 -172.91)" fill="#65617d"/>
|
||||||
|
<path id="Path_315" data-name="Path 315" d="M397.09,319.15h177.5V467.4l-177.5,4Z" fill="#4267b2"/>
|
||||||
|
<path id="Path_316" data-name="Path 316" d="M863.09,533.65v13l-151.92,1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99L349.77,551.4h-.15l-44.65.42-.48.01-198.4,1.82v-15l202.51-1.33h.48l40.99-.28h.19l283.08-1.87h.29l.17-.01h.47l4.79-.03h1.46l74.49-.5,4.4-.02.98-.01Z" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_111" data-name="Ellipse 111" cx="51.33" cy="51.33" r="51.33" transform="translate(435.93 246.82)" fill="#fbbebe"/>
|
||||||
|
<path id="Path_317" data-name="Path 317" d="M617.94,550.07s-99.5,12-90,0c3.44-4.34,4.39-17.2,4.2-31.85-.06-4.45-.22-9.06-.45-13.65-1.1-22-3.75-43.5-3.75-43.5s87-41,77-8.5c-4,13.13-2.69,31.57.35,48.88.89,5.05,1.92,10,3,14.7a344.66,344.66,0,0,0,9.65,33.92Z" transform="translate(-79.34 -172.91)" fill="#fbbebe"/>
|
||||||
|
<path id="Path_318" data-name="Path 318" d="M585.47,546c11.51-2.13,23.7-6,34.53-1.54,2.85,1.17,5.47,2.88,8.39,3.86s6.12,1.22,9.16,1.91c10.68,2.42,19.34,10.55,24.9,20s8.44,20.14,11.26,30.72l6.9,25.83c6,22.45,12,45.09,13.39,68.3a2437.506,2437.506,0,0,1-250.84,1.43c5.44-10.34,11-21.31,10.54-33s-7.19-23.22-4.76-34.74c1.55-7.34,6.57-13.39,9.64-20.22,8.75-19.52,1.94-45.79,17.32-60.65,6.92-6.68,17-9.21,26.63-8.89,12.28.41,24.85,4.24,37,6.11C555.09,547.48,569.79,548.88,585.47,546Z" transform="translate(-79.34 -172.91)" fill="#ff6584"/>
|
||||||
|
<path id="Path_319" data-name="Path 319" d="M716.37,657.17l-.1,1.43v.1l-.17,2.3-1.33,18.51-1.61,22.3-.46,6.28-1,13.44v.17l-107,1-175.59,1.9v.84h-.14v-1.12l.45-14.36.86-28.06.74-23.79.07-2.37a10.53,10.53,0,0,1,11.42-10.17c4.72.4,10.85.89,18.18,1.41l3,.22c42.33,2.94,120.56,6.74,199.5,2,1.66-.09,3.33-.19,5-.31,12.24-.77,24.47-1.76,36.58-3a10.53,10.53,0,0,1,11.6,11.23Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
|
||||||
|
<path id="Path_320" data-name="Path 320" d="M429.08,725.44v-.84l175.62-1.91,107-1h.3v-.17l1-13.44.43-6,1.64-22.61,1.29-17.9v-.44a10.617,10.617,0,0,0-.11-2.47.3.3,0,0,0,0-.1,10.391,10.391,0,0,0-2-4.64,10.54,10.54,0,0,0-9.42-4c-12.11,1.24-24.34,2.23-36.58,3-1.67.12-3.34.22-5,.31-78.94,4.69-157.17.89-199.5-2l-3-.22c-7.33-.52-13.46-1-18.18-1.41a10.54,10.54,0,0,0-11.24,8.53,11,11,0,0,0-.18,1.64l-.68,22.16L429.54,710l-.44,14.36v1.12Z" transform="translate(-79.34 -172.91)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_321" data-name="Path 321" d="M716.67,664.18l-1.23,15.33-1.83,22.85-.46,5.72-1,12.81-.06.64v.17h0l-.15,1.48.11-1.48h-.29l-107,1-175.65,1.9v-.28l.49-14.36,1-28.06.64-18.65A6.36,6.36,0,0,1,434.3,658a6.25,6.25,0,0,1,3.78-.9c2.1.17,4.68.37,7.69.59,4.89.36,10.92.78,17.94,1.22,13,.82,29.31,1.7,48,2.42,52,2,122.2,2.67,188.88-3.17,3-.26,6.1-.55,9.13-.84a6.26,6.26,0,0,1,3.48.66,5.159,5.159,0,0,1,.86.54,6.14,6.14,0,0,1,2,2.46,3.564,3.564,0,0,1,.25.61A6.279,6.279,0,0,1,716.67,664.18Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
|
||||||
|
<path id="Path_322" data-name="Path 322" d="M377.44,677.87v3.19a6.13,6.13,0,0,1-3.5,5.54l-40.1.77a6.12,6.12,0,0,1-3.57-5.57v-3Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
|
||||||
|
<path id="Path_323" data-name="Path 323" d="M298.59,515.57l-52.25,1V507.9l52.25-1Z" fill="#3f3d56"/>
|
||||||
|
<path id="Path_324" data-name="Path 324" d="M298.59,515.57l-52.25,1V507.9l52.25-1Z" opacity="0.1"/>
|
||||||
|
<path id="Path_325" data-name="Path 325" d="M300.59,515.57l-52.25,1V507.9l52.25-1Z" fill="#3f3d56"/>
|
||||||
|
<path id="Path_326" data-name="Path 326" d="M758.56,679.87v3.19a6.13,6.13,0,0,0,3.5,5.54l40.1.77a6.12,6.12,0,0,0,3.57-5.57v-3Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
|
||||||
|
<path id="Path_327" data-name="Path 327" d="M678.72,517.57l52.25,1V509.9l-52.25-1Z" opacity="0.1"/>
|
||||||
|
<path id="Path_328" data-name="Path 328" d="M676.72,517.57l52.25,1V509.9l-52.25-1Z" fill="#3f3d56"/>
|
||||||
|
<path id="Path_329" data-name="Path 329" d="M534.13,486.79c.08,7-3.16,13.6-5.91,20.07a163.491,163.491,0,0,0-12.66,74.71c.73,11,2.58,22,.73,32.9s-8.43,21.77-19,24.9c17.53,10.45,41.26,9.35,57.76-2.66,8.79-6.4,15.34-15.33,21.75-24.11a97.86,97.86,0,0,1-13.31,44.75A103.43,103.43,0,0,0,637,616.53c4.31-5.81,8.06-12.19,9.72-19.23,3.09-13-1.22-26.51-4.51-39.5a266.055,266.055,0,0,1-6.17-33c-.43-3.56-.78-7.22.1-10.7,1-4.07,3.67-7.51,5.64-11.22,5.6-10.54,5.73-23.3,2.86-34.88s-8.49-22.26-14.06-32.81c-4.46-8.46-9.3-17.31-17.46-22.28-5.1-3.1-11-4.39-16.88-5.64l-25.37-5.43c-5.55-1.19-11.26-2.38-16.87-1.51-9.47,1.48-16.14,8.32-22,15.34-4.59,5.46-15.81,15.71-16.6,22.86-.72,6.59,5.1,17.63,6.09,24.58,1.3,9,2.22,6,7.3,11.52C532,478.05,534.07,482,534.13,486.79Z" transform="translate(-79.34 -172.91)" fill="#3f3d56"/>
|
||||||
|
</g>
|
||||||
|
<g id="docusaurus_keytar" transform="translate(670.271 615.768)">
|
||||||
|
<path id="Path_40" data-name="Path 40" d="M99,52h43.635V69.662H99Z" transform="translate(-49.132 -33.936)" fill="#fff" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_41" data-name="Path 41" d="M13.389,158.195A10.377,10.377,0,0,1,4.4,153a10.377,10.377,0,0,0,8.988,15.584H23.779V158.195Z" transform="translate(-3 -82.47)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_42" data-name="Path 42" d="M66.967,38.083l36.373-2.273V30.615A10.389,10.389,0,0,0,92.95,20.226H46.2l-1.3-2.249a1.5,1.5,0,0,0-2.6,0L41,20.226l-1.3-2.249a1.5,1.5,0,0,0-2.6,0l-1.3,2.249-1.3-2.249a1.5,1.5,0,0,0-2.6,0l-1.3,2.249-.034,0-2.152-2.151a1.5,1.5,0,0,0-2.508.672L25.21,21.4l-2.7-.723a1.5,1.5,0,0,0-1.836,1.837l.722,2.7-2.65.71a1.5,1.5,0,0,0-.673,2.509l2.152,2.152c0,.011,0,.022,0,.033l-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6L20.226,41l-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3A10.389,10.389,0,0,0,30.615,103.34H92.95A10.389,10.389,0,0,0,103.34,92.95V51.393L66.967,49.12a5.53,5.53,0,0,1,0-11.038" transform="translate(-9.836 -17.226)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_43" data-name="Path 43" d="M143,163.779h15.584V143H143Z" transform="translate(-70.275 -77.665)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_44" data-name="Path 44" d="M173.779,148.389a2.582,2.582,0,0,0-.332.033c-.02-.078-.038-.156-.06-.234a2.594,2.594,0,1,0-2.567-4.455q-.086-.088-.174-.175a2.593,2.593,0,1,0-4.461-2.569c-.077-.022-.154-.04-.231-.06a2.6,2.6,0,1,0-5.128,0c-.077.02-.154.038-.231.06a2.594,2.594,0,1,0-4.461,2.569,10.384,10.384,0,1,0,17.314,9.992,2.592,2.592,0,1,0,.332-5.161" transform="translate(-75.08 -75.262)" fill="#44d860" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_45" data-name="Path 45" d="M153,113.389h15.584V103H153Z" transform="translate(-75.08 -58.444)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_46" data-name="Path 46" d="M183.389,108.944a1.3,1.3,0,1,0,0-2.6,1.336,1.336,0,0,0-.166.017c-.01-.039-.019-.078-.03-.117a1.3,1.3,0,0,0-.5-2.5,1.285,1.285,0,0,0-.783.269q-.043-.044-.087-.087a1.285,1.285,0,0,0,.263-.776,1.3,1.3,0,0,0-2.493-.509,5.195,5.195,0,1,0,0,10,1.3,1.3,0,0,0,2.493-.509,1.285,1.285,0,0,0-.263-.776q.044-.043.087-.087a1.285,1.285,0,0,0,.783.269,1.3,1.3,0,0,0,.5-2.5c.011-.038.02-.078.03-.117a1.337,1.337,0,0,0,.166.017" transform="translate(-84.691 -57.894)" fill="#44d860" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_47" data-name="Path 47" d="M52.188,48.292a1.3,1.3,0,0,1-1.3-1.3,3.9,3.9,0,0,0-7.792,0,1.3,1.3,0,1,1-2.6,0,6.493,6.493,0,0,1,12.987,0,1.3,1.3,0,0,1-1.3,1.3" transform="translate(-21.02 -28.41)" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_48" data-name="Path 48" d="M103,139.752h31.168a10.389,10.389,0,0,0,10.389-10.389V93H113.389A10.389,10.389,0,0,0,103,103.389Z" transform="translate(-51.054 -53.638)" fill="#ffff50" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_49" data-name="Path 49" d="M141.1,94.017H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0,10.389H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0,10.389H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0-25.877H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0,10.293H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0,10.389H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m7.782-47.993c-.006,0-.011,0-.018,0-1.605.055-2.365,1.66-3.035,3.077-.7,1.48-1.24,2.443-2.126,2.414-.981-.035-1.542-1.144-2.137-2.317-.683-1.347-1.462-2.876-3.1-2.819-1.582.054-2.344,1.451-3.017,2.684-.715,1.313-1.2,2.112-2.141,2.075-1-.036-1.533-.938-2.149-1.981-.686-1.162-1.479-2.467-3.084-2.423-1.555.053-2.319,1.239-2.994,2.286-.713,1.106-1.213,1.781-2.164,1.741-1.025-.036-1.554-.784-2.167-1.65-.688-.973-1.463-2.074-3.062-2.021a3.815,3.815,0,0,0-2.959,1.879c-.64.812-1.14,1.456-2.2,1.415a.52.52,0,0,0-.037,1.039,3.588,3.588,0,0,0,3.05-1.811c.611-.777,1.139-1.448,2.178-1.483,1-.043,1.47.579,2.179,1.582.674.953,1.438,2.033,2.977,2.089,1.612.054,2.387-1.151,3.074-2.217.614-.953,1.144-1.775,2.156-1.81.931-.035,1.438.7,2.153,1.912.674,1.141,1.437,2.434,3.006,2.491,1.623.056,2.407-1.361,3.09-2.616.592-1.085,1.15-2.109,2.14-2.143.931-.022,1.417.829,2.135,2.249.671,1.326,1.432,2.828,3.026,2.886l.088,0c1.592,0,2.347-1.6,3.015-3.01.592-1.252,1.152-2.431,2.113-2.479Z" transform="translate(-55.378 -38.552)" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_50" data-name="Path 50" d="M83,163.779h20.779V143H83Z" transform="translate(-41.443 -77.665)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<g id="Group_8" data-name="Group 8" transform="matrix(0.966, -0.259, 0.259, 0.966, 51.971, 43.3)">
|
||||||
|
<rect id="Rectangle_3" data-name="Rectangle 3" width="43.906" height="17.333" rx="2" transform="translate(0 0)" fill="#d8d8d8"/>
|
||||||
|
<g id="Group_2" data-name="Group 2" transform="translate(0.728 10.948)">
|
||||||
|
<rect id="Rectangle_4" data-name="Rectangle 4" width="2.537" height="2.537" rx="1" transform="translate(7.985 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_5" data-name="Rectangle 5" width="2.537" height="2.537" rx="1" transform="translate(10.991 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_6" data-name="Rectangle 6" width="2.537" height="2.537" rx="1" transform="translate(13.997 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_7" data-name="Rectangle 7" width="2.537" height="2.537" rx="1" transform="translate(17.003 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_8" data-name="Rectangle 8" width="2.537" height="2.537" rx="1" transform="translate(20.009 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_9" data-name="Rectangle 9" width="2.537" height="2.537" rx="1" transform="translate(23.015 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_10" data-name="Rectangle 10" width="2.537" height="2.537" rx="1" transform="translate(26.021 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_11" data-name="Rectangle 11" width="2.537" height="2.537" rx="1" transform="translate(29.028 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_12" data-name="Rectangle 12" width="2.537" height="2.537" rx="1" transform="translate(32.034 0)" fill="#4a4a4a"/>
|
||||||
|
<path id="Path_51" data-name="Path 51" d="M.519,0H6.9A.519.519,0,0,1,7.421.52v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.519A.519.519,0,0,1,.519,0ZM35.653,0h6.383a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H35.652a.519.519,0,0,1-.519-.519V.519A.519.519,0,0,1,35.652,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_3" data-name="Group 3" transform="translate(0.728 4.878)">
|
||||||
|
<path id="Path_52" data-name="Path 52" d="M.519,0H2.956a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.519A.519.519,0,0,1,.519,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
<rect id="Rectangle_13" data-name="Rectangle 13" width="2.537" height="2.537" rx="1" transform="translate(3.945 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_14" data-name="Rectangle 14" width="2.537" height="2.537" rx="1" transform="translate(6.951 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_15" data-name="Rectangle 15" width="2.537" height="2.537" rx="1" transform="translate(9.958 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_16" data-name="Rectangle 16" width="2.537" height="2.537" rx="1" transform="translate(12.964 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_17" data-name="Rectangle 17" width="2.537" height="2.537" rx="1" transform="translate(15.97 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_18" data-name="Rectangle 18" width="2.537" height="2.537" rx="1" transform="translate(18.976 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_19" data-name="Rectangle 19" width="2.537" height="2.537" rx="1" transform="translate(21.982 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_20" data-name="Rectangle 20" width="2.537" height="2.537" rx="1" transform="translate(24.988 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_21" data-name="Rectangle 21" width="2.537" height="2.537" rx="1" transform="translate(27.994 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_22" data-name="Rectangle 22" width="2.537" height="2.537" rx="1" transform="translate(31 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_23" data-name="Rectangle 23" width="2.537" height="2.537" rx="1" transform="translate(34.006 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_24" data-name="Rectangle 24" width="2.537" height="2.537" rx="1" transform="translate(37.012 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_25" data-name="Rectangle 25" width="2.537" height="2.537" rx="1" transform="translate(40.018 0)" fill="#4a4a4a"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_4" data-name="Group 4" transform="translate(43.283 4.538) rotate(180)">
|
||||||
|
<path id="Path_53" data-name="Path 53" d="M.519,0H2.956a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.519A.519.519,0,0,1,.519,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
<rect id="Rectangle_26" data-name="Rectangle 26" width="2.537" height="2.537" rx="1" transform="translate(3.945 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_27" data-name="Rectangle 27" width="2.537" height="2.537" rx="1" transform="translate(6.951 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_28" data-name="Rectangle 28" width="2.537" height="2.537" rx="1" transform="translate(9.958 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_29" data-name="Rectangle 29" width="2.537" height="2.537" rx="1" transform="translate(12.964 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_30" data-name="Rectangle 30" width="2.537" height="2.537" rx="1" transform="translate(15.97 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_31" data-name="Rectangle 31" width="2.537" height="2.537" rx="1" transform="translate(18.976 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_32" data-name="Rectangle 32" width="2.537" height="2.537" rx="1" transform="translate(21.982 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_33" data-name="Rectangle 33" width="2.537" height="2.537" rx="1" transform="translate(24.988 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_34" data-name="Rectangle 34" width="2.537" height="2.537" rx="1" transform="translate(27.994 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_35" data-name="Rectangle 35" width="2.537" height="2.537" rx="1" transform="translate(31.001 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_36" data-name="Rectangle 36" width="2.537" height="2.537" rx="1" transform="translate(34.007 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_37" data-name="Rectangle 37" width="2.537" height="2.537" rx="1" transform="translate(37.013 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_38" data-name="Rectangle 38" width="2.537" height="2.537" rx="1" transform="translate(40.018 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_39" data-name="Rectangle 39" width="2.537" height="2.537" rx="1" transform="translate(3.945 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_40" data-name="Rectangle 40" width="2.537" height="2.537" rx="1" transform="translate(6.951 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_41" data-name="Rectangle 41" width="2.537" height="2.537" rx="1" transform="translate(9.958 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_42" data-name="Rectangle 42" width="2.537" height="2.537" rx="1" transform="translate(12.964 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_43" data-name="Rectangle 43" width="2.537" height="2.537" rx="1" transform="translate(15.97 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_44" data-name="Rectangle 44" width="2.537" height="2.537" rx="1" transform="translate(18.976 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_45" data-name="Rectangle 45" width="2.537" height="2.537" rx="1" transform="translate(21.982 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_46" data-name="Rectangle 46" width="2.537" height="2.537" rx="1" transform="translate(24.988 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_47" data-name="Rectangle 47" width="2.537" height="2.537" rx="1" transform="translate(27.994 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_48" data-name="Rectangle 48" width="2.537" height="2.537" rx="1" transform="translate(31.001 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_49" data-name="Rectangle 49" width="2.537" height="2.537" rx="1" transform="translate(34.007 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_50" data-name="Rectangle 50" width="2.537" height="2.537" rx="1" transform="translate(37.013 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_51" data-name="Rectangle 51" width="2.537" height="2.537" rx="1" transform="translate(40.018 0)" fill="#4a4a4a"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_6" data-name="Group 6" transform="translate(0.728 7.883)">
|
||||||
|
<path id="Path_54" data-name="Path 54" d="M.519,0h3.47a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.52A.519.519,0,0,1,.519,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
<g id="Group_5" data-name="Group 5" transform="translate(5.073 0)">
|
||||||
|
<rect id="Rectangle_52" data-name="Rectangle 52" width="2.537" height="2.537" rx="1" transform="translate(0 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_53" data-name="Rectangle 53" width="2.537" height="2.537" rx="1" transform="translate(3.006 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_54" data-name="Rectangle 54" width="2.537" height="2.537" rx="1" transform="translate(6.012 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_55" data-name="Rectangle 55" width="2.537" height="2.537" rx="1" transform="translate(9.018 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_56" data-name="Rectangle 56" width="2.537" height="2.537" rx="1" transform="translate(12.025 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_57" data-name="Rectangle 57" width="2.537" height="2.537" rx="1" transform="translate(15.031 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_58" data-name="Rectangle 58" width="2.537" height="2.537" rx="1" transform="translate(18.037 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_59" data-name="Rectangle 59" width="2.537" height="2.537" rx="1" transform="translate(21.042 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_60" data-name="Rectangle 60" width="2.537" height="2.537" rx="1" transform="translate(24.049 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_61" data-name="Rectangle 61" width="2.537" height="2.537" rx="1" transform="translate(27.055 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_62" data-name="Rectangle 62" width="2.537" height="2.537" rx="1" transform="translate(30.061 0)" fill="#4a4a4a"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_55" data-name="Path 55" d="M.52,0H3.8a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.52A.519.519,0,0,1,.519,0Z" transform="translate(38.234 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_7" data-name="Group 7" transform="translate(0.728 14.084)">
|
||||||
|
<rect id="Rectangle_63" data-name="Rectangle 63" width="2.537" height="2.537" rx="1" transform="translate(0 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_64" data-name="Rectangle 64" width="2.537" height="2.537" rx="1" transform="translate(3.006 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_65" data-name="Rectangle 65" width="2.537" height="2.537" rx="1" transform="translate(6.012 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_66" data-name="Rectangle 66" width="2.537" height="2.537" rx="1" transform="translate(9.018 0)" fill="#4a4a4a"/>
|
||||||
|
<path id="Path_56" data-name="Path 56" d="M.519,0H14.981A.519.519,0,0,1,15.5.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.018V.519A.519.519,0,0,1,.519,0Zm15.97,0h1.874a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H16.489a.519.519,0,0,1-.519-.519V.519A.519.519,0,0,1,16.489,0Z" transform="translate(12.024 0)" fill="#4a4a4a" fill-rule="evenodd"/>
|
||||||
|
<rect id="Rectangle_67" data-name="Rectangle 67" width="2.537" height="2.537" rx="1" transform="translate(31.376 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_68" data-name="Rectangle 68" width="2.537" height="2.537" rx="1" transform="translate(34.382 0)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_69" data-name="Rectangle 69" width="2.537" height="2.537" rx="1" transform="translate(40.018 0)" fill="#4a4a4a"/>
|
||||||
|
<path id="Path_57" data-name="Path 57" d="M2.537,0V.561a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,.561V0Z" transform="translate(39.736 1.08) rotate(180)" fill="#4a4a4a"/>
|
||||||
|
<path id="Path_58" data-name="Path 58" d="M2.537,0V.561a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,.561V0Z" transform="translate(37.2 1.456)" fill="#4a4a4a"/>
|
||||||
|
</g>
|
||||||
|
<rect id="Rectangle_70" data-name="Rectangle 70" width="42.273" height="1.127" rx="0.564" transform="translate(0.915 0.556)" fill="#4a4a4a"/>
|
||||||
|
<rect id="Rectangle_71" data-name="Rectangle 71" width="2.37" height="0.752" rx="0.376" transform="translate(1.949 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_72" data-name="Rectangle 72" width="2.37" height="0.752" rx="0.376" transform="translate(5.193 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_73" data-name="Rectangle 73" width="2.37" height="0.752" rx="0.376" transform="translate(7.688 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_74" data-name="Rectangle 74" width="2.37" height="0.752" rx="0.376" transform="translate(10.183 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_75" data-name="Rectangle 75" width="2.37" height="0.752" rx="0.376" transform="translate(12.679 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_76" data-name="Rectangle 76" width="2.37" height="0.752" rx="0.376" transform="translate(15.797 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_77" data-name="Rectangle 77" width="2.37" height="0.752" rx="0.376" transform="translate(18.292 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_78" data-name="Rectangle 78" width="2.37" height="0.752" rx="0.376" transform="translate(20.788 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_79" data-name="Rectangle 79" width="2.37" height="0.752" rx="0.376" transform="translate(23.283 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_80" data-name="Rectangle 80" width="2.37" height="0.752" rx="0.376" transform="translate(26.402 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_81" data-name="Rectangle 81" width="2.37" height="0.752" rx="0.376" transform="translate(28.897 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_82" data-name="Rectangle 82" width="2.37" height="0.752" rx="0.376" transform="translate(31.393 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_83" data-name="Rectangle 83" width="2.37" height="0.752" rx="0.376" transform="translate(34.512 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_84" data-name="Rectangle 84" width="2.37" height="0.752" rx="0.376" transform="translate(37.007 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
<rect id="Rectangle_85" data-name="Rectangle 85" width="2.37" height="0.752" rx="0.376" transform="translate(39.502 0.744)" fill="#d8d8d8" opacity="0.136"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_59" data-name="Path 59" d="M123.779,148.389a2.583,2.583,0,0,0-.332.033c-.02-.078-.038-.156-.06-.234a2.594,2.594,0,1,0-2.567-4.455q-.086-.088-.174-.175a2.593,2.593,0,1,0-4.461-2.569c-.077-.022-.154-.04-.231-.06a2.6,2.6,0,1,0-5.128,0c-.077.02-.154.038-.231.06a2.594,2.594,0,1,0-4.461,2.569,10.384,10.384,0,1,0,17.314,9.992,2.592,2.592,0,1,0,.332-5.161" transform="translate(-51.054 -75.262)" fill="#44d860" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_60" data-name="Path 60" d="M83,113.389h20.779V103H83Z" transform="translate(-41.443 -58.444)" fill="#3ecc5f" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_61" data-name="Path 61" d="M123.389,108.944a1.3,1.3,0,1,0,0-2.6,1.338,1.338,0,0,0-.166.017c-.01-.039-.019-.078-.03-.117a1.3,1.3,0,0,0-.5-2.5,1.285,1.285,0,0,0-.783.269q-.043-.044-.087-.087a1.285,1.285,0,0,0,.263-.776,1.3,1.3,0,0,0-2.493-.509,5.195,5.195,0,1,0,0,10,1.3,1.3,0,0,0,2.493-.509,1.285,1.285,0,0,0-.263-.776q.044-.043.087-.087a1.285,1.285,0,0,0,.783.269,1.3,1.3,0,0,0,.5-2.5c.011-.038.02-.078.03-.117a1.335,1.335,0,0,0,.166.017" transform="translate(-55.859 -57.894)" fill="#44d860" fill-rule="evenodd"/>
|
||||||
|
<path id="Path_62" data-name="Path 62" d="M141.8,38.745a1.41,1.41,0,0,1-.255-.026,1.309,1.309,0,0,1-.244-.073,1.349,1.349,0,0,1-.224-.119,1.967,1.967,0,0,1-.2-.161,1.52,1.52,0,0,1-.161-.2,1.282,1.282,0,0,1-.218-.722,1.41,1.41,0,0,1,.026-.255,1.5,1.5,0,0,1,.072-.244,1.364,1.364,0,0,1,.12-.223,1.252,1.252,0,0,1,.358-.358,1.349,1.349,0,0,1,.224-.119,1.309,1.309,0,0,1,.244-.073,1.2,1.2,0,0,1,.509,0,1.262,1.262,0,0,1,.468.192,1.968,1.968,0,0,1,.2.161,1.908,1.908,0,0,1,.161.2,1.322,1.322,0,0,1,.12.223,1.361,1.361,0,0,1,.1.5,1.317,1.317,0,0,1-.379.919,1.968,1.968,0,0,1-.2.161,1.346,1.346,0,0,1-.223.119,1.332,1.332,0,0,1-.5.1m10.389-.649a1.326,1.326,0,0,1-.92-.379,1.979,1.979,0,0,1-.161-.2,1.282,1.282,0,0,1-.218-.722,1.326,1.326,0,0,1,.379-.919,1.967,1.967,0,0,1,.2-.161,1.351,1.351,0,0,1,.224-.119,1.308,1.308,0,0,1,.244-.073,1.2,1.2,0,0,1,.509,0,1.262,1.262,0,0,1,.468.192,1.967,1.967,0,0,1,.2.161,1.326,1.326,0,0,1,.379.919,1.461,1.461,0,0,1-.026.255,1.323,1.323,0,0,1-.073.244,1.847,1.847,0,0,1-.119.223,1.911,1.911,0,0,1-.161.2,1.967,1.967,0,0,1-.2.161,1.294,1.294,0,0,1-.722.218" transform="translate(-69.074 -26.006)" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
<g id="React-icon" transform="translate(906.3 541.56)">
|
||||||
|
<path id="Path_330" data-name="Path 330" d="M263.668,117.179c0-5.827-7.3-11.35-18.487-14.775,2.582-11.4,1.434-20.477-3.622-23.382a7.861,7.861,0,0,0-4.016-1v4a4.152,4.152,0,0,1,2.044.466c2.439,1.4,3.5,6.724,2.672,13.574-.2,1.685-.52,3.461-.914,5.272a86.9,86.9,0,0,0-11.386-1.954,87.469,87.469,0,0,0-7.459-8.965c5.845-5.433,11.332-8.41,15.062-8.41V78h0c-4.931,0-11.386,3.514-17.913,9.611-6.527-6.061-12.982-9.539-17.913-9.539v4c3.712,0,9.216,2.959,15.062,8.356a84.687,84.687,0,0,0-7.405,8.947,83.732,83.732,0,0,0-11.4,1.972c-.412-1.793-.717-3.532-.932-5.2-.843-6.85.2-12.175,2.618-13.592a3.991,3.991,0,0,1,2.062-.466v-4h0a8,8,0,0,0-4.052,1c-5.039,2.9-6.168,11.96-3.568,23.328-11.153,3.443-18.415,8.947-18.415,14.757,0,5.828,7.3,11.35,18.487,14.775-2.582,11.4-1.434,20.477,3.622,23.382a7.882,7.882,0,0,0,4.034,1c4.931,0,11.386-3.514,17.913-9.611,6.527,6.061,12.982,9.539,17.913,9.539a8,8,0,0,0,4.052-1c5.039-2.9,6.168-11.96,3.568-23.328C256.406,128.511,263.668,122.988,263.668,117.179Zm-23.346-11.96c-.663,2.313-1.488,4.7-2.421,7.083-.735-1.434-1.506-2.869-2.349-4.3-.825-1.434-1.7-2.833-2.582-4.2C235.517,104.179,237.974,104.645,240.323,105.219Zm-8.212,19.1c-1.4,2.421-2.833,4.716-4.321,6.85-2.672.233-5.379.359-8.1.359-2.708,0-5.415-.126-8.069-.341q-2.232-3.2-4.339-6.814-2.044-3.523-3.73-7.136c1.112-2.4,2.367-4.805,3.712-7.154,1.4-2.421,2.833-4.716,4.321-6.85,2.672-.233,5.379-.359,8.1-.359,2.708,0,5.415.126,8.069.341q2.232,3.2,4.339,6.814,2.044,3.523,3.73,7.136C234.692,119.564,233.455,121.966,232.11,124.315Zm5.792-2.331c.968,2.4,1.793,4.805,2.474,7.136-2.349.574-4.823,1.058-7.387,1.434.879-1.381,1.757-2.8,2.582-4.25C236.4,124.871,237.167,123.419,237.9,121.984ZM219.72,141.116a73.921,73.921,0,0,1-4.985-5.738c1.614.072,3.263.126,4.931.126,1.685,0,3.353-.036,4.985-.126A69.993,69.993,0,0,1,219.72,141.116ZM206.38,130.555c-2.546-.377-5-.843-7.352-1.417.663-2.313,1.488-4.7,2.421-7.083.735,1.434,1.506,2.869,2.349,4.3S205.5,129.192,206.38,130.555ZM219.63,93.241a73.924,73.924,0,0,1,4.985,5.738c-1.614-.072-3.263-.126-4.931-.126-1.686,0-3.353.036-4.985.126A69.993,69.993,0,0,1,219.63,93.241ZM206.362,103.8c-.879,1.381-1.757,2.8-2.582,4.25-.825,1.434-1.6,2.869-2.331,4.3-.968-2.4-1.793-4.805-2.474-7.136C201.323,104.663,203.8,104.179,206.362,103.8Zm-16.227,22.449c-6.348-2.708-10.454-6.258-10.454-9.073s4.106-6.383,10.454-9.073c1.542-.663,3.228-1.255,4.967-1.811a86.122,86.122,0,0,0,4.034,10.92,84.9,84.9,0,0,0-3.981,10.866C193.38,127.525,191.694,126.915,190.134,126.252Zm9.647,25.623c-2.439-1.4-3.5-6.724-2.672-13.574.2-1.686.52-3.461.914-5.272a86.9,86.9,0,0,0,11.386,1.954,87.465,87.465,0,0,0,7.459,8.965c-5.845,5.433-11.332,8.41-15.062,8.41A4.279,4.279,0,0,1,199.781,151.875Zm42.532-13.663c.843,6.85-.2,12.175-2.618,13.592a3.99,3.99,0,0,1-2.062.466c-3.712,0-9.216-2.959-15.062-8.356a84.689,84.689,0,0,0,7.405-8.947,83.731,83.731,0,0,0,11.4-1.972A50.194,50.194,0,0,1,242.313,138.212Zm6.9-11.96c-1.542.663-3.228,1.255-4.967,1.811a86.12,86.12,0,0,0-4.034-10.92,84.9,84.9,0,0,0,3.981-10.866c1.775.556,3.461,1.165,5.039,1.829,6.348,2.708,10.454,6.258,10.454,9.073C259.67,119.994,255.564,123.562,249.216,126.252Z" fill="#61dafb"/>
|
||||||
|
<path id="Path_331" data-name="Path 331" d="M320.8,78.4Z" transform="translate(-119.082 -0.328)" fill="#61dafb"/>
|
||||||
|
<circle id="Ellipse_112" data-name="Ellipse 112" cx="8.194" cy="8.194" r="8.194" transform="translate(211.472 108.984)" fill="#61dafb"/>
|
||||||
|
<path id="Path_332" data-name="Path 332" d="M520.5,78.1Z" transform="translate(-282.975 -0.082)" fill="#61dafb"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 35 KiB |
40
website/static/img/undraw_docusaurus_tree.svg
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1129" height="663" viewBox="0 0 1129 663">
|
||||||
|
<title>Focus on What Matters</title>
|
||||||
|
<circle cx="321" cy="321" r="321" fill="#f2f2f2" />
|
||||||
|
<ellipse cx="559" cy="635.49998" rx="514" ry="27.50002" fill="#3f3d56" />
|
||||||
|
<ellipse cx="558" cy="627" rx="460" ry="22" opacity="0.2" />
|
||||||
|
<rect x="131" y="152.5" width="840" height="50" fill="#3f3d56" />
|
||||||
|
<path d="M166.5,727.3299A21.67009,21.67009,0,0,0,188.1701,749H984.8299A21.67009,21.67009,0,0,0,1006.5,727.3299V296h-840Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
|
||||||
|
<path d="M984.8299,236H188.1701A21.67009,21.67009,0,0,0,166.5,257.6701V296h840V257.6701A21.67009,21.67009,0,0,0,984.8299,236Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
|
||||||
|
<path d="M984.8299,236H188.1701A21.67009,21.67009,0,0,0,166.5,257.6701V296h840V257.6701A21.67009,21.67009,0,0,0,984.8299,236Z" transform="translate(-35.5 -118.5)" opacity="0.2" />
|
||||||
|
<circle cx="181" cy="147.5" r="13" fill="#3f3d56" />
|
||||||
|
<circle cx="217" cy="147.5" r="13" fill="#3f3d56" />
|
||||||
|
<circle cx="253" cy="147.5" r="13" fill="#3f3d56" />
|
||||||
|
<rect x="168" y="213.5" width="337" height="386" rx="5.33505" fill="#606060" />
|
||||||
|
<rect x="603" y="272.5" width="284" height="22" rx="5.47638" fill="#2e8555" />
|
||||||
|
<rect x="537" y="352.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
|
||||||
|
<rect x="537" y="396.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
|
||||||
|
<rect x="537" y="440.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
|
||||||
|
<rect x="537" y="484.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
|
||||||
|
<rect x="865" y="552.5" width="88" height="26" rx="7.02756" fill="#3ecc5f" />
|
||||||
|
<path d="M1088.60287,624.61594a30.11371,30.11371,0,0,0,3.98291-15.266c0-13.79652-8.54358-24.98081-19.08256-24.98081s-19.08256,11.18429-19.08256,24.98081a30.11411,30.11411,0,0,0,3.98291,15.266,31.248,31.248,0,0,0,0,30.53213,31.248,31.248,0,0,0,0,30.53208,31.248,31.248,0,0,0,0,30.53208,30.11408,30.11408,0,0,0-3.98291,15.266c0,13.79652,8.54353,24.98081,19.08256,24.98081s19.08256-11.18429,19.08256-24.98081a30.11368,30.11368,0,0,0-3.98291-15.266,31.248,31.248,0,0,0,0-30.53208,31.248,31.248,0,0,0,0-30.53208,31.248,31.248,0,0,0,0-30.53213Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
|
||||||
|
<ellipse cx="1038.00321" cy="460.31783" rx="19.08256" ry="24.9808" fill="#3f3d56" />
|
||||||
|
<ellipse cx="1038.00321" cy="429.78574" rx="19.08256" ry="24.9808" fill="#3f3d56" />
|
||||||
|
<path d="M1144.93871,339.34489a91.61081,91.61081,0,0,0,7.10658-10.46092l-50.141-8.23491,54.22885.4033a91.566,91.566,0,0,0,1.74556-72.42605l-72.75449,37.74139,67.09658-49.32086a91.41255,91.41255,0,1,0-150.971,102.29805,91.45842,91.45842,0,0,0-10.42451,16.66946l65.0866,33.81447-69.40046-23.292a91.46011,91.46011,0,0,0,14.73837,85.83669,91.40575,91.40575,0,1,0,143.68892,0,91.41808,91.41808,0,0,0,0-113.02862Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
|
||||||
|
<path d="M981.6885,395.8592a91.01343,91.01343,0,0,0,19.56129,56.51431,91.40575,91.40575,0,1,0,143.68892,0C1157.18982,436.82067,981.6885,385.60008,981.6885,395.8592Z" transform="translate(-35.5 -118.5)" opacity="0.1" />
|
||||||
|
<path d="M365.62,461.43628H477.094v45.12043H365.62Z" transform="translate(-35.5 -118.5)" fill="#fff" fill-rule="evenodd" />
|
||||||
|
<path d="M264.76252,608.74122a26.50931,26.50931,0,0,1-22.96231-13.27072,26.50976,26.50976,0,0,0,22.96231,39.81215H291.304V608.74122Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
|
||||||
|
<path d="M384.17242,468.57061l92.92155-5.80726V449.49263a26.54091,26.54091,0,0,0-26.54143-26.54143H331.1161l-3.31768-5.74622a3.83043,3.83043,0,0,0-6.63536,0l-3.31768,5.74622-3.31767-5.74622a3.83043,3.83043,0,0,0-6.63536,0l-3.31768,5.74622L301.257,417.205a3.83043,3.83043,0,0,0-6.63536,0L291.304,422.9512c-.02919,0-.05573.004-.08625.004l-5.49674-5.49541a3.8293,3.8293,0,0,0-6.4071,1.71723l-1.81676,6.77338L270.607,424.1031a3.82993,3.82993,0,0,0-4.6912,4.69253l1.84463,6.89148-6.77072,1.81411a3.8315,3.8315,0,0,0-1.71988,6.40975l5.49673,5.49673c0,.02787-.004.05574-.004.08493l-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74621,3.31768L259.0163,466.081a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31767a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31767a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768L259.0163,558.976a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768A26.54091,26.54091,0,0,0,291.304,635.28265H450.55254A26.5409,26.5409,0,0,0,477.094,608.74122V502.5755l-92.92155-5.80727a14.12639,14.12639,0,0,1,0-28.19762" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
|
||||||
|
<path d="M424.01111,635.28265h39.81214V582.19979H424.01111Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
|
||||||
|
<path d="M490.36468,602.10586a6.60242,6.60242,0,0,0-.848.08493c-.05042-.19906-.09821-.39945-.15393-.59852A6.62668,6.62668,0,1,0,482.80568,590.21q-.2203-.22491-.44457-.44589a6.62391,6.62391,0,1,0-11.39689-6.56369c-.1964-.05575-.39414-.10218-.59056-.15262a6.63957,6.63957,0,1,0-13.10086,0c-.1964.05042-.39414.09687-.59056.15262a6.62767,6.62767,0,1,0-11.39688,6.56369,26.52754,26.52754,0,1,0,44.23127,25.52756,6.6211,6.6211,0,1,0,.848-13.18579" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
|
||||||
|
<path d="M437.28182,555.65836H477.094V529.11693H437.28182Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
|
||||||
|
<path d="M490.36468,545.70532a3.31768,3.31768,0,0,0,0-6.63536,3.41133,3.41133,0,0,0-.42333.04247c-.02655-.09953-.04911-.19907-.077-.29859a3.319,3.319,0,0,0-1.278-6.37923,3.28174,3.28174,0,0,0-2.00122.68742q-.10947-.11346-.22294-.22295a3.282,3.282,0,0,0,.67149-1.98265,3.31768,3.31768,0,0,0-6.37-1.2992,13.27078,13.27078,0,1,0,0,25.54082,3.31768,3.31768,0,0,0,6.37-1.2992,3.282,3.282,0,0,0-.67149-1.98265q.11347-.10947.22294-.22294a3.28174,3.28174,0,0,0,2.00122.68742,3.31768,3.31768,0,0,0,1.278-6.37923c.02786-.0982.05042-.19907.077-.29859a3.41325,3.41325,0,0,0,.42333.04246" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
|
||||||
|
<path d="M317.84538,466.081a3.31768,3.31768,0,0,1-3.31767-3.31768,9.953,9.953,0,1,0-19.90608,0,3.31768,3.31768,0,1,1-6.63535,0,16.58839,16.58839,0,1,1,33.17678,0,3.31768,3.31768,0,0,1-3.31768,3.31768" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
|
||||||
|
<path d="M370.92825,635.28265h79.62429A26.5409,26.5409,0,0,0,477.094,608.74122v-92.895H397.46968a26.54091,26.54091,0,0,0-26.54143,26.54143Z" transform="translate(-35.5 -118.5)" fill="#ffff50" fill-rule="evenodd" />
|
||||||
|
<path d="M457.21444,556.98543H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,1,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,1,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0-66.10674H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.29459H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414M477.094,474.19076c-.01592,0-.0292-.008-.04512-.00663-4.10064.13934-6.04083,4.24132-7.75274,7.86024-1.78623,3.78215-3.16771,6.24122-5.43171,6.16691-2.50685-.09024-3.94007-2.92222-5.45825-5.91874-1.74377-3.44243-3.73438-7.34667-7.91333-7.20069-4.04227.138-5.98907,3.70784-7.70631,6.857-1.82738,3.35484-3.07084,5.39455-5.46887,5.30033-2.55727-.09289-3.91619-2.39536-5.48877-5.06013-1.75306-2.96733-3.77951-6.30359-7.8775-6.18946-3.97326.13669-5.92537,3.16507-7.64791,5.83912-1.82207,2.82666-3.09872,4.5492-5.52725,4.447-2.61832-.09289-3.9706-2.00388-5.53522-4.21611-1.757-2.4856-3.737-5.299-7.82308-5.16231-3.88567.13271-5.83779,2.61434-7.559,4.80135-1.635,2.07555-2.9116,3.71846-5.61218,3.615a1.32793,1.32793,0,1,0-.09555,2.65414c4.00377.134,6.03154-2.38873,7.79257-4.6275,1.562-1.9853,2.91027-3.69855,5.56441-3.78879,2.55594-.10882,3.75429,1.47968,5.56707,4.04093,1.7212,2.43385,3.67465,5.19416,7.60545,5.33616,4.11789.138,6.09921-2.93946,7.8536-5.66261,1.56861-2.43385,2.92221-4.53461,5.50734-4.62352,2.37944-.08892,3.67466,1.79154,5.50072,4.885,1.72121,2.91557,3.67069,6.21865,7.67977,6.36463,4.14709.14332,6.14965-3.47693,7.89475-6.68181,1.51155-2.77092,2.93814-5.38791,5.46621-5.4755,2.37944-.05573,3.62025,2.11668,5.45558,5.74622,1.71459,3.388,3.65875,7.22591,7.73019,7.37321l.22429.004c4.06614,0,5.99571-4.08074,7.70364-7.68905,1.51154-3.19825,2.94211-6.21069,5.3972-6.33411Z" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
|
||||||
|
<path d="M344.38682,635.28265h53.08286V582.19979H344.38682Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
|
||||||
|
<path d="M424.01111,602.10586a6.60242,6.60242,0,0,0-.848.08493c-.05042-.19906-.09821-.39945-.15394-.59852A6.62667,6.62667,0,1,0,416.45211,590.21q-.2203-.22491-.44458-.44589a6.62391,6.62391,0,1,0-11.39689-6.56369c-.1964-.05575-.39413-.10218-.59054-.15262a6.63957,6.63957,0,1,0-13.10084,0c-.19641.05042-.39414.09687-.59055.15262a6.62767,6.62767,0,1,0-11.39689,6.56369,26.52755,26.52755,0,1,0,44.2313,25.52756,6.6211,6.6211,0,1,0,.848-13.18579" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
|
||||||
|
<path d="M344.38682,555.65836h53.08286V529.11693H344.38682Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
|
||||||
|
<path d="M410.74039,545.70532a3.31768,3.31768,0,1,0,0-6.63536,3.41133,3.41133,0,0,0-.42333.04247c-.02655-.09953-.04911-.19907-.077-.29859a3.319,3.319,0,0,0-1.278-6.37923,3.28174,3.28174,0,0,0-2.00122.68742q-.10947-.11346-.22294-.22295a3.282,3.282,0,0,0,.67149-1.98265,3.31768,3.31768,0,0,0-6.37-1.2992,13.27078,13.27078,0,1,0,0,25.54082,3.31768,3.31768,0,0,0,6.37-1.2992,3.282,3.282,0,0,0-.67149-1.98265q.11347-.10947.22294-.22294a3.28174,3.28174,0,0,0,2.00122.68742,3.31768,3.31768,0,0,0,1.278-6.37923c.02786-.0982.05042-.19907.077-.29859a3.41325,3.41325,0,0,0,.42333.04246" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
|
||||||
|
<path d="M424.01111,447.8338a3.60349,3.60349,0,0,1-.65028-.06636,3.34415,3.34415,0,0,1-.62372-.18579,3.44679,3.44679,0,0,1-.572-.30522,5.02708,5.02708,0,0,1-.50429-.4114,3.88726,3.88726,0,0,1-.41007-.50428,3.27532,3.27532,0,0,1-.55737-1.84463,3.60248,3.60248,0,0,1,.06636-.65027,3.82638,3.82638,0,0,1,.18447-.62373,3.48858,3.48858,0,0,1,.30656-.57064,3.197,3.197,0,0,1,.91436-.91568,3.44685,3.44685,0,0,1,.572-.30523,3.344,3.344,0,0,1,.62372-.18578,3.06907,3.06907,0,0,1,1.30053,0,3.22332,3.22332,0,0,1,1.19436.491,5.02835,5.02835,0,0,1,.50429.41139,4.8801,4.8801,0,0,1,.41139.50429,3.38246,3.38246,0,0,1,.30522.57064,3.47806,3.47806,0,0,1,.25215,1.274A3.36394,3.36394,0,0,1,426.36,446.865a5.02708,5.02708,0,0,1-.50429.4114,3.3057,3.3057,0,0,1-1.84463.55737m26.54143-1.65884a3.38754,3.38754,0,0,1-2.35024-.96877,5.04185,5.04185,0,0,1-.41007-.50428,3.27532,3.27532,0,0,1-.55737-1.84463,3.38659,3.38659,0,0,1,.96744-2.34892,5.02559,5.02559,0,0,1,.50429-.41139,3.44685,3.44685,0,0,1,.572-.30523,3.3432,3.3432,0,0,1,.62373-.18579,3.06952,3.06952,0,0,1,1.30052,0,3.22356,3.22356,0,0,1,1.19436.491,5.02559,5.02559,0,0,1,.50429.41139,3.38792,3.38792,0,0,1,.96876,2.34892,3.72635,3.72635,0,0,1-.06636.65026,3.37387,3.37387,0,0,1-.18579.62373,4.71469,4.71469,0,0,1-.30522.57064,4.8801,4.8801,0,0,1-.41139.50429,5.02559,5.02559,0,0,1-.50429.41139,3.30547,3.30547,0,0,1-1.84463.55737" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
167
website/static/img/webrtc_logo.svg
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
height="169.79764"
|
||||||
|
width="141.23518"
|
||||||
|
version="1.1"
|
||||||
|
id="svg886"
|
||||||
|
sodipodi:docname="webrtc_logo.svg"
|
||||||
|
inkscape:version="1.1.2 (b8e25be8, 2022-02-05)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs890" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview888"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:zoom="2.2754098"
|
||||||
|
inkscape:cx="122.83501"
|
||||||
|
inkscape:cy="146.78674"
|
||||||
|
inkscape:window-width="1512"
|
||||||
|
inkscape:window-height="916"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="38"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg886" />
|
||||||
|
<metadata
|
||||||
|
id="metadata824">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.57670517,0,0,0.57670517,-73.599027,-196.44729)"
|
||||||
|
id="g884">
|
||||||
|
<g
|
||||||
|
fill="#333333"
|
||||||
|
id="g838">
|
||||||
|
<path
|
||||||
|
d="m 161.87,627.52 -6.9796,-25.887 -7.068,25.887 q -0.8246,2.945 -1.3252,4.2408 -0.4712,1.2664 -1.6786,2.2971 -1.2074,1.0013 -3.21,1.0013 -1.6198,0 -2.68,-0.61845 -1.0308,-0.589 -1.6786,-1.6786 -0.6479,-1.1191 -1.0602,-2.621 -0.4123,-1.5314 -0.73625,-2.8272 l -7.1858,-29.067 q -0.6479,-2.5327 -0.6479,-3.858 0,-1.6786 1.178,-2.8272 1.178,-1.1486 2.9156,-1.1486 2.3854,0 3.21,1.5314 0.8246,1.5314 1.443,4.447 l 5.6544,25.209 6.3318,-23.589 q 0.7068,-2.7094 1.2664,-4.123 0.55955,-1.4136 1.8259,-2.4444 1.26635,-1.0308 3.4456,-1.0308 2.2088,0 3.4162,1.0896 1.2369,1.0602 1.7081,2.3266 0.4712,1.2664 1.2664,4.1819 l 6.3907,23.589 5.6544,-25.209 q 0.4123,-1.9732 0.7657,-3.0922 0.38285,-1.1191 1.2664,-2.0026 0.91295,-0.8835 2.621,-0.8835 1.7081,0 2.8861,1.1486 1.2074,1.1191 1.2074,2.8272 0,1.2074 -0.6479,3.858 l -7.1858,29.067 q -0.73625,2.945 -1.2369,4.3292 -0.4712,1.3547 -1.6492,2.3854 -1.1486,1.0308 -3.269,1.0308 -2.0026,0 -3.21,-1.0013 -1.2075,-1.0013 -1.6787,-2.2382 -0.4712,-1.2664 -1.3252,-4.2997 z"
|
||||||
|
id="path826" />
|
||||||
|
<path
|
||||||
|
d="m 208.25,620.69 h -15.726 q 0.0294,2.7388 1.0896,4.8298 1.0896,2.091 2.8566,3.1512 1.7964,1.0602 3.9463,1.0602 1.443,0 2.621,-0.32395 1.2074,-0.3534 2.3266,-1.0602 1.1191,-0.73625 2.0615,-1.5608 0.9424,-0.8246 2.4444,-2.2382 0.61845,-0.5301 1.767,-0.5301 1.2369,0 2.0026,0.67735 0.7657,0.67735 0.7657,1.9142 0,1.0896 -0.85405,2.5622 -0.85405,1.443 -2.5916,2.7978 -1.7081,1.3252 -4.3292,2.2088 -2.5916,0.8835 -5.9784,0.8835 -7.7454,0 -12.045,-4.4175 -4.2997,-4.4175 -4.2997,-11.986 0,-3.5634 1.0602,-6.5968 1.0602,-3.0628 3.0922,-5.2421 2.032,-2.1793 5.0065,-3.3278 2.9744,-1.178 6.5968,-1.178 4.712,0 8.0693,2.0026 3.3868,1.9732 5.0654,5.1243 1.6786,3.1512 1.6786,6.4201 0,3.0334 -1.7376,3.9463 -1.7376,0.8835 -4.8887,0.8835 z m -15.726,-4.5648 h 14.578 q -0.2945,-4.123 -2.2382,-6.155 -1.9142,-2.0615 -5.0654,-2.0615 -3.0039,0 -4.9476,2.091 -1.9142,2.0615 -2.3266,6.1256 z"
|
||||||
|
id="path828" />
|
||||||
|
<path
|
||||||
|
d="m 228.22,595.01 v 12.281 q 2.2676,-2.356 4.6236,-3.5929 2.356,-1.2664 5.8311,-1.2664 4.0052,0 7.0091,1.9143 3.0334,1.8848 4.6826,5.5072 1.6787,3.5929 1.6787,8.5405 0,3.6518 -0.9424,6.7146 -0.91296,3.0334 -2.68,5.2716 -1.76704,2.2382 -4.2997,3.4751 -2.5032,1.2074 -5.5366,1.2074 -1.8554,0 -3.5046,-0.44175 -1.6198,-0.44175 -2.7683,-1.1486 -1.1486,-0.73625 -1.9732,-1.502 -0.79515,-0.7657 -2.1204,-2.2971 v 0.79515 q 0,2.2676 -1.0896,3.4456 -1.0896,1.1486 -2.7683,1.1486 -1.7081,0 -2.7388,-1.1486 -1.0013,-1.178 -1.0013,-3.4456 v -35.104 q 0,-2.4444 0.97185,-3.6812 1.0013,-1.2664 2.7683,-1.2664 1.8554,0 2.8566,1.2074 1.0013,1.178 1.0013,3.3868 z m 0.38285,23.884 q 0,4.8004 2.1793,7.392 2.2088,2.5622 5.7722,2.5622 3.0334,0 5.2126,-2.621 2.2088,-2.6505 2.2088,-7.5686 0,-3.1806 -0.91295,-5.4777 -0.91295,-2.2971 -2.5916,-3.534 -1.6786,-1.2664 -3.9168,-1.2664 -2.2971,0 -4.0936,1.2664 -1.7964,1.2369 -2.8272,3.6224 -1.0308,2.356 -1.0308,5.625 z"
|
||||||
|
id="path830" />
|
||||||
|
<path
|
||||||
|
d="m 270.86,615.86 h -3.0628 v 13.871 q 0,2.7388 -1.2074,4.0346 -1.2074,1.2958 -3.1512,1.2958 -2.091,0 -3.2395,-1.3547 -1.1486,-1.3547 -1.1486,-3.9758 v -33.22 q 0,-2.8272 1.2664,-4.0936 1.2664,-1.2664 4.0936,-1.2664 h 14.224 q 2.945,0 5.036,0.26505 2.091,0.2356 3.7696,1.0013 2.032,0.85405 3.5929,2.4444 1.5608,1.5903 2.356,3.7107 0.8246,2.091 0.8246,4.447 0,4.8298 -2.7388,7.7159 -2.7094,2.8861 -8.246,4.0936 2.3266,1.2369 4.447,3.6518 2.1204,2.4149 3.7696,5.1538 1.6786,2.7094 2.5916,4.9182 0.9424,2.1793 0.9424,3.0039 0,0.85405 -0.55955,1.7081 -0.5301,0.8246 -1.4725,1.2958 -0.9424,0.50065 -2.1793,0.50065 -1.4725,0 -2.4738,-0.7068 -1.0013,-0.67735 -1.7376,-1.7376 -0.7068,-1.0602 -1.9437,-3.1217 l -3.5046,-5.8311 q -1.8848,-3.21 -3.3868,-4.8887 -1.4725,-1.6786 -3.0039,-2.2971 -1.5314,-0.61845 -3.858,-0.61845 z m 5.0065,-18.141 h -8.0693 v 11.868 h 7.8337 q 3.1512,0 5.301,-0.5301 2.1498,-0.55955 3.269,-1.8554 1.1486,-1.3252 1.1486,-3.6224 0,-1.7965 -0.91295,-3.1512 -0.91295,-1.3842 -2.5327,-2.0615 -1.5314,-0.6479 -6.0372,-0.6479 z"
|
||||||
|
id="path832" />
|
||||||
|
<path
|
||||||
|
d="m 327.61,598.37 h -9.5418 v 31.364 q 0,2.7094 -1.2074,4.0346 -1.2075,1.2958 -3.1217,1.2958 -1.9437,0 -3.1806,-1.3252 -1.2074,-1.3252 -1.2074,-4.0052 V 598.37 h -9.5418 q -2.2382,0 -3.3278,-0.97185 -1.0896,-1.0013 -1.0896,-2.621 0,-1.6786 1.1191,-2.6505 1.1486,-0.97185 3.2984,-0.97185 h 27.801 q 2.2676,0 3.3573,1.0013 1.1191,1.0013 1.1191,2.621 0,1.6198 -1.1191,2.621 -1.1191,0.97185 -3.3573,0.97185 z"
|
||||||
|
id="path834" />
|
||||||
|
<path
|
||||||
|
d="m 372.52,620.69 q 0,2.0615 -1.0308,4.4764 -1.0013,2.3854 -3.1806,4.712 -2.1793,2.2971 -5.566,3.7402 -3.3868,1.443 -7.8926,1.443 -3.4162,0 -6.214,-0.6479 -2.7978,-0.6479 -5.0949,-2.0026 -2.2676,-1.3842 -4.1819,-3.6224 -1.7081,-2.032 -2.9156,-4.5353 -1.2074,-2.5327 -1.8259,-5.3894 -0.589,-2.8566 -0.589,-6.0667 0,-5.2126 1.502,-9.3356 1.5314,-4.123 4.3586,-7.0386 2.8272,-2.945 6.6263,-4.4764 3.799,-1.5314 8.0988,-1.5314 5.2421,0 9.3356,2.091 4.0936,2.091 6.2728,5.1832 2.1793,3.0628 2.1793,5.8017 0,1.502 -1.0602,2.6505 -1.0602,1.1486 -2.5622,1.1486 -1.6786,0 -2.5327,-0.79515 -0.8246,-0.79515 -1.8554,-2.7388 -1.7081,-3.2101 -4.0346,-4.8004 -2.2971,-1.5903 -5.6838,-1.5903 -5.3894,0 -8.5994,4.0936 -3.1806,4.0936 -3.1806,11.633 0,5.036 1.4136,8.3932 1.4136,3.3278 4.0052,4.977 2.5916,1.6492 6.0667,1.6492 3.7696,0 6.3612,-1.8554 2.621,-1.8848 3.9463,-5.5072 0.55955,-1.7081 1.3842,-2.7683 0.8246,-1.0896 2.6505,-1.0896 1.5608,0 2.68,1.0896 1.1191,1.0896 1.1191,2.7094 z"
|
||||||
|
id="path836" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,263.23,518.98)"
|
||||||
|
id="g842">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,-7.534 -6.107,-13.642 -13.641,-13.642 -7.535,0 -13.642,6.108 -13.642,13.642 0,7.534 6.107,13.642 13.642,13.642 C -6.107,13.642 0,7.534 0,0"
|
||||||
|
fill="#ff6600"
|
||||||
|
id="path840" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,369.76,443.57)"
|
||||||
|
id="g846">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,-7.533 -6.107,-13.642 -13.641,-13.642 -7.535,0 -13.642,6.109 -13.642,13.642 0,7.534 6.107,13.643 13.642,13.643 C -6.107,13.643 0,7.534 0,0"
|
||||||
|
fill="#ffcc00"
|
||||||
|
id="path844" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,238.1,442.38)"
|
||||||
|
id="g850">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,-7.533 -6.107,-13.642 -13.642,-13.642 -7.533,0 -13.641,6.109 -13.641,13.642 0,7.534 6.108,13.643 13.641,13.643 C -6.107,13.643 0,7.534 0,0"
|
||||||
|
fill="#0089cc"
|
||||||
|
id="path848" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,345.82,518.98)"
|
||||||
|
id="g854">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,-7.534 -6.107,-13.642 -13.643,-13.642 -7.533,0 -13.641,6.108 -13.641,13.642 0,7.534 6.108,13.642 13.641,13.642 C -6.107,13.642 0,7.534 0,0"
|
||||||
|
fill="#009939"
|
||||||
|
id="path852" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,303.93,394.5)"
|
||||||
|
id="g858">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,-7.534 -6.108,-13.642 -13.642,-13.642 -7.534,0 -13.642,6.108 -13.642,13.642 0,7.534 6.108,13.642 13.642,13.642 C -6.108,13.642 0,7.534 0,0"
|
||||||
|
fill="#bf0000"
|
||||||
|
id="path856" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,262.04,443.57)"
|
||||||
|
id="g862">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,-0.287 0.025,-0.568 0.043,-0.851 6.094,0.545 10.61,5.955 10.61,12.43 c 0,0.287 -0.025,0.569 -0.043,0.852 C 4.516,11.885 0,6.475 0,0"
|
||||||
|
fill="#fc0007"
|
||||||
|
id="path860" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,269.15,470.24)"
|
||||||
|
id="g866">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 2.351,-4.11 6.769,-6.887 11.843,-6.887 2.068,0 4.021,0.474 5.778,1.298 -2.35,4.11 -6.768,6.887 -11.843,6.887 C 3.71,1.298 1.757,0.824 0,0"
|
||||||
|
fill="#1cd306"
|
||||||
|
id="path864" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,238.1,518.98)"
|
||||||
|
id="g870">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,-3.333 1.198,-6.383 3.184,-8.752 5.168,-6.383 6.366,-3.333 6.366,0 6.366,3.333 5.168,6.383 3.184,8.752 1.198,6.383 0,3.333 0,0"
|
||||||
|
fill="#0f7504"
|
||||||
|
id="path868" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,162.91,491.83)"
|
||||||
|
id="g874">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 1.657,-0.716 3.481,-1.117 5.401,-1.117 5.024,0 9.401,2.723 11.769,6.766 C 15.513,6.365 13.688,6.765 11.769,6.765 6.745,6.765 2.367,4.042 0,0"
|
||||||
|
fill="#0c5e87"
|
||||||
|
id="path872" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,196.44,389.95)"
|
||||||
|
id="g878">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c -0.032,-0.38 -0.059,-0.762 -0.059,-1.151 0,-6.47 4.509,-11.875 10.553,-13.277 0.031,0.38 0.058,0.762 0.058,1.15 C 10.552,-6.808 6.044,-1.401 0,0"
|
||||||
|
fill="#6b0001"
|
||||||
|
id="path876" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(3.9483,0,0,-3.9483,201.47,512.31)"
|
||||||
|
id="g882">
|
||||||
|
<path
|
||||||
|
d="M 0,0 H -2.134 C -4.018,0 -5.55,1.527 -5.55,3.406 v 19.316 c 0,1.879 1.532,3.407 3.416,3.407 h 26.759 c 1.884,0 3.415,-1.528 3.415,-3.407 V 3.406 C 28.04,1.527 26.509,0 24.625,0 h -9.116 l -18.29,-8.966 z"
|
||||||
|
fill="#ffffff"
|
||||||
|
id="path880" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 10 KiB |
1
website/static/img/wireguard_logo.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="800" width="1200" viewBox="-45.0006 -75 390.0052 450"><g fill="#88171A"><path d="M299.745 145.56S306.685 0 146.705 0C5.225 0 .805 139.63.805 139.63S-20.005 300 149.965 300c163.02 0 149.78-154.44 149.78-154.44zm-197.8-50.863c30.017-18.364 68.366-7.14 82.735 20.476 2.724 5.234 3.07 13.291 1.345 18.782-5.955 18.956-20.014 29.587-39.312 34.103 5.69-4.87 10.218-10.394 11.659-18.025a26.402 26.402 0 00-4.543-20.956 26.76 26.76 0 00-30.81-9.39c-11.882 4.512-18.39 15.355-17.217 28.684 1.09 12.38 10.484 20.405 28.061 23.453-2.627 1.39-4.65 2.414-6.63 3.517a63.918 63.918 0 00-20.543 17.868c-1.784 2.408-3.01 2.602-5.727.941-35.338-21.61-37.61-75.844.982-99.453zm-26.449 133.53c-5.677 1.441-11.178 3.574-16.98 5.478 2.838-19.152 25.264-36.789 44.23-34.777a48.881 48.881 0 00-9.243 25.893c-6.302 1.161-12.24 1.942-18.007 3.405zm120.79-186.98c5.61.206 11.23.12 16.844.254 1.402.092 2.794.286 4.168.58a40.607 40.607 0 01-4.236 5.434c-2.007 1.87-4.275 3.698-7.166.856-.696-.684-2.339-.527-3.549-.543-5.582-.073-11.172-.252-16.746-.041a104.04 104.04 0 00-14.425 1.473c-.894.16-2.23 3.131-1.819 4.227.97 2.585 2.383 5.436 4.478 7.09 7.74 6.11 15.972 11.595 23.748 17.663 7.556 5.897 14.589 12.358 18.875 21.253 5.584 11.59 5.747 23.743 3.339 35.95-4.02 20.378-14.333 37.261-31.032 49.524-6.729 4.941-15.06 7.746-22.767 11.295-6.778 3.123-13.755 5.812-20.55 8.901-12.248 5.57-19.132 18.865-17.107 32.688 1.858 12.685 12.987 23.271 25.735 25.456 15.292 2.622 31.07-7.316 34.812-22.86 4.206-17.478-5.29-33.083-23.065-37.813-.783-.208-1.569-.405-3.201-.827 4.754-2.124 8.861-3.638 12.653-5.724a347.934 347.934 0 0019.48-11.562c1.875-1.2 2.887-1.2 4.486.182 12.225 10.57 19.518 23.718 21.563 39.84 3.384 26.683-9.247 51.197-33.072 63.761-36.86 19.44-81.965-2.686-90.106-43.552-6.974-35.003 17.73-66.754 47.462-72.884 12.787-2.636 24.48-7.96 33.57-17.807 5.865-6.354 8.708-11.806 9.677-14.266a39.565 39.565 0 002.721-14.469 33.867 33.867 0 00-2.965-12.398c-3.104-7.075-14.995-18.33-17.94-20.704l-28-21.92c-.987-.813-2.099-.754-4.507-.591-2.861.194-10.175.599-13.331-.228 2.553-1.933 9.513-4.746 12.502-7.007-9.074-6.13-19.43-3.916-28.941-5.747 2.199-4.095 13.08-10.39 19.27-11.09a91.533 91.533 0 00-1.688-10.282c-.378-1.391-1.931-2.74-3.286-3.535-3.286-1.927-6.77-3.517-10.55-5.433a21.936 21.936 0 0111.333-3.505A42.316 42.316 0 01134.3 23.99c6.742 1.54 12.124.535 17.488-4.048-4.222-1.7-8.444-3.253-12.538-5.09a123.04 123.04 0 01-11.78-6.159c10.623 1.476 20.897 5.459 31.758 4.004l.277-1.481-25.229-5.873c15.04-1.376 29.042-1.604 42.301 4.855 3.731 1.817 7.635 3.321 11.211 5.397 1.744 1.012 2.919 3.008 4.35 4.56 1.136 1.232 2.05 2.883 3.446 3.626 5.3 2.818 11.134 2.929 17.078 2.787l.13-1.993c5.983 1.87 12.715 8.768 12.704 13.806-9.69 0-19.374-.037-29.056.054-1.034.01-2.062.766-3.093 1.175.98.571 1.943 1.6 2.942 1.637z"/><path d="M183.785 26.906a1.48 1.48 0 00-.189 2.369 2.233 2.233 0 003.072.821c.933-.47 1.848-.97 2.975-1.566-.908-.775-1.636-1.415-2.385-2.032-1.318-1.086-2.411-.404-3.473.408z"/></g></svg>
|
After Width: | Height: | Size: 3.0 KiB |