diff --git a/.github/workflows/deploy-website.yml b/.github/workflows/deploy-website.yml new file mode 100644 index 00000000000..cc165f05dc0 --- /dev/null +++ b/.github/workflows/deploy-website.yml @@ -0,0 +1,53 @@ +name: "Deployment Website" + +on: + push: + branches: + - master + paths: + - "./website/**" +jobs: + deploy: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [16.x] + defaults: + run: + working-directory: website + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: Cache pnpm modules + uses: actions/cache@v2 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}- + - uses: pnpm/action-setup@v2.0.1 + with: + version: 6.0.2 + run_install: true + - name: Install Packages + run: pnpm install + - name: Build page + run: pnpm build + # - name: Deploy to gh-pages + # uses: peaceiris/actions-gh-pages@v3 + # with: + # github_token: ${{ secrets.GITHUB_TOKEN }} + # publish_dir: ./website/build + - name: Deploy to Vercel + uses: amondnet/vercel-action@master + env: + VERSION: ${{ env.GITHUB_SHA }} + with: + vercel-token: ${{ secrets.VERCEL_TOKEN }} + vercel-org-id: ${{ secrets.ORG_ID}} + vercel-project-id: ${{ secrets.PROJECT_ID}} + working-directory: ./ + vercel-args: '--prod' diff --git a/page/nightly-intro.html b/page/nightly-intro.html new file mode 100644 index 00000000000..e82fdbee3e8 --- /dev/null +++ b/page/nightly-intro.html @@ -0,0 +1,55 @@ + + + + + + + + + +
+

+ Tailchat Nightly +

+ +

+ Tailchat 演示环境 +

+ +

如果有任何反馈欢迎直接在本群组 @moonrailgun 或者发送邮件到 moonrailgun@gmail.com

+ +

+ 官方文档: https://tailchat.msgbyte.com/ +

+

+ 开源地址: https://github.com/msgbyte/tailchat +

+ +
+

演示视频

+ +
+
+ + diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 00000000000..b2d6de30624 --- /dev/null +++ b/website/.gitignore @@ -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* diff --git a/website/.npmrc b/website/.npmrc new file mode 100644 index 00000000000..059ab334509 --- /dev/null +++ b/website/.npmrc @@ -0,0 +1,2 @@ +# https://npmmirror.com/ +registry = https://registry.npmmirror.com diff --git a/website/README.md b/website/README.md new file mode 100644 index 00000000000..80263e49740 --- /dev/null +++ b/website/README.md @@ -0,0 +1,3 @@ +# Tailchat Document + +一个开放的即时通讯聊天应用 diff --git a/website/babel.config.js b/website/babel.config.js new file mode 100644 index 00000000000..e00595dae7d --- /dev/null +++ b/website/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/website/blog/2022-03-27-intro.md b/website/blog/2022-03-27-intro.md new file mode 100644 index 00000000000..89608834f15 --- /dev/null +++ b/website/blog/2022-03-27-intro.md @@ -0,0 +1,161 @@ +--- +title: Tailchat —— 插件化的开源聊天平台 +description: Tailchat 是一款易拓展、方便使用,并且完全免费开源的聊天平台 +authors: moonrailgun +slug: intro +image: /img/logo.svg +keywords: + - tailchat + - 介绍 + - 开源 + - 开源聊天工具 +tags: [介绍] +--- + +## 前言 First of all + +大家好,我是[moonrailgun](https://github.com/moonrailgun),今天为大家介绍的是我个人开发的开源插件式聊天软件: [Tailchat](https://github.com/msgbyte/tailchat) + +Tailchat 是一款易拓展、方便使用,并且完全免费开源的聊天平台。在部分思想上借鉴了 [Discord](https://discord.com/) 并在此致敬! + + +## 动机 Motivation + +曾经痴迷于 TRPG, 并花了4年的业余时间做了人生第一款聊天软件 [TRPG Engine](https://github.com/TRPGEngine/Client)。但是受限于题材方面的问题,使用的人虽然一直有,但是并没有太多。 + +而且因为开发之初受到经验的限制,虽然当初经过了很多次重构,但是仍然背负上了很多的技术债务。而且因为当初没有做好分布式架构的设计,因此在面对实际的单机业务性能瓶颈时也没有非常好的解决方案,导致在高峰期只能让用户处于相对慢的系统响应中。 + +因此我将在 [TRPG Engine](https://github.com/TRPGEngine/Client) 的开发中遇到的问题收集起来,并重新整理了我的业务需求,开发出了新的继承者 [Tailchat](https://github.com/msgbyte/tailchat)。 + +因为最开始首先于小众的业务, [Tailchat](https://github.com/msgbyte/tailchat) 的设计之初就做好了易于拓展的准备。定位是除了核心的聊天场景以外,其他的业务需要都是由插件提供的。甚至是聊天的富文本渲染方式、消息的通知也是由插件提供的。作为使用者/开发者,能够方便得为 [Tailchat](https://github.com/msgbyte/tailchat) 拓展新的能力,或者将已有的能力集成到 [Tailchat](https://github.com/msgbyte/tailchat) 中 + +[Tailchat](https://github.com/msgbyte/tailchat) 名字来源于其logo,是两只猫尾巴纠缠在一起的形象,表示猫与猫之间最直接的沟通方式。 + +## 功能 Feature + +### 登录页 + +![](/img/blog/intro/1.png) + +登录页除了支持正常的 **登录**、**注册**,为降低使用门槛还允许先进行 **游客访问**,无需注册直接使用。同时还支持 **忘记密码** 功能。向通过用户发送邮件来帮助用户重置密码 + +> **NOTICE**: 忘记密码功能需要管理员配置SMTP服务 + +此处以访客为例,创建一个名为 `猫之使徒` 的访客: + +![](/img/blog/intro/2.png) + + +进入主页面后如下显示: +![](/img/blog/intro/3.png) + +可以通过点击最上面的认领账号来补充用户信息以方便下次登录 + +### 添加好友 + +切换到 `添加好友` 标签页,可以看到系统为您生成的4位唯一标识: + +![](/img/blog/intro/4.png) + +在本例中的唯一标识是`猫之使徒#1216`,您可以通过将这段字符串发送给好友来添加好友。 + +![](/img/blog/intro/5.png) + +### 插件中心 + +[Tailchat](https://github.com/msgbyte/tailchat) 设计之初就提供了强大的插件系统,通过插件系统能极大拓展[Tailchat](https://github.com/msgbyte/tailchat)自身的能力。 + +![](/img/blog/intro/6.png) + +> NOTICE: 插件本身设计是运行在 可信执行环境(TEE) 中, 请不要随意通过手动安装的方式安装不明来源的第三方插件 + +### 个人设置 + +![](/img/blog/intro/7.png) + +用户可以在左下方的"···"中打开个人设置。可以自定义头像,修改名称,修改密码等操作。 + +![](/img/blog/intro/8.png) + +通过剪裁工具可以很方便的选出自己想要的部分 + +![](/img/blog/intro/9.png) + +### 系统设置 + +在系统设置中可以修改界面语言和界面主题。 + +主题除了 [Tailchat](https://github.com/msgbyte/tailchat) 自带的`暗色主题`和`亮色主题`以及根据当前系统设置自动切换的`自动`以外均为插件提供 + +![](/img/blog/intro/10.png) + +> 目前 Tailchat 支持的语言仅为 `简体中文` 和 `英语`。欢迎有能力的开发者帮助 Tailchat 进行国际化翻译的工作 + +### 群组聊天 + +![](/img/blog/intro/11.png) + +点击左上角导航栏的绿色加号即可创建群组 + +![](/img/blog/intro/12.png) + +预设了两个布局模板,直接选择`默认群组` + +![](/img/blog/intro/13.png) + +随意取个名字,点击创建。系统则会创建一个群组并自动跳转到该群组 + +界面布局如下: + +![](/img/blog/intro/14.png) + +![](/img/blog/intro/15.png) + +输入框支持 `@` 群组成员: + +![](/img/blog/intro/16.png) + +### 群组设置 + +点击左上角的标题栏可以点开群组详情页 + +![](/img/blog/intro/17.png) + +点击查看详情可以进入到群组的详情页 + +![](/img/blog/intro/18.png) + +在此处可以: +- 修改群组头像 +- 修改群组名称 +- 管理群组面板 + +#### 面板管理 + +![](/img/blog/intro/19.png) + +创建面板可以直接创建一个面板,内置的面板类型有: +- 聊天频道 +- 面板分组 +- 网页面板 + +网页面板可以直接输入一个网址,可以将自己喜好的网址直接集成到 Tailchat 的群组侧边栏 + +![](/img/blog/intro/20.png) + +比如我们插入一个访问 Bilibili 的网页面板,则效果如下: + +![](/img/blog/intro/21.png) + +![](/img/blog/intro/22.png) + + +> NOTICE: 因为浏览器的安全策略问题,如果当前 Tailchat 使用了https协议,那么只能支持嵌入 https 协议的网页 + +> NOTICE: 因为浏览器的安全策略问题,嵌入的网址需要允许被使用iframe嵌入 + +## 相关连接 + +开源地址: +- [https://github.com/msgbyte/tailchat](https://github.com/msgbyte/tailchat) +- [https://github.com/msgbyte/tailchat-server](https://github.com/msgbyte/tailchat-server) diff --git a/website/blog/authors.yml b/website/blog/authors.yml new file mode 100644 index 00000000000..b5bec4e5b49 --- /dev/null +++ b/website/blog/authors.yml @@ -0,0 +1,6 @@ +moonrailgun: + name: moonrailgun + title: Tailchat 开发者 + url: https://github.com/moonrailgun + image_url: https://avatars.githubusercontent.com/u/6964737?v=4 + email: moonrailgun@gmail.com diff --git a/website/docs/architecture.md b/website/docs/architecture.md new file mode 100644 index 00000000000..2dd894a6fad --- /dev/null +++ b/website/docs/architecture.md @@ -0,0 +1,12 @@ +--- +sidebar_position: 3 +title: 架构 +--- + +## 服务端架构 + +![](/img/architecture/backend.excalidraw.svg) + +## 插件机制架构 + +![](/img/architecture/plugin.excalidraw.svg) diff --git a/website/docs/cli/_category_.json b/website/docs/cli/_category_.json new file mode 100644 index 00000000000..54f8596f488 --- /dev/null +++ b/website/docs/cli/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "命令行终端", + "position": 30 +} diff --git a/website/docs/cli/tailchat-cli.md b/website/docs/cli/tailchat-cli.md new file mode 100644 index 00000000000..b65f573621e --- /dev/null +++ b/website/docs/cli/tailchat-cli.md @@ -0,0 +1,25 @@ +--- +sidebar_position: 1 +title: 命令行工具 tailchat-cli +--- + +## 安装 + +```bash +npm install -g tailchat-cli@latest # 安装与更新同一命令 +``` + +安装成功后输入`tailchat` 后返回如下 + +```bash +tailchat + +Commands: + tailchat create [template] 创建 Tailchat 项目代码 + tailchat connect 连接到 Tailchat 节点网络 + tailchat declaration [source] Tailchat 插件类型声明 + +Options: + --version Show version number [boolean] + -h, --help Show help [boolean] +``` diff --git a/website/docs/demo-group.md b/website/docs/demo-group.md new file mode 100644 index 00000000000..88fb34b8411 --- /dev/null +++ b/website/docs/demo-group.md @@ -0,0 +1,9 @@ +--- +sidebar_position: 100 +title: 演示群组 +--- + +这里有一些用于演示Tailchat功能的群组 + +- [Tailchat Nightly](https://nightly.paw.msgbyte.com/invite/8Jfm1dWb) +- [原神](https://nightly.paw.msgbyte.com/invite/GFFzfD5H) diff --git a/website/docs/deployment/_category_.json b/website/docs/deployment/_category_.json new file mode 100644 index 00000000000..c366ad1cd94 --- /dev/null +++ b/website/docs/deployment/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "部署", + "position": 10 +} diff --git a/website/docs/deployment/dev.md b/website/docs/deployment/dev.md new file mode 100644 index 00000000000..758d4c4aea5 --- /dev/null +++ b/website/docs/deployment/dev.md @@ -0,0 +1,54 @@ +--- +sidebar_position: 99 +title: 开发环境 +--- + +对于开发环境的搭建,tailchat 提供了非常简单快捷的方式 + +## 后端 + +### 使用Docker快速搭建依赖环境 + +mongodb +```bash +docker run -d --name mongo -p 27017:27017 mongo:4 +``` + +redis +```bash +docker run -d --name redis -p 6379:6379 redis +``` + +minio +```bash +docker run -d \ + -p 19000:9000 \ + -p 19001:9001 \ + --name minio \ + -e "MINIO_ROOT_USER=tailchat" \ + -e "MINIO_ROOT_PASSWORD=com.msgbyte.tailchat" \ + minio/minio server /data --console-address ":9001" +``` + +### 启动开发服务器 + +```bash +cp .env.example .env +vim .env +``` + +编辑`.env`的配置为自己相关的上下文 + +```bash +pnpm install # 安装环境变量 +pnpm dev # 启动开发服务器 +``` + +## 前端 + +```bash +cd web +pnpm install # 安装依赖 +pnpm plugins:all # 编译插件 +pnpm dev # 进入开发模式 +``` diff --git a/website/docs/deployment/docker-compose.md b/website/docs/deployment/docker-compose.md new file mode 100644 index 00000000000..c9b1c3c9233 --- /dev/null +++ b/website/docs/deployment/docker-compose.md @@ -0,0 +1,84 @@ +--- +sidebar_position: 4 +title: Docker Compose 部署服务端 +--- + +## 安装环境 + +### Docker / Docker Compose + +首先需要确保有 `Docker / Docker Compose` 环境 + +安装方式如下: + +- [Docker](https://docs.docker.com/engine/install/) +- [Docker Compose](https://docs.docker.com/compose/install/) + +### node 环境 + +- 从[官网下载](https://nodejs.org/en/download/) +- 或者使用[nvm](https://github.com/nvm-sh/nvm) + +#### 安装pnpm + +`pnpm` 是一个`nodejs`的包管理工具, 是`npm`的替代品, 为了确保能有与开发者一样依赖环境,强烈建议你使用pnpm作为后续的包管理工具 + +```bash +npm install -g pnpm +``` + +## Clone 项目 + +将项目从远程下载到本地: + +```bash +mkdir msgbyte && cd msgbyte + +git clone https://github.com/msgbyte/tailchat.git # clone 客户端 +git clone https://github.com/msgbyte/tailchat-server.git # clone 服务端 +``` + +## 编译项目 + +#### 前端项目 + +```bash +cd tailchat/web +pnpm install # 安装依赖 + +export SERVICE_URL=http://127.0.0.1:11000 # 配置服务端地址,这里的127.0.0.1 可以替换为任何网页可以访问到的服务端地址 +pnpm build # 构建项目 +``` + +构建完毕后会生成一个`tailchat/web/dist`目录,将该目录托管到任意网页托管服务器即可(如使用`http-server`进行静态代理或者直接上传到`oss`) + +> NOTICE: 因为webpack编译需要比较大的内存资源占用,在服务器资源不足的场合建议使用本地编译完毕以后上传到服务端 + +#### 使用docker-compose构建服务端 + +> 在启动前需要检查代码环境变量 + +修改 `docker-compose.env` 文件的配置,以下内容推荐修改: +- `API_URL` 对外可访问的url地址,用于文件服务访问 +- `SECRET` 服务端加密秘钥,用于生成Token. 默认为 `tailchat` + + +```bash +cd tailchat-server +docker-compose build +docker-compose up -d +``` + +*在`docker-compose.env`文件中提供了部分环境变量可供配置。* + +`tailchat` 的`docker-compose.yml`配置默认提供了如下配置: + +- `mongodb`: 持久化数据库 +- `redis`: KV数据库与消息中转服务 +- `minio`: 分布式文件服务 + +其中持久化文件(数据库, 文件存储)通过 `docker volume` 统一管理: + +``` +docker volume ls | grep "tailchat-server" +``` diff --git a/website/docs/deployment/environment.md b/website/docs/deployment/environment.md new file mode 100644 index 00000000000..7084a767fff --- /dev/null +++ b/website/docs/deployment/environment.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 7 +title: 环境变量 +--- + +## 前端编译环境变量 + +| 变量名 | 默认值 | 描述 | +| ----- | ------ | --- | +| SERVICE_URL | http://127.0.0.1:11000 | 后端服务地址 | + +## 后端环境变量 + +| 变量名 | 默认值 | 描述 | +| ----- | ------ | --- | +| PORT | 11000 | 网关服务端口号 | +| SECRET | tailchat | 加密秘钥, 用于JWT | +| API_URL | http://127.0.0.1:11000 | 对外可访问的url地址,用于文件服务访问 | +| MONGO_URL | - | 数据库服务地址 | +| REDIS_URL | - | Redis服务地址 | +| MINIO_URL | - | 文件服务地址(minio) | +| MINIO_USER | - | 文件服务用户名 | +| MINIO_PASS | - | 文件服务密码 | +| MINIO_BUCKET_NAME | tailchat | 文件服务存储桶名 | +| SMTP_SENDER | - | 邮件服务发件人(示例: `"Tailchat" example@163.com`) | +| SMTP_URI | - | 邮件服务连接地址(示例: `smtp://username:password@smtp.example.com/?pool=true`) | +| FILE_LIMIT | 1048576 | 文件/图片上传的大小限制,默认为1m,请输入数字 | + +> 部分环境变量示例可见: https://github.com/msgbyte/tailchat-server/blob/master/.env.example + +### 使用文件进行配置环境变量 + +如果是本地方式启动,请复制 `.env.example` 到 `.env` 然后进行编辑 +```bash +mv .env.example .env +vi .env +``` + +如果是 `docker-compose` 启动,可以直接编辑 `docker-compose.env`, 改动后直接使用 `docker-compose up -d` 即可生效 diff --git a/website/docs/deployment/install-docker.md b/website/docs/deployment/install-docker.md new file mode 100644 index 00000000000..7ddeff334f4 --- /dev/null +++ b/website/docs/deployment/install-docker.md @@ -0,0 +1,57 @@ +--- +sidebar_position: 2 +title: 安装docker环境 +--- + +> 因为 `Tailchat` 的环境对于初学者来说有一些些复杂,因此提供了 `docker` 为主的一键环境搭建配置。但是对于`docker`不熟的同学来说可能`docker`本身也是一种复杂度。 + +> 因此为了方便大家可以快速搭建 `Tailchat`,提供了本文作为引导。对于 `docker` 有一定了解的同学可以跳过本篇 + +> 本文以 `linux centos` 为例,目标是方便大家直接在服务器上部署。对于想要在其他系统(`windows`, `mac`) 使用的同学可以参考官方文档进行`docker`的安装 + +## 安装docker与docker compose + +官方文档: [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/) + +```bash +# 如果之前有安装过docker可以执行以下命令删除旧的 +sudo yum remove docker \ + docker-client \ + docker-client-latest \ + docker-common \ + docker-latest \ + docker-latest-logrotate \ + docker-logrotate \ + docker-engine +``` + + +```bash +sudo yum install -y yum-utils # yum-utils 提供了 yum-config-manager 命令 + +sudo yum-config-manager \ + --add-repo \ + https://download.docker.com/linux/centos/docker-ce.repo +``` + + +```bash +sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin +``` + +*PS: `docker-compose-plugin`提供了`docker compose`命令,用法同`docker-compose`* + +> 如果`docker ps`显示守护进程没有启动(Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?)的话可以执行以下命令启动: `sudo systemctl start docker` + +## 单独安装 docker-compose + +如果购买的服务器已经预装了docker, 想要单独安装docker-compose的话可以看本节内容: + +官方文档: [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/) + +```bash +curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose # 下载二进制文件 +sudo chmod +x /usr/local/bin/docker-compose # 给予执行权限 +sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 软链接到path, 可以直接调用 +docker-compose --version # 该行命令返回版本号则成功安装 +``` diff --git a/website/docs/deployment/quickstart.md b/website/docs/deployment/quickstart.md new file mode 100644 index 00000000000..d61cbda4438 --- /dev/null +++ b/website/docs/deployment/quickstart.md @@ -0,0 +1,152 @@ +--- +sidebar_position: 1 +title: 快速开始 +--- + + + + ); +} + +export default function Home() { + const { siteConfig } = useDocusaurusContext(); + return ( + + +
+ + + +
+
+ ); +} diff --git a/website/src/pages/markdown-page.md b/website/src/pages/markdown-page.md new file mode 100644 index 00000000000..9756c5b6685 --- /dev/null +++ b/website/src/pages/markdown-page.md @@ -0,0 +1,7 @@ +--- +title: Markdown page example +--- + +# Markdown page example + +You don't need React to write simple standalone pages. diff --git a/website/static/.nojekyll b/website/static/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/website/static/CNAME b/website/static/CNAME new file mode 100644 index 00000000000..6b9de4eec60 --- /dev/null +++ b/website/static/CNAME @@ -0,0 +1 @@ +tailchat.msgbyte.com diff --git a/website/static/img/architecture/backend.excalidraw.svg b/website/static/img/architecture/backend.excalidraw.svg new file mode 100644 index 00000000000..a051b36fc96 --- /dev/null +++ b/website/static/img/architecture/backend.excalidraw.svg @@ -0,0 +1,16 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1daXNcdTAwMWFNkv7uX+HwfNmNXHUwMDE4+q3KyromYmND932f1u6EXHUwMDAzXHUwMDAxXHUwMDEySFxiJGiEpIn575uJbNHQh1x1MDAwMIHU8ppwWLZouovufJ58sior819fvn79XHUwMDE2Pt5Wvv3j67fKQ6lYr5Vbxe63v/Pv7yutdq3ZoLeg9/92s9Mq9Y6shuFt+1x1MDAxZn/9dVNsXVfC23qxVFx07mvtTrHeXHUwMDBlO+VaMyg1b/6qhZWb9n/z39vFm8p/3TZvymEr6F+kUCnXwmbr+VqVeuWm0lxi23T2/6H/f/36r97fkdG1KqWw2LisV3pcdTAwMWbovdVcdTAwMWag0mr4t9vNRm+w0knthFx1MDAwM1x1MDAwMS9H1NqLdL2wUqa3L2jMlf47/Ktvl839W3HbOfpeuVZnzdpNdfXg+13/slx1MDAxN7V6/SB8rD/fimKp2mlFXHUwMDA21Vx1MDAwZVvN68pJrVx1MDAxY1b56kO/f/lcXLtJd6H/qVazc1ltVNrtgc80b4ulWvjIv1x1MDAxM+Llt8934Vx1MDAxZl/7v3mg/1mjXHUwMDAy0Fx1MDAxZaxVqKx+eY8/rZRcYix6oZXXWlg3PKqFZp1cdTAwMWVcdTAwMDSN6m+i9+qP67xYur6kwTXKL8eErWKjfVts0ePqXHUwMDFm1/35fcGLQIJQQoBcdTAwMDdvXFxkINVK7bJcdTAwMWHyd5EmsEpcdTAwMThcdTAwMDeKfqBxrj+cSu+hSK2dQXpo/uVcdTAwMWRcdTAwMWXE7Vq5ZyD/XHUwMDFjvqnVYuv258371ub/RL5cdTAwMDCPfWnYuqJcdTAwMTY2YGVh5aH/rVwiJlHy91x1MDAxNzv35c2VVqFZPTjxu9frj1vfXo7799+TT/v84ePF3Wq9I5bbXdvaLlx1MDAxYl34UdneXHUwMDFkvMqv61x1MDAxN1utZnfU81x1MDAxZdXbp6s3rkuIuzo+OunMrS919Fx1MDAxNM7b+LFbPV07XHUwMDEyi/NLjTN9UlxyoX12NIXzPoFY2N2r3LVq7Vb1orHpXHUwMDFmcedhXG7n9bXTp8bD8VL1fNWv3bVcdTAwMGVv1s7n9qcx3q3To72LwvLVXHUwMDFkPOFxd/Pq6eJhfVxu531cXJgr2LXG5u3cztX9gnnavFxu96Yx3tLG1vnqVdXUfK3crYbFjSOlNqZw3qI+ODOPi0ehW97trH1va1Epmymc92Z+sfP441x1MDAxNLaudlv3tdZFp4vVw9HO+/NffSbo3JaLz4wujdZGWrDEQ+bl/XqtcU1vNjr1ev93zdJ131x0fIlcZng871x1MDAwM1wi4lxcht2PUmBAXHUwMDFiXHUwMDE43f1cXODhsppvNlx1MDAxYa2V1eu5XHUwMDBisVBbXtcp7mfIjXyU83FcdTAwMTJcdTAwMDLjNVG28UpriVx1MDAwM+6HPlx1MDAxZliBKKwk/4RS+KGBjeV//laqlLFcXIz7XHUwMDFl6VxcXHUwMDAwUnuj0SqjnbZx32NsIDW5JfJQ3iH9XHUwMDE5dj0gXHUwMDA1WONR9Fx1MDAxZFfU9bxY4Lc2uJ398+b+w/31fmmuIVx1MDAxYt25rW7EeL+1trZcdTAwMTduLqq1uUU737zszC1osXlcdTAwMTU9YLlRPIPyklx1MDAwYitrj8di465xtXl58S1m2Vx0Pq53QzJ83LvBolKv127biaCgR52uyVx1MDAxMFxyXGKrrFx1MDAxOFx1MDAxZFx1MDAxNM2dy4Od1dXFNb9cdTAwMTmqbvmicX9WyDkoXGZcdTAwMDZOXHSFXHUwMDE2nbHS+Vx1MDAwMVBcdTAwMDBcdTAwMDZWSimMts5cdTAwMWLjI1x1MDAwZmWqoFx1MDAwMFx1MDAxYlx1MDAwMFwioUJZslx1MDAwMFx1MDAxN4eEXHUwMDA0XGJcdTAwMWNcdTAwMThFXHUwMDE4XHUwMDA2Olx1MDAwZSVcZmNCemOJxYTKMyZe0315wFx1MDAwNJBcdTAwMTBPxVx1MDAwNHlcdCElqfeRMXEvw7nqj8bG4uPq6nHFbJRcdTAwMTZcdTAwMWFbaXFKTjBBsUdgjfWCnKK3Plwi/fnzTlx1MDAwNMpcdHpcIuhcdTAwMTWBw9iZQILchDJIwFx1MDAxNIrckcGEXHUwMDEwxWlcdTAwMDKnovDEoyNHIewwJDxcdTAwMTmMXCLDsX9cdTAwMTDxNkRcdTAwMTDxpFwiwmtlnFx1MDAxNsaMjIjl8Gi3cr/jWp3a3E17sbv3sFfayzdcIijIXHLQkT80dNNJSFx1MDAwZVwiXHUwMDAydeClo7hdXHRHf5nZKCcjXHUwMDAy0ks9XHUwMDAx51x1MDAxMVx1MDAxNEpcdTAwMTOHhMZAg9VcdTAwMTZcdTAwMDC8kuTUhiGhtXKGxN9cdTAwMWZEvFxyXHUwMDExXCJCSMOIIO/A1ClH91x1MDAxMYX7+bktrK4tYrdWWVx1MDAxNos/QrFfyzdcIjz6wFx1MDAxOCGsQ1xuXHUwMDFhYMhHeFLwxjulKZqg+yFn4yOsXHUwMDBlKEwhbaadUsRBXHUwMDEwXHUwMDA3hCXQeFKygEpcIoVccjFAgKBcdTAwMGbSd/DqXHUwMDBmJN5cdTAwMTZKKJlcdTAwMWFfXHUwMDFiXHUwMDA07elcdTAwMTGNXGaI/b3V6+uFx/Xq5fk+njTs0c369/V8XHUwMDAzwnpcdTAwMTVcYqEsXHUwMDA1TNpcdTAwMThcdTAwMTItg4CQJPClMsLTffCgU/EwbOtj4cFSjKAlkFx1MDAwN7KWXVFcdTAwMDJcdTAwMWVIM1HYXGYgrVx1MDAxMF7KWGhNsVx1MDAxMEVcdTAwMTlWJU/q/rH2X9YuXCKXXHUwMDE5snaKXHUwMDE0SVx1MDAxNjs3ulwiam1fXGJcdTAwMWSuPK5eLW+W7fz8+tpK4TDf5u6I4j04y+xOXHUwMDFhXFxcZq5lXHUwMDE4XGKENl55I4zV/HBmYvBcdTAwMDQ5kv3COIu8pJJcdTAwMTg487SW1mz0QqK3aIYtnlx1MDAwNCw5MSP/XHUwMDE4fKbBk+RJVTyO+J3EgFx1MDAxZn2myHfa1fX698L2xuL58jbWroRZMfm2eFL3gSZLs6iJ601EW/9UPOh7lm5ccqCYXHUwMDExwztcdTAwMTJdZK2GZ0cp3pBcdFGxcYHlaESgJH9jZXzdzmtcdTAwMDM84f1aWPz/3eJlhsVbi46U7ehcdTAwMTL//Kp1drW6f75wN1/oyMp8XHUwMDA3alx1MDAwZjmX+E5cdTAwMTOLXHUwMDFi+qJM72R0csDg0Vx1MDAwNU4jXHUwMDFhMiRNTsDBTFxmnvRcboVaRqOnmFe6yKJ4mqRcdTAwMDFcdTAwMTkzeJ6ekET/f+w9W9JE1mKGJY2TaFx1MDAxZLjR18f0udx6qlx1MDAxZc5X6r5+UiiuqqfNh7Wc2ztcYoonXHUwMDE1RSpkLcScasDeiVdcdTAwMTXFj4iS9J1cdTAwMTBcdTAwMWFnYu90/UArXHLCk7/1joR83OA9XHUwMDA2ZMyeXHUwMDA2Kp1B7WP2zit4XHUwMDAwfzT8t+FcXJGBcFXJNGsnXmde0370gLW+XHUwMDAy/uSxc7d6udHagu/bNXFqbc7NXciAtbtxRLCoXCLTic+fd1x1MDAwMfJsJ2qhSUlAur2/aeXL02VIpFx1MDAxML140vE+gd+VXGaE01x1MDAxZeld9GBBxFx1MDAxNVxykPxH4fVriuZz2HPfapqN8KD2xI9cdTAwMGVcYvOoiX9cZvTW+PTAQcvFm1r9ccBcdTAwMTJ6dk9cdTAwMDM/LNbqpWox3K6E3WbrOvqU2lx1MDAxNVx1MDAxYUvv5JB6h/k0c/XaJUPmW4m+baU1gKawVirWX1x1MDAwZVxim5F7VKKBXHUwMDE16Vx1MDAwMq218vD3bbZql7VGsX6YMsiJXHUwMDEwbdJX7bSjXHUwMDE3i5SR8ZycSpaM51x1MDAxY2VcdTAwMTe69OxCI1x1MDAwMylRUYyC0lxicnBvwXN2eqFcdTAwMTNxXHUwMDE061jcLT2F5MJFl9ynlj84cziKkfHXu1PNVtj+38Z/bM9cdTAwMWT+tV8p19r/mYjDSEg5XHUwMDFl7m5q5XI062lcdTAwMTB6r6XKxtCYMuRMVPa+Qlx1MDAxMirTYyhDYbRcdTAwMTVcdTAwMTQ/jIxKIee6K7tXt3JrS3dvvlfdwYI/yjsqvYDAxXJ9IYBBkE5cdTAwMWKFXCJA0OS7XHUwMDE15+iSXHUwMDFiV0mTY5qTsZSzhlx1MDAxM6rQxZN8QZJz1dIlx065yX+KjKPYXG7na41yrXE5/JFKo5zyTr3YXHUwMDBlXHUwMDE3mjc3tZCGsdusNcLhI3rnneP8xmqlXHUwMDE482d05tT3bvl0gzqk/6+vfVvp/efl3//8e/LRqVx1MDAwZpVfhfjz7J/wS/TnRFx1MDAxM4Bu+LdcdTAwMTEkkyqRXHUwMDA2R1x1MDAwZlx1MDAwZndX/O7C9crh6sKtqKuTg1K3eZlcdTAwMTZcdTAwMWXmXHUwMDA2yVx1MDAwNWNcdTAwMDLFwVkvPVx1MDAxZoYgXHIu0Lzo7lxyuplcIlvKhIVcdTAwMWQpXHUwMDFkZ8P0ctii136GseHfa7KJ6bvaXHUwMDE3XHUwMDBiXHUwMDFiK1W/9bS8q2udzfNycZ381MLd6Y/zjVFTktV5/fJcdTAwMDLRXHUwMDFmn66rLTyBY9GYv59CqvP5VTj38KPysHS9Ji/2t+bbe4WjzXymOqeJYJ+6XHUwMDA2XHUwMDBiXHUwMDEyjNLe69FFcPJDyj1IZVx1MDAwNkitXHUwMDBlKKBcdTAwMTWW4llcdTAwMThcdTAwMDTKtEEqXHUwMDEyQFxu8dCVhqLpT0pGzm9cIoKP2lH5XHUwMDFhUbxcdTAwMTEmm6rifcW9XGYr3t74MvGWvbVApbpGzlx08+Dk6Ctj9qg8f3940p6/wFx1MDAxM3GN1dZl6/A276BcdTAwMDOPXHUwMDAxKZJejlxyKuPksNzFgNfGpLLSKy9nXHUwMDE4e5pcdTAwMDSZXHUwMDFiXer6hTtiQyGkyc/mtaOn+Vx1MDAxZL3/vXz5tHd8dWT3XHUwMDBibu9g7lx1MDAxZDxX5nnfsPkn87yz2mw3K2Vw1L0o7P847/4wRCq3V63V8+JcXHtcbufdvXNnnbul3aY+vajJ5cP1LfDzn0txyIx5N2/I11x1MDAxMiGMzn7JKMg9+/ks9kONgXhcdTAwMWb2S8qASVx1MDAxMFx1MDAxZIBcdTAwMTLouaXkPP4momNud+3rXG6NoFt8fFft8YpcdTAwMDNcdTAwMWbWXHUwMDFl0WFmXHUwMDAy8JlcdTAwMDBcdTAwMTJcdTAwMTCoMV1+WGetXHUwMDE3cnTNn+1JclxuQIOB9U5cdTAwMWLBXHUwMDE5x4TCwU1cXIrCdlx1MDAwYlI4xieh1L8pXHUwMDFiOVx1MDAxYoBcdTAwMTJcdTAwMDNcdTAwMDdKoFx1MDAxNd45+pOQoFx1MDAwM4HkTVx1MDAwMlx1MDAwZbVcdTAwMTUoeFx1MDAxNjCGT0PROoXsaoJwPVx1MDAwZrNufUf3q2TEKKq8h+hSh0dZXHUwMDEwgTLe8NZPUJLuXCJ4XHUwMDFkOeyyeMuj1lx1MDAwMVx1MDAwMDphPC9daVx1MDAwNP3ziFx1MDAxN5c7OOOXNqpsvEZGJciKXHUwMDEwXHRMXHUwMDAy6GahkVx0Y1wiQ3TGXG5cdTAwMDNOoOZAMzamKc81XHUwMDBl08JUp1x1MDAxYtPNufduzJD75/tcdTAwMTL9OT6jydS1eVx1MDAwMrOkgYjRXHUwMDE3XHKyNWxOXHUwMDE5TVveQUFhXHUwMDE16Vx0PTAx/7KYZ/hNKZSwfoaMRpdcdHhnqoeewjE6YdeRpSPISNAhYVx1MDAwM1x0i8OExluO0MBcdTAwMDcsXCL0b8z06Wxk4iA6s7w9l5Qh3Vx1MDAxZVxyTiUzXHUwMDA33SMlJFx1MDAxOX9v3+JkbJa91jfAZvQsXHUwMDE1q1JnXGLa3kB8TIaOXHUwMDExXG45lZuMzZhPTWbplsyvQsyIp0dmqXOyjq9jx8lLyFx1MDAwZZxzSmZcdTAwMTZtoK2UbEpSa1x1MDAxY8w0QoGBJ1x1MDAwN6O0osCEbE1cclxybIpkZjEghci7l9FqXHUwMDAyZJzLJFx1MDAxZKCApCRcblx1MDAwYlx1MDAwMkDHdsh4wqcn8v1cdTAwMDBxNks2XHUwMDFimTiIzYC0jVFAz8JaXmdUkcNexJnppdxw2i5vXHUwMDEx/qVccmYlzmhUSNqfrim0Zb3S94n9QYnASVJcdTAwMGa8p9zQoT6uXHUwMDE4P1x1MDAxM6FcdTAwMTVSzZlfcUNcdTAwMWWT0DKnvHV69qRCL1x1MDAxNVnG6JM+dVtcXNvdwl13p01ndaexsHC0mHtSk1x1MDAwNExcbkDYwFx1MDAxZOkwbVx1MDAwNveD9PInySCV1rzyim9Kn3wl3SqpfJuIXHUwMDE3XGKhuIXM3qZkSX7AlPd+XGLX23SO85VS61x1MDAwZVx1MDAxN2Fu9azb/MR11X7BaoosnonQtCnZaJ5+LFx1MDAxNVIrjqnH2Jye/JRyj04rstCJ+r3QmVRcXDE+JVx1MDAwYjx/Qc70XHUwMDAzloEnXHUwMDEyXHUwMDE1XHUwMDEzL1x1MDAwM389qFBcdTAwMTReqkTv6MynZF9xMEnLwS/jfIOP1Fx1MDAxOXWEhNDeXHUwMDE5O7ryf1jE8vLcU6vROTw/+bF2pvdcdTAwMWIrj7mHITjSZei4LFxu6X+nXHUwMDA3V0bA+l4xOME7t3Q0r+njnKT3XHUwMDBlwE8wVTGZj/y56H+5WXu4XHLNtVxcqtq5UnhccpXtxWSn01x1MDAwM9Orvuw115t8wVx1MDAxMV1kXHUwMDBlS4TmxfWq9D2jilx1MDAwMiZvvVx1MDAxZt3zZltFfiGvMyCvpHkvyI/meZ1cdTAwMDH02qpcdTAwMTkgPj+ed6FaXGY/xPO+4rWGPe/AOCf3vEZkVFx1MDAxYWc96O1cdTAwMTiVxlx1MDAxN7dWbldcdTAwMGbN2VPxsFx1MDAxY4YnV3utUjX3u1x1MDAwZSQnJVgjXHUwMDFjWqeMXHUwMDE2MJyTYFx1MDAwM8troYo0p+RSXHUwMDFkXHUwMDFm73o1XHUwMDFkKUiOz0BcdTAwMDNneZ3S5UV4fbZzuT/3qI7Pr+4vXHUwMDE3b9dTXHUwMDAyvtF874xO+2r188RcdTAwMGKO6tLzV0U7Ny7dpE51SVx1MDAwNVx1MDAwNlx1MDAwMcdpW5BtXHUwMDE2eSVcdTAwMTOSNVlk4vHdyGQ0py6RXHUwMDFjukNjPmBv4ft59Vx1MDAxNf5KXHUwMDFm4tZfcYnDbn1woG/w6zK1QoX21vBcIuboSDxYXoZTddb0d6FpXHUwMDFkLOxtPy6J3KdcdTAwMWFKXHUwMDEyzYExRmiUqMG6wVwi7mSGgUVlXHUwMDA0Slx1MDAwZlx1MDAxMjFcdTAwMDdcdTAwMDG1kMJcYouTLP6/xavLZrlamW9vt1x1MDAwZcXeoVxcuj9+XFy7X3u7V/8sp31NLCRfcFRpk79cdTAwMTZcdTAwMTa5XHUwMDExXHUwMDBiPn3OzzqCpVFjZENnm0VeKYpL7mVQlIf3oqjRtIL1QLYh4Vx1MDAwM5Kh308q7ITV/px2QK93lVx1MDAwYq+42mG5XHUwMDEwXHUwMDFmbCZcdTAwMTYzXHUwMDEyo1PlgnRSWMAxXHUwMDE2qbPXXHUwMDFi84pFYWRAYMNeTUJcdTAwMTUtXHUwMDAy0JuMQ1x1MDAxMXhFXHUwMDFlmmvvoHF2dnmEXlx1MDAwNEpzXHUwMDE1Nu2IXHUwMDAzRVLbXHUwMDE3SaMxyEtymujB+nitZqlcdTAwMTRzqJ1A1f9cdTAwMTapN8yrXlx1MDAxYWuBbiFZL0aOeU5xcVxcd9VRnGa0mTQhOnu1bGA4XHUwMDE22SrQXGJ6YJAwXHUwMDFjqcj6KEr2jouVQUJS42dKuEm1YX5cdTAwMTVi5ts/3Zfoz/FpLH1cdTAwMWRcdTAwMTG8sFx1MDAxYcRcdTAwMTjbS7PTXHUwMDFi8kpjXHUwMDEyIVx1MDAwMFJcdTAwMGKesWhhqDSfNFx1MDAxMCiee0D6XHUwMDBipNPptSjfSmPOXHUwMDA3nuv788pcdTAwMDZJOZdYVEVcdTAwMTGpopVcdTAwMDLBeGd1fLFfoPJcdTAwMWXEJJtP88xjY1x1MDAxMIfXwlxuLtrsyUXZvu54YVx1MDAwZeBq6tDL0aC7NXlcdTAwMDLhXHUwMDE43KqJM41RXHUwMDBlvFJaYkJSI1x1MDAwNsiF1T23vuwl1X1qOiukXHUwMDFhM7/iZjwtPlMmXZZcdJIhSosxYqTsxei8XHUwMDEymuiVXHUwMDEzVUiWXHUwMDA09FxiXHUwMDA2QyRcdTAwMTQy4DZgP3uOXHQ3w/QkXHUwMDAxgTRouVxctFx1MDAwM1Jccn1mjVaU5tZi2nqyfm9cIrlcdTAwMTEv+0k1SMs7c34vPlx1MDAxYkeXXHUwMDAxl9WzpIKQJJFN2EuBXHUwMDAxd8BQ9ExcdTAwMDUpM1xuOSfjs+xcdTAwMDXVgTGhV1xcY09z2UgvfHxMXGZ/Yl/FW4xcZidPf2o6Szdlflx1MDAxNWJWPDU686mLzZY3q6FcdTAwMWKnLn5mXG5MXtlcZujmOooyvUbPXHUwMDFiOVx1MDAwNpMtlSTfKoGbY3HS/cy4THoyaO5cdTAwMGKqyKQl3fWkfkB0iNTP00/chDRWPNlcdTAwMDBcdTAwMTCp6JTayZ+WysagXHL68uSejFx1MDAxMJ6Ujk+iMvJOsjeZXHUwMDAw3FLDydlvVaNg1nt6cFx1MDAwNni7r3XxMelAg4deYVx1MDAwM4pE/SePNFx1MDAwYum2zK+YXHUwMDE1T4vLdEbiXGaJMnraaozWl9lJXHUwMDA1eSUz8oiB8khu03BcIuhQqz+lXHUwMDAzblx1MDAxNMtry1xcQsNcco1rmqVcdTAwMDRkQL6D2zFZoYk7XHUwMDEzNqt5XHUwMDE3sIY0PCumnYPYXjViXHUwMDE2ZSiC+s3YbKy9apLb4nriK9JcdTAwMDZOilx1MDAwNO7g8ixIkZB35K49JOxzXHUwMDFkic+yXHUwMDE3xVx1MDAwN0fltJXGIJIgIZaNh5pA8k1a77xDJayR+nPzWbox8ytmxtOiM1x1MDAxNOk1S3lHulwiM1x1MDAxZJ3OsnOZ8kpn4CBcdTAwMDAyN7BcdTAwMWFcdFx1MDAwMGYo1CQ/Y1x1MDAwMJ31fohkps9nJnBsXHUwMDAx1il00aWGPp1cdTAwMTlcbkisdVx1MDAxNuhcdTAwMDeo+MRcdTAwMTmJaTJcdTAwMTTj5Fx1MDAwNGt1eeazcZiDJzm581x1MDAxMNk2iTBcdTAwMTk56Ceb2YBiIMmzi5I4Rk7KZuNwLFx1MDAxYUHXokDI834qkzR1XHUwMDA2geBcYoBcdTAwMWLKXHUwMDEzr3mQsVF9Jj4rpFpz792YIU+L0KK9rIdjTam5Js04qYiZaVx1MDAxYznlM/LRgZXWOWO0sSTSXHUwMDA26cyogFx1MDAxNDNpYukl8kTL7PhM2UBq6bk3OVx1MDAwMPFrUjFcdTAwMDHLXHJcbnn/u+O6XHUwMDFl3sWbIGjiM0LDJE1cdTAwMTDyzGhjxHZkskL19iZzXHUwMDFkXFybVFx1MDAxYkVcdTAwMDekkVx1MDAxY2+YU8A1fSdjtOwshIEx8fMymmun0UU5yTc+JkdBqeNcdTAwMWNcdTAwMTcmM2c/dymBdGPmV9yMp8Vn0bZCw1x0nSRNnIj263yNz7LTx3LKZ1x1MDAxMtBcdTAwMDbGcpdcdTAwMDVcdTAwMGJcYlx1MDAxZYe6jilcdTAwMTd4buPokfvs+Vx1MDAxOWZLXHRcdTAwMWKQblDgXHUwMDAxKfjVkTg/wmek1K2wzlPYYlVcdTAwMDKdscCU3OP496KzMahcdTAwMDOJqDjWXHUwMDA0+oenWCaBOkg6iLcmaYxcdTAwMTVcdTAwMDKDRuvpsTDTQuROfY3kaVx1MDAwMFx1MDAwN78qdVCfic1cbum23Hs7ZsbTorOM6bNeVyZcdTAwMTImoy9cdTAwMDVk1zLOKZ2Re1x1MDAwZSg6Mbw87nmSY1CeXHUwMDAxXHUwMDA0RiuQSIGAXHUwMDE5yOOYfrjpKVRcdTAwMDLP6z292bwkOlx1MDAwYlx1MDAwNFx1MDAwNb6WXFyeckpxMclcdTAwMTifOVx1MDAxNvlcdTAwMTQ5/2bybIyal71OwdZQlCNcdTAwMTWXp4sog1xiefCiplx1MDAxNVx1MDAwMrXktYPJKG3k8qC8XHUwMDFlIHjuXHUwMDFijJJCQ4JipCBBXHUwMDBiXHUwMDEyk8BE61BgbEifi9BSrbn3dtyQx2S01OLeXCK9klxmKUEjpVx1MDAxY0OgPdyu7C53L2t7XHUwMDFixevL1Z39k45vfoI6T9zXp9fXW1x1MDAwZfbWee5sQK7EXHUwMDE58Vx1MDAwZVx1MDAwMWdS72OIldqUXHUwMDE0kZAxgPut09n3K3edSjuM3sx+XHUwMDEye0r3ynrlYtDGp9O78tdQJsJX+nSO5NiH7MWNXHUwMDBlr8ur8lwiltpny1x1MDAxN41m7cf+nL9efcr/hjZJglx1MDAwMaQmQaCGu/WgQi41aFx1MDAxZFx0iVx1MDAxObfrcUndeuLgXCJR05tcdTAwMTGYQVx0tTyBq33bbLRTdpS+N7p+jiVcdTAwMTNemZtGZdb+beWcoYhn9DJMSytcdTAwMDUnXG57XHUwMDFix6eXXHUwMDBi4fzdysPKxuNC3kFcdTAwMDZcdTAwMTZcdTAwMDIyWlx1MDAwMpgkNYtysD6+g8Bzm1wiXHUwMDEyelx1MDAwMkw0hpk2yujiXFz8xZGU/Fx1MDAxOWfGUaeRwmPw3vHqp7dJfWMtz1NFN6C+y47SWfXCmX3XuanteszugpWuXHUwMDE1QXIvNoNjVG1vLLVOXHUwMDBlXHUwMDFhpzuVi/q9XHUwMDBiN+ZW4fAh91pcdTAwMTGeu5mruHn3Plx1MDAwZjpcdTAwMTBKWVxyiLNenEhqgyU50cFcdTAwMGLCuONcIsxcdG1cIil2XHUwMDAzpbycgXvLQsDx3llYaZWK86fGho931eViWzeSXHUwMDExMM6m6j9NsWbVXHUwMDE067Xd5clcdTAwMGZ0xOF+3l5bM99dLlV6qrElr6hxjOy8bNTllGGVUFlcZmtcXECehlx1MDAwNZ15XHUwMDBlx2fHsCO22uK0MuV/8/Jyy7V65UPq0LyiXHUwMDEyhqOJgXFmXCIwfcVSp0ZcdTAwMTNGkEHyWvbIXHUwMDEwzKa6nEJcdTAwMTBcdTAwMDFcdTAwMDNlrVx1MDAxMuiNklqYwXZcdTAwMGWc7Vx1MDAwZsYrLv5geFx1MDAxYsYsW9xcdTAwMGJlvaE/XHUwMDAyJVx1MDAxN/XzXHST/L3eXHUwMDEzTjtcdTAwMDTDu2UjdWhegnpcdTAwMTDag5tkxuy3mOMv8H1cdTAwMTSee1pI4ZRcdTAwMDeU8Vx1MDAxNULgqVx1MDAxOCu50buS9NTVhPsxs1x1MDAxMfs1Oskvemk8ylx1MDAxOZDW8+6S+KBUoI3xljfKoUelPneHmlxme+ZXIWbK/Vx1MDAxM36J/pwgTzY1XHJcdTAwMDNcdTAwMWPdWTNOmmy2zsopqSlPsZnwlsyf7NtFdzn0XG5VXHUwMDFiXHUwMDE5XGJSXHUwMDFjz83OXHUwMDA2JiqnvouJd92CI5xcdTAwMTlnnEvYw4QusFx1MDAxNKVpyVtlXHUwMDE1xFx1MDAxOc07QaO0v9ui5Vx1MDAxONRcdTAwMDGEXHUwMDFkzoBVXHUwMDFhubpvPEtcdTAwMTboNoNyzksj5ORZXHUwMDE443Asz+g73l4gXHUwMDA08lx1MDAwNvOEpH+kXHUwMDA3i85cdTAwMTNcdNCDT0x0+0x0lmbJ/IrZ8JhUllx1MDAxYSFFSmHEV1TQMn2OkSF7tbNfnltb+bGO5lTvlq6qNybMO5Uh6oBcdTAwMThcdTAwMDBcdTAwMDC5w+/QeiXX4/eaTOuXhc2OxyRyTlx1MDAxMTlvXHUwMDFlXHUwMDA1RntcdTAwMTRGKv5cdTAwMDTc/oxTdTzvg4F4K1TuPknecJJuW1x1MDAxZlx1MDAxZD/xPklcdTAwMTIwQkhJLGMlwsBRXHUwMDE58dRBWKQw6GsvXFzJXFzqXHUwMDE0qffvPVx1MDAxNmeShpmJ2sz5Y5e+TIMs8ZRcdTAwMWFj+vg0PF/RXHUwMDFiN9ddactcdTAwMDW1XtlfdTsu78hVXHUwMDFjWVx1MDAxMUJcdTAwMDU9U6mlgEFcdTAwMTGiXGZpXHUwMDE01IrEXHUwMDFmUWrUPqefXHUwMDBimpDM7rhcIotcdTAwMTOcRVxivJUuNntMXHUwMDFl1yOoWVx1MDAxNNJ78Vx1MDAwZeNNQ1YuVkpcdTAwMWKmu31d3WlXdk/Cx5sll8NpPUxV3zRcZu5cdTAwMTIzRn2n5O+ce8P3mYbvIdBcdTAwMTTfSUCSRoiz26QmfYLhQ6xcdTAwMTCdllx1MDAxZZyZRZOY/MzprVx1MDAxZVx1MDAxZe5+XS02yvXoXHUwMDA03TvM6b1C3cNOaGCck3tcdTAwMWaZXlrakViydozK0mublf2dk/pi4zhcXGoubX7fmvthRf4xSPxuPe9m4fjWXHUwMDBlNWn1vLGqVzpFXHUwMDAx3YtcdTAwMTkm7k7kezQpLY6u3jknQN5975b21/Tx41lnd3exu7do6uotK5ev1m1OvGD+XFyaT1x1MDAxNXOOgl/QUTH8alx1MDAxNeTMm5xbOLlcZjhpXHUwMDEwvH1Ug0Wk8GaG61TJXHUwMDFlLb5OxaU9XGbPOf7OPu2Az1x1MDAxNVx1MDAwNrXmhzi2V9xCLLqKXHI2XHUwMDEzieVa8aZcdTAwMTmdu4uAMVVfckWA8XqSlZYr81x1MDAxYkeVnc1cdTAwMTPd3dra7WzJ62ruN9mRVFx1MDAwYpCzbrRBbv48gMVcdTAwMDJcdTAwMThcdTAwMTFYgVxcjFx1MDAwM6WVM5SXmFSSii5cdTAwMThorzRJfc7il1x1MDAxMOuhwFMo3NF6kqJUM+rce3/ltmq1q/uFu8e1XHUwMDA3cVOA+up1XHUwMDBl3VBkbTJWjZ9cdTAwMTSDU36M1M/kL5170zdZpi9cYlx1MDAxOIJuhVx1MDAwMEeh1+x2lyqfYPlxN0TaXHUwMDAwXHUwMDFk+klcbnx/XHUwMDFlL7T0QG6EiD5S4f5d/dArXHUwMDE0PuyHkoabXHTG3vBcdTAwMTPAiOkt47n6pFx1MDAxNHJ0LJ7MmzVo1+6PW6flTsfOP1x1MDAxNva/577qK8UnhEXgLVxy5HP1UOJEge5AYFx1MDAwNNI7QqIzMMNq/LxjXHUwMDBmNDgvXHT24FwiXHUwMDBi/lG/ZFx1MDAwM62cUdZcdTAwMDAxyECT7Fx1MDAxN9FoiFeE/6SZXHUwMDEzwytjKe9Mec1t4L2pLrilP1V+xZ9n/3xfoj/Hnr5Mr1x1MDAxOYieUCHNXHUwMDE4m5i6du+mJbC2XHUwMDFmXm8/LS7drf24uJF5XHUwMDA3trKW5y/j25SeW21cdTAwMDZaKkFI4ZqZs9zDlJSRXHUwMDE4z/FWPMVqfWSO9Tf0sSt09W7xMdmvvu9cdTAwMTamX0N5xtaXn+j9Vry95fUzXHUwMDFl0DPS6DHUyj+/aP+E3+5rle583Fx1MDAxMv520XvxWXt4ZWRU+CH8699f/v1/+X3iviJ9 + + + + TailchatNetworkTransports(NAT/Redis)UserAPI GatewayUser ServiceChat ServiceGroup ServiceOther Service....RequestResponseFile ServiceStatic File RequestHTTP HandlerSocket.io HandlerExternal Service...Gateway \ No newline at end of file diff --git a/website/static/img/architecture/meeting.excalidraw.svg b/website/static/img/architecture/meeting.excalidraw.svg new file mode 100644 index 00000000000..f5fe6c87eda --- /dev/null +++ b/website/static/img/architecture/meeting.excalidraw.svg @@ -0,0 +1,16 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1daW/bSFx1MDAxMv2eXyF4vsxiI6XvY4DFwkd8W3Isx06ys1xiaImWXHUwMDE4XHUwMDFkVEj6XHUwMDFjzH/fatlcdTAwMTFJiaQoWWLoYJlAtng0i82qV6+qq9t/valUNoKHkb3xR2XDvm9ZfaftWXdcdTAwMWJvzf5b2/NcdTAwMWR3XGKHyPi77954rfGZ3SBcdTAwMTj5f7x7N7C8nlx1MDAxZIz6Vsuu3Tr+jdX3g5u249Za7uCdXHUwMDEz2Fx1MDAwM//f5rNuXHLsf43cQTvwauFNqnbbXHRcXO/pXnbfXHUwMDFl2MPAh9b/XHUwMDAz3yuVv8afXHUwMDEx6Ty7XHUwMDE1WMNO31x1MDAxZV8wPlx1MDAxNFxuiCmZ3lt3h2NhXHRSXHUwMDE0K6Q0nZzh+Dtwv8Buw+FrkNlcdTAwMGWPmF1cdTAwMWJ71N36JppcdTAwMGZn2Npk788/eY/caYW3vXb6/Wbw0H/qXG6r1b3xXCJC+YHn9uxLp1x1MDAxZHSNYFP7J9f5LvRCeJXn3nS6Q9v3Y9e4I6vlXHUwMDA0XHUwMDBmZlx1MDAxZkKTvU+98Ecl3HNcdTAwMGbfXHUwMDE41zUsXHUwMDE1l5hcdTAwMTHzXHUwMDE5tvIwPiprglwizVx0VeaTTcm17fbhVYBcXL+h8Vx1MDAxNkp2ZbV6XHUwMDFkXHUwMDEwb9ienFx1MDAxM3jW0Fx1MDAxZllcdTAwMWW8sPC8u+cnplwilKtrO51uYMRXkY6wx1x1MDAxZE9cdTAwMTnFRFDBJ1x1MDAwN8xdRlx1MDAwN+2xXHUwMDBl/He637qWN3run1xy33yJSGiEez+tQFEliilSYN+HYkfeet9WXHUwMDFmlO741rerw1x1MDAwMFxy/M+dXHUwMDE2qW5Mzvv7bXKzT1x1MDAxN1x1MDAwYjU69EaNT41bq9H6fl71bk/P6vG7/Li/5XnuXd52N4822439oy/eea/Lr8lcdTAwMTctv510V9BucLB30tpxxeghXHUwMDE4XGZPXHUwMDFhtHvqPdoraNc7vNBX1bp1/LWLOlvVg7vWPVx1MDAxZqygXXZIrqzzOjo6vlx1MDAxONx9/FwixZlzdbyCdqv71+8vXHUwMDBmPXbV2yFcdTAwMDf8qH27TdlFvnaff1x1MDAwYjX1ZtS2nkBcdTAwMDVcdTAwMGLOXHUwMDA1XHUwMDE2XHUwMDE0kIeEwNR3hj04OLzp98N9bqtcdTAwMTfi0JuIwDNcdTAwMDBcdTAwMTjT2yj2RUx9XG77hFx1MDAxNkRSXHUwMDE1OWFcdTAwMWX0JVx1MDAxYkHZoU+wXGbo45RcdTAwMTVcdTAwMDV9PFx1MDAwMfqInEY+TFx1MDAwNdFcYjFcdTAwMTFcdTAwMWVZXHUwMDE59GVpI0OK8Fx1MDAwNbQxfOvuMGg6j0/eNLZ311x1MDAxYTj9h9iLXHUwMDFiqylIulx1MDAwNdbi2160N31cdTAwMWJualrBOnb6Zt/pXHUwMDE4Td5owWNEL1x1MDAwMXVcdTAwMGVcdTAwMWPgXHUwMDBik1x1MDAxM1x1MDAwNk67XHUwMDFkZVx1MDAwMC2QwYI2vYM8jtv1nI4ztPrnU1wiZppdJu8gWKXZnkRcdTAwMWFLSml+2/vkN/bPep3v/Vx1MDAwMO/4p4JcdTAwMWZ9RLtcdTAwMTdltz3w4bKmNPlhfVx1MDAxMaV+4lx1MDAxZLRmIGhifj+dd2ClpcJaU7p668vyNHdcdTAwMDdfvp57d/Wd94OPtOHXq/Tg/ijZ04xNaK5cdTAwMDObx2eSb/iTeYd7fExGg4uvrU792K+edvbau+d8XHUwMDE1fFx1MDAwNtWPd1x1MDAxYvT6jG+dXHUwMDA2I9o/VGKnuoJ2O1x1MDAxZLG51ztqfbAu9/f2XGLuN6tf5Vxu2u3vXHUwMDFjSzxs0DPtXTk7e1x1MDAxN6rarvb+z+vKwOsy291rvidcdTAwMDfyQPY1+9SrNk7cam+0in7Y98V3b+vzLVxyXGK6PGCPZ0fV+odV8VBcdTAwMGV+n4VAuCZcdTAwMWVKXGKd3vvDXHUwMDE3co1cdTAwMTnTWub3hdloWVpfKEmGL+RY1GQxvjCJiPJcYvF9doWMXHUwMDAzS9GEh49bXHUwMDA0XHUwMDExha7BXFxcdTAwMTRGRJu2XHUwMDA36vjnsGnaXGZqjlv5Z6W5+zGRmDJcdTAwMTG7fGXEdFx1MDAwZbWbJqZpXCIvT1Rx5O1PXHUwMDE5J4QjjDBBtcxvnVx1MDAwZodcdTAwMWF56Lu7eXh5eLNcdTAwMTdcdTAwMWNcXF11TstunUzEjVOImHVixeNMlazPPHNSValcdTAwMTRcdTAwMTKYoIKZ6mPjoXl9wz67XHUwMDFmqlx1MDAwMvt3x1/2XHUwMDA3Z/vrZKrJN8zpOV+QeZvvOVx1MDAxN46Zl/OcKDWDozmWglxukd82s99eaW1TZtkmYSruOddom/lcXCfBhDFJtNKrt83y5HA++rZXObHbjlXZsW+dlv3n8PdL+6plXHLeXHKc1ju/5dn28Fx1MDAxZoV60jmuZ9qT5nyCTLN9go1ExpvqU5lcdTAwMTBcdTAwMDTQe4FBp2xcdTAwMWMrqd1cdTAwMDJryCC8VKqCXGJvgs1cbjpts1x1MDAxOINcdTAwMTBcdTAwMWMxsoTNjmV5gc0uRXf9wPKCLWfYdoZcdTAwMWQ4XHUwMDE4Or9cdTAwMWbDpXlMYmzlrVx1MDAxYiMlqiEsprbIaVx1MDAxZGs0XHUwMDBlYmr8ed/E8W7Yw/Z8ObKzr3E5XHUwMDEw1Vx1MDAwMpDs+Vx1MDAxMyXJwWthRlx1MDAxZj71jFB9y1x1MDAwZrbdwcBcdKC/T11nXHUwMDE4TPfruFx1MDAwMzeN+XZtqz19XHUwMDE0XHUwMDFlKnps2s5HpsU4WVxuf6uEKjf+Mvn9v2/nny1oePqb6M+FXHUwMDExKOJ+pkNurFx1MDAwNVDaiLOYXHUwMDA3QNkpv5JcdTAwMDKQojgr4uYyXHUwMDA2QOtcdTAwMWL6YZFhpXDop6Yjm1KzkERcdFJaymJcdTAwMDGJIVwiIyxn9YC0XHUwMDAwXHUwMDEwYKw10cByXHUwMDE1JVx1MDAxMlx0XHUwMDE2OWlcdTAwMDJHXHUwMDExXHUwMDEw4JyT5cApO1x1MDAwMo/IVFx1MDAwNaHAS3DJXHUwMDA1l0ozSYVOkOpVo1FEW81WnVXUXHUwMDA1XHUwMDAxauncg9Rcbv5cdTAwMGKVXHUwMDFmpqzvO1LYj66zd72796F7eHxmdVx1MDAxYmWHKYyAXG6l45RCrGyjZFx1MDAxMN1wXHUwMDBlXHUwMDA0blxy8c1Et1x1MDAxMqJ59c2n+1x1MDAxZra3Ty+v8YnwXHUwMDA2m8fU+vyS3MNrK8+ZlytJ7qCc4r620bdcdTAwMTeMtvyArXQ3yCWYXFyITOuqzolcdTAwMDTCU+BHMeVcdTAwMWPTiPefh33Z1lFa7FM0XHUwMDBi+1x1MDAxNC5cbvvylecwgTDCelxydYlrXHRcdTAwMTKXSuyc2raHXHUwMDBiLc2Z47an8zZPXHUwMDAyvoBzyNTIXGK8XHUwMDFkMUnVXHUwMDA1RiODi9Y5ryPRQ/eot3Py4fNAdK9Kb3eALZmcQ5aNcyBcdTAwMDZCUklcbitcdH56u42zK6tNaOu6fjf43tw5vDo7vk/xXr8m51hTN8yjMsk3zCntayvM+Vx1MDAwNVxuPLBE03snmIpcdTAwMDVcdTAwMTGCYZZcdTAwMWZTs9WtvJiaXHUwMDE5x6nC4ricpcZEIImFUmtcdTAwMThCTtdHqaXAdFx1MDAxMX18OZshhbKZOYQgic2QJVx1MDAwN5nS41x1MDAwN4y5YFowlj95klx1MDAxZFx1MDAwMJbV6CjKKjFcdTAwMTZMXHUwMDE2NMokSVxyRbZIvVtIa1wir2tS7i8xRlIsU+5f5ixv7owqqlHNNFx1MDAxMVx1MDAwNCOgpFxm3lXkpOd8Kl120Ck7rqjE8rqUMEyY0pRILUQk3lxu5UBcdHK8psxuNVVHzVx1MDAwNtpcdTAwMTk28Cb6c2FYXHUwMDEyqbCkXHRX1Lzx/OFVZvqorKhEMFx1MDAwM8WWSFBcdTAwMDSPXHUwMDBiXHUwMDAwXHUwMDE0QyWpcFxyaYgyteCMRedorVx1MDAxY5VwjWkuNcNIKSCCYb+HqEQ5KD/hXHUwMDEyXHUwMDAxllxuhHlcdTAwMDQjn0GKXHUwMDBiTimWXHUwMDExr11cdTAwMDRIcSH0Qjm4RUFqXHUwMDExeGBcXGlcdTAwMGVvSlGJmFx1MDAwZePTXHQ6XHUwMDEwWsNSMqJcdTAwMTVIrVx1MDAxNVv7WFx1MDAxNMgkXHUwMDE551hcdTAwMDKlXHUwMDAyzOJcdMNj+JVcdTAwMDNWqvaarTqruKvCr/QxKVx1MDAwMnRcdTAwMTlcdTAwMDHVyM+qsmPRsuKXQFmhjOC4IFal6XxWRXXsnNnJ5EQqhIkslmKB2ipcdTAwMWTC7U+kWIbcXGKlkVwiRCOKMVx1MDAwYntcIoRcbrksx8qOduJMj1wiJbhcdTAwMTZaXHUwMDEx41x1MDAxNFx1MDAxM1x1MDAxOJZcdTAwMDB7j401v2r4SlVes82o7arAS6cntyWmXG60coFpp9lcdTAwMTmvsqKXJIBeXGaUnnHKWViI+cS9RI1cdTAwMGKiJNeMYvixPuxCNc3B6iRcdTAwMDXWXHUwMDBiRDChXGJcYt5HTYJpmvSYplLqWe4lXHUwMDExUmY1jCWSNC9BL3C3ep1cdTAwMDHiXHUwMDAysME44lx1MDAxYaJkzLFGhOnZXGKRoJrESFPKXHUwMDE1XHUwMDEyhCDO1sy9XHUwMDAwUjnSWFx1MDAwMDWhVHJTXHSUL2x9TfBVTVXg8dFZ3V1cdTAwMTWCQfSUXHUwMDA2YVx1MDAwMkHsqDjPP+Uhe9JrWVx1MDAxMYwwllW6qHhB/IvhXHUwMDEwPSeoNVs8XHKgwVxmMS42QFx1MDAxY2exlsokr4FiQVx1MDAxY0/BRlx1MDAxNOWaXHUwMDEyzWfJXHL5UTe3vsppXGJSXHUwMDExY1x1MDAxMKdjKs1cdTAwMDJKXHQhIZ1bMfmqICqin2ZbWe10XHUwMDA2ieJcdTAwMWEoLDjH/Cms7Pnx5YWgzFx1MDAxMFx1MDAxMFx1MDAxNTV9XHUwMDAz7GpcdTAwMTaCZnlcdTAwMTJcdTAwMDW/L4T6XHUwMDE5ifSyQJCQnDJtKiXAI3OckEmfnSexalxikiayk1xiOJhcdTAwMDJuoFx1MDAxM6qjxa+GQLGwbmUkKDJwN1OjXHUwMDA0bJgjlD9cdTAwMDeVvZBGSVx1MDAwMUhcdTAwMDG/NJRCSFDrqEd9XjtoTIEgiONagdONgMTKXHUwMDAxXGKgXHUwMDBlKSkgcFYgRiRbXHUwMDFmxnEmlCeYaVxiTyRjjM7MXHRcdTAwMDWUhCu1+lx08LTIXCJzi8JTbmSoQlx1MDAxN1x1MDAxMeMsXHUwMDA04IJcdTAwMTBcdTAwMWHrXHUwMDA0cqJcdTAwMGKezmHiXHUwMDFi8HNcdTAwMWMzJSGAjCzYXHUwMDE1sjY8I8NrgqdU3TXbrNauXGa8Ulx1MDAwN1x1MDAwMFx0okpClE7zR3DZy/WUXHUwMDE0vTChWfSJSV3Uci9axyfwzKLXbFWCxJQyxdFPmHu2TrRaXHUwMDAwXHUwMDE4JCgqJVx1MDAwMitEODC8SJTxXHUwMDAzXHUwMDE41s2lXGaho8IswKM1hHKEh1x1MDAwM7OLIOZrQqtqqrKabdHyhNRSRZReqlxiXG7IJYmWxM1DJ7rftHeuW736w/7t5uGZrYfWsPRcdTAwMTlycMFZ4ESKXHUwMDFh3iNcdTAwMTE+XHUwMDE0VirOXHUwMDA0d1xufDRcdTAwMDNcdTAwMGVYaKGiYFx1MDAwMtHl4Gi5pagm6zltd63h0O5XmmB7labTXHUwMDE5Wv3kXHUwMDAyRlx1MDAxNWtkUp/Yt6/jilx1MDAxZi9fXGbcSIfEa1x1MDAxN2NcdTAwMGY3s/BUpoDLmVwiSzdFQakwyef8YVx1MDAwZWd3tL7T6ItdZ9Nvfz1n9lx1MDAxNu+U31x1MDAxNE1cdFxcqinqwoqGUUKaZdZcdTAwMTQ5kcBdXHUwMDE0LXZ5YiZJdKSueFM8XHUwMDFir1x1MDAwZlNqY4yLuJw5ktSkg6KCKYxYfsc42lx1MDAxYVx1MDAxY7VcdTAwMWb36vtcdTAwMDGrq4a277c/P5Y+66lcdTAwMTQ4Rk4hXCJcdTAwMDSPw6M8YJz0JMQsSlx1MDAwMP/AXHUwMDE4JZbrq9ujKCHLIFx1MDAxMyrzTEFH4eZoPlwi+r52c9z9+LxMUzPwbGvw51x1MDAxMFdOPbd907K9yS5S2XaH/s3A7DJ7flx1MDAxZplZgm/NJ0lehUqkWOzc+v+lbfblz5Fp1un1uKlrUUnJTDJcdTAwMDbnj8azp12X1KwxJapG0+2a04LsWiYlXHUwMDBmXHUwMDEzplx1MDAwNXAqKWFKXHUwMDE0XFxxK6mQ66y4XSBcdTAwMDAnWlx1MDAxMC7EeKlcIs5nXHUwMDEzc2auXHUwMDE141TB22JcdTAwMWFJ4OrPZ6xxjlx1MDAwMMFcZvhcdTAwMGaRmlx1MDAxMKCmnM2mMHlccnMmsFwiJnlCqJYzQr2qeFxcxvOFq5shkP4nmbDRQ4x5ZFxu8DxIyp4+WVZI4lJkQpIuXGKSoqJGi2qnMYlcdTAwMTHGhOSs2JzgwrNX11x1MDAwNklm7SfFweiJXHUwMDE5Z1x1MDAwNVx1MDAxOGCzg5uErVx1MDAwNpRcdTAwMTaojiNcdTAwMDRphs2frTBcdMCowT7LpH8pSIpo6/gr1eFcdTAwMTVxSHrz3MaGNVx1MDAxYTVcdTAwMDPQqkl/g+I67WdcdTAwMTZcdTAwMWE+yMatY99tzVx1MDAxYc9v1+PNUK9xl1x1MDAxOTyxzeP89febv/9cdTAwMDcnJlx1MDAwMNkifQ== + + + + BrowserServerSocket.io + SFUUser Media Device(Webcam/mic/screen)Peer1Peer2Socket.io Channel Send SignalSocket.io Channel Revice SignalSFU Media Stream1 Producer Stream2 Consumer Sream(peer1,peer2) \ No newline at end of file diff --git a/website/static/img/architecture/plugin.excalidraw.svg b/website/static/img/architecture/plugin.excalidraw.svg new file mode 100644 index 00000000000..b9d67fa3062 --- /dev/null +++ b/website/static/img/architecture/plugin.excalidraw.svg @@ -0,0 +1,16 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1d2XLiyFx1MDAxMn2fr3D4vlx1MDAwZUxl7TVvXtq728a7e2LCIYPAslmEXHUwMDAwYzPR/36rsI0ktCBA0LjDPHS0tZZUec7JzKpK/ffH2tp699W11/9eW7dfylbdqXhWf/1Ps/3Z9jpOq6l34eHfnVbPK1x1MDAwZo986Hbdzt9//eWfUSy3XHUwMDFhb2fZdbthN7tcdTAwMWR93D/677W1/4b/XHUwMDA27uPZ5a7VrNXt4Vx0w13+rYDi8a3fW83hbVx1MDAwMSTBXHUwMDE0XHUwMDExJUdHOJ1tfb+uXdG7q1a9Y/t7zKb1jVx1MDAxZjuXNbrNtq5PL3bPLvrX20d7t/5tq069ft59rb89lFV+6HmBRnW6XuvJvnYq3Vx1MDAwN3P3se2j8zot/Vxu/LO8Vq/20LQ7ndA5LdcqO91Xs1xyodHWt7fw95q/5WV4XHUwMDA0XHUwMDExRVx1MDAwNFx1MDAwMiTmnGH/fZjTJZFFKVx1MDAwMVOu93Mh2Viztlr1lmea9T80/Plccru3yk813bpmxT9G4rKCwCP331x1MDAxZlYqXlx1MDAwNGBcYlx1MDAxM1CgqP9cdTAwMWNcdTAwMGa2U3vo6iNcdTAwMTiTRSZcdTAwMTVQiVxiYopcdTAwMDdejz3sXHUwMDBlQvUhXGZcdTAwMDW609zc3a9cZi3j3/G3+WB57vtbW++YP1x1MDAwMlxyN23+XHUwMDE2MCv/5J5bsd56XHUwMDFmOKNcZjOlkCBqtL/uNJ/0zmavXve3tcpPvsFcZrf+/DNsqW/G89pvuVx1MDAwZuXr/fbZ7aXT3T3u7my8lvxmpZiz6UVCWFx1MDAxMVNcdTAwMDVcZiuB9T801I3AeVFQbc2KgVBY4FxcuyBqV7NcdTAwMThcdTAwMDcwy7qvrlx1MDAwZVpmtZ93g8SMIFwiXHUwMDA18dnDZ1x1MDAxZCGSSIdqsDFAzO++ZM5cdTAwMTk31JDZRUxVcsBcZuVjqldbYD192/BcdTAwMWVcdTAwMGZLp/37k/uz2y6+z2yqXHUwMDAyRMg4MaZcdTAwMTFzpEhELVx1MDAxMJjI1+a6ntXsuJanX2CC3ZW9VqdTeLC65YdPZHtKScZcdTAwMDRCPMb2cNRcIj+MXHUwMDBmXHUwMDAzoZxSLvlcZtb3z/tcdTAwMGXfWEK20LVf/HdcdTAwMWMwpaZDL1x1MDAxYntOe6eFX7a37bv+1v3+w/rouJ9/xl/27eSnq/vvdzunire9waH1ytB5g+HwXT7ub3leq1x1MDAxZrju+/9SuJ0jrYY0XHUwMDFmwMQ/ZVx1MDAwNDChl/SGlTE9xlxuRbBCVFxmVjD7gkpcdTAwMTaoXHUwMDAwI4CE9vXisFx1MDAwMowlYUUzOyZKgyx3op7a7nwzMuZj+spy6mXdXHUwMDExhb5cdTAwMWRg5Wqr2T13XHUwMDA2Q6Cj0NZcdTAwMWSr4dRfQ+/aXFxqo+7UmsOe1e22vZD73HW0Kz46oOFUKkGWv7c6tm730Iv22aasb2Xprd5+XHUwMDE2XHUwMDExaXlOzWla9Yu4h0qBms1eS0clKWuXe1Xlblx1MDAxZDduSmSQXZtcdTAwMTBcdTAwMGLhjVxuXHUwMDEy1SaI8Y6A8C/AZVx1MDAwMpzSTqokRMQ5RiRcdTAwMTlwXHUwMDA2pUJohcIzIG5Gcaq5rdrVgPFt2v5cdTAwMDZ7t1tcdTAwMGaHvUZnXHTilHrd3pnTblj1Utuymvu3jl17OTnZzeG6Tp1WvV7nsVot7TXsPefY4Vx1MDAxYoNcdTAwMWOuW6n2X15cdTAwMGLtrbtG67VcXFx1MDAxYlxiV1x1MDAxNs56OVxc99v501x1MDAxZN5mR3eFXHUwMDFl3yvXKqpB+4d5ib9AlOZcdTAwMTXYxVtRXHUwMDE28Vx1MDAwN1x1MDAxZnVcdTAwMDaFXGbrXGIsxlWOoaMv+c/IRkJHW5rQUSRccmTYXGIlxmmgXHUwMDEwwkpcbjSLq7xo/T+t97R0rlx1MDAxZFtNq1x1MDAxNtTtVfNcdTAwMDAmSPW4XHUwMDA3MPZYKYjbrdpH55Wjw51cdTAwMDNaqZTUd++R7TxmT6UwXHUwMDE1glx1MDAxZJHRdFx0pixcbjr1XHUwMDE1nmZcdTAwMDOd5IxcdTAwMTFJXHUwMDAz6YhAfIpIXHUwMDEy6KQkTPvcZJbkyIxcdTAwMWXAReXi8OD62LkrbbagYZ3Si5Pnylx1MDAxMpR6skJxKXWwno9CxT9lXHUwMDA2hVwiPJxnpFx1MDAwMbCPoEJioPKlT1nDUyBGnVRcdTAwMWNUQEa2fkCFUYwlU3xcdTAwMDHyJFx1MDAxOUgxhd0lyFx1MDAxM6yuLk2Qj3hdgnhByjRcblx1MDAxNdO9I0dDXHUwMDAwR9rZyNST77RjW1uV8mDXvbkpu62zXHUwMDAz60fFflxcLVTEj0RcdTAwMTFcdTAwMTb0b4dcdTAwMWUvQsW5hpxieSGriL9jUFxujITEflx1MDAwN+Q2spQmXHUwMDFl/dLD8WBj4+i0j+ve0Vb9nG+8bsSLx1x1MDAxMFhcdTAwMTM1aZLUxd8wo9TNXHUwMDExPGaQOlx1MDAwNVxi5lx1MDAwZcbiVSxcdTAwMDBCnphcdTAwMTg3Q8HaYZEqi+eRpftWXHUwMDE5hJyMg5DwRYJwgnvwXHUwMDBlQka1XHJIwVx1MDAxN4DCVCdrVrGbWtN8JcGT5Go+XHRcdTAwMWNcdTAwMTO7XHRqXHUwMDExL3Z4XHUwMDBlsSNcInHKhVTAXHUwMDE0KJYlqf5cdTAwMDaz2+uz/VxueVx1MDAxZVxm+OCsy0r8yCPbm59cdTAwMDJmjI3BjFx1MDAwM/v1WqfdXHLCXHUwMDA0XHUwMDBiXHUwMDE421LEbmvn6HC7WmX3z/XO/S30LHUnyDxit6DLTtLQ+Fx1MDAxYmZs7Vx1MDAxY4nSLFx1MDAxYYpcdPGBtyBcciXRkH40s4FjJqjkWdL3WXpvlbHN0Ti2XHUwMDE5/HpcdFx1MDAwNU5cdTAwMTTGWJH5o9OV11CyVFxynaBC8Vx1MDAxYUrmXHRcdTAwMThxcmZaYFxmVPFpRLSwu73n3Fx1MDAxNJrnP+Dq/KbjndGn/mdcdTAwMDBcdTAwMWFcZnElXHUwMDExUlxc25pkUoZQp6TeXHUwMDBiSkigXFw7jzDesOVHkphcYsVpIIxYirqe/jh13f1j91x1MDAwNFd2nFx1MDAxMyTat+K0tkhcdTAwMTmMv2FGXHUwMDE5dJ+273B1U55s7Fx1MDAxZLJSd3Pwcua6eclgPlx1MDAxMzYnhpLJXHUwMDAzR0JcdTAwMTGhQ5lM80ay9N5qo5OnoFPHc2JZ8MxcdTAwMThjYma0ii3A+c3TJPPQR1iuPqZcdTAwMGJM/lx0VYKTp/VzyoWZ9JXdXHUwMDExpadPUpZvN5w2b9/0L5+rlz3W+CRcYsRFlIJApYoogMBfrY9AJNHNWFx1MDAwNFx1MDAwMNNcdTAwMTSnJpvXZ0ff+/Ur1u51+UGhXHUwMDA2p2hcdTAwMWV9XFzQZSdOV4q9YcbWNu/wXHUwMDE5bdbOdirdVv2oXHUwMDAybvngufG5ZJeg5NljXHUwMDA0QDCmcHbUp3ffaqNepKFcdTAwMWVcYltcdTAwMTLqs8muXHUwMDBlSYGS4Fxm3N9Wdpeb2p2gW/mndimiyVx1MDAwMOSIUySz4698+VrSJtyo7VRcbrXj+vbxXHTln2JcdTAwMThTe1x1MDAxOCpccn86PF8t1aVYKUoxWvJcYqdUZeK1e/Cj96p225vdi0frfn9+2f0sl52k5vE3zNhatCtcbn3LPVLk2nVJ/6X1zduGT6bmXHUwMDAxZIyRibZWgjgn2VfmpvfeSpNcdKOpZMLQSok5XHUwMDA1YYbKYbk55l9cIubLzTFPkMP8c8xcdTAwMTQn4lx1MDAwZqhcdTAwMDJcIiiaYj5cdTAwMDTa6t3euC7a2T84K6P2+aA8oINPXHUwMDAxQMA0LcdMaFx1MDAxMfNlJLEmLjtcdTAwMWEtsOFCMMnokuXcq5dcdTAwMGLbVmmw94yOOL0/Ou97u1x0w5f5XGJk/FxyM1xuZM1FXHUwMDFi0L6yPUlcdTAwMGY2zkuVY/LNTlxizldnVcqShDd5NqL2KFnGRY9ZjGK1Ya9Sh5ZUUSxcdTAwMDf2XHUwMDEzlvd81L/AZm48XHUwMDE2v3XuerRcdTAwMDa0Y3vPQTFdgv5OXHUwMDEwsMTlqu9NjUViloWCY3RcdTAwMTEyUqlIkVNAXHUwMDA0uNJRnFxmTzogXG5cItZEipQryanuNS5B4Fx1MDAxOJ9OfK1iXHUwMDE5XHUwMDAzyPB51sdcdTAwMTEnXHUwMDA1NVx1MDAxM1piV45cdTAwMDEkXHUwMDBmXHUwMDAwXHUwMDAylVx1MDAxOCBTVaFcdTAwMTlcdTAwMTaOsVnA6LaccYH3/7fmd//wj9H///0z9uhCoo2Zn1x1MDAxMP75XHUwMDExwatbne5Wq9FwuvrBTk2jxlx1MDAxZqDTtbzuptOsOM2a3udcdTAwMGLwRyGoLGvLh0RT7plcdTAwMDdGRVx1MDAwMES5IEQoRTGSPs9cdTAwMWJcdTAwMGKx3KHNvG9cdTAwMTkp/7rdrExuRPrytkAjXG6mXHUwMDE1XHUwMDA0mzRcZlx1MDAxNpSDdt9wpFx1MDAxNSzSiOG72DCs8GBblVx1MDAxOIrQrYzZPXtEXHUwMDEwdCkjS7N0PzOpsntcdTAwMDZcdTAwMDVcXFx1MDAxOVxcXHUwMDFkXHUwMDE0Lkv36ungapvKu+9HzdVcIogkz4CQtGFtTcShiGC5nkGQeT5CcmZcdTAwMTbOXHUwMDAzW0BInuZcdPeeqpu9R6fgXCKvVn6qg317YifM45gmXHUwMDBml/tlJ4VcdTAwMTnxN8zY2jkms6Red47RutTrzpE3XFxUuFx1MDAxNVGJWC+Uzl3aalJYXHUwMDE0nFx1MDAxNFx1MDAxZMmHcMxcdTAwMDVcdTAwMDU8xVwirVQzXm36k6n0J+Vy6C/o3qbNepWKY+1u/YJZPVPZ5HyRkWfXXHUwMDFj/Vx1MDAwMK9LXHKJJkj4eEg0amMs/LLwZVosXHUwMDA0nJJgojy8hl87eaSokEJcdTAwMTRcdTAwMDQjRP9cdTAwMTWxJyWKKPDDJGpdgESRXHUwMDEwjjFcdTAwMDOu+1mxnGsg/q6hXHUwMDEyIElcdTAwMTGjSkWGh1xyjpPzzIZVMck0zDNdqKRcdTAwMTRgXHUwMDAxs6Az31Ap0ebML2pt/vVcIqKYW+iUPlcvXHUwMDE0Olx0wICVXHUwMDA0ZcpcdTAwMDZcbq5cdTAwMDJcdTAwMDe9xSyyqPt89Fx1MDAxM4K8XHUwMDFmMGUglc4zoSZxjpBU2qTMXHUwMDA0eOlbllx1MDAxZsxBMUMkXHUwMDE1enFThFFZnLN0XHUwMDEyIzyFxEDol85A40h7XHUwMDFiXHUwMDAyYkgsoMZ+Qkd3XHUwMDE00lx1MDAxYUiwQlx1MDAwNDD7Kr2QjbSU8V90kFx1MDAxNUtayVPNhFx1MDAxMJRItIBcdTAwMDTPqrBWMEeyXHUwMDE2Na9lsFT61Ka1cG5FXG6tIVxuYyp0XHUwMDEzRZSmgFx1MDAxNdVSeUo3yiSdXHUwMDE41laiJOFcdTAwMTS4YtFmkVwiXHUwMDBiilx1MDAwM1x1MDAxNpFm5UxcXOnR31x1MDAwNO9cdTAwMGJSpylwpN0vIFRcdTAwMTFg+pGj3leMM0+ZKUnNMaFUs7lcYlx1MDAxNMX6XCKuNOJiXGZrM1x1MDAwZVx1MDAwZdNcdTAwMDWJK7n8r2KUK5JpUP9zXHUwMDEyl4Lg8YWIfS2DudLncYRJglx0s2KWI6W9YG0g0aSwXFw8UTGpTUZcdCWRXHUwMDE0QOJoii3eo0pPXHUwMDFmpVx1MDAxMlx1MDAxMyG4yIBpQSZIcEnHl0BIXGKlK6LMpHlNXHUwMDA3jlhyRrg0XHUwMDE1//wkj19cdTAwMWJcdTAwMWaHXHUwMDE0RMqvYrDZxtBcYsWhiafB4lbJk/mp+URcdTAwMDGD35eokm3O/KLWtlxm4kpcdTAwMWZcdTAwMDBcdTAwMWbzbrTzTEBcIoL1e0VCoEBg61x1MDAwN2JogneTv9OlQyeGzNdMpMRCu1wiXHUwMDE5XGI1ZyZLr1x0mMZkXHUwMDFjxkpTU3+kZ1x1MDAxNP75yFx1MDAxY3FT3lx1MDAxZur4XbnIzFxc5TxYoFwisKA3kYuI9iBcdTAwMTSnM9WknFRob8pcdTAwMDKPi+FcIlx1MDAxOTqcLyVcdTAwMDeVXoAvjGmt2ki7uoRJ821cdTAwMWJcdTAwMTFHNLNcdTAwMTHLNMP3TFJtXHUwMDAyhJuqwJjF8ErMXHUwMDFjgpyJJb1cdTAwMDJbOrGEvzHBWLTerYj7XHUwMDFjy1x1MDAxN69kXG7HtIhTITGO/Vx1MDAxYUti7tuEykRr1Fx1MDAwMohl2nJ6iyFcdTAwMTbfpMxvKbySXutsLZhIRtpcdTAwMTnEmoK59mJcdTAwMTRXPNDYUXI7XHUwMDFh9uROLFiTXHUwMDFi6CZcYoo4otx3eX1m4ZFW5Mws6XWp0pklXFxcdTAwMWWYXHUwMDA3XHUwMDA2zD6YxVx1MDAxZjZcYrgsaYPQX9RcdTAwMTJIUSvBhfY+YqtcdTAwMDMn1tEmwDCWMtNazGmpZcoqY4uhluBQlI6meOCExZFLelx1MDAxMahcdTAwMTC5cKFcdTAwMWRcdTAwMDVcdTAwMDGmLpZcdTAwMDa4iHKLSf0umFxctNOiTE6cXHUwMDExrJgwalx1MDAxM2lcdTAwMDXGi6aW9NVcdTAwMTJp1KLD3qIkXHUwMDFjXHUwMDExIbWYSTleS9FnXHUwMDE1fzUsXHUwMDE0JdXOjaCgXTWI+8JcdTAwMWNBLGE1z1x1MDAxN1x1MDAwZqWO71OEOZLRXHUwMDE5UmP3idT7REA0aSxcIpEz6/SbXFyJKNnmzC9ibcugqalmJevuMVx1MDAwYv2YbilhXG7FJH9nnFx1MDAxYj1NMlx0XHUwMDEwp/o1UcrMwDdHPEsr8lx1MDAxZdJ/bTROS6WLRn+3dHyzy1x1MDAwNWo+lKNEXHUwMDE1/UJcdTAwMDKX1EyHR7rzibaDwHy491pcdTAwMDBFU1vcYIBShXD081x0ZFx0XHUwMDFm9/vdvr2qXHUwMDA0pSCwiqWj5LQySCogU4WYKclcYnFcImdamPExve96SVx1MDAxZvLrtoLTXHUwMDFkM3wrIfRcdTAwMTDjXHUwMDEz/q7Tv9TXqr/sq1x1MDAxZtbgwO3XXHUwMDBlTm372N1sNrNgXG4oXHUwMDEzRW6+VMwxXHUwMDA37Vx1MDAwM4SnyUiEioIz84liynhsNiMmTfqFqUlfyjJfITHTnGNARZLLkWry071AM5VbW5bGf8Dqe6tiXHUwMDE3XHUwMDFmO59cdTAwMTBaXHUwMDFmLX+D11x1MDAxZu+ewrrluudd/ZZGyrv+7Nj9zVx1MDAxOOusXHUwMDBlf+b8ITiNddrmlf/384+f/1x1MDAwN5maalx1MDAxNCJ9 + + + + tailchat-webPlugin ManagerPlugin1Plugin2Plugin3Plugin1Plugin2Plugin3tailchat-serverregistryWebNode.js \ No newline at end of file diff --git a/website/static/img/blog/intro/1.png b/website/static/img/blog/intro/1.png new file mode 100644 index 00000000000..8b965524a78 Binary files /dev/null and b/website/static/img/blog/intro/1.png differ diff --git a/website/static/img/blog/intro/10.png b/website/static/img/blog/intro/10.png new file mode 100644 index 00000000000..11a6d447b9e Binary files /dev/null and b/website/static/img/blog/intro/10.png differ diff --git a/website/static/img/blog/intro/11.png b/website/static/img/blog/intro/11.png new file mode 100644 index 00000000000..91875d20979 Binary files /dev/null and b/website/static/img/blog/intro/11.png differ diff --git a/website/static/img/blog/intro/12.png b/website/static/img/blog/intro/12.png new file mode 100644 index 00000000000..bad865de3ce Binary files /dev/null and b/website/static/img/blog/intro/12.png differ diff --git a/website/static/img/blog/intro/13.png b/website/static/img/blog/intro/13.png new file mode 100644 index 00000000000..dce7918e42a Binary files /dev/null and b/website/static/img/blog/intro/13.png differ diff --git a/website/static/img/blog/intro/14.png b/website/static/img/blog/intro/14.png new file mode 100644 index 00000000000..1d409da49ed Binary files /dev/null and b/website/static/img/blog/intro/14.png differ diff --git a/website/static/img/blog/intro/15.png b/website/static/img/blog/intro/15.png new file mode 100644 index 00000000000..2cc324a424b Binary files /dev/null and b/website/static/img/blog/intro/15.png differ diff --git a/website/static/img/blog/intro/16.png b/website/static/img/blog/intro/16.png new file mode 100644 index 00000000000..445d880bed2 Binary files /dev/null and b/website/static/img/blog/intro/16.png differ diff --git a/website/static/img/blog/intro/17.png b/website/static/img/blog/intro/17.png new file mode 100644 index 00000000000..9437b16e1c4 Binary files /dev/null and b/website/static/img/blog/intro/17.png differ diff --git a/website/static/img/blog/intro/18.png b/website/static/img/blog/intro/18.png new file mode 100644 index 00000000000..31c327b2e00 Binary files /dev/null and b/website/static/img/blog/intro/18.png differ diff --git a/website/static/img/blog/intro/19.png b/website/static/img/blog/intro/19.png new file mode 100644 index 00000000000..9de36978307 Binary files /dev/null and b/website/static/img/blog/intro/19.png differ diff --git a/website/static/img/blog/intro/2.png b/website/static/img/blog/intro/2.png new file mode 100644 index 00000000000..066a410ef1f Binary files /dev/null and b/website/static/img/blog/intro/2.png differ diff --git a/website/static/img/blog/intro/20.png b/website/static/img/blog/intro/20.png new file mode 100644 index 00000000000..94dec831755 Binary files /dev/null and b/website/static/img/blog/intro/20.png differ diff --git a/website/static/img/blog/intro/21.png b/website/static/img/blog/intro/21.png new file mode 100644 index 00000000000..5c12ebcd801 Binary files /dev/null and b/website/static/img/blog/intro/21.png differ diff --git a/website/static/img/blog/intro/22.png b/website/static/img/blog/intro/22.png new file mode 100644 index 00000000000..3bdea4ddf5c Binary files /dev/null and b/website/static/img/blog/intro/22.png differ diff --git a/website/static/img/blog/intro/3.png b/website/static/img/blog/intro/3.png new file mode 100644 index 00000000000..17f96643257 Binary files /dev/null and b/website/static/img/blog/intro/3.png differ diff --git a/website/static/img/blog/intro/4.png b/website/static/img/blog/intro/4.png new file mode 100644 index 00000000000..54f6bdcb70f Binary files /dev/null and b/website/static/img/blog/intro/4.png differ diff --git a/website/static/img/blog/intro/5.png b/website/static/img/blog/intro/5.png new file mode 100644 index 00000000000..adf3991d896 Binary files /dev/null and b/website/static/img/blog/intro/5.png differ diff --git a/website/static/img/blog/intro/6.png b/website/static/img/blog/intro/6.png new file mode 100644 index 00000000000..57dc97ae7eb Binary files /dev/null and b/website/static/img/blog/intro/6.png differ diff --git a/website/static/img/blog/intro/7.png b/website/static/img/blog/intro/7.png new file mode 100644 index 00000000000..8560c905dda Binary files /dev/null and b/website/static/img/blog/intro/7.png differ diff --git a/website/static/img/blog/intro/8.png b/website/static/img/blog/intro/8.png new file mode 100644 index 00000000000..d6734ad2553 Binary files /dev/null and b/website/static/img/blog/intro/8.png differ diff --git a/website/static/img/blog/intro/9.png b/website/static/img/blog/intro/9.png new file mode 100644 index 00000000000..747e3b999b6 Binary files /dev/null and b/website/static/img/blog/intro/9.png differ diff --git a/website/static/img/docusaurus.png b/website/static/img/docusaurus.png new file mode 100644 index 00000000000..f458149e3c8 Binary files /dev/null and b/website/static/img/docusaurus.png differ diff --git a/website/static/img/favicon.ico b/website/static/img/favicon.ico new file mode 100644 index 00000000000..c01d54bcd39 Binary files /dev/null and b/website/static/img/favicon.ico differ diff --git a/website/static/img/intro/github-bot.png b/website/static/img/intro/github-bot.png new file mode 100644 index 00000000000..169c67941d8 Binary files /dev/null and b/website/static/img/intro/github-bot.png differ diff --git a/website/static/img/intro/plugins.png b/website/static/img/intro/plugins.png new file mode 100644 index 00000000000..0ff05a063d6 Binary files /dev/null and b/website/static/img/intro/plugins.png differ diff --git a/website/static/img/intro/theme.png b/website/static/img/intro/theme.png new file mode 100644 index 00000000000..6742aeac50e Binary files /dev/null and b/website/static/img/intro/theme.png differ diff --git a/website/static/img/logo.svg b/website/static/img/logo.svg new file mode 100644 index 00000000000..b2c7ed9f258 --- /dev/null +++ b/website/static/img/logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/website/static/img/tutorial/docsVersionDropdown.png b/website/static/img/tutorial/docsVersionDropdown.png new file mode 100644 index 00000000000..ff1cbe68893 Binary files /dev/null and b/website/static/img/tutorial/docsVersionDropdown.png differ diff --git a/website/static/img/tutorial/localeDropdown.png b/website/static/img/tutorial/localeDropdown.png new file mode 100644 index 00000000000..d7163f96752 Binary files /dev/null and b/website/static/img/tutorial/localeDropdown.png differ diff --git a/website/static/img/undraw_Website_setup_re_d4y9.svg b/website/static/img/undraw_Website_setup_re_d4y9.svg new file mode 100644 index 00000000000..dfc0d3f4e01 --- /dev/null +++ b/website/static/img/undraw_Website_setup_re_d4y9.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/static/img/undraw_design_components_9vy6.svg b/website/static/img/undraw_design_components_9vy6.svg new file mode 100644 index 00000000000..f855dfbb067 --- /dev/null +++ b/website/static/img/undraw_design_components_9vy6.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/static/img/undraw_open_source_1qxw.svg b/website/static/img/undraw_open_source_1qxw.svg new file mode 100644 index 00000000000..e62f6d3b84a --- /dev/null +++ b/website/static/img/undraw_open_source_1qxw.svg @@ -0,0 +1 @@ +open source \ No newline at end of file diff --git a/website/tsconfig.json b/website/tsconfig.json new file mode 100644 index 00000000000..4360f0da16d --- /dev/null +++ b/website/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@tsconfig/docusaurus/tsconfig.json", + "include": ["src/"] +}