├── .gitignore
├── .gitpod.yml
├── .vscode
└── settings.json
├── LICENSE
├── README.md
├── components
├── base_link.tsx
├── counters.module.css
├── counters.tsx
├── icons
│ └── WeChat.tsx
└── preamble.tsx
├── next-env.d.ts
├── next.config.js
├── package.json
├── pages
├── [dark_forest
│ ├── _meta.json
│ └── plant.mdx
├── _app.mdx
├── _meta.json
├── eth
│ └── 23.8.9-mev-info.mdx
├── index.mdx
├── rust_vs_golang
│ └── 1-sin-cos.mdx
└── zk
│ ├── 1-zk-SNARKs-intro.mdx
│ ├── 2-zk-SNARKs-info.mdx
│ ├── 3-zk-SNARKs-use-in-solidity.mdx
│ └── _meta.json
├── pnpm-lock.yaml
├── postcss.config.js
├── public
├── 2023-08-24-02-30-39.png
├── 2023-08-25-00-00-26.png
└── 2023-08-31-18-10-30.png
├── sources
├── readme.md
└── zk
│ ├── .gitignore
│ ├── README.md
│ ├── contracts
│ ├── master.sol
│ └── verifier.sol
│ ├── hardhat.config.ts
│ ├── package.json
│ ├── scripts
│ └── deploy.ts
│ ├── test
│ └── verifier.test.ts
│ ├── tsconfig.json
│ ├── yarn.lock
│ └── zok
│ ├── abi.json
│ ├── deposit.zok
│ ├── out
│ ├── out.r1cs
│ ├── out.wtns
│ ├── proof.json
│ ├── proving.key
│ ├── verification.key
│ └── witness
├── style.css
├── tailwind.config.js
├── theme.config.tsx
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | .next
--------------------------------------------------------------------------------
/.gitpod.yml:
--------------------------------------------------------------------------------
1 | # This configuration file was automatically generated by Gitpod.
2 | # Please adjust to your needs (see https://www.gitpod.io/docs/introduction/learn-gitpod/gitpod-yaml)
3 | # and commit this file to your remote git repository to share the goodness with others.
4 |
5 | # Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart
6 |
7 | tasks:
8 | - init: pnpm install && pnpm run build
9 | command: pnpm run start
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "pasteImage.basePath": "${currentFileDir}",
3 | "pasteImage.path": "${projectRoot}/static",
4 | "mdx.experimentalLanguageServer": true
5 | }
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Shu Ding
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Blog
2 |
3 | 盒子的博客
4 | 作者:[@BoxMrChen](https://twitter.com/home)
5 |
6 | 进入交流群:欢迎添加个人微信`Im3boxtech`,备注`进群`,我会拉你进入交流群。
7 |
8 | 如果你有什么想了解的可以在群内提出进行交流讨论。
9 |
10 | 欢迎参与共建计划,编写更多的文章,让更多的人了解区块链技术。
11 |
12 | ## 贡献者
13 |
14 | Box:@BoxMrChen
15 |
--------------------------------------------------------------------------------
/components/base_link.tsx:
--------------------------------------------------------------------------------
1 | import { Link, useConfig } from "nextra-theme-docs";
2 |
3 | export function BaseLink({
4 | href,
5 | children,
6 | }: {
7 | href: string;
8 | children: React.ReactNode;
9 | }) {
10 | let { docsRepositoryBase } = useConfig();
11 | if (!docsRepositoryBase.endsWith("/")) docsRepositoryBase += "/";
12 |
13 | return {children};
14 | }
15 |
--------------------------------------------------------------------------------
/components/counters.module.css:
--------------------------------------------------------------------------------
1 | .counter {
2 | border: 1px solid #ccc;
3 | border-radius: 5px;
4 | padding: 2px 6px;
5 | margin: 12px 0 0;
6 | }
7 |
--------------------------------------------------------------------------------
/components/counters.tsx:
--------------------------------------------------------------------------------
1 | // Example from https://beta.reactjs.org/learn
2 |
3 | import { useState } from 'react'
4 | import styles from './counters.module.css'
5 |
6 | function MyButton() {
7 | const [count, setCount] = useState(0)
8 |
9 | function handleClick() {
10 | setCount(count + 1)
11 | }
12 |
13 | return (
14 |
15 |
18 |
19 | )
20 | }
21 |
22 | export default function MyApp() {
23 | return
24 | }
25 |
--------------------------------------------------------------------------------
/components/icons/WeChat.tsx:
--------------------------------------------------------------------------------
1 | export function WeChatIcon({ className }: { className?: string }) {
2 | return (
3 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/components/preamble.tsx:
--------------------------------------------------------------------------------
1 | import { Callout, Link } from "nextra-theme-docs";
2 | import { WeChatIcon } from "./icons/WeChat";
3 |
4 | export function Preamble() {
5 | return (
6 |
7 |
8 | 文章作者: @BoxMrChen
9 | ,欢迎转载,转载请注明出处。
10 |
11 |
12 | 文章 Github 仓库:{" "}
13 |
14 | https://github.com/nishuzumi/blog
15 |
16 | 欢迎Star。如果文章有误,欢迎提PR。
17 |
18 |
19 | 进入交流群:欢迎添加个人微信{" "}
20 |
21 | Im3boxtech
22 |
23 | ,备注`进群`,我会拉你进入交流群。
24 |
25 |
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | const withNextra = require('nextra')({
2 | theme: 'nextra-theme-docs',
3 | themeConfig: './theme.config.tsx',
4 | })
5 |
6 | module.exports = withNextra()
7 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nextra-docs-template",
3 | "version": "0.0.1",
4 | "description": "Nextra docs template",
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/shuding/nextra-docs-template.git"
13 | },
14 | "author": "Shu Ding ",
15 | "license": "MIT",
16 | "bugs": {
17 | "url": "https://github.com/shuding/nextra-docs-template/issues"
18 | },
19 | "homepage": "https://github.com/shuding/nextra-docs-template#readme",
20 | "dependencies": {
21 | "next": "^13.0.6",
22 | "nextra": "latest",
23 | "nextra-theme-docs": "latest",
24 | "react": "^18.2.0",
25 | "react-dom": "^18.2.0"
26 | },
27 | "devDependencies": {
28 | "@types/node": "18.11.10",
29 | "autoprefixer": "^10.4.15",
30 | "postcss": "^8.4.29",
31 | "tailwindcss": "^3.3.3",
32 | "typescript": "^4.9.3"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/pages/[dark_forest/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "plant":{
3 | "display":"hidden"
4 | }
5 | }
--------------------------------------------------------------------------------
/pages/[dark_forest/plant.mdx:
--------------------------------------------------------------------------------
1 | # 星球
2 |
3 | ## 星球代码
4 |
5 | Path: eth/contracts/DFTypes.sol
6 |
7 | ```sol
8 | struct Planet {
9 | address owner; // 星球的当前所有者的以太坊地址
10 | uint256 range; // 从该星球可以发送舰队到达的最远距离
11 | uint256 speed; // 从该星球发送的舰队的移动速度
12 | uint256 defense; // 星球的防御力,可能影响战斗结果
13 | uint256 population; // 星球上的当前人口或能量
14 | uint256 populationCap; // 星球的人口或能量上限
15 | uint256 populationGrowth; // 星球人口或能量的增长率
16 | uint256 silverCap; // 星球上银币的上限
17 | uint256 silverGrowth; // 星球上银币的增长率
18 | uint256 silver; // 星球上的当前银币数量
19 | uint256 planetLevel; // 星球的等级,可能影响其其他属性
20 | PlanetType planetType; // 星球的类型,例如气态、岩石等
21 | bool isHomePlanet; // 标记该星球是否是玩家的主星
22 | bool isInitialized; // 标记该星球是否已被初始化或被玩家发现
23 | uint256 createdAt; // 星球创建的时间或区块
24 | uint256 lastUpdated; // 星球上次更新的时间或区块
25 | uint256 perlin; // 可能与星球的随机生成或地形有关的噪音值
26 | SpaceType spaceType; // 星球所在的空间类型
27 | uint256 upgradeState0; // 星球的第一个升级状态
28 | uint256 upgradeState1; // 星球的第二个升级状态
29 | uint256 upgradeState2; // 星球的第三个升级状态
30 | uint256 hatLevel; // 星球的“帽子”等级,可能是一种装饰或标志
31 | bool hasTriedFindingArtifact; // 标记玩家是否尝试在该星球上找到遗物
32 | uint256 prospectedBlockNumber; // 玩家上次在该星球上勘探的区块号
33 | bool destroyed; // 标记该星球是否已被摧毁
34 | uint256 spaceJunk; // 星球上的太空垃圾数量
35 | uint256 pausers; // 星球上的“暂停”数量或状态
36 | uint256 energyGroDoublers; // 与星球能量增长加倍器有关
37 | uint256 silverGroDoublers; // 与星球银币增长加倍器有关
38 | address invader; // 当前正在入侵星球的玩家地址
39 | uint256 invadeStartBlock; // 入侵开始的区块号
40 | address capturer; // 最后一次成功捕获星球的玩家地址
41 | uint256 locationId; // 星球的唯一位置ID
42 | }
43 | ```
44 |
--------------------------------------------------------------------------------
/pages/_app.mdx:
--------------------------------------------------------------------------------
1 | import "../style.css";
2 |
3 | export default function App({ Component, pageProps }) {
4 | return ;
5 | }
6 |
--------------------------------------------------------------------------------
/pages/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "index":{
3 | "title":"首页",
4 | "display": "hidden"
5 | },
6 | "zk": "ZK 系列",
7 | "eth": "ETH 系列",
8 | "rust_vs_golang": "Rust VS Golang",
9 | "dark_forest":{
10 | "title":"Dark Forest 游戏分析",
11 | "display": "hidden"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/pages/eth/23.8.9-mev-info.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: MEV 资料
3 | ---
4 |
5 | # MEV 资料
6 |
7 |
8 | 总结了一点 MEV 的资料,欢迎补充。
9 |
10 | ## 有用的链接
11 |
12 | ### Artemis:https://www.paradigm.xyz/2023/05/artemis
13 |
14 | Paradigm 出品的 MEV 框架,由 Rust 编写。
15 |
16 | 在 crates/strategies 文件目录下,有两个范例
17 |
18 | - Uniswap V2-V3 套利策略
19 | - Opensea - Sudo 套利策略
20 |
21 | ### cake_sniper:https://github.com/Supercycled/cake_sniper
22 |
23 | 一个抢跑 MEV 的机器人。由 Python 编写,代码比较老旧,可以用于学习思路。
24 |
25 | ### rusty-sando:https://github.com/mouseless-eth/rusty-sando
26 |
27 | 用 Huff 和 Artemis 编写的套利机器人,具有 Uniswap V2/V3 的三明治攻击机器人。
28 |
29 | ### awesome-MEV-resources:https://github.com/0xalpharush/awesome-MEV-resources
30 |
31 | 超多超全的 MEV 资料。
32 |
--------------------------------------------------------------------------------
/pages/index.mdx:
--------------------------------------------------------------------------------
1 | # 介绍
2 |
3 | 欢迎来到 ByteMahou -(字节魔法)。这里是一个专门用于分享高质量 Web3 技术文章的地方。
4 |
5 | 如果你有任何想要分享的文章,欢迎随时到 Github 进行贡献。
6 |
7 | ## 主要贡献者
8 |
9 | BoxChen
10 |
--------------------------------------------------------------------------------
/pages/rust_vs_golang/1-sin-cos.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Rust多线程浮点数运算比Golang慢一倍?
3 | ---
4 | 最近遇到一个有趣的问题,有人在测试Rust的性能的时候发现Rust比Golang慢竟然一倍。
5 | ```shell
6 | Project Execution Time (s)
7 | Rust 2.9696159
8 | Go 1.981306
9 | ```
10 | 并且评论中大部分人都认为是多线程代码中的Mutex导致,但是根据我初步分析来看,和Mutex完全没用关系。
11 | 代码如下。
12 | https://github.com/nishuzumi/rust-vs-golang/blob/main/sin-cos/rust/src/main.rs
13 | ```rust
14 | use num_cpus;
15 | use std::{
16 | sync::{Arc, Mutex},
17 | thread,
18 | };
19 |
20 | use std::time::Instant;
21 | fn main() {
22 | let num_cpus = num_cpus::get();
23 | let start_time = Instant::now();
24 |
25 | let mut handles = vec![];
26 | let result = Arc::new(Mutex::new(vec![0.0; num_cpus]));
27 |
28 | for i in 0..num_cpus {
29 | let result = Arc::clone(&result);
30 | let handle = thread::spawn(move || {
31 | let mut local_result = 0.0;
32 | for j in 0..100_000_000 {
33 | local_result += (j as f64).sin() * (j as f64).cos();
34 | }
35 |
36 | let mut result = result.lock().unwrap();
37 | result[i] = local_result;
38 | println!("Thread {} result: {}", i, local_result);
39 | });
40 | handles.push(handle);
41 | }
42 |
43 | for handle in handles {
44 | handle.join().unwrap();
45 | }
46 |
47 | let final_result = result.lock().unwrap().iter().sum::();
48 |
49 | println!("Elapsed time: {:?}", start_time.elapsed().as_secs_f64());
50 | println!("Final result: {}", final_result);
51 | }
52 | ```
53 | 而Golang部分的代码如下
54 | https://github.com/nishuzumi/rust-vs-golang/blob/main/sin-cos/golang/main.go
55 | ```golang
56 | package main
57 |
58 | import (
59 | "fmt"
60 | "math"
61 | "runtime"
62 | "sync"
63 | "time"
64 | )
65 |
66 | func main() {
67 | numCPU := runtime.NumCPU()
68 | fmt.Printf("Running with %d CPUs\n", numCPU)
69 |
70 | var wg sync.WaitGroup
71 |
72 | start := time.Now()
73 |
74 | for i := 0; i < numCPU; i++ {
75 | wg.Add(1)
76 | go func(id int) {
77 | defer wg.Done()
78 | result := 0.0
79 | for j := 0; j < 1e8; j++ {
80 | result += math.Sin(float64(j)) * math.Cos(float64(j))
81 | }
82 | fmt.Printf("Goroutine %d result: %f\n", id, result)
83 | }(i)
84 | }
85 |
86 | wg.Wait()
87 |
88 | elapsed := time.Since(start)
89 | fmt.Printf("Elapsed time: %f\n", elapsed.Seconds())
90 | }
91 | ```
92 |
93 | 初步分析来看,rust虽然用了一个毫无必要的锁,但是这个锁并没有堵塞线程的迹象。而运行出来的结果是。
94 | ```shell
95 | Project Execution Time (s)
96 | Rust 2.9696159
97 | Go 1.981306
98 | ```
99 | 很明显,Rust的速度反而没有Golang快,慢了一秒。这是为什么呢?可以思考一下 马上揭晓答案。
100 |
101 | ### 答案
102 | 原因在于Window上的一些小问题,以上代码在Linux和macos下运行的速度是正常的,golang比rust慢。
103 |
104 | 主要原因是,golang的math仓库是另外一套实现,而rust使用的是libm进行计算。在同样的环境下c++和rust的速度基本一致。而golang的math实现虽然快,但是损失了精度,详细可以见这里的解释。
105 | https://github.com/nishuzumi/rust-vs-golang/blob/main/sin-cos/readme.md
106 |
107 | ### 结尾
108 | 最近发现了很多这样的速度差异对比,我感觉很有意思,于是创建了一个仓库,用于记录这些差别。
109 |
110 | https://github.com/nishuzumi/rust-vs-golang
111 |
112 | 如果你也有一些速度差异的例子,欢迎到Github中进行补充。
--------------------------------------------------------------------------------
/pages/zk/1-zk-SNARKs-intro.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: zk-SNARKs 简介
3 | ---
4 |
5 | # zk-SNARKs 简介
6 |
7 |
8 |
9 | 在这篇文章中,我们的目标是从实用的角度对 zk-SNARKs 进行概述。我们将把实际的数学问题视为一个黑箱,并试图围绕我们如何使用它们来发展一些直觉。我们还将展示一项关于[
10 | 在以太坊中集成 zk-SNARKs 的最近工作的简单应用 ](https://blog.ethereum.org/2017/01/19/update-integrating-zcash-ethereum/)。
11 |
12 | ## 零知识证明
13 |
14 | 零知识证明的目标是让验证者能够确信证明者掌握了一个满足某种关系的秘密参数,也就是所谓的见证人,而无需向验证者或任何其他人揭示这个见证人。
15 |
16 | 我们可以更具体地将其想象为一个程序,标记为 C ,接收两个输入: `C(x, w)`。输入 x 是公开输入,而 w 是秘密见证输入。程序的输出是布尔值,即 true 或 false 。然后,目标是给定特定的公开输入 x ,证明证明者知道一个秘密输入 w ,使得 `C(x,w) == true` 。
17 |
18 | 我们将专门讨论非交互式零知识证明。这意味着证明本身是一块可以在无需证明者任何交互的情况下进行验证的数据。
19 |
20 | ## 示例程序
21 |
22 | 假设 Bob 得到了某个值的哈希 H ,他希望有证据证明 Alice 知道哈希为 H 的值 s 。通常,Alice 会通过给 Bob s 来证明这一点,然后 Bob 会计算哈希并检查它是否等于 H 。
23 |
24 | 然而,假设 Alice 不想向 Bob 透露 s 的值,而只是想证明她知道这个值。她可以使用 `zk-SNARK` 来实现这一点。
25 |
26 | 我们可以使用以下程序来描述 Alice 的情况,这里以 Javascript 函数的形式编写:
27 |
28 | ```
29 | function C(x, w) { return ( sha256(w) == x );}
30 | ```
31 |
32 | > 这个程序不涉及任何 ZK 内容,他只是用于表示我们想要达到的效果是什么样。我们可以将其视为一个黑盒,我们将在下一节中讨论如何使用 zk-SNARKs 来构建这样的程序。
33 |
34 | 换句话说:该程序接收一个公共哈希 x 和一个秘密值 w ,如果 w 的 SHA-256 哈希等于 x ,则返回 true 。
35 |
36 | 将 Alice 的问题通过函数 `C(x,w)`进行翻译,我们可以看到 Alice 需要创建一个证明,证明她拥有 s ,使得 `C(H, s) == true` ,而无需揭示 s 。这就是 zk-SNARKs 解决的一般问题。
37 |
38 | ## zk-SNARK 的定义
39 |
40 | 一个 zk-SNARK 由三个算法 G, P, V 组成,定义如下:
41 |
42 | _密钥生成器 G_ 由一个秘密参数 `lambda` 和一个程序 C 组成 ,并生成两个公开可用的密钥,一个 _proving key_ pk(证明密钥) ,和一个 _verification key_ vk(验证密钥) 。这些密钥是公开参数,只需要使用程序 C 生成一次。
43 |
44 | _证明者 P_ 将证明密钥 pk 、公共输入 x 和见证 w 作为输入。该算法生成一个证明 `prf = P(pk, x, w)` ,证明者知道一个见证 w ,并且该见证满足程序的要求。
45 |
46 | _验证器 V_ 计算 `V(vk, x, prf)` ,如果证明是正确的,它将返回 true ,否则返回 false 。因此,如果证明者知道一个满足 C(x,w) == true 的见证 w ,这个函数就会返回真。
47 |
48 | 请注意在生成器中使用的秘密参数 lambda 。这个参数有时使得在现实世界的应用中使用 zk-SNARKs 变得棘手。原因在于,任何知道这个参数的人都可以生成假的证明。具体来说,给定任何程序 C 和公开输入 x ,知道 lambda 的人可以生成一个证明 fake_prf ,使得 `V(vk, x, fake_prf)` 评估为 true ,而无需知道秘密 w 。
49 |
50 | 因此,实际运行生成器需要一个非常安全的过程,以确保没有人了解并保存参数。这就是 Zcash 团队进行[极其复杂的仪式](https://electriccoin.co/blog/the-design-of-the-ceremony/)以生成证明密钥和验证密钥的原因,同时确保“有毒废料” lambda 在过程中被销毁。
51 |
52 | ## 针对示例程序的 zk-SNARK
53 |
54 | 在实际操作中, Alice 和 Bob 如何使用 zk-SNARK,以便 Alice 证明她知道上述示例中的秘密值?
55 | 首先,如上所述,我们将使用由以下函数定义的程序:
56 |
57 | ```javascript
58 | function C(x, w) {
59 | return sha256(w) == x;
60 | }
61 | ```
62 |
63 | 首先,Bob 需要运行生成器 G,以创建证明密钥 pk 和验证密钥 vk。首先,随机生成 lambda,并将其作为输入:
64 |
65 | ```
66 | (pk, vk) = G(C, lambda)
67 | ```
68 |
69 | 请小心处理参数 lambda,因为如果 Alice 知道 lambda 的值,她将能够创建假的证明。Bob 将与 Alice 分享 pk 和 vk。
70 |
71 | Alice 现在将扮演证明者的角色。她需要证明她知道哈希值为已知哈希 H 的值 s。她运行证明算法 P,使用输入 pk、H 和 s 来生成证明 prf:
72 |
73 | ```
74 | prf = P(pk, H, s)
75 | ```
76 |
77 | 接下来,Alice 将证明 prf 呈现给 Bob ,Bob 运行验证函数 `V(vk, H, prf)`。在这种情况下,由于 Alice 正确地知道了秘密 s,所以会返回真值。Bob 可以确信 Alice 知道这个秘密,但 Alice 并不需要向 Bob 透露这个秘密。
78 |
79 | ## 可重用的证明和验证密钥
80 |
81 | 在我们上述的例子中,如果 Bob 想向 Alice 证明他知道一个秘密,那么他就不能使用 zk-SNARK,因为 Alice 无法知道 Bob 是否保存了 lambda 参数。Bob 完全有可能伪造证据。
82 |
83 | 如果一个程序对许多人有用(比如 Zcash 的例子),一个独立于 Alice 和 Bob 的可信赖的独立团队可以运行生成器,创建证明密钥 pk 和验证密钥 vk,而且这样做没有人会了解到 lambda。
84 |
85 | 任何相信该团队没有作弊的人,都可以在未来的互动中使用这些密钥。
86 |
87 | ## 以太坊中的 zk-SNARKs
88 |
89 | 开发者已经开始将 zk-SNARKs 集成到以太坊中。这看起来是什么样子呢?具体来说,你可以将验证算法的构建模块以预编译合约的形式添加到以太坊中。具体操作如下:在链下运行生成器,生成证明密钥和验证密钥。然后,任何证明者都可以使用证明密钥创建证明,这也是在链下完成的。然后,你可以在智能合约内部运行通用验证算法,使用证明、验证密钥和公开输入作为输入参数。然后,你可以使用验证算法的结果来触发其他链上活动。
90 |
91 | ## 示例:保密交易
92 |
93 | 以下是一个简单的例子,说明了 zk-SNARKs 如何帮助提高以太坊的隐私性。假设我们有一个简单的代币合约。通常,一个代币合约的核心是将地址映射到余额:
94 |
95 | ```javascript
96 | mapping (address => uint256) balances;
97 | ```
98 |
99 | 我们将保留相同的基本核心,只是将余额替换为余额的哈希值:
100 |
101 | ```javascript
102 | mapping (address => bytes32) balanceHashes;
103 | ```
104 |
105 | 我们不会隐藏交易的发送者或接收者。但我们会隐藏余额和发送的金额。这种属性有时被称为保密交易。
106 |
107 | 我们将使用两个 zk-SNARKs 来将代币从一个账户发送到另一个账户。发送者和接收者各创建一个证明。
108 |
109 | 通常在一个代币合约中,为了使大小值的交易有效,我们需要验证以下内容:
110 |
111 | ```
112 | balances[fromAddress] >= value
113 | ```
114 |
115 | 我们的 zk-SNARKs 需要证明这一点是成立的,以及更新后的哈希值与更新后的余额相匹配。
116 |
117 | 主要的思想是,发送者将使用他们的 _初始余额_ 和 _值_ 作为私有数据。使用 _初始余额_、_结束余额_ 和 _值的哈希_ 作为公开数据。同样,接收者将使用 _初始余额_ 和 _值_ 作为私有数据。使用 _初始余额_ 、 _结束余额_ 和 _值的哈希_ 作为公开数据。
118 |
119 | 以下是发送者的 zk-SNARK 程序,其中如前所述,x 代表公开数据,w 代表私有数据。
120 |
121 | ```javascript
122 | /**
123 | * @param x 公开数据
124 | * @param w 私有数据
125 | */
126 | function senderFunction(x, w) {
127 | return (
128 | w.senderBalanceBefore > w.value && // 确保发送者有足够的余额
129 | sha256(w.value) == x.hashValue && // 确保发送的值与公开的哈希值匹配
130 | sha256(w.senderBalanceBefore) == x.hashSenderBalanceBefore && // 确保发送者的初始余额与公开的哈希值匹配
131 | sha256(w.senderBalanceBefore - w.value) == x.hashSenderBalanceAfter // 确保发送者的结束余额与公开的哈希值匹配
132 | );
133 | }
134 | ```
135 |
136 | 接受者的 zk-SNARK 程序如下:
137 |
138 | ```javascript
139 | /**
140 | * @param x 公开数据
141 | * @param w 私有数据
142 | */
143 | function receiverFunction(x, w) {
144 | return (
145 | sha256(w.value) == x.hashValue &&
146 | sha256(w.receiverBalanceBefore) == x.hashReceiverBalanceBefore &&
147 | sha256(w.receiverBalanceBefore + w.value) == x.hashReceiverBalanceAfter
148 | );
149 | }
150 | ```
151 |
152 | 这些程序会检查发送余额是否大于正在发送的值,并检查所有哈希是否匹配。一组受信任的人员将为我们的 zk-SNARKs 生成证明和验证密钥。我们称它们为 _confTxSenderPk_、_confTxSenderVk_、_confTxReceiverPk_ 和 _confTxReceiverVk_。 _confTxSenderPk_ 和 _confTxReceiverPk_ 将被用于生成证明,而 _confTxSenderVk_ 和 _confTxReceiverVk_ 将被用于验证证明。
153 |
154 | 在代币合约中使用 zk-SNARKs 可能会是这样的:
155 |
156 | ```solidity
157 | function transfer(address _to, bytes32 hashValue, bytes32 hashSenderBalanceAfter, bytes32 hashReceiverBalanceAfter, bytes zkProofSender, bytes zkProofReceiver) {
158 | bytes32 hashSenderBalanceBefore = balanceHashes[msg.sender];
159 | bytes32 hashReceiverBalanceBefore = balanceHashes[_to];
160 |
161 | bool senderProofIsCorrect = zksnarkverify(confTxSenderVk, [hashSenderBalanceBefore, hashSenderBalanceAfter, hashValue], zkProofSender);
162 |
163 | bool receiverProofIsCorrect = zksnarkverify(confTxReceiverVk, [hashReceiverBalanceBefore, hashReceiverBalanceAfter, hashValue], zkProofReceiver);
164 |
165 | if(senderProofIsCorrect && receiverProofIsCorrect) {
166 | balanceHashes[msg.sender] = hashSenderBalanceAfter;
167 | balanceHashes[_to] = hashReceiverBalanceAfter;
168 | }
169 | }
170 | ```
171 |
172 | 因此,区块链上唯一更新的只是余额的哈希值,而不是余额本身。然而,我们可以知道所有的余额都被正确地更新了,因为我们可以自己检查证明已经被验证过了。
173 |
174 | 通过上面的例子,我们也可以看到,在区块链上我们只进行了余额的 Hash 存储,而没有暴露真实的余额,这就对数据进行了保密,我们除了知道两者之间发生了交易,但是我们不知道具体交易金额,这就保证了交易的隐私性。
175 |
176 | ## 详细信息
177 |
178 | 上述的保密交易方案主要是为了给出一个实际的例子,说明我们如何在以太坊上使用 zk-SNARKs。要创建一个健全的保密交易方案,我们需要解决一些问题:
179 |
180 | - 用户需要在客户端跟踪他们的余额,如果你失去余额数据,那么你就失去了这个账户的控制权。余额或许可以用来自签名密钥的密钥加密并存储在链上。
181 | - 余额需要使用 32 字节的数据并熵编码,以防止反向解析哈希以计算余额。
182 | - 需要处理向未使用地址发送的边缘情况。
183 | - 发件人需要与收件人进行交互才能发送。我们可能会有一个系统,发件人可以使用他们的证明来启动交易。然后,收件人可以在区块链上看到他们有一个“待处理的入账交易”,并可以完成它。
184 |
185 | > 本文翻译自 [Consensys](https://consensys.net/blog/developers/introduction-to-zk-snarks/)
186 | > 翻译者:[@BoxMrChen](https://twitter.com/home)
187 |
--------------------------------------------------------------------------------
/pages/zk/2-zk-SNARKs-info.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: zk-SNARKs 相关知识
3 | ---
4 |
5 | # zk-SNARKs 相关知识
6 |
7 |
8 |
9 | ## 曲线知识
10 |
11 | ### Pedersen 哈希
12 |
13 | 在 ZK 电路中,SHA256 是比较昂贵的计算电路,虽然他在 EVM 中具有内置计算方式,但是他的计算成本还是比较高的。所以,我们需要一个更加轻量级的哈希函数。
14 |
15 | 但是,Pedersen 哈希是一个特殊的哈希,他是通过 BabyJubJub 椭圆曲线来实现的。所以,我们在计算后得到的数据其实是椭圆函数上一个点的 Y 值附加一个 X 坐标符号,一般情况下,我们会使用`unpack`函数来将这个点的值转换,并且只取 X 坐标的值作为哈希值。
16 |
17 | ### BabyJubJub 椭圆曲线
18 |
19 | ETH 中确实具有一个椭圆曲线函数,但是加入 BabyJubJub 的理由主要是因这个曲线函数更加对 ZK 电路友好。并且能完成很多 ZK 电路功能。
20 |
21 | 不过可惜的是,目前 ETH 并不原生支持 BabyJubJub 曲线。详细可以查看这个链接:https://eips.ethereum.org/EIPS/eip-2494
22 |
23 | 目前来看,只有在链下使用 BabyJubJub 曲线,然后将结果提交到链上。
24 |
25 | 同时,一半情况下,我们建议开发者使用 ZK 电路中对电路友好的内置函数,比如说,我们可以使用 `pedersenHash` 来代替 `sha256`。这样做的目的主要是降低电路生成和验证成本,在同样的效果下达到最佳的性能。
26 |
27 | ## 证明模式
28 |
29 | ### 延展性攻击
30 |
31 | 所谓的延展性攻击,就是破坏了 ZK 对证明的确定性生成特性,比如说,我们可以通过一个证明来生成多个证明,这样就会导致我们的证明不再是确定性的,而是可以被重新生成的。
32 | 那么如果有程序使用了这个证明中 Proof 的某些值作为唯一校验,那么他就有被攻击的风险。比如,如果 Tornado Cash 使用了`proof.a.x`作为 nullifier,那么攻击者就可以使用一个输入来生成多个证明,然后使用这些证明来进行攻击。
33 |
34 | ## Groth16 和 GM17
35 |
36 | Groth16 和 GM17 是两种不同的的证明模式,他们之间有少许区别,主要区别在于证明方式和曲线支持程度不同。主要区别在于。
37 |
38 | ### 链下计算:
39 |
40 | 1. Groth16:
41 |
42 | - 通常更快的证明生成时间。
43 | - 参数设置(Trusted Setup)通常只需要进行一次,适用于多个证明。
44 |
45 | 2. GM17:
46 | - 相对于 Groth16,证明生成时间可能会稍长。
47 | - 每个不同的电路通常需要自己的参数设置(Trusted Setup)。
48 |
49 | ### 链上费用(Gas 成本):
50 |
51 | 1. Groth16:
52 |
53 | - 通常需要更少的链上数据,因为 Groth16 的证明通常较小。
54 | - 由于证明大小较小,因此链上验证的 gas 成本通常也较低。
55 |
56 | 2. GM17:
57 |
58 | - 相对于 Groth16,可能需要更多的链上数据。
59 | - 由于证明通常较大,因此链上验证的 gas 成本可能会稍高。
60 |
61 | ### 适用场景:
62 |
63 | - Groth16: 由于其高效性和较低的链上成本,Groth16 通常用于需要频繁生成和验证证明的应用。
64 | - GM17: 由于其更灵活的参数设置,GM17 适用于需要多个不同电路的应用。
65 |
66 | ### 安全性:
67 |
68 | - Groth16: 更容易受到延展性攻击的影响,因此可能需要额外的安全措施(如使用 nullifier)。
69 | - GM17: 设计用于抵抗延展性攻击,但可能需要为每个不同的电路进行独立的参数设置。
70 |
--------------------------------------------------------------------------------
/pages/zk/3-zk-SNARKs-use-in-solidity.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: zk-SNARKs 在 Solidity 中的使用
3 | ---
4 |
5 | # zk-SNARKs 在 Solidity 中的使用
6 |
7 |
8 |
9 | 本文章主要讲述了如何在 Solidity 中使用 zk-SNARKs,以及如何使用 ZoKrates 编译器来生成证明和验证合约。
10 |
11 | 这文章不会过于深入 zk-SNARKs 的技术原理,这文章目的是为让读者能够理解 sk-SNARKs 的技术能在 EVM 中达到什么效果,如何使用,并且能在代码中运用。
12 |
13 | ## zk-SNARKs 简介
14 |
15 | 关于 zk-SNARKs 的简短描述为,我们需要在 zk 电路中编写一段代码,这段代码的输入是一些公开的数据,输出是一些私有的数据。zk-SNARKs 的验证算法可以验证这段代码的输出是否正确,但是验证算法不会泄露任何私有数据。而 Solidity 合约的主要目的是验证 zk-SNARKs 的验证算法的结果,如果验证算法的结果正确,那么合约会执行一些操作。
16 |
17 | 也就是说,在 EVM 上,只是进行了结果的验证,并没有进行一些复杂的计算,这些计算都是在 zk 电路中进行的。而这部分 zk 电路,则是在链下进行的,然后将结果提交到链上。
18 |
19 | ## 在 Solidity 中使用 zk-SNARKs
20 |
21 | 首先,我们需要知道 zk-SNARKs 可以完成什么功能,其实很简单,我们可以简单的认为,zk-SNARKs 可以完成对一个函数运算结果的校验,比如说,我们有一个函数,输入是三个数字,输出是一个数字,我们可以使用 zk-SNARKs 来校验这个函数的输出是否正确。但是我们并不需要知道输入的三个数字是什么,只需要知道这个函数的输出即可,也就是说,在一个函数完成计算时,我们可以知道确实是有这么三个数他能符合这个函数的输入,并且能输出正确结果,但是我们并不知道这三个数是什么。
22 |
23 | 在 Solidity 中,我们可以使用 zk-SNARKs 来完成对一个函数的校验,但是我们需要知道这个函数的输入和输出,然后我们可以使用 ZoKrates 编译器来生成 zk 电路,然后将 zk 电路的代码放到 Solidity 合约中,然后在合约中完成对 zk 电路的验证。
24 |
25 | ### 安装 ZoKrates 编译器
26 |
27 | 安装 [ZoKrates](https://github.com/Zokrates/ZoKrates)
28 |
29 | ```bash
30 | curl -LSfs get.zokrat.es | sh
31 | ```
32 |
33 | 也可以选择其他安装方式,具体选择查看他们的 Github 页面。
34 |
35 | 
36 |
37 | ### 编写 zk 电路
38 |
39 | 从上一章节我们浅显的知道,一个 zk-SNARKs 电路需要的最基本的东西为:
40 |
41 | - 一个函数 - 我们需要有一个函数对数据进行运算,也就是程序 C
42 | - lambda - 所谓的“有毒废料”,其实就是一个 root key,我们需要通过它来生成 pk 和 vk
43 |
44 | 有了这两个基础条件,用户就可以通过 pk,目标值,输入值来生成证明 w。
45 | 随后,我们的验证程序通过 vk,目标值,证明 w 来验证证明的正确性。
46 |
47 | 我们先假设有这么一个第三方,他可以安全的生成 lambda,然后安全的将程序和 lambda 进行运算生成 vk 和 pk。
48 |
49 | 那么现在有两个新的角色,user 和 project。user 是用户,他确确实实拥有着一些数据,project 是项目合约,他需要验证用户的数据是否正确。
50 |
51 | ### 一个函数
52 |
53 | 我们首先需要一个函数,但是我并不打算举一些简单例子,因为我觉得这样做非常没有意义,因为 zk-SNARKs 的主要目的是为了验证一些复杂的函数,而不是一些简单的函数。
54 |
55 | 比如,我们现在需要生成一个存款凭证,有这个凭证,我们可以在任何地方取出这笔钱,但是我们并不知道这笔钱是谁的,我们只知道这笔钱是谁存的,存了多少,以及存款的时间。
56 |
57 | 首先我们需要一个存款函数,这个函数的输入为存款的金额,和一个随机数,然后输出为一个存款凭证。任何拥有这个凭证的人都可以取出这笔资金。所以,实际上,我们只需要编写验证知道这个凭证的验证函数即可。
58 |
59 | ```zok
60 | import "hashes/sha256/512bit" as sha256;
61 | import "utils/pack/u32/nonStrictUnpack256" as unpack256;
62 |
63 | // deposit_amount: 存款金额
64 | // secret: 随机数
65 | // returns: 用于取款的commitment
66 | def main(field deposit_amount, private field secret) -> u32[8] {
67 | return sha256(unpack256(deposit_amount), unpack256(secret));
68 | }
69 | ```
70 |
71 | 关于 Zok 的语法和用法这里不过多描述,具体可以参考官网,这里简单解释一下,这个函数的输入为两个数字,一个是存款金额,一个是随机数,然后输出为一个 u32[8],实际上就是 uint256.同时我们注意一下,参数中 deposit_amount 没有 private 关键词,说明这个参数是公开数据。
72 |
73 | ### 编译文件
74 |
75 | 这部分内容在 zokrates 中有讲述方式为
76 |
77 | ```zok
78 | # compile
79 | zokrates compile -i deposit.zok
80 | # perform the setup phase
81 | zokrates setup
82 | # execute the program
83 | zokrates compute-witness -a 337 113569
84 | # generate a proof of computation
85 | zokrates generate-proof
86 | # export a solidity verifier
87 | zokrates export-verifier
88 | # or verify natively
89 | zokrates verify
90 | ```
91 |
92 | 运行完成后会生成一堆文件,我们需要的是 proof.json, proving.key, verification.key, verifier.sol, out。
93 |
94 | 大部分其实都是模版文件生成文件可能不一样的地方在于 Verifier 合约中 verifyingKey,当然,我们阅读这个文件其实意义也不大,因为这里面全是一大堆数字和运算。
95 | 实际上我们需要看的内容就是这些 ∑
96 |
97 | ```solidity
98 | function verifyTx(
99 | Proof memory proof, uint[8] memory input
100 | ) public view returns (bool r) {
101 | uint[] memory inputValues = new uint[](8);
102 |
103 | for(uint i = 0; i < input.length; i++){
104 | inputValues[i] = input[i];
105 | }
106 | if (verify(inputValues, proof) == 0) {
107 | return true;
108 | } else {
109 | return false;
110 | }
111 | }
112 | ```
113 |
114 | 可以看到,我们需要两个参数,proof 和 input。至于这两个参数是干嘛的,我们暂时不过多深究。不过我们需要注意的是,在 inputs 中,所有的共有参数都会被加入到这个数组中,在数字最开头部分被推入。
115 |
116 | 比如,自动生成的 proof.json 文件就是一个有效的数据。
117 |
118 | ```json
119 | {
120 | "scheme": "gm17",
121 | "curve": "bn128",
122 | "proof": {
123 | "a": [
124 | "0x05a83e3c3b3ff9d59bdffdcf7aa655f42b941b0063f82cf26516846056d09aa6",
125 | "0x018039b7de92979ef6251c877971888ae049d09a6b48e5aa98c23ef91550ed36"
126 | ],
127 | "b": [
128 | [
129 | "0x1e88e783456a27e4f02dde8c742610339e395eb0bbf7f7efc1113815dcf0a16f",
130 | "0x1cc9de9e60c6519ea69c9b3a71c0809ac7ae3389a598d66fc27d378738d5de29"
131 | ],
132 | [
133 | "0x0715544abbc18e741620ff7c76cb2a7d3558ee157d23f275ab65c43c25357d07",
134 | "0x0344257236ba33a3ce7ce34b8d518f7572984036db6f77fc2fc13f51c548a837"
135 | ]
136 | ],
137 | "c": [
138 | "0x177113e528c76661a03a8f3f072f29e684244297a62926a0000d3a7135c1441f",
139 | "0x18cf275d0bc621473688848946584af771afca42e4f2bd0ef1e5d06e0adefd0f"
140 | ]
141 | },
142 | "inputs": [
143 | "0x0000000000000000000000000000000000000000000000000000000000000151",
144 | "0x00000000000000000000000000000000000000000000000000000000bb3eada7",
145 | "0x000000000000000000000000000000000000000000000000000000004b704815",
146 | "0x00000000000000000000000000000000000000000000000000000000cddda451",
147 | "0x00000000000000000000000000000000000000000000000000000000ca701d2a",
148 | "0x000000000000000000000000000000000000000000000000000000001f278e64",
149 | "0x00000000000000000000000000000000000000000000000000000000ef16f074",
150 | "0x0000000000000000000000000000000000000000000000000000000040e13298",
151 | "0x0000000000000000000000000000000000000000000000000000000026c5da72"
152 | ]
153 | }
154 | ```
155 |
156 | 至此,我们可以写一个简单合约。
157 |
158 | ```solidity
159 | // SPDX-License-Identifier: MIT
160 | pragma solidity ^0.8.0;
161 |
162 | import {Verifier} from "./verifier.sol";
163 |
164 | contract Master {
165 | event Despoit(uint256 commitment, uint amount);
166 |
167 | mapping(uint => uint) public proofs;
168 |
169 | Verifier v;
170 |
171 | constructor() {
172 | v = new Verifier();
173 | }
174 |
175 | function deposit(uint commitment) public payable {
176 | proofs[commitment] = msg.value;
177 | emit Despoit(commitment, msg.value);
178 | }
179 |
180 | function withdraw(
181 | uint commitment,
182 | Verifier.Proof memory proof,
183 | uint[9] memory inputs
184 | ) public {
185 | uint amount = inputs[0];
186 | require(v.verifyTx(proof, inputs));
187 | require(proofs[commitment] == amount);
188 |
189 | payable(msg.sender).transfer(amount);
190 | }
191 | }
192 | ```
193 |
194 | 要注意的是 Verifier 合约中会出现两个`pragma solidity`,记得删掉中间那一个,保留最上面的那个,否则编译无法通过。
195 |
196 | ## 测试
197 |
198 | 首先我们需要明白一下标准流程,我们需要先进行 compile,setup,然后再进行 compute-witness,然后再进行 generate-proof,最后再进行 export-verifier。
199 |
200 | 但是这套流程并不是每次都必须的,因为这个是一个完整流程。我们需要进行一下区分。
201 |
202 | ### 必要条件
203 |
204 | - compile - 编译 zk 电路 - 只需要执行一次 这个功能会生成 out 文件和 abi.json 文件,这两个是编译后的程序。
205 | - setup - 生成 zk 电路的 pk 和 vk - 只需要执行一次 这个功能会生成 proving.key 和 verification.key 文件,这两个文件是 zk 电路的公钥和私钥。实际上在进行 setup 的时候会产生 lambda,但是这些过程我们不需要太过于关心。
206 |
207 | ### 提交证明条件
208 |
209 | - compute-witness - 生成证明 - 这个功能会生成 witness 文件,这个文件是一个中间文件。
210 | - generate-proof - 生成证明的 Proof - 这个功能会生成 proof.json 文件,这个文件是证明需要提交的内容,一般来说里面的内容就是我们需要提交到链上的参数。
211 |
212 | ### 接受证明条件
213 |
214 | - export-verifier - 生成 verifier.sol - 这个功能会生成 verifier.sol 文件,这个文件是一个合约,我们需要将这个合约部署到链上,然后在我们的合约中调用这个合约来验证证明的正确性。
215 | - verify - 本地验证 - 这个功能会验证证明的正确性,但是这个功能并不会生成任何文件。
216 |
217 | ### 编写文件
218 |
219 | 根据上面内容,我们可以写出一些用于测试的单元测试逻辑。
220 |
221 | ```js
222 | import { expect } from "chai";
223 | import { ethers } from "hardhat";
224 | import { Verifier } from "../typechain-types/Verifier";
225 | import { CompilationArtifacts, ZoKratesProvider } from "zokrates-js";
226 | import { readFileSync } from "fs";
227 | import { Master } from "../typechain-types";
228 | import { resolve } from 'path'
229 |
230 | describe("Verifier", function () {
231 | let master: Master;
232 | let zokratesProvider: ZoKratesProvider
233 |
234 | const zokArtifacts: CompilationArtifacts = {
235 | program: readFileSync(resolve(__dirname, '../zok/out')),
236 | abi: JSON.parse(readFileSync(resolve(__dirname, '../zok/abi.json'), 'utf-8'))
237 | }
238 |
239 | const provingKey = readFileSync(resolve(__dirname, '../zok/proving.key'))
240 |
241 | beforeEach(async () => {
242 | const { initialize } = await import("zokrates-js");
243 | zokratesProvider = (await initialize()).withOptions({
244 | backend: 'ark',
245 | curve: 'bn128',
246 | scheme: 'gm17'
247 | });
248 |
249 | const bn256 = await ethers.getContractFactory("BN256G2").then((f) => f.deploy());
250 |
251 | master = await ethers.getContractFactory("Master", {
252 | libraries: {
253 | "contracts/verifier.sol:BN256G2": bn256.address,
254 | }
255 | }).then((f) => f.deploy());
256 | })
257 |
258 | it("should verify a proof", async () => {
259 | const { witness, output } = zokratesProvider.computeWitness(
260 | zokArtifacts,
261 | [`${ethers.constants.WeiPerEther}`, '23'],
262 | )
263 |
264 | const commitment = hexListToUint256BigEndian(JSON.parse(output)).toString();
265 |
266 | await master.deposit(
267 | commitment,
268 | { value: ethers.constants.WeiPerEther }
269 | )
270 |
271 | const proof = zokratesProvider.generateProof(
272 | zokArtifacts.program,
273 | witness,
274 | provingKey);
275 |
276 |
277 | const sender = (await ethers.getSigners())[0];
278 | expect(() => master.connect(sender).
279 | withdraw(commitment, proof.proof as Verifier.ProofStruct, proof.inputs)
280 | ).to.changeEtherBalance(sender, ethers.constants.WeiPerEther);
281 | })
282 | });
283 |
284 |
285 | function hexListToUint256BigEndian(hexList: string[]) {
286 | let uint256Data = "0x";
287 | for (const hex of hexList) {
288 | const cleanedHex = hex.replace("0x", "");
289 | uint256Data += cleanedHex;
290 | }
291 | const uint256BigNumber = ethers.BigNumber.from(uint256Data);
292 | return uint256BigNumber;
293 | }
294 | ```
295 |
296 | 
297 |
298 | import { BaseLink } from "components/base_link";
299 |
300 | 项目的基础文件都放在: Github 仓库[]()中,欢迎 Star。
301 |
--------------------------------------------------------------------------------
/pages/zk/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "1-zk-SNARKs-intro":{},
3 | "2-zk-SNARKs-info" :{},
4 | "3-zk-SNARKs-use-in-solidity":{}
5 | }
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | next:
12 | specifier: ^13.0.6
13 | version: 13.0.6(react-dom@18.2.0)(react@18.2.0)
14 | nextra:
15 | specifier: latest
16 | version: 2.12.3(next@13.0.6)(react-dom@18.2.0)(react@18.2.0)
17 | nextra-theme-docs:
18 | specifier: latest
19 | version: 2.12.3(next@13.0.6)(nextra@2.12.3)(react-dom@18.2.0)(react@18.2.0)
20 | react:
21 | specifier: ^18.2.0
22 | version: 18.2.0
23 | react-dom:
24 | specifier: ^18.2.0
25 | version: 18.2.0(react@18.2.0)
26 | devDependencies:
27 | '@types/node':
28 | specifier: 18.11.10
29 | version: 18.11.10
30 | autoprefixer:
31 | specifier: ^10.4.15
32 | version: 10.4.15(postcss@8.4.29)
33 | postcss:
34 | specifier: ^8.4.29
35 | version: 8.4.29
36 | tailwindcss:
37 | specifier: ^3.3.3
38 | version: 3.3.3
39 | typescript:
40 | specifier: ^4.9.3
41 | version: 4.9.3
42 |
43 | packages:
44 |
45 | '@alloc/quick-lru@5.2.0':
46 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
47 | engines: {node: '>=10'}
48 |
49 | '@babel/runtime@7.20.6':
50 | resolution: {integrity: sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==}
51 | engines: {node: '>=6.9.0'}
52 |
53 | '@braintree/sanitize-url@6.0.4':
54 | resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==}
55 |
56 | '@headlessui/react@1.7.10':
57 | resolution: {integrity: sha512-1m66h/5eayTEZVT2PI13/2PG3EVC7a9XalmUtVSC8X76pcyKYMuyX1XAL2RUtCr8WhoMa/KrDEyoeU5v+kSQOw==}
58 | engines: {node: '>=10'}
59 | peerDependencies:
60 | react: ^16 || ^17 || ^18
61 | react-dom: ^16 || ^17 || ^18
62 |
63 | '@jridgewell/gen-mapping@0.3.3':
64 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
65 | engines: {node: '>=6.0.0'}
66 |
67 | '@jridgewell/resolve-uri@3.1.1':
68 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
69 | engines: {node: '>=6.0.0'}
70 |
71 | '@jridgewell/set-array@1.1.2':
72 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
73 | engines: {node: '>=6.0.0'}
74 |
75 | '@jridgewell/sourcemap-codec@1.4.15':
76 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
77 |
78 | '@jridgewell/trace-mapping@0.3.19':
79 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
80 |
81 | '@mdx-js/mdx@2.3.0':
82 | resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==}
83 |
84 | '@mdx-js/react@2.3.0':
85 | resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==}
86 | peerDependencies:
87 | react: '>=16'
88 |
89 | '@napi-rs/simple-git-android-arm-eabi@0.1.9':
90 | resolution: {integrity: sha512-9D4JnfePMpgL4pg9aMUX7/TIWEUQ+Tgx8n3Pf8TNCMGjUbImJyYsDSLJzbcv9wH7srgn4GRjSizXFJHAPjzEug==}
91 | engines: {node: '>= 10'}
92 | cpu: [arm]
93 | os: [android]
94 |
95 | '@napi-rs/simple-git-android-arm64@0.1.9':
96 | resolution: {integrity: sha512-Krilsw0gPrrASZzudNEl9pdLuNbhoTK0j7pUbfB8FRifpPdFB/zouwuEm0aSnsDXN4ftGrmGG82kuiR/2MeoPg==}
97 | engines: {node: '>= 10'}
98 | cpu: [arm64]
99 | os: [android]
100 |
101 | '@napi-rs/simple-git-darwin-arm64@0.1.9':
102 | resolution: {integrity: sha512-H/F09nDgYjv4gcFrZBgdTKkZEepqt0KLYcCJuUADuxkKupmjLdecMhypXLk13AzvLW4UQI7NlLTLDXUFLyr2BA==}
103 | engines: {node: '>= 10'}
104 | cpu: [arm64]
105 | os: [darwin]
106 |
107 | '@napi-rs/simple-git-darwin-x64@0.1.9':
108 | resolution: {integrity: sha512-jBR2xS9nVPqmHv0TWz874W0m/d453MGrMeLjB+boK5IPPLhg3AWIZj0aN9jy2Je1BGVAa0w3INIQJtBBeB6kFA==}
109 | engines: {node: '>= 10'}
110 | cpu: [x64]
111 | os: [darwin]
112 |
113 | '@napi-rs/simple-git-linux-arm-gnueabihf@0.1.9':
114 | resolution: {integrity: sha512-3n0+VpO4YfZxndZ0sCvsHIvsazd+JmbSjrlTRBCnJeAU1/sfos3skNZtKGZksZhjvd+3o+/GFM8L7Xnv01yggA==}
115 | engines: {node: '>= 10'}
116 | cpu: [arm]
117 | os: [linux]
118 |
119 | '@napi-rs/simple-git-linux-arm64-gnu@0.1.9':
120 | resolution: {integrity: sha512-lIzf0KHU2SKC12vMrWwCtysG2Sdt31VHRPMUiz9lD9t3xwVn8qhFSTn5yDkTeG3rgX6o0p5EKalfQN5BXsJq2w==}
121 | engines: {node: '>= 10'}
122 | cpu: [arm64]
123 | os: [linux]
124 |
125 | '@napi-rs/simple-git-linux-arm64-musl@0.1.9':
126 | resolution: {integrity: sha512-KQozUoNXrxrB8k741ncWXSiMbjl1AGBGfZV21PANzUM8wH4Yem2bg3kfglYS/QIx3udspsT35I9abu49n7D1/w==}
127 | engines: {node: '>= 10'}
128 | cpu: [arm64]
129 | os: [linux]
130 |
131 | '@napi-rs/simple-git-linux-x64-gnu@0.1.9':
132 | resolution: {integrity: sha512-O/Niui5mnHPcK3iYC3ui8wgERtJWsQ3Y74W/09t0bL/3dgzGMl4oQt0qTj9dWCsnoGsIEYHPzwCBp/2vqYp/pw==}
133 | engines: {node: '>= 10'}
134 | cpu: [x64]
135 | os: [linux]
136 |
137 | '@napi-rs/simple-git-linux-x64-musl@0.1.9':
138 | resolution: {integrity: sha512-L9n+e8Wn3hKr3RsIdY8GaB+ry4xZ4BaGwyKExgoB8nDGQuRUY9oP6p0WA4hWfJvJnU1H6hvo36a5UFPReyBO7A==}
139 | engines: {node: '>= 10'}
140 | cpu: [x64]
141 | os: [linux]
142 |
143 | '@napi-rs/simple-git-win32-arm64-msvc@0.1.9':
144 | resolution: {integrity: sha512-Z6Ja/SZK+lMvRWaxj7wjnvSbAsGrH006sqZo8P8nxKUdZfkVvoCaAWr1r0cfkk2Z3aijLLtD+vKeXGlUPH6gGQ==}
145 | engines: {node: '>= 10'}
146 | cpu: [arm64]
147 | os: [win32]
148 |
149 | '@napi-rs/simple-git-win32-x64-msvc@0.1.9':
150 | resolution: {integrity: sha512-VAZj1UvC+R2MjKOD3I/Y7dmQlHWAYy4omhReQJRpbCf+oGCBi9CWiIduGqeYEq723nLIKdxP7XjaO0wl1NnUww==}
151 | engines: {node: '>= 10'}
152 | cpu: [x64]
153 | os: [win32]
154 |
155 | '@napi-rs/simple-git@0.1.9':
156 | resolution: {integrity: sha512-qKzDS0+VjMvVyU28px+C6zlD1HKy83NIdYzfMQWa/g/V1iG/Ic8uwrS2ihHfm7mp7X0PPrmINLiTTi6ieUIKfw==}
157 | engines: {node: '>= 10'}
158 |
159 | '@next/env@13.0.6':
160 | resolution: {integrity: sha512-yceT6DCHKqPRS1cAm8DHvDvK74DLIkDQdm5iV+GnIts8h0QbdHvkUIkdOvQoOODgpr6018skbmSQp12z5OWIQQ==}
161 |
162 | '@next/swc-android-arm-eabi@13.0.6':
163 | resolution: {integrity: sha512-FGFSj3v2Bluw8fD/X+1eXIEB0PhoJE0zfutsAauRhmNpjjZshLDgoXMWm1jTRL/04K/o9gwwO2+A8+sPVCH1uw==}
164 | engines: {node: '>= 10'}
165 | cpu: [arm]
166 | os: [android]
167 |
168 | '@next/swc-android-arm64@13.0.6':
169 | resolution: {integrity: sha512-7MgbtU7kimxuovVsd7jSJWMkIHBDBUsNLmmlkrBRHTvgzx5nDBXogP0hzZm7EImdOPwVMPpUHRQMBP9mbsiJYQ==}
170 | engines: {node: '>= 10'}
171 | cpu: [arm64]
172 | os: [android]
173 |
174 | '@next/swc-darwin-arm64@13.0.6':
175 | resolution: {integrity: sha512-AUVEpVTxbP/fxdFsjVI9d5a0CFn6NVV7A/RXOb0Y+pXKIIZ1V5rFjPwpYfIfyOo2lrqgehMNQcyMRoTrhq04xg==}
176 | engines: {node: '>= 10'}
177 | cpu: [arm64]
178 | os: [darwin]
179 |
180 | '@next/swc-darwin-x64@13.0.6':
181 | resolution: {integrity: sha512-SasCDJlshglsPnbzhWaIF6VEGkQy2NECcAOxPwaPr0cwbbt4aUlZ7QmskNzgolr5eAjFS/xTr7CEeKJtZpAAtQ==}
182 | engines: {node: '>= 10'}
183 | cpu: [x64]
184 | os: [darwin]
185 |
186 | '@next/swc-freebsd-x64@13.0.6':
187 | resolution: {integrity: sha512-6Lbxd9gAdXneTkwHyYW/qtX1Tdw7ND9UbiGsGz/SP43ZInNWnW6q0au4hEVPZ9bOWWRKzcVoeTBdoMpQk9Hx9w==}
188 | engines: {node: '>= 10'}
189 | cpu: [x64]
190 | os: [freebsd]
191 |
192 | '@next/swc-linux-arm-gnueabihf@13.0.6':
193 | resolution: {integrity: sha512-wNdi5A519e1P+ozEuYOhWPzzE6m1y7mkO6NFwn6watUwO0X9nZs7fT9THmnekvmFQpaZ6U+xf2MQ9poQoCh6jQ==}
194 | engines: {node: '>= 10'}
195 | cpu: [arm]
196 | os: [linux]
197 |
198 | '@next/swc-linux-arm64-gnu@13.0.6':
199 | resolution: {integrity: sha512-e8KTRnleQY1KLk5PwGV5hrmvKksCc74QRpHl5ffWnEEAtL2FE0ave5aIkXqErsPdXkiKuA/owp3LjQrP+/AH7Q==}
200 | engines: {node: '>= 10'}
201 | cpu: [arm64]
202 | os: [linux]
203 |
204 | '@next/swc-linux-arm64-musl@13.0.6':
205 | resolution: {integrity: sha512-/7RF03C3mhjYpHN+pqOolgME3guiHU5T3TsejuyteqyEyzdEyLHod+jcYH6ft7UZ71a6TdOewvmbLOtzHW2O8A==}
206 | engines: {node: '>= 10'}
207 | cpu: [arm64]
208 | os: [linux]
209 |
210 | '@next/swc-linux-x64-gnu@13.0.6':
211 | resolution: {integrity: sha512-kxyEXnYHpOEkFnmrlwB1QlzJtjC6sAJytKcceIyFUHbCaD3W/Qb5tnclcnHKTaFccizZRePXvV25Ok/eUSpKTw==}
212 | engines: {node: '>= 10'}
213 | cpu: [x64]
214 | os: [linux]
215 |
216 | '@next/swc-linux-x64-musl@13.0.6':
217 | resolution: {integrity: sha512-N0c6gubS3WW1oYYgo02xzZnNatfVQP/CiJq2ax+DJ55ePV62IACbRCU99TZNXXg+Kos6vNW4k+/qgvkvpGDeyA==}
218 | engines: {node: '>= 10'}
219 | cpu: [x64]
220 | os: [linux]
221 |
222 | '@next/swc-win32-arm64-msvc@13.0.6':
223 | resolution: {integrity: sha512-QjeMB2EBqBFPb/ac0CYr7GytbhUkrG4EwFWbcE0vsRp4H8grt25kYpFQckL4Jak3SUrp7vKfDwZ/SwO7QdO8vw==}
224 | engines: {node: '>= 10'}
225 | cpu: [arm64]
226 | os: [win32]
227 |
228 | '@next/swc-win32-ia32-msvc@13.0.6':
229 | resolution: {integrity: sha512-EQzXtdqRTcmhT/tCq81rIwE36Y3fNHPInaCuJzM/kftdXfa0F+64y7FAoMO13npX8EG1+SamXgp/emSusKrCXg==}
230 | engines: {node: '>= 10'}
231 | cpu: [ia32]
232 | os: [win32]
233 |
234 | '@next/swc-win32-x64-msvc@13.0.6':
235 | resolution: {integrity: sha512-pSkqZ//UP/f2sS9T7IvHLfEWDPTX0vRyXJnAUNisKvO3eF3e1xdhDX7dix/X3Z3lnN4UjSwOzclAI87JFbOwmQ==}
236 | engines: {node: '>= 10'}
237 | cpu: [x64]
238 | os: [win32]
239 |
240 | '@nodelib/fs.scandir@2.1.5':
241 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
242 | engines: {node: '>= 8'}
243 |
244 | '@nodelib/fs.stat@2.0.5':
245 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
246 | engines: {node: '>= 8'}
247 |
248 | '@nodelib/fs.walk@1.2.8':
249 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
250 | engines: {node: '>= 8'}
251 |
252 | '@popperjs/core@2.11.6':
253 | resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==}
254 |
255 | '@swc/helpers@0.4.14':
256 | resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
257 |
258 | '@theguild/remark-mermaid@0.0.4':
259 | resolution: {integrity: sha512-C1gssw07eURtCwzXqZZdvyV/eawQ/cXfARaXIgBU9orffox+/YQ+exxmNu9v16NSGzAVsGF4qEVHvCOcCR/FpQ==}
260 | peerDependencies:
261 | react: ^18.2.0
262 |
263 | '@theguild/remark-npm2yarn@0.1.1':
264 | resolution: {integrity: sha512-ZKwd/bjQ9V+pESLnu8+q8jqn15alXzJOuVckraebsXwqVBTw53Gmupiw9zCdLNHU829KTYNycJYea6m9HRLuOg==}
265 |
266 | '@types/acorn@4.0.6':
267 | resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
268 |
269 | '@types/d3-scale-chromatic@3.0.0':
270 | resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==}
271 |
272 | '@types/d3-scale@4.0.4':
273 | resolution: {integrity: sha512-eq1ZeTj0yr72L8MQk6N6heP603ubnywSDRfNpi5enouR112HzGLS6RIvExCzZTraFF4HdzNpJMwA/zGiMoHUUw==}
274 |
275 | '@types/d3-time@3.0.0':
276 | resolution: {integrity: sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==}
277 |
278 | '@types/debug@4.1.7':
279 | resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
280 |
281 | '@types/estree-jsx@1.0.0':
282 | resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==}
283 |
284 | '@types/estree@1.0.0':
285 | resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
286 |
287 | '@types/hast@2.3.4':
288 | resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
289 |
290 | '@types/hast@3.0.0':
291 | resolution: {integrity: sha512-SoytUJRuf68HXYqcXicQIhCrLQjqeYU2anikr4G3p3Iz+OZO5QDQpDj++gv+RenHsnUBwNZ2dumBArF8VLSk2Q==}
292 |
293 | '@types/js-yaml@4.0.5':
294 | resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==}
295 |
296 | '@types/katex@0.11.1':
297 | resolution: {integrity: sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==}
298 |
299 | '@types/katex@0.14.0':
300 | resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==}
301 |
302 | '@types/mdast@3.0.10':
303 | resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==}
304 |
305 | '@types/mdast@4.0.0':
306 | resolution: {integrity: sha512-YLeG8CujC9adtj/kuDzq1N4tCDYKoZ5l/bnjq8d74+t/3q/tHquJOJKUQXJrLCflOHpKjXgcI/a929gpmLOEng==}
307 |
308 | '@types/mdx@2.0.3':
309 | resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
310 |
311 | '@types/ms@0.7.31':
312 | resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
313 |
314 | '@types/node@18.11.10':
315 | resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==}
316 |
317 | '@types/prop-types@15.7.5':
318 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
319 |
320 | '@types/react@18.0.25':
321 | resolution: {integrity: sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==}
322 |
323 | '@types/scheduler@0.16.2':
324 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
325 |
326 | '@types/unist@2.0.6':
327 | resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
328 |
329 | '@types/unist@3.0.0':
330 | resolution: {integrity: sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==}
331 |
332 | '@ungap/structured-clone@1.2.0':
333 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
334 |
335 | acorn-jsx@5.3.2:
336 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
337 | peerDependencies:
338 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
339 |
340 | acorn@8.8.1:
341 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
342 | engines: {node: '>=0.4.0'}
343 | hasBin: true
344 |
345 | ansi-sequence-parser@1.1.1:
346 | resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==}
347 |
348 | ansi-styles@3.2.1:
349 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
350 | engines: {node: '>=4'}
351 |
352 | any-promise@1.3.0:
353 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
354 |
355 | anymatch@3.1.3:
356 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
357 | engines: {node: '>= 8'}
358 |
359 | arch@2.2.0:
360 | resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
361 |
362 | arg@1.0.0:
363 | resolution: {integrity: sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==}
364 |
365 | arg@5.0.2:
366 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
367 |
368 | argparse@1.0.10:
369 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
370 |
371 | argparse@2.0.1:
372 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
373 |
374 | astring@1.8.3:
375 | resolution: {integrity: sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==}
376 | hasBin: true
377 |
378 | autoprefixer@10.4.15:
379 | resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==}
380 | engines: {node: ^10 || ^12 || >=14}
381 | hasBin: true
382 | peerDependencies:
383 | postcss: ^8.1.0
384 |
385 | bail@2.0.2:
386 | resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
387 |
388 | balanced-match@1.0.2:
389 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
390 |
391 | binary-extensions@2.2.0:
392 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
393 | engines: {node: '>=8'}
394 |
395 | brace-expansion@1.1.11:
396 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
397 |
398 | braces@3.0.2:
399 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
400 | engines: {node: '>=8'}
401 |
402 | browserslist@4.21.10:
403 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
404 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
405 | hasBin: true
406 |
407 | camelcase-css@2.0.1:
408 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
409 | engines: {node: '>= 6'}
410 |
411 | caniuse-lite@1.0.30001435:
412 | resolution: {integrity: sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==}
413 |
414 | caniuse-lite@1.0.30001527:
415 | resolution: {integrity: sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ==}
416 |
417 | ccount@2.0.1:
418 | resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
419 |
420 | chalk@2.3.0:
421 | resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==}
422 | engines: {node: '>=4'}
423 |
424 | character-entities-html4@2.1.0:
425 | resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
426 |
427 | character-entities-legacy@3.0.0:
428 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
429 |
430 | character-entities@2.0.2:
431 | resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
432 |
433 | character-reference-invalid@2.0.1:
434 | resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
435 |
436 | chokidar@3.5.3:
437 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
438 | engines: {node: '>= 8.10.0'}
439 |
440 | client-only@0.0.1:
441 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
442 |
443 | clipboardy@1.2.2:
444 | resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==}
445 | engines: {node: '>=4'}
446 |
447 | clsx@2.0.0:
448 | resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
449 | engines: {node: '>=6'}
450 |
451 | color-convert@1.9.3:
452 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
453 |
454 | color-name@1.1.3:
455 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
456 |
457 | comma-separated-tokens@2.0.3:
458 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
459 |
460 | commander@4.1.1:
461 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
462 | engines: {node: '>= 6'}
463 |
464 | commander@7.2.0:
465 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
466 | engines: {node: '>= 10'}
467 |
468 | commander@8.3.0:
469 | resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
470 | engines: {node: '>= 12'}
471 |
472 | compute-scroll-into-view@2.0.4:
473 | resolution: {integrity: sha512-y/ZA3BGnxoM/QHHQ2Uy49CLtnWPbt4tTPpEEZiEmmiWBFKjej7nEyH8Ryz54jH0MLXflUYA3Er2zUxPSJu5R+g==}
474 |
475 | concat-map@0.0.1:
476 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
477 |
478 | cose-base@1.0.3:
479 | resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
480 |
481 | cose-base@2.2.0:
482 | resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
483 |
484 | cross-spawn@5.1.0:
485 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
486 |
487 | cssesc@3.0.0:
488 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
489 | engines: {node: '>=4'}
490 | hasBin: true
491 |
492 | csstype@3.1.1:
493 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
494 |
495 | cytoscape-cose-bilkent@4.1.0:
496 | resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
497 | peerDependencies:
498 | cytoscape: ^3.2.0
499 |
500 | cytoscape-fcose@2.2.0:
501 | resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
502 | peerDependencies:
503 | cytoscape: ^3.2.0
504 |
505 | cytoscape@3.26.0:
506 | resolution: {integrity: sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==}
507 | engines: {node: '>=0.10'}
508 |
509 | d3-array@2.12.1:
510 | resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
511 |
512 | d3-array@3.2.4:
513 | resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
514 | engines: {node: '>=12'}
515 |
516 | d3-axis@3.0.0:
517 | resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
518 | engines: {node: '>=12'}
519 |
520 | d3-brush@3.0.0:
521 | resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
522 | engines: {node: '>=12'}
523 |
524 | d3-chord@3.0.1:
525 | resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
526 | engines: {node: '>=12'}
527 |
528 | d3-color@3.1.0:
529 | resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
530 | engines: {node: '>=12'}
531 |
532 | d3-contour@4.0.2:
533 | resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
534 | engines: {node: '>=12'}
535 |
536 | d3-delaunay@6.0.4:
537 | resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
538 | engines: {node: '>=12'}
539 |
540 | d3-dispatch@3.0.1:
541 | resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
542 | engines: {node: '>=12'}
543 |
544 | d3-drag@3.0.0:
545 | resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
546 | engines: {node: '>=12'}
547 |
548 | d3-dsv@3.0.1:
549 | resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
550 | engines: {node: '>=12'}
551 | hasBin: true
552 |
553 | d3-ease@3.0.1:
554 | resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
555 | engines: {node: '>=12'}
556 |
557 | d3-fetch@3.0.1:
558 | resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
559 | engines: {node: '>=12'}
560 |
561 | d3-force@3.0.0:
562 | resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
563 | engines: {node: '>=12'}
564 |
565 | d3-format@3.1.0:
566 | resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==}
567 | engines: {node: '>=12'}
568 |
569 | d3-geo@3.1.0:
570 | resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==}
571 | engines: {node: '>=12'}
572 |
573 | d3-hierarchy@3.1.2:
574 | resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
575 | engines: {node: '>=12'}
576 |
577 | d3-interpolate@3.0.1:
578 | resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
579 | engines: {node: '>=12'}
580 |
581 | d3-path@1.0.9:
582 | resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
583 |
584 | d3-path@3.1.0:
585 | resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
586 | engines: {node: '>=12'}
587 |
588 | d3-polygon@3.0.1:
589 | resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
590 | engines: {node: '>=12'}
591 |
592 | d3-quadtree@3.0.1:
593 | resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
594 | engines: {node: '>=12'}
595 |
596 | d3-random@3.0.1:
597 | resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
598 | engines: {node: '>=12'}
599 |
600 | d3-sankey@0.12.3:
601 | resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
602 |
603 | d3-scale-chromatic@3.0.0:
604 | resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==}
605 | engines: {node: '>=12'}
606 |
607 | d3-scale@4.0.2:
608 | resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
609 | engines: {node: '>=12'}
610 |
611 | d3-selection@3.0.0:
612 | resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
613 | engines: {node: '>=12'}
614 |
615 | d3-shape@1.3.7:
616 | resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
617 |
618 | d3-shape@3.2.0:
619 | resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
620 | engines: {node: '>=12'}
621 |
622 | d3-time-format@4.1.0:
623 | resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
624 | engines: {node: '>=12'}
625 |
626 | d3-time@3.1.0:
627 | resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
628 | engines: {node: '>=12'}
629 |
630 | d3-timer@3.0.1:
631 | resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
632 | engines: {node: '>=12'}
633 |
634 | d3-transition@3.0.1:
635 | resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
636 | engines: {node: '>=12'}
637 | peerDependencies:
638 | d3-selection: 2 - 3
639 |
640 | d3-zoom@3.0.0:
641 | resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
642 | engines: {node: '>=12'}
643 |
644 | d3@7.8.5:
645 | resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==}
646 | engines: {node: '>=12'}
647 |
648 | dagre-d3-es@7.0.10:
649 | resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==}
650 |
651 | dayjs@1.11.9:
652 | resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==}
653 |
654 | debug@4.3.4:
655 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
656 | engines: {node: '>=6.0'}
657 | peerDependencies:
658 | supports-color: '*'
659 | peerDependenciesMeta:
660 | supports-color:
661 | optional: true
662 |
663 | decode-named-character-reference@1.0.2:
664 | resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
665 |
666 | delaunator@5.0.0:
667 | resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==}
668 |
669 | dequal@2.0.3:
670 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
671 | engines: {node: '>=6'}
672 |
673 | devlop@1.1.0:
674 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
675 |
676 | didyoumean@1.2.2:
677 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
678 |
679 | diff@5.1.0:
680 | resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
681 | engines: {node: '>=0.3.1'}
682 |
683 | dlv@1.1.3:
684 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
685 |
686 | dompurify@3.0.5:
687 | resolution: {integrity: sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==}
688 |
689 | electron-to-chromium@1.4.508:
690 | resolution: {integrity: sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==}
691 |
692 | elkjs@0.8.2:
693 | resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==}
694 |
695 | entities@4.5.0:
696 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
697 | engines: {node: '>=0.12'}
698 |
699 | escalade@3.1.1:
700 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
701 | engines: {node: '>=6'}
702 |
703 | escape-string-regexp@1.0.5:
704 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
705 | engines: {node: '>=0.8.0'}
706 |
707 | escape-string-regexp@5.0.0:
708 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
709 | engines: {node: '>=12'}
710 |
711 | esprima@4.0.1:
712 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
713 | engines: {node: '>=4'}
714 | hasBin: true
715 |
716 | estree-util-attach-comments@2.1.0:
717 | resolution: {integrity: sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==}
718 |
719 | estree-util-build-jsx@2.2.0:
720 | resolution: {integrity: sha512-apsfRxF9uLrqosApvHVtYZjISPvTJ+lBiIydpC+9wE6cF6ssbhnjyQLqaIjgzGxvC2Hbmec1M7g91PoBayYoQQ==}
721 |
722 | estree-util-is-identifier-name@2.0.1:
723 | resolution: {integrity: sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==}
724 |
725 | estree-util-to-js@1.1.0:
726 | resolution: {integrity: sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A==}
727 |
728 | estree-util-value-to-estree@1.3.0:
729 | resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==}
730 | engines: {node: '>=12.0.0'}
731 |
732 | estree-util-visit@1.2.0:
733 | resolution: {integrity: sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==}
734 |
735 | estree-walker@3.0.1:
736 | resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==}
737 |
738 | execa@0.8.0:
739 | resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==}
740 | engines: {node: '>=4'}
741 |
742 | extend-shallow@2.0.1:
743 | resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
744 | engines: {node: '>=0.10.0'}
745 |
746 | extend@3.0.2:
747 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
748 |
749 | fast-glob@3.3.1:
750 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
751 | engines: {node: '>=8.6.0'}
752 |
753 | fastq@1.15.0:
754 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
755 |
756 | fill-range@7.0.1:
757 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
758 | engines: {node: '>=8'}
759 |
760 | flexsearch@0.7.31:
761 | resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==}
762 |
763 | focus-visible@5.2.0:
764 | resolution: {integrity: sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==}
765 |
766 | fraction.js@4.3.6:
767 | resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==}
768 |
769 | fs.realpath@1.0.0:
770 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
771 |
772 | fsevents@2.3.3:
773 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
774 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
775 | os: [darwin]
776 |
777 | function-bind@1.1.1:
778 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
779 |
780 | get-stream@3.0.0:
781 | resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
782 | engines: {node: '>=4'}
783 |
784 | git-up@7.0.0:
785 | resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==}
786 |
787 | git-url-parse@13.1.0:
788 | resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==}
789 |
790 | github-slugger@2.0.0:
791 | resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
792 |
793 | glob-parent@5.1.2:
794 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
795 | engines: {node: '>= 6'}
796 |
797 | glob-parent@6.0.2:
798 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
799 | engines: {node: '>=10.13.0'}
800 |
801 | glob@7.1.6:
802 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
803 |
804 | graceful-fs@4.2.11:
805 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
806 |
807 | gray-matter@4.0.3:
808 | resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
809 | engines: {node: '>=6.0'}
810 |
811 | has-flag@2.0.0:
812 | resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==}
813 | engines: {node: '>=0.10.0'}
814 |
815 | has@1.0.3:
816 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
817 | engines: {node: '>= 0.4.0'}
818 |
819 | hash-obj@4.0.0:
820 | resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==}
821 | engines: {node: '>=12'}
822 |
823 | hast-util-from-dom@4.2.0:
824 | resolution: {integrity: sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==}
825 |
826 | hast-util-from-html-isomorphic@1.0.0:
827 | resolution: {integrity: sha512-Yu480AKeOEN/+l5LA674a+7BmIvtDj24GvOt7MtQWuhzUwlaaRWdEPXAh3Qm5vhuthpAipFb2vTetKXWOjmTvw==}
828 |
829 | hast-util-from-html@1.0.2:
830 | resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==}
831 |
832 | hast-util-from-parse5@7.1.1:
833 | resolution: {integrity: sha512-R6PoNcUs89ZxLJmMWsVbwSWuz95/9OriyQZ3e2ybwqGsRXzhA6gv49rgGmQvLbZuSNDv9fCg7vV7gXUsvtUFaA==}
834 |
835 | hast-util-from-parse5@8.0.1:
836 | resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
837 |
838 | hast-util-is-element@2.1.3:
839 | resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==}
840 |
841 | hast-util-parse-selector@3.1.1:
842 | resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==}
843 |
844 | hast-util-parse-selector@4.0.0:
845 | resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
846 |
847 | hast-util-raw@9.0.1:
848 | resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==}
849 |
850 | hast-util-to-estree@2.1.0:
851 | resolution: {integrity: sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==}
852 |
853 | hast-util-to-parse5@8.0.0:
854 | resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
855 |
856 | hast-util-to-text@3.1.2:
857 | resolution: {integrity: sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==}
858 |
859 | hast-util-whitespace@2.0.0:
860 | resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==}
861 |
862 | hastscript@7.2.0:
863 | resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==}
864 |
865 | hastscript@8.0.0:
866 | resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
867 |
868 | heap@0.2.7:
869 | resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==}
870 |
871 | html-void-elements@3.0.0:
872 | resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
873 |
874 | iconv-lite@0.6.3:
875 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
876 | engines: {node: '>=0.10.0'}
877 |
878 | inflight@1.0.6:
879 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
880 |
881 | inherits@2.0.4:
882 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
883 |
884 | inline-style-parser@0.1.1:
885 | resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
886 |
887 | internmap@1.0.1:
888 | resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
889 |
890 | internmap@2.0.3:
891 | resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
892 | engines: {node: '>=12'}
893 |
894 | intersection-observer@0.12.2:
895 | resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
896 |
897 | is-alphabetical@2.0.1:
898 | resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
899 |
900 | is-alphanumerical@2.0.1:
901 | resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
902 |
903 | is-binary-path@2.1.0:
904 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
905 | engines: {node: '>=8'}
906 |
907 | is-buffer@2.0.5:
908 | resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
909 | engines: {node: '>=4'}
910 |
911 | is-core-module@2.13.0:
912 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
913 |
914 | is-decimal@2.0.1:
915 | resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
916 |
917 | is-extendable@0.1.1:
918 | resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
919 | engines: {node: '>=0.10.0'}
920 |
921 | is-extglob@2.1.1:
922 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
923 | engines: {node: '>=0.10.0'}
924 |
925 | is-glob@4.0.3:
926 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
927 | engines: {node: '>=0.10.0'}
928 |
929 | is-hexadecimal@2.0.1:
930 | resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
931 |
932 | is-number@7.0.0:
933 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
934 | engines: {node: '>=0.12.0'}
935 |
936 | is-obj@3.0.0:
937 | resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==}
938 | engines: {node: '>=12'}
939 |
940 | is-plain-obj@3.0.0:
941 | resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
942 | engines: {node: '>=10'}
943 |
944 | is-plain-obj@4.1.0:
945 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
946 | engines: {node: '>=12'}
947 |
948 | is-reference@3.0.0:
949 | resolution: {integrity: sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==}
950 |
951 | is-ssh@1.4.0:
952 | resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==}
953 |
954 | is-stream@1.1.0:
955 | resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
956 | engines: {node: '>=0.10.0'}
957 |
958 | isexe@2.0.0:
959 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
960 |
961 | jiti@1.19.3:
962 | resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==}
963 | hasBin: true
964 |
965 | js-tokens@4.0.0:
966 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
967 |
968 | js-yaml@3.14.1:
969 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
970 | hasBin: true
971 |
972 | js-yaml@4.1.0:
973 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
974 | hasBin: true
975 |
976 | jsonc-parser@3.2.0:
977 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
978 |
979 | katex@0.13.24:
980 | resolution: {integrity: sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==}
981 | hasBin: true
982 |
983 | katex@0.16.8:
984 | resolution: {integrity: sha512-ftuDnJbcbOckGY11OO+zg3OofESlbR5DRl2cmN8HeWeeFIV7wTXvAOx8kEjZjobhA+9wh2fbKeO6cdcA9Mnovg==}
985 | hasBin: true
986 |
987 | khroma@2.0.0:
988 | resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==}
989 |
990 | kind-of@6.0.3:
991 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
992 | engines: {node: '>=0.10.0'}
993 |
994 | kleur@4.1.5:
995 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
996 | engines: {node: '>=6'}
997 |
998 | layout-base@1.0.2:
999 | resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
1000 |
1001 | layout-base@2.0.1:
1002 | resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
1003 |
1004 | lilconfig@2.1.0:
1005 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
1006 | engines: {node: '>=10'}
1007 |
1008 | lines-and-columns@1.2.4:
1009 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1010 |
1011 | lodash-es@4.17.21:
1012 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
1013 |
1014 | lodash.get@4.4.2:
1015 | resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
1016 |
1017 | lodash@4.17.21:
1018 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1019 |
1020 | longest-streak@3.1.0:
1021 | resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
1022 |
1023 | loose-envify@1.4.0:
1024 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1025 | hasBin: true
1026 |
1027 | lru-cache@4.1.5:
1028 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
1029 |
1030 | markdown-extensions@1.1.1:
1031 | resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==}
1032 | engines: {node: '>=0.10.0'}
1033 |
1034 | markdown-table@3.0.3:
1035 | resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
1036 |
1037 | match-sorter@6.3.1:
1038 | resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==}
1039 |
1040 | mdast-util-definitions@5.1.1:
1041 | resolution: {integrity: sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==}
1042 |
1043 | mdast-util-find-and-replace@2.2.1:
1044 | resolution: {integrity: sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==}
1045 |
1046 | mdast-util-from-markdown@1.3.1:
1047 | resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
1048 |
1049 | mdast-util-gfm-autolink-literal@1.0.2:
1050 | resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==}
1051 |
1052 | mdast-util-gfm-footnote@1.0.1:
1053 | resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==}
1054 |
1055 | mdast-util-gfm-strikethrough@1.0.2:
1056 | resolution: {integrity: sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==}
1057 |
1058 | mdast-util-gfm-table@1.0.6:
1059 | resolution: {integrity: sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==}
1060 |
1061 | mdast-util-gfm-task-list-item@1.0.1:
1062 | resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==}
1063 |
1064 | mdast-util-gfm@2.0.1:
1065 | resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==}
1066 |
1067 | mdast-util-math@2.0.2:
1068 | resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==}
1069 |
1070 | mdast-util-mdx-expression@1.3.1:
1071 | resolution: {integrity: sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==}
1072 |
1073 | mdast-util-mdx-jsx@2.1.0:
1074 | resolution: {integrity: sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==}
1075 |
1076 | mdast-util-mdx@2.0.0:
1077 | resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==}
1078 |
1079 | mdast-util-mdxjs-esm@1.3.0:
1080 | resolution: {integrity: sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==}
1081 |
1082 | mdast-util-to-hast@12.2.4:
1083 | resolution: {integrity: sha512-a21xoxSef1l8VhHxS1Dnyioz6grrJkoaCUgGzMD/7dWHvboYX3VW53esRUfB5tgTyz4Yos1n25SPcj35dJqmAg==}
1084 |
1085 | mdast-util-to-hast@13.0.2:
1086 | resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==}
1087 |
1088 | mdast-util-to-markdown@1.3.0:
1089 | resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==}
1090 |
1091 | mdast-util-to-string@3.1.0:
1092 | resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==}
1093 |
1094 | merge2@1.4.1:
1095 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1096 | engines: {node: '>= 8'}
1097 |
1098 | mermaid@10.4.0:
1099 | resolution: {integrity: sha512-4QCQLp79lvz7UZxow5HUX7uWTPJOaQBVExduo91tliXC7v78i6kssZOPHxLL+Xs30KU72cpPn3g3imw/xm/gaw==}
1100 |
1101 | micromark-core-commonmark@1.0.6:
1102 | resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==}
1103 |
1104 | micromark-extension-gfm-autolink-literal@1.0.3:
1105 | resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==}
1106 |
1107 | micromark-extension-gfm-footnote@1.0.4:
1108 | resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==}
1109 |
1110 | micromark-extension-gfm-strikethrough@1.0.4:
1111 | resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==}
1112 |
1113 | micromark-extension-gfm-table@1.0.5:
1114 | resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==}
1115 |
1116 | micromark-extension-gfm-tagfilter@1.0.1:
1117 | resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==}
1118 |
1119 | micromark-extension-gfm-task-list-item@1.0.3:
1120 | resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==}
1121 |
1122 | micromark-extension-gfm@2.0.1:
1123 | resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==}
1124 |
1125 | micromark-extension-math@2.0.2:
1126 | resolution: {integrity: sha512-cFv2B/E4pFPBBFuGgLHkkNiFAIQv08iDgPH2HCuR2z3AUgMLecES5Cq7AVtwOtZeRrbA80QgMUk8VVW0Z+D2FA==}
1127 |
1128 | micromark-extension-mdx-expression@1.0.3:
1129 | resolution: {integrity: sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==}
1130 |
1131 | micromark-extension-mdx-jsx@1.0.3:
1132 | resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==}
1133 |
1134 | micromark-extension-mdx-md@1.0.0:
1135 | resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==}
1136 |
1137 | micromark-extension-mdxjs-esm@1.0.3:
1138 | resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==}
1139 |
1140 | micromark-extension-mdxjs@1.0.0:
1141 | resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==}
1142 |
1143 | micromark-factory-destination@1.0.0:
1144 | resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==}
1145 |
1146 | micromark-factory-label@1.0.2:
1147 | resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==}
1148 |
1149 | micromark-factory-mdx-expression@1.0.6:
1150 | resolution: {integrity: sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==}
1151 |
1152 | micromark-factory-space@1.0.0:
1153 | resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==}
1154 |
1155 | micromark-factory-title@1.0.2:
1156 | resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==}
1157 |
1158 | micromark-factory-whitespace@1.0.0:
1159 | resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==}
1160 |
1161 | micromark-util-character@1.1.0:
1162 | resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==}
1163 |
1164 | micromark-util-character@2.0.1:
1165 | resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==}
1166 |
1167 | micromark-util-chunked@1.0.0:
1168 | resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==}
1169 |
1170 | micromark-util-classify-character@1.0.0:
1171 | resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==}
1172 |
1173 | micromark-util-combine-extensions@1.0.0:
1174 | resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==}
1175 |
1176 | micromark-util-decode-numeric-character-reference@1.0.0:
1177 | resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==}
1178 |
1179 | micromark-util-decode-string@1.0.2:
1180 | resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==}
1181 |
1182 | micromark-util-encode@1.0.1:
1183 | resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==}
1184 |
1185 | micromark-util-encode@2.0.0:
1186 | resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
1187 |
1188 | micromark-util-events-to-acorn@1.2.0:
1189 | resolution: {integrity: sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==}
1190 |
1191 | micromark-util-html-tag-name@1.1.0:
1192 | resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==}
1193 |
1194 | micromark-util-normalize-identifier@1.0.0:
1195 | resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==}
1196 |
1197 | micromark-util-resolve-all@1.0.0:
1198 | resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==}
1199 |
1200 | micromark-util-sanitize-uri@1.1.0:
1201 | resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==}
1202 |
1203 | micromark-util-sanitize-uri@2.0.0:
1204 | resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
1205 |
1206 | micromark-util-subtokenize@1.0.2:
1207 | resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==}
1208 |
1209 | micromark-util-symbol@1.0.1:
1210 | resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==}
1211 |
1212 | micromark-util-symbol@2.0.0:
1213 | resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
1214 |
1215 | micromark-util-types@1.0.2:
1216 | resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==}
1217 |
1218 | micromark-util-types@2.0.0:
1219 | resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
1220 |
1221 | micromark@3.1.0:
1222 | resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==}
1223 |
1224 | micromatch@4.0.5:
1225 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1226 | engines: {node: '>=8.6'}
1227 |
1228 | minimatch@3.1.2:
1229 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1230 |
1231 | mri@1.2.0:
1232 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1233 | engines: {node: '>=4'}
1234 |
1235 | ms@2.1.2:
1236 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1237 |
1238 | mz@2.7.0:
1239 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
1240 |
1241 | nanoid@3.3.6:
1242 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
1243 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1244 | hasBin: true
1245 |
1246 | next-mdx-remote@4.3.0:
1247 | resolution: {integrity: sha512-fbxkY03pM2Wx5bDNTVKpYD5Hx3QVZGH+6xDtVIxlxXz4HTifP1yI2DrkDvxXbTz0SYGIbluRMIW81IOOa8pigA==}
1248 | engines: {node: '>=14', npm: '>=7'}
1249 | peerDependencies:
1250 | react: '>=16.x <=18.x'
1251 | react-dom: '>=16.x <=18.x'
1252 |
1253 | next-seo@6.1.0:
1254 | resolution: {integrity: sha512-iMBpFoJsR5zWhguHJvsoBDxDSmdYTHtnVPB1ij+CD0NReQCP78ZxxbdL9qkKIf4oEuZEqZkrjAQLB0bkII7RYA==}
1255 | peerDependencies:
1256 | next: ^8.1.1-canary.54 || >=9.0.0
1257 | react: '>=16.0.0'
1258 | react-dom: '>=16.0.0'
1259 |
1260 | next-themes@0.2.1:
1261 | resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==}
1262 | peerDependencies:
1263 | next: '*'
1264 | react: '*'
1265 | react-dom: '*'
1266 |
1267 | next@13.0.6:
1268 | resolution: {integrity: sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA==}
1269 | engines: {node: '>=14.6.0'}
1270 | hasBin: true
1271 | peerDependencies:
1272 | fibers: '>= 3.1.0'
1273 | node-sass: ^6.0.0 || ^7.0.0
1274 | react: ^18.2.0
1275 | react-dom: ^18.2.0
1276 | sass: ^1.3.0
1277 | peerDependenciesMeta:
1278 | fibers:
1279 | optional: true
1280 | node-sass:
1281 | optional: true
1282 | sass:
1283 | optional: true
1284 |
1285 | nextra-theme-docs@2.12.3:
1286 | resolution: {integrity: sha512-aZywZwokk/h5HrUTh/bsU981Sd2prZks7ci+HNG9wuMnm+drp3PBmRKIuQxBCiJurePVBJ2Qk2/wTV3VECGKnA==}
1287 | peerDependencies:
1288 | next: '>=9.5.3'
1289 | nextra: 2.12.3
1290 | react: '>=16.13.1'
1291 | react-dom: '>=16.13.1'
1292 |
1293 | nextra@2.12.3:
1294 | resolution: {integrity: sha512-0d8wXpGAccFpMFZuxnlnN56MIZj+AWGYXW3Xk6ByXyr0Mb+B/C/0aGZV5YrBex0V1wEqMGQl4LLAJI+AfCbSXg==}
1295 | engines: {node: '>=16'}
1296 | peerDependencies:
1297 | next: '>=9.5.3'
1298 | react: '>=16.13.1'
1299 | react-dom: '>=16.13.1'
1300 |
1301 | node-releases@2.0.13:
1302 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
1303 |
1304 | non-layered-tidy-tree-layout@2.0.2:
1305 | resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==}
1306 |
1307 | normalize-path@3.0.0:
1308 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1309 | engines: {node: '>=0.10.0'}
1310 |
1311 | normalize-range@0.1.2:
1312 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1313 | engines: {node: '>=0.10.0'}
1314 |
1315 | npm-run-path@2.0.2:
1316 | resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
1317 | engines: {node: '>=4'}
1318 |
1319 | npm-to-yarn@2.0.0:
1320 | resolution: {integrity: sha512-/IbjiJ7vqbxfxJxAZ+QI9CCRjnIbvGxn5KQcSY9xHh0lMKc/Sgqmm7yp7KPmd6TiTZX5/KiSBKlkGHo59ucZbg==}
1321 | engines: {node: '>=6.0.0'}
1322 |
1323 | object-assign@4.1.1:
1324 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1325 | engines: {node: '>=0.10.0'}
1326 |
1327 | object-hash@3.0.0:
1328 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
1329 | engines: {node: '>= 6'}
1330 |
1331 | once@1.4.0:
1332 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1333 |
1334 | p-finally@1.0.0:
1335 | resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
1336 | engines: {node: '>=4'}
1337 |
1338 | p-limit@3.1.0:
1339 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1340 | engines: {node: '>=10'}
1341 |
1342 | parse-entities@4.0.0:
1343 | resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==}
1344 |
1345 | parse-numeric-range@1.3.0:
1346 | resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==}
1347 |
1348 | parse-path@7.0.0:
1349 | resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==}
1350 |
1351 | parse-url@8.1.0:
1352 | resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==}
1353 |
1354 | parse5@7.1.2:
1355 | resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
1356 |
1357 | path-is-absolute@1.0.1:
1358 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1359 | engines: {node: '>=0.10.0'}
1360 |
1361 | path-key@2.0.1:
1362 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
1363 | engines: {node: '>=4'}
1364 |
1365 | path-parse@1.0.7:
1366 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1367 |
1368 | periscopic@3.0.4:
1369 | resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==}
1370 |
1371 | picocolors@1.0.0:
1372 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1373 |
1374 | picomatch@2.3.1:
1375 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1376 | engines: {node: '>=8.6'}
1377 |
1378 | pify@2.3.0:
1379 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
1380 | engines: {node: '>=0.10.0'}
1381 |
1382 | pirates@4.0.6:
1383 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1384 | engines: {node: '>= 6'}
1385 |
1386 | postcss-import@15.1.0:
1387 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
1388 | engines: {node: '>=14.0.0'}
1389 | peerDependencies:
1390 | postcss: ^8.0.0
1391 |
1392 | postcss-js@4.0.1:
1393 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
1394 | engines: {node: ^12 || ^14 || >= 16}
1395 | peerDependencies:
1396 | postcss: ^8.4.21
1397 |
1398 | postcss-load-config@4.0.1:
1399 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
1400 | engines: {node: '>= 14'}
1401 | peerDependencies:
1402 | postcss: '>=8.0.9'
1403 | ts-node: '>=9.0.0'
1404 | peerDependenciesMeta:
1405 | postcss:
1406 | optional: true
1407 | ts-node:
1408 | optional: true
1409 |
1410 | postcss-nested@6.0.1:
1411 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
1412 | engines: {node: '>=12.0'}
1413 | peerDependencies:
1414 | postcss: ^8.2.14
1415 |
1416 | postcss-selector-parser@6.0.13:
1417 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
1418 | engines: {node: '>=4'}
1419 |
1420 | postcss-value-parser@4.2.0:
1421 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1422 |
1423 | postcss@8.4.14:
1424 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
1425 | engines: {node: ^10 || ^12 || >=14}
1426 |
1427 | postcss@8.4.29:
1428 | resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==}
1429 | engines: {node: ^10 || ^12 || >=14}
1430 |
1431 | property-information@6.2.0:
1432 | resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
1433 |
1434 | protocols@2.0.1:
1435 | resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
1436 |
1437 | pseudomap@1.0.2:
1438 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
1439 |
1440 | queue-microtask@1.2.3:
1441 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1442 |
1443 | react-dom@18.2.0:
1444 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
1445 | peerDependencies:
1446 | react: ^18.2.0
1447 |
1448 | react@18.2.0:
1449 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
1450 | engines: {node: '>=0.10.0'}
1451 |
1452 | read-cache@1.0.0:
1453 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1454 |
1455 | readdirp@3.6.0:
1456 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1457 | engines: {node: '>=8.10.0'}
1458 |
1459 | reading-time@1.5.0:
1460 | resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==}
1461 |
1462 | regenerator-runtime@0.13.11:
1463 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
1464 |
1465 | rehype-katex@6.0.3:
1466 | resolution: {integrity: sha512-ByZlRwRUcWegNbF70CVRm2h/7xy7jQ3R9LaY4VVSvjnoVWwWVhNL60DiZsBpC5tSzYQOCvDbzncIpIjPZWodZA==}
1467 |
1468 | rehype-pretty-code@0.9.11:
1469 | resolution: {integrity: sha512-Eq90eCYXQJISktfRZ8PPtwc5SUyH6fJcxS8XOMnHPUQZBtC6RYo67gGlley9X2nR8vlniPj0/7oCDEYHKQa/oA==}
1470 | engines: {node: '>=16'}
1471 | peerDependencies:
1472 | shiki: '*'
1473 |
1474 | rehype-raw@7.0.0:
1475 | resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
1476 |
1477 | remark-gfm@3.0.1:
1478 | resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
1479 |
1480 | remark-math@5.1.1:
1481 | resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==}
1482 |
1483 | remark-mdx@2.1.5:
1484 | resolution: {integrity: sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==}
1485 |
1486 | remark-parse@10.0.1:
1487 | resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==}
1488 |
1489 | remark-reading-time@2.0.1:
1490 | resolution: {integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==}
1491 |
1492 | remark-rehype@10.1.0:
1493 | resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
1494 |
1495 | remove-accents@0.4.2:
1496 | resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==}
1497 |
1498 | resolve@1.22.4:
1499 | resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
1500 | hasBin: true
1501 |
1502 | reusify@1.0.4:
1503 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1504 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1505 |
1506 | robust-predicates@3.0.2:
1507 | resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
1508 |
1509 | run-parallel@1.2.0:
1510 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1511 |
1512 | rw@1.3.3:
1513 | resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
1514 |
1515 | sade@1.8.1:
1516 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1517 | engines: {node: '>=6'}
1518 |
1519 | safer-buffer@2.1.2:
1520 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1521 |
1522 | scheduler@0.23.0:
1523 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
1524 |
1525 | scroll-into-view-if-needed@3.0.4:
1526 | resolution: {integrity: sha512-s+/F50jwTOUt+u5oEIAzum9MN2lUQNvWBe/zfEsVQcbaERjGkKLq1s+2wCHkahMLC8nMLbzMVKivx9JhunXaZg==}
1527 |
1528 | section-matter@1.0.0:
1529 | resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
1530 | engines: {node: '>=4'}
1531 |
1532 | shebang-command@1.2.0:
1533 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
1534 | engines: {node: '>=0.10.0'}
1535 |
1536 | shebang-regex@1.0.0:
1537 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
1538 | engines: {node: '>=0.10.0'}
1539 |
1540 | shiki@0.14.4:
1541 | resolution: {integrity: sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==}
1542 |
1543 | signal-exit@3.0.7:
1544 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1545 |
1546 | slash@3.0.0:
1547 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1548 | engines: {node: '>=8'}
1549 |
1550 | sort-keys@5.0.0:
1551 | resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==}
1552 | engines: {node: '>=12'}
1553 |
1554 | source-map-js@1.0.2:
1555 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1556 | engines: {node: '>=0.10.0'}
1557 |
1558 | source-map@0.7.4:
1559 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
1560 | engines: {node: '>= 8'}
1561 |
1562 | space-separated-tokens@2.0.2:
1563 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
1564 |
1565 | sprintf-js@1.0.3:
1566 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
1567 |
1568 | stringify-entities@4.0.3:
1569 | resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
1570 |
1571 | strip-bom-string@1.0.0:
1572 | resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
1573 | engines: {node: '>=0.10.0'}
1574 |
1575 | strip-eof@1.0.0:
1576 | resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
1577 | engines: {node: '>=0.10.0'}
1578 |
1579 | style-to-object@0.3.0:
1580 | resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==}
1581 |
1582 | styled-jsx@5.1.0:
1583 | resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==}
1584 | engines: {node: '>= 12.0.0'}
1585 | peerDependencies:
1586 | '@babel/core': '*'
1587 | babel-plugin-macros: '*'
1588 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
1589 | peerDependenciesMeta:
1590 | '@babel/core':
1591 | optional: true
1592 | babel-plugin-macros:
1593 | optional: true
1594 |
1595 | stylis@4.3.0:
1596 | resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==}
1597 |
1598 | sucrase@3.34.0:
1599 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
1600 | engines: {node: '>=8'}
1601 | hasBin: true
1602 |
1603 | supports-color@4.5.0:
1604 | resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==}
1605 | engines: {node: '>=4'}
1606 |
1607 | supports-preserve-symlinks-flag@1.0.0:
1608 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1609 | engines: {node: '>= 0.4'}
1610 |
1611 | tailwindcss@3.3.3:
1612 | resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==}
1613 | engines: {node: '>=14.0.0'}
1614 | hasBin: true
1615 |
1616 | thenify-all@1.6.0:
1617 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1618 | engines: {node: '>=0.8'}
1619 |
1620 | thenify@3.3.1:
1621 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1622 |
1623 | title@3.5.3:
1624 | resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==}
1625 | hasBin: true
1626 |
1627 | titleize@1.0.0:
1628 | resolution: {integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==}
1629 | engines: {node: '>=0.10.0'}
1630 |
1631 | to-regex-range@5.0.1:
1632 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1633 | engines: {node: '>=8.0'}
1634 |
1635 | trim-lines@3.0.1:
1636 | resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
1637 |
1638 | trough@2.1.0:
1639 | resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
1640 |
1641 | ts-dedent@2.2.0:
1642 | resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
1643 | engines: {node: '>=6.10'}
1644 |
1645 | ts-interface-checker@0.1.13:
1646 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1647 |
1648 | tslib@2.4.1:
1649 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
1650 |
1651 | type-fest@1.4.0:
1652 | resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
1653 | engines: {node: '>=10'}
1654 |
1655 | typescript@4.9.3:
1656 | resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==}
1657 | engines: {node: '>=4.2.0'}
1658 | hasBin: true
1659 |
1660 | unified@10.1.2:
1661 | resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
1662 |
1663 | unist-builder@3.0.0:
1664 | resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==}
1665 |
1666 | unist-util-find-after@4.0.1:
1667 | resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==}
1668 |
1669 | unist-util-generated@2.0.0:
1670 | resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==}
1671 |
1672 | unist-util-is@5.1.1:
1673 | resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==}
1674 |
1675 | unist-util-is@6.0.0:
1676 | resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
1677 |
1678 | unist-util-position-from-estree@1.1.1:
1679 | resolution: {integrity: sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==}
1680 |
1681 | unist-util-position@4.0.3:
1682 | resolution: {integrity: sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==}
1683 |
1684 | unist-util-position@5.0.0:
1685 | resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
1686 |
1687 | unist-util-remove-position@4.0.1:
1688 | resolution: {integrity: sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==}
1689 |
1690 | unist-util-remove@4.0.0:
1691 | resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==}
1692 |
1693 | unist-util-stringify-position@3.0.2:
1694 | resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==}
1695 |
1696 | unist-util-stringify-position@4.0.0:
1697 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
1698 |
1699 | unist-util-visit-parents@4.1.1:
1700 | resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==}
1701 |
1702 | unist-util-visit-parents@5.1.1:
1703 | resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==}
1704 |
1705 | unist-util-visit-parents@6.0.1:
1706 | resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
1707 |
1708 | unist-util-visit@3.1.0:
1709 | resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==}
1710 |
1711 | unist-util-visit@4.1.1:
1712 | resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==}
1713 |
1714 | unist-util-visit@5.0.0:
1715 | resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
1716 |
1717 | update-browserslist-db@1.0.11:
1718 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
1719 | hasBin: true
1720 | peerDependencies:
1721 | browserslist: '>= 4.21.0'
1722 |
1723 | util-deprecate@1.0.2:
1724 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1725 |
1726 | uuid@9.0.0:
1727 | resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
1728 | hasBin: true
1729 |
1730 | uvu@0.5.6:
1731 | resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
1732 | engines: {node: '>=8'}
1733 | hasBin: true
1734 |
1735 | vfile-location@4.0.1:
1736 | resolution: {integrity: sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==}
1737 |
1738 | vfile-location@5.0.2:
1739 | resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
1740 |
1741 | vfile-matter@3.0.1:
1742 | resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==}
1743 |
1744 | vfile-message@3.1.3:
1745 | resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==}
1746 |
1747 | vfile-message@4.0.2:
1748 | resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
1749 |
1750 | vfile@5.3.6:
1751 | resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==}
1752 |
1753 | vfile@6.0.1:
1754 | resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
1755 |
1756 | vscode-oniguruma@1.7.0:
1757 | resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
1758 |
1759 | vscode-textmate@8.0.0:
1760 | resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==}
1761 |
1762 | web-namespaces@2.0.1:
1763 | resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
1764 |
1765 | web-worker@1.2.0:
1766 | resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==}
1767 |
1768 | which@1.3.1:
1769 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
1770 | hasBin: true
1771 |
1772 | wrappy@1.0.2:
1773 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1774 |
1775 | yallist@2.1.2:
1776 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
1777 |
1778 | yaml@2.3.2:
1779 | resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==}
1780 | engines: {node: '>= 14'}
1781 |
1782 | yocto-queue@0.1.0:
1783 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1784 | engines: {node: '>=10'}
1785 |
1786 | zod@3.22.2:
1787 | resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==}
1788 |
1789 | zwitch@2.0.4:
1790 | resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
1791 |
1792 | snapshots:
1793 |
1794 | '@alloc/quick-lru@5.2.0': {}
1795 |
1796 | '@babel/runtime@7.20.6':
1797 | dependencies:
1798 | regenerator-runtime: 0.13.11
1799 |
1800 | '@braintree/sanitize-url@6.0.4': {}
1801 |
1802 | '@headlessui/react@1.7.10(react-dom@18.2.0)(react@18.2.0)':
1803 | dependencies:
1804 | client-only: 0.0.1
1805 | react: 18.2.0
1806 | react-dom: 18.2.0(react@18.2.0)
1807 |
1808 | '@jridgewell/gen-mapping@0.3.3':
1809 | dependencies:
1810 | '@jridgewell/set-array': 1.1.2
1811 | '@jridgewell/sourcemap-codec': 1.4.15
1812 | '@jridgewell/trace-mapping': 0.3.19
1813 |
1814 | '@jridgewell/resolve-uri@3.1.1': {}
1815 |
1816 | '@jridgewell/set-array@1.1.2': {}
1817 |
1818 | '@jridgewell/sourcemap-codec@1.4.15': {}
1819 |
1820 | '@jridgewell/trace-mapping@0.3.19':
1821 | dependencies:
1822 | '@jridgewell/resolve-uri': 3.1.1
1823 | '@jridgewell/sourcemap-codec': 1.4.15
1824 |
1825 | '@mdx-js/mdx@2.3.0':
1826 | dependencies:
1827 | '@types/estree-jsx': 1.0.0
1828 | '@types/mdx': 2.0.3
1829 | estree-util-build-jsx: 2.2.0
1830 | estree-util-is-identifier-name: 2.0.1
1831 | estree-util-to-js: 1.1.0
1832 | estree-walker: 3.0.1
1833 | hast-util-to-estree: 2.1.0
1834 | markdown-extensions: 1.1.1
1835 | periscopic: 3.0.4
1836 | remark-mdx: 2.1.5
1837 | remark-parse: 10.0.1
1838 | remark-rehype: 10.1.0
1839 | unified: 10.1.2
1840 | unist-util-position-from-estree: 1.1.1
1841 | unist-util-stringify-position: 3.0.2
1842 | unist-util-visit: 4.1.1
1843 | vfile: 5.3.6
1844 | transitivePeerDependencies:
1845 | - supports-color
1846 |
1847 | '@mdx-js/react@2.3.0(react@18.2.0)':
1848 | dependencies:
1849 | '@types/mdx': 2.0.3
1850 | '@types/react': 18.0.25
1851 | react: 18.2.0
1852 |
1853 | '@napi-rs/simple-git-android-arm-eabi@0.1.9':
1854 | optional: true
1855 |
1856 | '@napi-rs/simple-git-android-arm64@0.1.9':
1857 | optional: true
1858 |
1859 | '@napi-rs/simple-git-darwin-arm64@0.1.9':
1860 | optional: true
1861 |
1862 | '@napi-rs/simple-git-darwin-x64@0.1.9':
1863 | optional: true
1864 |
1865 | '@napi-rs/simple-git-linux-arm-gnueabihf@0.1.9':
1866 | optional: true
1867 |
1868 | '@napi-rs/simple-git-linux-arm64-gnu@0.1.9':
1869 | optional: true
1870 |
1871 | '@napi-rs/simple-git-linux-arm64-musl@0.1.9':
1872 | optional: true
1873 |
1874 | '@napi-rs/simple-git-linux-x64-gnu@0.1.9':
1875 | optional: true
1876 |
1877 | '@napi-rs/simple-git-linux-x64-musl@0.1.9':
1878 | optional: true
1879 |
1880 | '@napi-rs/simple-git-win32-arm64-msvc@0.1.9':
1881 | optional: true
1882 |
1883 | '@napi-rs/simple-git-win32-x64-msvc@0.1.9':
1884 | optional: true
1885 |
1886 | '@napi-rs/simple-git@0.1.9':
1887 | optionalDependencies:
1888 | '@napi-rs/simple-git-android-arm-eabi': 0.1.9
1889 | '@napi-rs/simple-git-android-arm64': 0.1.9
1890 | '@napi-rs/simple-git-darwin-arm64': 0.1.9
1891 | '@napi-rs/simple-git-darwin-x64': 0.1.9
1892 | '@napi-rs/simple-git-linux-arm-gnueabihf': 0.1.9
1893 | '@napi-rs/simple-git-linux-arm64-gnu': 0.1.9
1894 | '@napi-rs/simple-git-linux-arm64-musl': 0.1.9
1895 | '@napi-rs/simple-git-linux-x64-gnu': 0.1.9
1896 | '@napi-rs/simple-git-linux-x64-musl': 0.1.9
1897 | '@napi-rs/simple-git-win32-arm64-msvc': 0.1.9
1898 | '@napi-rs/simple-git-win32-x64-msvc': 0.1.9
1899 |
1900 | '@next/env@13.0.6': {}
1901 |
1902 | '@next/swc-android-arm-eabi@13.0.6':
1903 | optional: true
1904 |
1905 | '@next/swc-android-arm64@13.0.6':
1906 | optional: true
1907 |
1908 | '@next/swc-darwin-arm64@13.0.6':
1909 | optional: true
1910 |
1911 | '@next/swc-darwin-x64@13.0.6':
1912 | optional: true
1913 |
1914 | '@next/swc-freebsd-x64@13.0.6':
1915 | optional: true
1916 |
1917 | '@next/swc-linux-arm-gnueabihf@13.0.6':
1918 | optional: true
1919 |
1920 | '@next/swc-linux-arm64-gnu@13.0.6':
1921 | optional: true
1922 |
1923 | '@next/swc-linux-arm64-musl@13.0.6':
1924 | optional: true
1925 |
1926 | '@next/swc-linux-x64-gnu@13.0.6':
1927 | optional: true
1928 |
1929 | '@next/swc-linux-x64-musl@13.0.6':
1930 | optional: true
1931 |
1932 | '@next/swc-win32-arm64-msvc@13.0.6':
1933 | optional: true
1934 |
1935 | '@next/swc-win32-ia32-msvc@13.0.6':
1936 | optional: true
1937 |
1938 | '@next/swc-win32-x64-msvc@13.0.6':
1939 | optional: true
1940 |
1941 | '@nodelib/fs.scandir@2.1.5':
1942 | dependencies:
1943 | '@nodelib/fs.stat': 2.0.5
1944 | run-parallel: 1.2.0
1945 |
1946 | '@nodelib/fs.stat@2.0.5': {}
1947 |
1948 | '@nodelib/fs.walk@1.2.8':
1949 | dependencies:
1950 | '@nodelib/fs.scandir': 2.1.5
1951 | fastq: 1.15.0
1952 |
1953 | '@popperjs/core@2.11.6': {}
1954 |
1955 | '@swc/helpers@0.4.14':
1956 | dependencies:
1957 | tslib: 2.4.1
1958 |
1959 | '@theguild/remark-mermaid@0.0.4(react@18.2.0)':
1960 | dependencies:
1961 | mermaid: 10.4.0
1962 | react: 18.2.0
1963 | unist-util-visit: 5.0.0
1964 | transitivePeerDependencies:
1965 | - supports-color
1966 |
1967 | '@theguild/remark-npm2yarn@0.1.1':
1968 | dependencies:
1969 | npm-to-yarn: 2.0.0
1970 | unist-util-visit: 5.0.0
1971 |
1972 | '@types/acorn@4.0.6':
1973 | dependencies:
1974 | '@types/estree': 1.0.0
1975 |
1976 | '@types/d3-scale-chromatic@3.0.0': {}
1977 |
1978 | '@types/d3-scale@4.0.4':
1979 | dependencies:
1980 | '@types/d3-time': 3.0.0
1981 |
1982 | '@types/d3-time@3.0.0': {}
1983 |
1984 | '@types/debug@4.1.7':
1985 | dependencies:
1986 | '@types/ms': 0.7.31
1987 |
1988 | '@types/estree-jsx@1.0.0':
1989 | dependencies:
1990 | '@types/estree': 1.0.0
1991 |
1992 | '@types/estree@1.0.0': {}
1993 |
1994 | '@types/hast@2.3.4':
1995 | dependencies:
1996 | '@types/unist': 3.0.0
1997 |
1998 | '@types/hast@3.0.0':
1999 | dependencies:
2000 | '@types/unist': 3.0.0
2001 |
2002 | '@types/js-yaml@4.0.5': {}
2003 |
2004 | '@types/katex@0.11.1': {}
2005 |
2006 | '@types/katex@0.14.0': {}
2007 |
2008 | '@types/mdast@3.0.10':
2009 | dependencies:
2010 | '@types/unist': 3.0.0
2011 |
2012 | '@types/mdast@4.0.0':
2013 | dependencies:
2014 | '@types/unist': 3.0.0
2015 |
2016 | '@types/mdx@2.0.3': {}
2017 |
2018 | '@types/ms@0.7.31': {}
2019 |
2020 | '@types/node@18.11.10': {}
2021 |
2022 | '@types/prop-types@15.7.5': {}
2023 |
2024 | '@types/react@18.0.25':
2025 | dependencies:
2026 | '@types/prop-types': 15.7.5
2027 | '@types/scheduler': 0.16.2
2028 | csstype: 3.1.1
2029 |
2030 | '@types/scheduler@0.16.2': {}
2031 |
2032 | '@types/unist@2.0.6': {}
2033 |
2034 | '@types/unist@3.0.0': {}
2035 |
2036 | '@ungap/structured-clone@1.2.0': {}
2037 |
2038 | acorn-jsx@5.3.2(acorn@8.8.1):
2039 | dependencies:
2040 | acorn: 8.8.1
2041 |
2042 | acorn@8.8.1: {}
2043 |
2044 | ansi-sequence-parser@1.1.1: {}
2045 |
2046 | ansi-styles@3.2.1:
2047 | dependencies:
2048 | color-convert: 1.9.3
2049 |
2050 | any-promise@1.3.0: {}
2051 |
2052 | anymatch@3.1.3:
2053 | dependencies:
2054 | normalize-path: 3.0.0
2055 | picomatch: 2.3.1
2056 |
2057 | arch@2.2.0: {}
2058 |
2059 | arg@1.0.0: {}
2060 |
2061 | arg@5.0.2: {}
2062 |
2063 | argparse@1.0.10:
2064 | dependencies:
2065 | sprintf-js: 1.0.3
2066 |
2067 | argparse@2.0.1: {}
2068 |
2069 | astring@1.8.3: {}
2070 |
2071 | autoprefixer@10.4.15(postcss@8.4.29):
2072 | dependencies:
2073 | browserslist: 4.21.10
2074 | caniuse-lite: 1.0.30001527
2075 | fraction.js: 4.3.6
2076 | normalize-range: 0.1.2
2077 | picocolors: 1.0.0
2078 | postcss: 8.4.29
2079 | postcss-value-parser: 4.2.0
2080 |
2081 | bail@2.0.2: {}
2082 |
2083 | balanced-match@1.0.2: {}
2084 |
2085 | binary-extensions@2.2.0: {}
2086 |
2087 | brace-expansion@1.1.11:
2088 | dependencies:
2089 | balanced-match: 1.0.2
2090 | concat-map: 0.0.1
2091 |
2092 | braces@3.0.2:
2093 | dependencies:
2094 | fill-range: 7.0.1
2095 |
2096 | browserslist@4.21.10:
2097 | dependencies:
2098 | caniuse-lite: 1.0.30001527
2099 | electron-to-chromium: 1.4.508
2100 | node-releases: 2.0.13
2101 | update-browserslist-db: 1.0.11(browserslist@4.21.10)
2102 |
2103 | camelcase-css@2.0.1: {}
2104 |
2105 | caniuse-lite@1.0.30001435: {}
2106 |
2107 | caniuse-lite@1.0.30001527: {}
2108 |
2109 | ccount@2.0.1: {}
2110 |
2111 | chalk@2.3.0:
2112 | dependencies:
2113 | ansi-styles: 3.2.1
2114 | escape-string-regexp: 1.0.5
2115 | supports-color: 4.5.0
2116 |
2117 | character-entities-html4@2.1.0: {}
2118 |
2119 | character-entities-legacy@3.0.0: {}
2120 |
2121 | character-entities@2.0.2: {}
2122 |
2123 | character-reference-invalid@2.0.1: {}
2124 |
2125 | chokidar@3.5.3:
2126 | dependencies:
2127 | anymatch: 3.1.3
2128 | braces: 3.0.2
2129 | glob-parent: 5.1.2
2130 | is-binary-path: 2.1.0
2131 | is-glob: 4.0.3
2132 | normalize-path: 3.0.0
2133 | readdirp: 3.6.0
2134 | optionalDependencies:
2135 | fsevents: 2.3.3
2136 |
2137 | client-only@0.0.1: {}
2138 |
2139 | clipboardy@1.2.2:
2140 | dependencies:
2141 | arch: 2.2.0
2142 | execa: 0.8.0
2143 |
2144 | clsx@2.0.0: {}
2145 |
2146 | color-convert@1.9.3:
2147 | dependencies:
2148 | color-name: 1.1.3
2149 |
2150 | color-name@1.1.3: {}
2151 |
2152 | comma-separated-tokens@2.0.3: {}
2153 |
2154 | commander@4.1.1: {}
2155 |
2156 | commander@7.2.0: {}
2157 |
2158 | commander@8.3.0: {}
2159 |
2160 | compute-scroll-into-view@2.0.4: {}
2161 |
2162 | concat-map@0.0.1: {}
2163 |
2164 | cose-base@1.0.3:
2165 | dependencies:
2166 | layout-base: 1.0.2
2167 |
2168 | cose-base@2.2.0:
2169 | dependencies:
2170 | layout-base: 2.0.1
2171 |
2172 | cross-spawn@5.1.0:
2173 | dependencies:
2174 | lru-cache: 4.1.5
2175 | shebang-command: 1.2.0
2176 | which: 1.3.1
2177 |
2178 | cssesc@3.0.0: {}
2179 |
2180 | csstype@3.1.1: {}
2181 |
2182 | cytoscape-cose-bilkent@4.1.0(cytoscape@3.26.0):
2183 | dependencies:
2184 | cose-base: 1.0.3
2185 | cytoscape: 3.26.0
2186 |
2187 | cytoscape-fcose@2.2.0(cytoscape@3.26.0):
2188 | dependencies:
2189 | cose-base: 2.2.0
2190 | cytoscape: 3.26.0
2191 |
2192 | cytoscape@3.26.0:
2193 | dependencies:
2194 | heap: 0.2.7
2195 | lodash: 4.17.21
2196 |
2197 | d3-array@2.12.1:
2198 | dependencies:
2199 | internmap: 1.0.1
2200 |
2201 | d3-array@3.2.4:
2202 | dependencies:
2203 | internmap: 2.0.3
2204 |
2205 | d3-axis@3.0.0: {}
2206 |
2207 | d3-brush@3.0.0:
2208 | dependencies:
2209 | d3-dispatch: 3.0.1
2210 | d3-drag: 3.0.0
2211 | d3-interpolate: 3.0.1
2212 | d3-selection: 3.0.0
2213 | d3-transition: 3.0.1(d3-selection@3.0.0)
2214 |
2215 | d3-chord@3.0.1:
2216 | dependencies:
2217 | d3-path: 3.1.0
2218 |
2219 | d3-color@3.1.0: {}
2220 |
2221 | d3-contour@4.0.2:
2222 | dependencies:
2223 | d3-array: 3.2.4
2224 |
2225 | d3-delaunay@6.0.4:
2226 | dependencies:
2227 | delaunator: 5.0.0
2228 |
2229 | d3-dispatch@3.0.1: {}
2230 |
2231 | d3-drag@3.0.0:
2232 | dependencies:
2233 | d3-dispatch: 3.0.1
2234 | d3-selection: 3.0.0
2235 |
2236 | d3-dsv@3.0.1:
2237 | dependencies:
2238 | commander: 7.2.0
2239 | iconv-lite: 0.6.3
2240 | rw: 1.3.3
2241 |
2242 | d3-ease@3.0.1: {}
2243 |
2244 | d3-fetch@3.0.1:
2245 | dependencies:
2246 | d3-dsv: 3.0.1
2247 |
2248 | d3-force@3.0.0:
2249 | dependencies:
2250 | d3-dispatch: 3.0.1
2251 | d3-quadtree: 3.0.1
2252 | d3-timer: 3.0.1
2253 |
2254 | d3-format@3.1.0: {}
2255 |
2256 | d3-geo@3.1.0:
2257 | dependencies:
2258 | d3-array: 3.2.4
2259 |
2260 | d3-hierarchy@3.1.2: {}
2261 |
2262 | d3-interpolate@3.0.1:
2263 | dependencies:
2264 | d3-color: 3.1.0
2265 |
2266 | d3-path@1.0.9: {}
2267 |
2268 | d3-path@3.1.0: {}
2269 |
2270 | d3-polygon@3.0.1: {}
2271 |
2272 | d3-quadtree@3.0.1: {}
2273 |
2274 | d3-random@3.0.1: {}
2275 |
2276 | d3-sankey@0.12.3:
2277 | dependencies:
2278 | d3-array: 2.12.1
2279 | d3-shape: 1.3.7
2280 |
2281 | d3-scale-chromatic@3.0.0:
2282 | dependencies:
2283 | d3-color: 3.1.0
2284 | d3-interpolate: 3.0.1
2285 |
2286 | d3-scale@4.0.2:
2287 | dependencies:
2288 | d3-array: 3.2.4
2289 | d3-format: 3.1.0
2290 | d3-interpolate: 3.0.1
2291 | d3-time: 3.1.0
2292 | d3-time-format: 4.1.0
2293 |
2294 | d3-selection@3.0.0: {}
2295 |
2296 | d3-shape@1.3.7:
2297 | dependencies:
2298 | d3-path: 1.0.9
2299 |
2300 | d3-shape@3.2.0:
2301 | dependencies:
2302 | d3-path: 3.1.0
2303 |
2304 | d3-time-format@4.1.0:
2305 | dependencies:
2306 | d3-time: 3.1.0
2307 |
2308 | d3-time@3.1.0:
2309 | dependencies:
2310 | d3-array: 3.2.4
2311 |
2312 | d3-timer@3.0.1: {}
2313 |
2314 | d3-transition@3.0.1(d3-selection@3.0.0):
2315 | dependencies:
2316 | d3-color: 3.1.0
2317 | d3-dispatch: 3.0.1
2318 | d3-ease: 3.0.1
2319 | d3-interpolate: 3.0.1
2320 | d3-selection: 3.0.0
2321 | d3-timer: 3.0.1
2322 |
2323 | d3-zoom@3.0.0:
2324 | dependencies:
2325 | d3-dispatch: 3.0.1
2326 | d3-drag: 3.0.0
2327 | d3-interpolate: 3.0.1
2328 | d3-selection: 3.0.0
2329 | d3-transition: 3.0.1(d3-selection@3.0.0)
2330 |
2331 | d3@7.8.5:
2332 | dependencies:
2333 | d3-array: 3.2.4
2334 | d3-axis: 3.0.0
2335 | d3-brush: 3.0.0
2336 | d3-chord: 3.0.1
2337 | d3-color: 3.1.0
2338 | d3-contour: 4.0.2
2339 | d3-delaunay: 6.0.4
2340 | d3-dispatch: 3.0.1
2341 | d3-drag: 3.0.0
2342 | d3-dsv: 3.0.1
2343 | d3-ease: 3.0.1
2344 | d3-fetch: 3.0.1
2345 | d3-force: 3.0.0
2346 | d3-format: 3.1.0
2347 | d3-geo: 3.1.0
2348 | d3-hierarchy: 3.1.2
2349 | d3-interpolate: 3.0.1
2350 | d3-path: 3.1.0
2351 | d3-polygon: 3.0.1
2352 | d3-quadtree: 3.0.1
2353 | d3-random: 3.0.1
2354 | d3-scale: 4.0.2
2355 | d3-scale-chromatic: 3.0.0
2356 | d3-selection: 3.0.0
2357 | d3-shape: 3.2.0
2358 | d3-time: 3.1.0
2359 | d3-time-format: 4.1.0
2360 | d3-timer: 3.0.1
2361 | d3-transition: 3.0.1(d3-selection@3.0.0)
2362 | d3-zoom: 3.0.0
2363 |
2364 | dagre-d3-es@7.0.10:
2365 | dependencies:
2366 | d3: 7.8.5
2367 | lodash-es: 4.17.21
2368 |
2369 | dayjs@1.11.9: {}
2370 |
2371 | debug@4.3.4:
2372 | dependencies:
2373 | ms: 2.1.2
2374 |
2375 | decode-named-character-reference@1.0.2:
2376 | dependencies:
2377 | character-entities: 2.0.2
2378 |
2379 | delaunator@5.0.0:
2380 | dependencies:
2381 | robust-predicates: 3.0.2
2382 |
2383 | dequal@2.0.3: {}
2384 |
2385 | devlop@1.1.0:
2386 | dependencies:
2387 | dequal: 2.0.3
2388 |
2389 | didyoumean@1.2.2: {}
2390 |
2391 | diff@5.1.0: {}
2392 |
2393 | dlv@1.1.3: {}
2394 |
2395 | dompurify@3.0.5: {}
2396 |
2397 | electron-to-chromium@1.4.508: {}
2398 |
2399 | elkjs@0.8.2: {}
2400 |
2401 | entities@4.5.0: {}
2402 |
2403 | escalade@3.1.1: {}
2404 |
2405 | escape-string-regexp@1.0.5: {}
2406 |
2407 | escape-string-regexp@5.0.0: {}
2408 |
2409 | esprima@4.0.1: {}
2410 |
2411 | estree-util-attach-comments@2.1.0:
2412 | dependencies:
2413 | '@types/estree': 1.0.0
2414 |
2415 | estree-util-build-jsx@2.2.0:
2416 | dependencies:
2417 | '@types/estree-jsx': 1.0.0
2418 | estree-util-is-identifier-name: 2.0.1
2419 | estree-walker: 3.0.1
2420 |
2421 | estree-util-is-identifier-name@2.0.1: {}
2422 |
2423 | estree-util-to-js@1.1.0:
2424 | dependencies:
2425 | '@types/estree-jsx': 1.0.0
2426 | astring: 1.8.3
2427 | source-map: 0.7.4
2428 |
2429 | estree-util-value-to-estree@1.3.0:
2430 | dependencies:
2431 | is-plain-obj: 3.0.0
2432 |
2433 | estree-util-visit@1.2.0:
2434 | dependencies:
2435 | '@types/estree-jsx': 1.0.0
2436 | '@types/unist': 2.0.6
2437 |
2438 | estree-walker@3.0.1: {}
2439 |
2440 | execa@0.8.0:
2441 | dependencies:
2442 | cross-spawn: 5.1.0
2443 | get-stream: 3.0.0
2444 | is-stream: 1.1.0
2445 | npm-run-path: 2.0.2
2446 | p-finally: 1.0.0
2447 | signal-exit: 3.0.7
2448 | strip-eof: 1.0.0
2449 |
2450 | extend-shallow@2.0.1:
2451 | dependencies:
2452 | is-extendable: 0.1.1
2453 |
2454 | extend@3.0.2: {}
2455 |
2456 | fast-glob@3.3.1:
2457 | dependencies:
2458 | '@nodelib/fs.stat': 2.0.5
2459 | '@nodelib/fs.walk': 1.2.8
2460 | glob-parent: 5.1.2
2461 | merge2: 1.4.1
2462 | micromatch: 4.0.5
2463 |
2464 | fastq@1.15.0:
2465 | dependencies:
2466 | reusify: 1.0.4
2467 |
2468 | fill-range@7.0.1:
2469 | dependencies:
2470 | to-regex-range: 5.0.1
2471 |
2472 | flexsearch@0.7.31: {}
2473 |
2474 | focus-visible@5.2.0: {}
2475 |
2476 | fraction.js@4.3.6: {}
2477 |
2478 | fs.realpath@1.0.0: {}
2479 |
2480 | fsevents@2.3.3:
2481 | optional: true
2482 |
2483 | function-bind@1.1.1: {}
2484 |
2485 | get-stream@3.0.0: {}
2486 |
2487 | git-up@7.0.0:
2488 | dependencies:
2489 | is-ssh: 1.4.0
2490 | parse-url: 8.1.0
2491 |
2492 | git-url-parse@13.1.0:
2493 | dependencies:
2494 | git-up: 7.0.0
2495 |
2496 | github-slugger@2.0.0: {}
2497 |
2498 | glob-parent@5.1.2:
2499 | dependencies:
2500 | is-glob: 4.0.3
2501 |
2502 | glob-parent@6.0.2:
2503 | dependencies:
2504 | is-glob: 4.0.3
2505 |
2506 | glob@7.1.6:
2507 | dependencies:
2508 | fs.realpath: 1.0.0
2509 | inflight: 1.0.6
2510 | inherits: 2.0.4
2511 | minimatch: 3.1.2
2512 | once: 1.4.0
2513 | path-is-absolute: 1.0.1
2514 |
2515 | graceful-fs@4.2.11: {}
2516 |
2517 | gray-matter@4.0.3:
2518 | dependencies:
2519 | js-yaml: 3.14.1
2520 | kind-of: 6.0.3
2521 | section-matter: 1.0.0
2522 | strip-bom-string: 1.0.0
2523 |
2524 | has-flag@2.0.0: {}
2525 |
2526 | has@1.0.3:
2527 | dependencies:
2528 | function-bind: 1.1.1
2529 |
2530 | hash-obj@4.0.0:
2531 | dependencies:
2532 | is-obj: 3.0.0
2533 | sort-keys: 5.0.0
2534 | type-fest: 1.4.0
2535 |
2536 | hast-util-from-dom@4.2.0:
2537 | dependencies:
2538 | hastscript: 7.2.0
2539 | web-namespaces: 2.0.1
2540 |
2541 | hast-util-from-html-isomorphic@1.0.0:
2542 | dependencies:
2543 | '@types/hast': 2.3.4
2544 | hast-util-from-dom: 4.2.0
2545 | hast-util-from-html: 1.0.2
2546 | unist-util-remove-position: 4.0.1
2547 |
2548 | hast-util-from-html@1.0.2:
2549 | dependencies:
2550 | '@types/hast': 2.3.4
2551 | hast-util-from-parse5: 7.1.1
2552 | parse5: 7.1.2
2553 | vfile: 5.3.6
2554 | vfile-message: 3.1.3
2555 |
2556 | hast-util-from-parse5@7.1.1:
2557 | dependencies:
2558 | '@types/hast': 2.3.4
2559 | '@types/unist': 2.0.6
2560 | hastscript: 7.2.0
2561 | property-information: 6.2.0
2562 | vfile: 5.3.6
2563 | vfile-location: 4.0.1
2564 | web-namespaces: 2.0.1
2565 |
2566 | hast-util-from-parse5@8.0.1:
2567 | dependencies:
2568 | '@types/hast': 3.0.0
2569 | '@types/unist': 3.0.0
2570 | devlop: 1.1.0
2571 | hastscript: 8.0.0
2572 | property-information: 6.2.0
2573 | vfile: 6.0.1
2574 | vfile-location: 5.0.2
2575 | web-namespaces: 2.0.1
2576 |
2577 | hast-util-is-element@2.1.3:
2578 | dependencies:
2579 | '@types/hast': 2.3.4
2580 | '@types/unist': 2.0.6
2581 |
2582 | hast-util-parse-selector@3.1.1:
2583 | dependencies:
2584 | '@types/hast': 2.3.4
2585 |
2586 | hast-util-parse-selector@4.0.0:
2587 | dependencies:
2588 | '@types/hast': 3.0.0
2589 |
2590 | hast-util-raw@9.0.1:
2591 | dependencies:
2592 | '@types/hast': 3.0.0
2593 | '@types/unist': 3.0.0
2594 | '@ungap/structured-clone': 1.2.0
2595 | hast-util-from-parse5: 8.0.1
2596 | hast-util-to-parse5: 8.0.0
2597 | html-void-elements: 3.0.0
2598 | mdast-util-to-hast: 13.0.2
2599 | parse5: 7.1.2
2600 | unist-util-position: 5.0.0
2601 | unist-util-visit: 5.0.0
2602 | vfile: 6.0.1
2603 | web-namespaces: 2.0.1
2604 | zwitch: 2.0.4
2605 |
2606 | hast-util-to-estree@2.1.0:
2607 | dependencies:
2608 | '@types/estree': 1.0.0
2609 | '@types/estree-jsx': 1.0.0
2610 | '@types/hast': 2.3.4
2611 | '@types/unist': 2.0.6
2612 | comma-separated-tokens: 2.0.3
2613 | estree-util-attach-comments: 2.1.0
2614 | estree-util-is-identifier-name: 2.0.1
2615 | hast-util-whitespace: 2.0.0
2616 | mdast-util-mdx-expression: 1.3.1
2617 | mdast-util-mdxjs-esm: 1.3.0
2618 | property-information: 6.2.0
2619 | space-separated-tokens: 2.0.2
2620 | style-to-object: 0.3.0
2621 | unist-util-position: 4.0.3
2622 | zwitch: 2.0.4
2623 | transitivePeerDependencies:
2624 | - supports-color
2625 |
2626 | hast-util-to-parse5@8.0.0:
2627 | dependencies:
2628 | '@types/hast': 3.0.0
2629 | comma-separated-tokens: 2.0.3
2630 | devlop: 1.1.0
2631 | property-information: 6.2.0
2632 | space-separated-tokens: 2.0.2
2633 | web-namespaces: 2.0.1
2634 | zwitch: 2.0.4
2635 |
2636 | hast-util-to-text@3.1.2:
2637 | dependencies:
2638 | '@types/hast': 2.3.4
2639 | '@types/unist': 2.0.6
2640 | hast-util-is-element: 2.1.3
2641 | unist-util-find-after: 4.0.1
2642 |
2643 | hast-util-whitespace@2.0.0: {}
2644 |
2645 | hastscript@7.2.0:
2646 | dependencies:
2647 | '@types/hast': 2.3.4
2648 | comma-separated-tokens: 2.0.3
2649 | hast-util-parse-selector: 3.1.1
2650 | property-information: 6.2.0
2651 | space-separated-tokens: 2.0.2
2652 |
2653 | hastscript@8.0.0:
2654 | dependencies:
2655 | '@types/hast': 3.0.0
2656 | comma-separated-tokens: 2.0.3
2657 | hast-util-parse-selector: 4.0.0
2658 | property-information: 6.2.0
2659 | space-separated-tokens: 2.0.2
2660 |
2661 | heap@0.2.7: {}
2662 |
2663 | html-void-elements@3.0.0: {}
2664 |
2665 | iconv-lite@0.6.3:
2666 | dependencies:
2667 | safer-buffer: 2.1.2
2668 |
2669 | inflight@1.0.6:
2670 | dependencies:
2671 | once: 1.4.0
2672 | wrappy: 1.0.2
2673 |
2674 | inherits@2.0.4: {}
2675 |
2676 | inline-style-parser@0.1.1: {}
2677 |
2678 | internmap@1.0.1: {}
2679 |
2680 | internmap@2.0.3: {}
2681 |
2682 | intersection-observer@0.12.2: {}
2683 |
2684 | is-alphabetical@2.0.1: {}
2685 |
2686 | is-alphanumerical@2.0.1:
2687 | dependencies:
2688 | is-alphabetical: 2.0.1
2689 | is-decimal: 2.0.1
2690 |
2691 | is-binary-path@2.1.0:
2692 | dependencies:
2693 | binary-extensions: 2.2.0
2694 |
2695 | is-buffer@2.0.5: {}
2696 |
2697 | is-core-module@2.13.0:
2698 | dependencies:
2699 | has: 1.0.3
2700 |
2701 | is-decimal@2.0.1: {}
2702 |
2703 | is-extendable@0.1.1: {}
2704 |
2705 | is-extglob@2.1.1: {}
2706 |
2707 | is-glob@4.0.3:
2708 | dependencies:
2709 | is-extglob: 2.1.1
2710 |
2711 | is-hexadecimal@2.0.1: {}
2712 |
2713 | is-number@7.0.0: {}
2714 |
2715 | is-obj@3.0.0: {}
2716 |
2717 | is-plain-obj@3.0.0: {}
2718 |
2719 | is-plain-obj@4.1.0: {}
2720 |
2721 | is-reference@3.0.0:
2722 | dependencies:
2723 | '@types/estree': 1.0.0
2724 |
2725 | is-ssh@1.4.0:
2726 | dependencies:
2727 | protocols: 2.0.1
2728 |
2729 | is-stream@1.1.0: {}
2730 |
2731 | isexe@2.0.0: {}
2732 |
2733 | jiti@1.19.3: {}
2734 |
2735 | js-tokens@4.0.0: {}
2736 |
2737 | js-yaml@3.14.1:
2738 | dependencies:
2739 | argparse: 1.0.10
2740 | esprima: 4.0.1
2741 |
2742 | js-yaml@4.1.0:
2743 | dependencies:
2744 | argparse: 2.0.1
2745 |
2746 | jsonc-parser@3.2.0: {}
2747 |
2748 | katex@0.13.24:
2749 | dependencies:
2750 | commander: 8.3.0
2751 |
2752 | katex@0.16.8:
2753 | dependencies:
2754 | commander: 8.3.0
2755 |
2756 | khroma@2.0.0: {}
2757 |
2758 | kind-of@6.0.3: {}
2759 |
2760 | kleur@4.1.5: {}
2761 |
2762 | layout-base@1.0.2: {}
2763 |
2764 | layout-base@2.0.1: {}
2765 |
2766 | lilconfig@2.1.0: {}
2767 |
2768 | lines-and-columns@1.2.4: {}
2769 |
2770 | lodash-es@4.17.21: {}
2771 |
2772 | lodash.get@4.4.2: {}
2773 |
2774 | lodash@4.17.21: {}
2775 |
2776 | longest-streak@3.1.0: {}
2777 |
2778 | loose-envify@1.4.0:
2779 | dependencies:
2780 | js-tokens: 4.0.0
2781 |
2782 | lru-cache@4.1.5:
2783 | dependencies:
2784 | pseudomap: 1.0.2
2785 | yallist: 2.1.2
2786 |
2787 | markdown-extensions@1.1.1: {}
2788 |
2789 | markdown-table@3.0.3: {}
2790 |
2791 | match-sorter@6.3.1:
2792 | dependencies:
2793 | '@babel/runtime': 7.20.6
2794 | remove-accents: 0.4.2
2795 |
2796 | mdast-util-definitions@5.1.1:
2797 | dependencies:
2798 | '@types/mdast': 3.0.10
2799 | '@types/unist': 2.0.6
2800 | unist-util-visit: 4.1.1
2801 |
2802 | mdast-util-find-and-replace@2.2.1:
2803 | dependencies:
2804 | escape-string-regexp: 5.0.0
2805 | unist-util-is: 5.1.1
2806 | unist-util-visit-parents: 5.1.1
2807 |
2808 | mdast-util-from-markdown@1.3.1:
2809 | dependencies:
2810 | '@types/mdast': 3.0.10
2811 | '@types/unist': 2.0.6
2812 | decode-named-character-reference: 1.0.2
2813 | mdast-util-to-string: 3.1.0
2814 | micromark: 3.1.0
2815 | micromark-util-decode-numeric-character-reference: 1.0.0
2816 | micromark-util-decode-string: 1.0.2
2817 | micromark-util-normalize-identifier: 1.0.0
2818 | micromark-util-symbol: 1.0.1
2819 | micromark-util-types: 1.0.2
2820 | unist-util-stringify-position: 3.0.2
2821 | uvu: 0.5.6
2822 | transitivePeerDependencies:
2823 | - supports-color
2824 |
2825 | mdast-util-gfm-autolink-literal@1.0.2:
2826 | dependencies:
2827 | '@types/mdast': 3.0.10
2828 | ccount: 2.0.1
2829 | mdast-util-find-and-replace: 2.2.1
2830 | micromark-util-character: 1.1.0
2831 |
2832 | mdast-util-gfm-footnote@1.0.1:
2833 | dependencies:
2834 | '@types/mdast': 3.0.10
2835 | mdast-util-to-markdown: 1.3.0
2836 | micromark-util-normalize-identifier: 1.0.0
2837 |
2838 | mdast-util-gfm-strikethrough@1.0.2:
2839 | dependencies:
2840 | '@types/mdast': 3.0.10
2841 | mdast-util-to-markdown: 1.3.0
2842 |
2843 | mdast-util-gfm-table@1.0.6:
2844 | dependencies:
2845 | '@types/mdast': 3.0.10
2846 | markdown-table: 3.0.3
2847 | mdast-util-from-markdown: 1.3.1
2848 | mdast-util-to-markdown: 1.3.0
2849 | transitivePeerDependencies:
2850 | - supports-color
2851 |
2852 | mdast-util-gfm-task-list-item@1.0.1:
2853 | dependencies:
2854 | '@types/mdast': 3.0.10
2855 | mdast-util-to-markdown: 1.3.0
2856 |
2857 | mdast-util-gfm@2.0.1:
2858 | dependencies:
2859 | mdast-util-from-markdown: 1.3.1
2860 | mdast-util-gfm-autolink-literal: 1.0.2
2861 | mdast-util-gfm-footnote: 1.0.1
2862 | mdast-util-gfm-strikethrough: 1.0.2
2863 | mdast-util-gfm-table: 1.0.6
2864 | mdast-util-gfm-task-list-item: 1.0.1
2865 | mdast-util-to-markdown: 1.3.0
2866 | transitivePeerDependencies:
2867 | - supports-color
2868 |
2869 | mdast-util-math@2.0.2:
2870 | dependencies:
2871 | '@types/mdast': 3.0.10
2872 | longest-streak: 3.1.0
2873 | mdast-util-to-markdown: 1.3.0
2874 |
2875 | mdast-util-mdx-expression@1.3.1:
2876 | dependencies:
2877 | '@types/estree-jsx': 1.0.0
2878 | '@types/hast': 2.3.4
2879 | '@types/mdast': 3.0.10
2880 | mdast-util-from-markdown: 1.3.1
2881 | mdast-util-to-markdown: 1.3.0
2882 | transitivePeerDependencies:
2883 | - supports-color
2884 |
2885 | mdast-util-mdx-jsx@2.1.0:
2886 | dependencies:
2887 | '@types/estree-jsx': 1.0.0
2888 | '@types/hast': 2.3.4
2889 | '@types/mdast': 3.0.10
2890 | ccount: 2.0.1
2891 | mdast-util-to-markdown: 1.3.0
2892 | parse-entities: 4.0.0
2893 | stringify-entities: 4.0.3
2894 | unist-util-remove-position: 4.0.1
2895 | unist-util-stringify-position: 3.0.2
2896 | vfile-message: 3.1.3
2897 |
2898 | mdast-util-mdx@2.0.0:
2899 | dependencies:
2900 | mdast-util-mdx-expression: 1.3.1
2901 | mdast-util-mdx-jsx: 2.1.0
2902 | mdast-util-mdxjs-esm: 1.3.0
2903 | transitivePeerDependencies:
2904 | - supports-color
2905 |
2906 | mdast-util-mdxjs-esm@1.3.0:
2907 | dependencies:
2908 | '@types/estree-jsx': 1.0.0
2909 | '@types/hast': 2.3.4
2910 | '@types/mdast': 3.0.10
2911 | mdast-util-from-markdown: 1.3.1
2912 | mdast-util-to-markdown: 1.3.0
2913 | transitivePeerDependencies:
2914 | - supports-color
2915 |
2916 | mdast-util-to-hast@12.2.4:
2917 | dependencies:
2918 | '@types/hast': 2.3.4
2919 | '@types/mdast': 3.0.10
2920 | mdast-util-definitions: 5.1.1
2921 | micromark-util-sanitize-uri: 1.1.0
2922 | trim-lines: 3.0.1
2923 | unist-builder: 3.0.0
2924 | unist-util-generated: 2.0.0
2925 | unist-util-position: 4.0.3
2926 | unist-util-visit: 4.1.1
2927 |
2928 | mdast-util-to-hast@13.0.2:
2929 | dependencies:
2930 | '@types/hast': 3.0.0
2931 | '@types/mdast': 4.0.0
2932 | '@ungap/structured-clone': 1.2.0
2933 | devlop: 1.1.0
2934 | micromark-util-sanitize-uri: 2.0.0
2935 | trim-lines: 3.0.1
2936 | unist-util-position: 5.0.0
2937 | unist-util-visit: 5.0.0
2938 |
2939 | mdast-util-to-markdown@1.3.0:
2940 | dependencies:
2941 | '@types/mdast': 3.0.10
2942 | '@types/unist': 2.0.6
2943 | longest-streak: 3.1.0
2944 | mdast-util-to-string: 3.1.0
2945 | micromark-util-decode-string: 1.0.2
2946 | unist-util-visit: 4.1.1
2947 | zwitch: 2.0.4
2948 |
2949 | mdast-util-to-string@3.1.0: {}
2950 |
2951 | merge2@1.4.1: {}
2952 |
2953 | mermaid@10.4.0:
2954 | dependencies:
2955 | '@braintree/sanitize-url': 6.0.4
2956 | '@types/d3-scale': 4.0.4
2957 | '@types/d3-scale-chromatic': 3.0.0
2958 | cytoscape: 3.26.0
2959 | cytoscape-cose-bilkent: 4.1.0(cytoscape@3.26.0)
2960 | cytoscape-fcose: 2.2.0(cytoscape@3.26.0)
2961 | d3: 7.8.5
2962 | d3-sankey: 0.12.3
2963 | dagre-d3-es: 7.0.10
2964 | dayjs: 1.11.9
2965 | dompurify: 3.0.5
2966 | elkjs: 0.8.2
2967 | khroma: 2.0.0
2968 | lodash-es: 4.17.21
2969 | mdast-util-from-markdown: 1.3.1
2970 | non-layered-tidy-tree-layout: 2.0.2
2971 | stylis: 4.3.0
2972 | ts-dedent: 2.2.0
2973 | uuid: 9.0.0
2974 | web-worker: 1.2.0
2975 | transitivePeerDependencies:
2976 | - supports-color
2977 |
2978 | micromark-core-commonmark@1.0.6:
2979 | dependencies:
2980 | decode-named-character-reference: 1.0.2
2981 | micromark-factory-destination: 1.0.0
2982 | micromark-factory-label: 1.0.2
2983 | micromark-factory-space: 1.0.0
2984 | micromark-factory-title: 1.0.2
2985 | micromark-factory-whitespace: 1.0.0
2986 | micromark-util-character: 1.1.0
2987 | micromark-util-chunked: 1.0.0
2988 | micromark-util-classify-character: 1.0.0
2989 | micromark-util-html-tag-name: 1.1.0
2990 | micromark-util-normalize-identifier: 1.0.0
2991 | micromark-util-resolve-all: 1.0.0
2992 | micromark-util-subtokenize: 1.0.2
2993 | micromark-util-symbol: 1.0.1
2994 | micromark-util-types: 1.0.2
2995 | uvu: 0.5.6
2996 |
2997 | micromark-extension-gfm-autolink-literal@1.0.3:
2998 | dependencies:
2999 | micromark-util-character: 1.1.0
3000 | micromark-util-sanitize-uri: 1.1.0
3001 | micromark-util-symbol: 1.0.1
3002 | micromark-util-types: 1.0.2
3003 | uvu: 0.5.6
3004 |
3005 | micromark-extension-gfm-footnote@1.0.4:
3006 | dependencies:
3007 | micromark-core-commonmark: 1.0.6
3008 | micromark-factory-space: 1.0.0
3009 | micromark-util-character: 1.1.0
3010 | micromark-util-normalize-identifier: 1.0.0
3011 | micromark-util-sanitize-uri: 1.1.0
3012 | micromark-util-symbol: 1.0.1
3013 | micromark-util-types: 1.0.2
3014 | uvu: 0.5.6
3015 |
3016 | micromark-extension-gfm-strikethrough@1.0.4:
3017 | dependencies:
3018 | micromark-util-chunked: 1.0.0
3019 | micromark-util-classify-character: 1.0.0
3020 | micromark-util-resolve-all: 1.0.0
3021 | micromark-util-symbol: 1.0.1
3022 | micromark-util-types: 1.0.2
3023 | uvu: 0.5.6
3024 |
3025 | micromark-extension-gfm-table@1.0.5:
3026 | dependencies:
3027 | micromark-factory-space: 1.0.0
3028 | micromark-util-character: 1.1.0
3029 | micromark-util-symbol: 1.0.1
3030 | micromark-util-types: 1.0.2
3031 | uvu: 0.5.6
3032 |
3033 | micromark-extension-gfm-tagfilter@1.0.1:
3034 | dependencies:
3035 | micromark-util-types: 1.0.2
3036 |
3037 | micromark-extension-gfm-task-list-item@1.0.3:
3038 | dependencies:
3039 | micromark-factory-space: 1.0.0
3040 | micromark-util-character: 1.1.0
3041 | micromark-util-symbol: 1.0.1
3042 | micromark-util-types: 1.0.2
3043 | uvu: 0.5.6
3044 |
3045 | micromark-extension-gfm@2.0.1:
3046 | dependencies:
3047 | micromark-extension-gfm-autolink-literal: 1.0.3
3048 | micromark-extension-gfm-footnote: 1.0.4
3049 | micromark-extension-gfm-strikethrough: 1.0.4
3050 | micromark-extension-gfm-table: 1.0.5
3051 | micromark-extension-gfm-tagfilter: 1.0.1
3052 | micromark-extension-gfm-task-list-item: 1.0.3
3053 | micromark-util-combine-extensions: 1.0.0
3054 | micromark-util-types: 1.0.2
3055 |
3056 | micromark-extension-math@2.0.2:
3057 | dependencies:
3058 | '@types/katex': 0.11.1
3059 | katex: 0.13.24
3060 | micromark-factory-space: 1.0.0
3061 | micromark-util-character: 1.1.0
3062 | micromark-util-symbol: 1.0.1
3063 | micromark-util-types: 1.0.2
3064 | uvu: 0.5.6
3065 |
3066 | micromark-extension-mdx-expression@1.0.3:
3067 | dependencies:
3068 | micromark-factory-mdx-expression: 1.0.6
3069 | micromark-factory-space: 1.0.0
3070 | micromark-util-character: 1.1.0
3071 | micromark-util-events-to-acorn: 1.2.0
3072 | micromark-util-symbol: 1.0.1
3073 | micromark-util-types: 1.0.2
3074 | uvu: 0.5.6
3075 |
3076 | micromark-extension-mdx-jsx@1.0.3:
3077 | dependencies:
3078 | '@types/acorn': 4.0.6
3079 | estree-util-is-identifier-name: 2.0.1
3080 | micromark-factory-mdx-expression: 1.0.6
3081 | micromark-factory-space: 1.0.0
3082 | micromark-util-character: 1.1.0
3083 | micromark-util-symbol: 1.0.1
3084 | micromark-util-types: 1.0.2
3085 | uvu: 0.5.6
3086 | vfile-message: 3.1.3
3087 |
3088 | micromark-extension-mdx-md@1.0.0:
3089 | dependencies:
3090 | micromark-util-types: 1.0.2
3091 |
3092 | micromark-extension-mdxjs-esm@1.0.3:
3093 | dependencies:
3094 | micromark-core-commonmark: 1.0.6
3095 | micromark-util-character: 1.1.0
3096 | micromark-util-events-to-acorn: 1.2.0
3097 | micromark-util-symbol: 1.0.1
3098 | micromark-util-types: 1.0.2
3099 | unist-util-position-from-estree: 1.1.1
3100 | uvu: 0.5.6
3101 | vfile-message: 3.1.3
3102 |
3103 | micromark-extension-mdxjs@1.0.0:
3104 | dependencies:
3105 | acorn: 8.8.1
3106 | acorn-jsx: 5.3.2(acorn@8.8.1)
3107 | micromark-extension-mdx-expression: 1.0.3
3108 | micromark-extension-mdx-jsx: 1.0.3
3109 | micromark-extension-mdx-md: 1.0.0
3110 | micromark-extension-mdxjs-esm: 1.0.3
3111 | micromark-util-combine-extensions: 1.0.0
3112 | micromark-util-types: 1.0.2
3113 |
3114 | micromark-factory-destination@1.0.0:
3115 | dependencies:
3116 | micromark-util-character: 1.1.0
3117 | micromark-util-symbol: 1.0.1
3118 | micromark-util-types: 1.0.2
3119 |
3120 | micromark-factory-label@1.0.2:
3121 | dependencies:
3122 | micromark-util-character: 1.1.0
3123 | micromark-util-symbol: 1.0.1
3124 | micromark-util-types: 1.0.2
3125 | uvu: 0.5.6
3126 |
3127 | micromark-factory-mdx-expression@1.0.6:
3128 | dependencies:
3129 | micromark-factory-space: 1.0.0
3130 | micromark-util-character: 1.1.0
3131 | micromark-util-events-to-acorn: 1.2.0
3132 | micromark-util-symbol: 1.0.1
3133 | micromark-util-types: 1.0.2
3134 | unist-util-position-from-estree: 1.1.1
3135 | uvu: 0.5.6
3136 | vfile-message: 3.1.3
3137 |
3138 | micromark-factory-space@1.0.0:
3139 | dependencies:
3140 | micromark-util-character: 1.1.0
3141 | micromark-util-types: 1.0.2
3142 |
3143 | micromark-factory-title@1.0.2:
3144 | dependencies:
3145 | micromark-factory-space: 1.0.0
3146 | micromark-util-character: 1.1.0
3147 | micromark-util-symbol: 1.0.1
3148 | micromark-util-types: 1.0.2
3149 | uvu: 0.5.6
3150 |
3151 | micromark-factory-whitespace@1.0.0:
3152 | dependencies:
3153 | micromark-factory-space: 1.0.0
3154 | micromark-util-character: 1.1.0
3155 | micromark-util-symbol: 1.0.1
3156 | micromark-util-types: 1.0.2
3157 |
3158 | micromark-util-character@1.1.0:
3159 | dependencies:
3160 | micromark-util-symbol: 1.0.1
3161 | micromark-util-types: 1.0.2
3162 |
3163 | micromark-util-character@2.0.1:
3164 | dependencies:
3165 | micromark-util-symbol: 2.0.0
3166 | micromark-util-types: 2.0.0
3167 |
3168 | micromark-util-chunked@1.0.0:
3169 | dependencies:
3170 | micromark-util-symbol: 1.0.1
3171 |
3172 | micromark-util-classify-character@1.0.0:
3173 | dependencies:
3174 | micromark-util-character: 1.1.0
3175 | micromark-util-symbol: 1.0.1
3176 | micromark-util-types: 1.0.2
3177 |
3178 | micromark-util-combine-extensions@1.0.0:
3179 | dependencies:
3180 | micromark-util-chunked: 1.0.0
3181 | micromark-util-types: 1.0.2
3182 |
3183 | micromark-util-decode-numeric-character-reference@1.0.0:
3184 | dependencies:
3185 | micromark-util-symbol: 1.0.1
3186 |
3187 | micromark-util-decode-string@1.0.2:
3188 | dependencies:
3189 | decode-named-character-reference: 1.0.2
3190 | micromark-util-character: 1.1.0
3191 | micromark-util-decode-numeric-character-reference: 1.0.0
3192 | micromark-util-symbol: 1.0.1
3193 |
3194 | micromark-util-encode@1.0.1: {}
3195 |
3196 | micromark-util-encode@2.0.0: {}
3197 |
3198 | micromark-util-events-to-acorn@1.2.0:
3199 | dependencies:
3200 | '@types/acorn': 4.0.6
3201 | '@types/estree': 1.0.0
3202 | estree-util-visit: 1.2.0
3203 | micromark-util-types: 1.0.2
3204 | uvu: 0.5.6
3205 | vfile-location: 4.0.1
3206 | vfile-message: 3.1.3
3207 |
3208 | micromark-util-html-tag-name@1.1.0: {}
3209 |
3210 | micromark-util-normalize-identifier@1.0.0:
3211 | dependencies:
3212 | micromark-util-symbol: 1.0.1
3213 |
3214 | micromark-util-resolve-all@1.0.0:
3215 | dependencies:
3216 | micromark-util-types: 1.0.2
3217 |
3218 | micromark-util-sanitize-uri@1.1.0:
3219 | dependencies:
3220 | micromark-util-character: 1.1.0
3221 | micromark-util-encode: 1.0.1
3222 | micromark-util-symbol: 1.0.1
3223 |
3224 | micromark-util-sanitize-uri@2.0.0:
3225 | dependencies:
3226 | micromark-util-character: 2.0.1
3227 | micromark-util-encode: 2.0.0
3228 | micromark-util-symbol: 2.0.0
3229 |
3230 | micromark-util-subtokenize@1.0.2:
3231 | dependencies:
3232 | micromark-util-chunked: 1.0.0
3233 | micromark-util-symbol: 1.0.1
3234 | micromark-util-types: 1.0.2
3235 | uvu: 0.5.6
3236 |
3237 | micromark-util-symbol@1.0.1: {}
3238 |
3239 | micromark-util-symbol@2.0.0: {}
3240 |
3241 | micromark-util-types@1.0.2: {}
3242 |
3243 | micromark-util-types@2.0.0: {}
3244 |
3245 | micromark@3.1.0:
3246 | dependencies:
3247 | '@types/debug': 4.1.7
3248 | debug: 4.3.4
3249 | decode-named-character-reference: 1.0.2
3250 | micromark-core-commonmark: 1.0.6
3251 | micromark-factory-space: 1.0.0
3252 | micromark-util-character: 1.1.0
3253 | micromark-util-chunked: 1.0.0
3254 | micromark-util-combine-extensions: 1.0.0
3255 | micromark-util-decode-numeric-character-reference: 1.0.0
3256 | micromark-util-encode: 1.0.1
3257 | micromark-util-normalize-identifier: 1.0.0
3258 | micromark-util-resolve-all: 1.0.0
3259 | micromark-util-sanitize-uri: 1.1.0
3260 | micromark-util-subtokenize: 1.0.2
3261 | micromark-util-symbol: 1.0.1
3262 | micromark-util-types: 1.0.2
3263 | uvu: 0.5.6
3264 | transitivePeerDependencies:
3265 | - supports-color
3266 |
3267 | micromatch@4.0.5:
3268 | dependencies:
3269 | braces: 3.0.2
3270 | picomatch: 2.3.1
3271 |
3272 | minimatch@3.1.2:
3273 | dependencies:
3274 | brace-expansion: 1.1.11
3275 |
3276 | mri@1.2.0: {}
3277 |
3278 | ms@2.1.2: {}
3279 |
3280 | mz@2.7.0:
3281 | dependencies:
3282 | any-promise: 1.3.0
3283 | object-assign: 4.1.1
3284 | thenify-all: 1.6.0
3285 |
3286 | nanoid@3.3.6: {}
3287 |
3288 | next-mdx-remote@4.3.0(react-dom@18.2.0)(react@18.2.0):
3289 | dependencies:
3290 | '@mdx-js/mdx': 2.3.0
3291 | '@mdx-js/react': 2.3.0(react@18.2.0)
3292 | react: 18.2.0
3293 | react-dom: 18.2.0(react@18.2.0)
3294 | vfile: 5.3.6
3295 | vfile-matter: 3.0.1
3296 | transitivePeerDependencies:
3297 | - supports-color
3298 |
3299 | next-seo@6.1.0(next@13.0.6)(react-dom@18.2.0)(react@18.2.0):
3300 | dependencies:
3301 | next: 13.0.6(react-dom@18.2.0)(react@18.2.0)
3302 | react: 18.2.0
3303 | react-dom: 18.2.0(react@18.2.0)
3304 |
3305 | next-themes@0.2.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0):
3306 | dependencies:
3307 | next: 13.0.6(react-dom@18.2.0)(react@18.2.0)
3308 | react: 18.2.0
3309 | react-dom: 18.2.0(react@18.2.0)
3310 |
3311 | next@13.0.6(react-dom@18.2.0)(react@18.2.0):
3312 | dependencies:
3313 | '@next/env': 13.0.6
3314 | '@swc/helpers': 0.4.14
3315 | caniuse-lite: 1.0.30001435
3316 | postcss: 8.4.14
3317 | react: 18.2.0
3318 | react-dom: 18.2.0(react@18.2.0)
3319 | styled-jsx: 5.1.0(react@18.2.0)
3320 | optionalDependencies:
3321 | '@next/swc-android-arm-eabi': 13.0.6
3322 | '@next/swc-android-arm64': 13.0.6
3323 | '@next/swc-darwin-arm64': 13.0.6
3324 | '@next/swc-darwin-x64': 13.0.6
3325 | '@next/swc-freebsd-x64': 13.0.6
3326 | '@next/swc-linux-arm-gnueabihf': 13.0.6
3327 | '@next/swc-linux-arm64-gnu': 13.0.6
3328 | '@next/swc-linux-arm64-musl': 13.0.6
3329 | '@next/swc-linux-x64-gnu': 13.0.6
3330 | '@next/swc-linux-x64-musl': 13.0.6
3331 | '@next/swc-win32-arm64-msvc': 13.0.6
3332 | '@next/swc-win32-ia32-msvc': 13.0.6
3333 | '@next/swc-win32-x64-msvc': 13.0.6
3334 | transitivePeerDependencies:
3335 | - '@babel/core'
3336 | - babel-plugin-macros
3337 |
3338 | nextra-theme-docs@2.12.3(next@13.0.6)(nextra@2.12.3)(react-dom@18.2.0)(react@18.2.0):
3339 | dependencies:
3340 | '@headlessui/react': 1.7.10(react-dom@18.2.0)(react@18.2.0)
3341 | '@popperjs/core': 2.11.6
3342 | clsx: 2.0.0
3343 | escape-string-regexp: 5.0.0
3344 | flexsearch: 0.7.31
3345 | focus-visible: 5.2.0
3346 | git-url-parse: 13.1.0
3347 | intersection-observer: 0.12.2
3348 | match-sorter: 6.3.1
3349 | next: 13.0.6(react-dom@18.2.0)(react@18.2.0)
3350 | next-seo: 6.1.0(next@13.0.6)(react-dom@18.2.0)(react@18.2.0)
3351 | next-themes: 0.2.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0)
3352 | nextra: 2.12.3(next@13.0.6)(react-dom@18.2.0)(react@18.2.0)
3353 | react: 18.2.0
3354 | react-dom: 18.2.0(react@18.2.0)
3355 | scroll-into-view-if-needed: 3.0.4
3356 | zod: 3.22.2
3357 |
3358 | nextra@2.12.3(next@13.0.6)(react-dom@18.2.0)(react@18.2.0):
3359 | dependencies:
3360 | '@headlessui/react': 1.7.10(react-dom@18.2.0)(react@18.2.0)
3361 | '@mdx-js/mdx': 2.3.0
3362 | '@mdx-js/react': 2.3.0(react@18.2.0)
3363 | '@napi-rs/simple-git': 0.1.9
3364 | '@theguild/remark-mermaid': 0.0.4(react@18.2.0)
3365 | '@theguild/remark-npm2yarn': 0.1.1
3366 | clsx: 2.0.0
3367 | github-slugger: 2.0.0
3368 | graceful-fs: 4.2.11
3369 | gray-matter: 4.0.3
3370 | katex: 0.16.8
3371 | lodash.get: 4.4.2
3372 | next: 13.0.6(react-dom@18.2.0)(react@18.2.0)
3373 | next-mdx-remote: 4.3.0(react-dom@18.2.0)(react@18.2.0)
3374 | p-limit: 3.1.0
3375 | react: 18.2.0
3376 | react-dom: 18.2.0(react@18.2.0)
3377 | rehype-katex: 6.0.3
3378 | rehype-pretty-code: 0.9.11(shiki@0.14.4)
3379 | rehype-raw: 7.0.0
3380 | remark-gfm: 3.0.1
3381 | remark-math: 5.1.1
3382 | remark-reading-time: 2.0.1
3383 | shiki: 0.14.4
3384 | slash: 3.0.0
3385 | title: 3.5.3
3386 | unist-util-remove: 4.0.0
3387 | unist-util-visit: 5.0.0
3388 | zod: 3.22.2
3389 | transitivePeerDependencies:
3390 | - supports-color
3391 |
3392 | node-releases@2.0.13: {}
3393 |
3394 | non-layered-tidy-tree-layout@2.0.2: {}
3395 |
3396 | normalize-path@3.0.0: {}
3397 |
3398 | normalize-range@0.1.2: {}
3399 |
3400 | npm-run-path@2.0.2:
3401 | dependencies:
3402 | path-key: 2.0.1
3403 |
3404 | npm-to-yarn@2.0.0: {}
3405 |
3406 | object-assign@4.1.1: {}
3407 |
3408 | object-hash@3.0.0: {}
3409 |
3410 | once@1.4.0:
3411 | dependencies:
3412 | wrappy: 1.0.2
3413 |
3414 | p-finally@1.0.0: {}
3415 |
3416 | p-limit@3.1.0:
3417 | dependencies:
3418 | yocto-queue: 0.1.0
3419 |
3420 | parse-entities@4.0.0:
3421 | dependencies:
3422 | '@types/unist': 2.0.6
3423 | character-entities: 2.0.2
3424 | character-entities-legacy: 3.0.0
3425 | character-reference-invalid: 2.0.1
3426 | decode-named-character-reference: 1.0.2
3427 | is-alphanumerical: 2.0.1
3428 | is-decimal: 2.0.1
3429 | is-hexadecimal: 2.0.1
3430 |
3431 | parse-numeric-range@1.3.0: {}
3432 |
3433 | parse-path@7.0.0:
3434 | dependencies:
3435 | protocols: 2.0.1
3436 |
3437 | parse-url@8.1.0:
3438 | dependencies:
3439 | parse-path: 7.0.0
3440 |
3441 | parse5@7.1.2:
3442 | dependencies:
3443 | entities: 4.5.0
3444 |
3445 | path-is-absolute@1.0.1: {}
3446 |
3447 | path-key@2.0.1: {}
3448 |
3449 | path-parse@1.0.7: {}
3450 |
3451 | periscopic@3.0.4:
3452 | dependencies:
3453 | estree-walker: 3.0.1
3454 | is-reference: 3.0.0
3455 |
3456 | picocolors@1.0.0: {}
3457 |
3458 | picomatch@2.3.1: {}
3459 |
3460 | pify@2.3.0: {}
3461 |
3462 | pirates@4.0.6: {}
3463 |
3464 | postcss-import@15.1.0(postcss@8.4.29):
3465 | dependencies:
3466 | postcss: 8.4.29
3467 | postcss-value-parser: 4.2.0
3468 | read-cache: 1.0.0
3469 | resolve: 1.22.4
3470 |
3471 | postcss-js@4.0.1(postcss@8.4.29):
3472 | dependencies:
3473 | camelcase-css: 2.0.1
3474 | postcss: 8.4.29
3475 |
3476 | postcss-load-config@4.0.1(postcss@8.4.29):
3477 | dependencies:
3478 | lilconfig: 2.1.0
3479 | postcss: 8.4.29
3480 | yaml: 2.3.2
3481 |
3482 | postcss-nested@6.0.1(postcss@8.4.29):
3483 | dependencies:
3484 | postcss: 8.4.29
3485 | postcss-selector-parser: 6.0.13
3486 |
3487 | postcss-selector-parser@6.0.13:
3488 | dependencies:
3489 | cssesc: 3.0.0
3490 | util-deprecate: 1.0.2
3491 |
3492 | postcss-value-parser@4.2.0: {}
3493 |
3494 | postcss@8.4.14:
3495 | dependencies:
3496 | nanoid: 3.3.6
3497 | picocolors: 1.0.0
3498 | source-map-js: 1.0.2
3499 |
3500 | postcss@8.4.29:
3501 | dependencies:
3502 | nanoid: 3.3.6
3503 | picocolors: 1.0.0
3504 | source-map-js: 1.0.2
3505 |
3506 | property-information@6.2.0: {}
3507 |
3508 | protocols@2.0.1: {}
3509 |
3510 | pseudomap@1.0.2: {}
3511 |
3512 | queue-microtask@1.2.3: {}
3513 |
3514 | react-dom@18.2.0(react@18.2.0):
3515 | dependencies:
3516 | loose-envify: 1.4.0
3517 | react: 18.2.0
3518 | scheduler: 0.23.0
3519 |
3520 | react@18.2.0:
3521 | dependencies:
3522 | loose-envify: 1.4.0
3523 |
3524 | read-cache@1.0.0:
3525 | dependencies:
3526 | pify: 2.3.0
3527 |
3528 | readdirp@3.6.0:
3529 | dependencies:
3530 | picomatch: 2.3.1
3531 |
3532 | reading-time@1.5.0: {}
3533 |
3534 | regenerator-runtime@0.13.11: {}
3535 |
3536 | rehype-katex@6.0.3:
3537 | dependencies:
3538 | '@types/hast': 2.3.4
3539 | '@types/katex': 0.14.0
3540 | hast-util-from-html-isomorphic: 1.0.0
3541 | hast-util-to-text: 3.1.2
3542 | katex: 0.16.8
3543 | unist-util-visit: 4.1.1
3544 |
3545 | rehype-pretty-code@0.9.11(shiki@0.14.4):
3546 | dependencies:
3547 | '@types/hast': 2.3.4
3548 | hash-obj: 4.0.0
3549 | parse-numeric-range: 1.3.0
3550 | shiki: 0.14.4
3551 |
3552 | rehype-raw@7.0.0:
3553 | dependencies:
3554 | '@types/hast': 3.0.0
3555 | hast-util-raw: 9.0.1
3556 | vfile: 6.0.1
3557 |
3558 | remark-gfm@3.0.1:
3559 | dependencies:
3560 | '@types/mdast': 3.0.10
3561 | mdast-util-gfm: 2.0.1
3562 | micromark-extension-gfm: 2.0.1
3563 | unified: 10.1.2
3564 | transitivePeerDependencies:
3565 | - supports-color
3566 |
3567 | remark-math@5.1.1:
3568 | dependencies:
3569 | '@types/mdast': 3.0.10
3570 | mdast-util-math: 2.0.2
3571 | micromark-extension-math: 2.0.2
3572 | unified: 10.1.2
3573 |
3574 | remark-mdx@2.1.5:
3575 | dependencies:
3576 | mdast-util-mdx: 2.0.0
3577 | micromark-extension-mdxjs: 1.0.0
3578 | transitivePeerDependencies:
3579 | - supports-color
3580 |
3581 | remark-parse@10.0.1:
3582 | dependencies:
3583 | '@types/mdast': 3.0.10
3584 | mdast-util-from-markdown: 1.3.1
3585 | unified: 10.1.2
3586 | transitivePeerDependencies:
3587 | - supports-color
3588 |
3589 | remark-reading-time@2.0.1:
3590 | dependencies:
3591 | estree-util-is-identifier-name: 2.0.1
3592 | estree-util-value-to-estree: 1.3.0
3593 | reading-time: 1.5.0
3594 | unist-util-visit: 3.1.0
3595 |
3596 | remark-rehype@10.1.0:
3597 | dependencies:
3598 | '@types/hast': 2.3.4
3599 | '@types/mdast': 3.0.10
3600 | mdast-util-to-hast: 12.2.4
3601 | unified: 10.1.2
3602 |
3603 | remove-accents@0.4.2: {}
3604 |
3605 | resolve@1.22.4:
3606 | dependencies:
3607 | is-core-module: 2.13.0
3608 | path-parse: 1.0.7
3609 | supports-preserve-symlinks-flag: 1.0.0
3610 |
3611 | reusify@1.0.4: {}
3612 |
3613 | robust-predicates@3.0.2: {}
3614 |
3615 | run-parallel@1.2.0:
3616 | dependencies:
3617 | queue-microtask: 1.2.3
3618 |
3619 | rw@1.3.3: {}
3620 |
3621 | sade@1.8.1:
3622 | dependencies:
3623 | mri: 1.2.0
3624 |
3625 | safer-buffer@2.1.2: {}
3626 |
3627 | scheduler@0.23.0:
3628 | dependencies:
3629 | loose-envify: 1.4.0
3630 |
3631 | scroll-into-view-if-needed@3.0.4:
3632 | dependencies:
3633 | compute-scroll-into-view: 2.0.4
3634 |
3635 | section-matter@1.0.0:
3636 | dependencies:
3637 | extend-shallow: 2.0.1
3638 | kind-of: 6.0.3
3639 |
3640 | shebang-command@1.2.0:
3641 | dependencies:
3642 | shebang-regex: 1.0.0
3643 |
3644 | shebang-regex@1.0.0: {}
3645 |
3646 | shiki@0.14.4:
3647 | dependencies:
3648 | ansi-sequence-parser: 1.1.1
3649 | jsonc-parser: 3.2.0
3650 | vscode-oniguruma: 1.7.0
3651 | vscode-textmate: 8.0.0
3652 |
3653 | signal-exit@3.0.7: {}
3654 |
3655 | slash@3.0.0: {}
3656 |
3657 | sort-keys@5.0.0:
3658 | dependencies:
3659 | is-plain-obj: 4.1.0
3660 |
3661 | source-map-js@1.0.2: {}
3662 |
3663 | source-map@0.7.4: {}
3664 |
3665 | space-separated-tokens@2.0.2: {}
3666 |
3667 | sprintf-js@1.0.3: {}
3668 |
3669 | stringify-entities@4.0.3:
3670 | dependencies:
3671 | character-entities-html4: 2.1.0
3672 | character-entities-legacy: 3.0.0
3673 |
3674 | strip-bom-string@1.0.0: {}
3675 |
3676 | strip-eof@1.0.0: {}
3677 |
3678 | style-to-object@0.3.0:
3679 | dependencies:
3680 | inline-style-parser: 0.1.1
3681 |
3682 | styled-jsx@5.1.0(react@18.2.0):
3683 | dependencies:
3684 | client-only: 0.0.1
3685 | react: 18.2.0
3686 |
3687 | stylis@4.3.0: {}
3688 |
3689 | sucrase@3.34.0:
3690 | dependencies:
3691 | '@jridgewell/gen-mapping': 0.3.3
3692 | commander: 4.1.1
3693 | glob: 7.1.6
3694 | lines-and-columns: 1.2.4
3695 | mz: 2.7.0
3696 | pirates: 4.0.6
3697 | ts-interface-checker: 0.1.13
3698 |
3699 | supports-color@4.5.0:
3700 | dependencies:
3701 | has-flag: 2.0.0
3702 |
3703 | supports-preserve-symlinks-flag@1.0.0: {}
3704 |
3705 | tailwindcss@3.3.3:
3706 | dependencies:
3707 | '@alloc/quick-lru': 5.2.0
3708 | arg: 5.0.2
3709 | chokidar: 3.5.3
3710 | didyoumean: 1.2.2
3711 | dlv: 1.1.3
3712 | fast-glob: 3.3.1
3713 | glob-parent: 6.0.2
3714 | is-glob: 4.0.3
3715 | jiti: 1.19.3
3716 | lilconfig: 2.1.0
3717 | micromatch: 4.0.5
3718 | normalize-path: 3.0.0
3719 | object-hash: 3.0.0
3720 | picocolors: 1.0.0
3721 | postcss: 8.4.29
3722 | postcss-import: 15.1.0(postcss@8.4.29)
3723 | postcss-js: 4.0.1(postcss@8.4.29)
3724 | postcss-load-config: 4.0.1(postcss@8.4.29)
3725 | postcss-nested: 6.0.1(postcss@8.4.29)
3726 | postcss-selector-parser: 6.0.13
3727 | resolve: 1.22.4
3728 | sucrase: 3.34.0
3729 | transitivePeerDependencies:
3730 | - ts-node
3731 |
3732 | thenify-all@1.6.0:
3733 | dependencies:
3734 | thenify: 3.3.1
3735 |
3736 | thenify@3.3.1:
3737 | dependencies:
3738 | any-promise: 1.3.0
3739 |
3740 | title@3.5.3:
3741 | dependencies:
3742 | arg: 1.0.0
3743 | chalk: 2.3.0
3744 | clipboardy: 1.2.2
3745 | titleize: 1.0.0
3746 |
3747 | titleize@1.0.0: {}
3748 |
3749 | to-regex-range@5.0.1:
3750 | dependencies:
3751 | is-number: 7.0.0
3752 |
3753 | trim-lines@3.0.1: {}
3754 |
3755 | trough@2.1.0: {}
3756 |
3757 | ts-dedent@2.2.0: {}
3758 |
3759 | ts-interface-checker@0.1.13: {}
3760 |
3761 | tslib@2.4.1: {}
3762 |
3763 | type-fest@1.4.0: {}
3764 |
3765 | typescript@4.9.3: {}
3766 |
3767 | unified@10.1.2:
3768 | dependencies:
3769 | '@types/unist': 2.0.6
3770 | bail: 2.0.2
3771 | extend: 3.0.2
3772 | is-buffer: 2.0.5
3773 | is-plain-obj: 4.1.0
3774 | trough: 2.1.0
3775 | vfile: 5.3.6
3776 |
3777 | unist-builder@3.0.0:
3778 | dependencies:
3779 | '@types/unist': 2.0.6
3780 |
3781 | unist-util-find-after@4.0.1:
3782 | dependencies:
3783 | '@types/unist': 2.0.6
3784 | unist-util-is: 5.1.1
3785 |
3786 | unist-util-generated@2.0.0: {}
3787 |
3788 | unist-util-is@5.1.1: {}
3789 |
3790 | unist-util-is@6.0.0:
3791 | dependencies:
3792 | '@types/unist': 3.0.0
3793 |
3794 | unist-util-position-from-estree@1.1.1:
3795 | dependencies:
3796 | '@types/unist': 2.0.6
3797 |
3798 | unist-util-position@4.0.3:
3799 | dependencies:
3800 | '@types/unist': 2.0.6
3801 |
3802 | unist-util-position@5.0.0:
3803 | dependencies:
3804 | '@types/unist': 3.0.0
3805 |
3806 | unist-util-remove-position@4.0.1:
3807 | dependencies:
3808 | '@types/unist': 2.0.6
3809 | unist-util-visit: 4.1.1
3810 |
3811 | unist-util-remove@4.0.0:
3812 | dependencies:
3813 | '@types/unist': 3.0.0
3814 | unist-util-is: 6.0.0
3815 | unist-util-visit-parents: 6.0.1
3816 |
3817 | unist-util-stringify-position@3.0.2:
3818 | dependencies:
3819 | '@types/unist': 2.0.6
3820 |
3821 | unist-util-stringify-position@4.0.0:
3822 | dependencies:
3823 | '@types/unist': 3.0.0
3824 |
3825 | unist-util-visit-parents@4.1.1:
3826 | dependencies:
3827 | '@types/unist': 2.0.6
3828 | unist-util-is: 5.1.1
3829 |
3830 | unist-util-visit-parents@5.1.1:
3831 | dependencies:
3832 | '@types/unist': 2.0.6
3833 | unist-util-is: 5.1.1
3834 |
3835 | unist-util-visit-parents@6.0.1:
3836 | dependencies:
3837 | '@types/unist': 3.0.0
3838 | unist-util-is: 6.0.0
3839 |
3840 | unist-util-visit@3.1.0:
3841 | dependencies:
3842 | '@types/unist': 2.0.6
3843 | unist-util-is: 5.1.1
3844 | unist-util-visit-parents: 4.1.1
3845 |
3846 | unist-util-visit@4.1.1:
3847 | dependencies:
3848 | '@types/unist': 2.0.6
3849 | unist-util-is: 5.1.1
3850 | unist-util-visit-parents: 5.1.1
3851 |
3852 | unist-util-visit@5.0.0:
3853 | dependencies:
3854 | '@types/unist': 3.0.0
3855 | unist-util-is: 6.0.0
3856 | unist-util-visit-parents: 6.0.1
3857 |
3858 | update-browserslist-db@1.0.11(browserslist@4.21.10):
3859 | dependencies:
3860 | browserslist: 4.21.10
3861 | escalade: 3.1.1
3862 | picocolors: 1.0.0
3863 |
3864 | util-deprecate@1.0.2: {}
3865 |
3866 | uuid@9.0.0: {}
3867 |
3868 | uvu@0.5.6:
3869 | dependencies:
3870 | dequal: 2.0.3
3871 | diff: 5.1.0
3872 | kleur: 4.1.5
3873 | sade: 1.8.1
3874 |
3875 | vfile-location@4.0.1:
3876 | dependencies:
3877 | '@types/unist': 2.0.6
3878 | vfile: 5.3.6
3879 |
3880 | vfile-location@5.0.2:
3881 | dependencies:
3882 | '@types/unist': 3.0.0
3883 | vfile: 6.0.1
3884 |
3885 | vfile-matter@3.0.1:
3886 | dependencies:
3887 | '@types/js-yaml': 4.0.5
3888 | is-buffer: 2.0.5
3889 | js-yaml: 4.1.0
3890 |
3891 | vfile-message@3.1.3:
3892 | dependencies:
3893 | '@types/unist': 2.0.6
3894 | unist-util-stringify-position: 3.0.2
3895 |
3896 | vfile-message@4.0.2:
3897 | dependencies:
3898 | '@types/unist': 3.0.0
3899 | unist-util-stringify-position: 4.0.0
3900 |
3901 | vfile@5.3.6:
3902 | dependencies:
3903 | '@types/unist': 2.0.6
3904 | is-buffer: 2.0.5
3905 | unist-util-stringify-position: 3.0.2
3906 | vfile-message: 3.1.3
3907 |
3908 | vfile@6.0.1:
3909 | dependencies:
3910 | '@types/unist': 3.0.0
3911 | unist-util-stringify-position: 4.0.0
3912 | vfile-message: 4.0.2
3913 |
3914 | vscode-oniguruma@1.7.0: {}
3915 |
3916 | vscode-textmate@8.0.0: {}
3917 |
3918 | web-namespaces@2.0.1: {}
3919 |
3920 | web-worker@1.2.0: {}
3921 |
3922 | which@1.3.1:
3923 | dependencies:
3924 | isexe: 2.0.0
3925 |
3926 | wrappy@1.0.2: {}
3927 |
3928 | yallist@2.1.2: {}
3929 |
3930 | yaml@2.3.2: {}
3931 |
3932 | yocto-queue@0.1.0: {}
3933 |
3934 | zod@3.22.2: {}
3935 |
3936 | zwitch@2.0.4: {}
3937 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/2023-08-24-02-30-39.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nishuzumi/blog/HEAD/public/2023-08-24-02-30-39.png
--------------------------------------------------------------------------------
/public/2023-08-25-00-00-26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nishuzumi/blog/HEAD/public/2023-08-25-00-00-26.png
--------------------------------------------------------------------------------
/public/2023-08-31-18-10-30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nishuzumi/blog/HEAD/public/2023-08-31-18-10-30.png
--------------------------------------------------------------------------------
/sources/readme.md:
--------------------------------------------------------------------------------
1 | 用于存放 contracts 等仓库代码
2 |
3 | zk —— zk 教程用代码
4 |
--------------------------------------------------------------------------------
/sources/zk/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .env
3 | coverage
4 | coverage.json
5 | typechain
6 | typechain-types
7 |
8 | #Hardhat files
9 | cache
10 | artifacts
11 |
12 |
--------------------------------------------------------------------------------
/sources/zk/README.md:
--------------------------------------------------------------------------------
1 | # Sample Hardhat Project
2 |
3 | This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract.
4 |
5 | Try running some of the following tasks:
6 |
7 | ```shell
8 | npx hardhat help
9 | npx hardhat test
10 | REPORT_GAS=true npx hardhat test
11 | npx hardhat node
12 | npx hardhat run scripts/deploy.ts
13 | ```
14 |
--------------------------------------------------------------------------------
/sources/zk/contracts/master.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | import {Verifier} from "./verifier.sol";
5 |
6 | contract Master {
7 | event Despoit(uint256 commitment, uint amount);
8 |
9 | mapping(uint => uint) public proofs;
10 |
11 | Verifier v;
12 |
13 | constructor() {
14 | v = new Verifier();
15 | }
16 |
17 | function deposit(uint commitment) public payable {
18 | proofs[commitment] = msg.value;
19 | emit Despoit(commitment, msg.value);
20 | }
21 |
22 | function withdraw(
23 | uint commitment,
24 | Verifier.Proof memory proof,
25 | uint[9] memory inputs
26 | ) public {
27 | uint amount = inputs[0];
28 | require(v.verifyTx(proof, inputs));
29 | require(proofs[commitment] == amount);
30 |
31 | payable(msg.sender).transfer(amount);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/sources/zk/contracts/verifier.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: LGPL-3.0-only
2 | pragma solidity ^0.8.0;
3 |
4 | /**
5 | * @title Elliptic curve operations on twist points for alt_bn128
6 | * @author Mustafa Al-Bassam (mus@musalbas.com)
7 | * @dev Homepage: https://github.com/musalbas/solidity-BN256G2
8 | */
9 |
10 | library BN256G2 {
11 | uint256 internal constant FIELD_MODULUS = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47;
12 | uint256 internal constant TWISTBX = 0x2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e5;
13 | uint256 internal constant TWISTBY = 0x9713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2;
14 | uint internal constant PTXX = 0;
15 | uint internal constant PTXY = 1;
16 | uint internal constant PTYX = 2;
17 | uint internal constant PTYY = 3;
18 | uint internal constant PTZX = 4;
19 | uint internal constant PTZY = 5;
20 |
21 | /**
22 | * @notice Add two twist points
23 | * @param pt1xx Coefficient 1 of x on point 1
24 | * @param pt1xy Coefficient 2 of x on point 1
25 | * @param pt1yx Coefficient 1 of y on point 1
26 | * @param pt1yy Coefficient 2 of y on point 1
27 | * @param pt2xx Coefficient 1 of x on point 2
28 | * @param pt2xy Coefficient 2 of x on point 2
29 | * @param pt2yx Coefficient 1 of y on point 2
30 | * @param pt2yy Coefficient 2 of y on point 2
31 | * @return (pt3xx, pt3xy, pt3yx, pt3yy)
32 | */
33 | function ECTwistAdd(
34 | uint256 pt1xx, uint256 pt1xy,
35 | uint256 pt1yx, uint256 pt1yy,
36 | uint256 pt2xx, uint256 pt2xy,
37 | uint256 pt2yx, uint256 pt2yy
38 | ) public view returns (
39 | uint256, uint256,
40 | uint256, uint256
41 | ) {
42 | if (
43 | pt1xx == 0 && pt1xy == 0 &&
44 | pt1yx == 0 && pt1yy == 0
45 | ) {
46 | if (!(
47 | pt2xx == 0 && pt2xy == 0 &&
48 | pt2yx == 0 && pt2yy == 0
49 | )) {
50 | assert(_isOnCurve(
51 | pt2xx, pt2xy,
52 | pt2yx, pt2yy
53 | ));
54 | }
55 | return (
56 | pt2xx, pt2xy,
57 | pt2yx, pt2yy
58 | );
59 | } else if (
60 | pt2xx == 0 && pt2xy == 0 &&
61 | pt2yx == 0 && pt2yy == 0
62 | ) {
63 | assert(_isOnCurve(
64 | pt1xx, pt1xy,
65 | pt1yx, pt1yy
66 | ));
67 | return (
68 | pt1xx, pt1xy,
69 | pt1yx, pt1yy
70 | );
71 | }
72 |
73 | assert(_isOnCurve(
74 | pt1xx, pt1xy,
75 | pt1yx, pt1yy
76 | ));
77 | assert(_isOnCurve(
78 | pt2xx, pt2xy,
79 | pt2yx, pt2yy
80 | ));
81 |
82 | uint256[6] memory pt3 = _ECTwistAddJacobian(
83 | pt1xx, pt1xy,
84 | pt1yx, pt1yy,
85 | 1, 0,
86 | pt2xx, pt2xy,
87 | pt2yx, pt2yy,
88 | 1, 0
89 | );
90 |
91 | return _fromJacobian(
92 | pt3[PTXX], pt3[PTXY],
93 | pt3[PTYX], pt3[PTYY],
94 | pt3[PTZX], pt3[PTZY]
95 | );
96 | }
97 |
98 | /**
99 | * @notice Multiply a twist point by a scalar
100 | * @param s Scalar to multiply by
101 | * @param pt1xx Coefficient 1 of x
102 | * @param pt1xy Coefficient 2 of x
103 | * @param pt1yx Coefficient 1 of y
104 | * @param pt1yy Coefficient 2 of y
105 | * @return (pt2xx, pt2xy, pt2yx, pt2yy)
106 | */
107 | function ECTwistMul(
108 | uint256 s,
109 | uint256 pt1xx, uint256 pt1xy,
110 | uint256 pt1yx, uint256 pt1yy
111 | ) public view returns (
112 | uint256, uint256,
113 | uint256, uint256
114 | ) {
115 | uint256 pt1zx = 1;
116 | if (
117 | pt1xx == 0 && pt1xy == 0 &&
118 | pt1yx == 0 && pt1yy == 0
119 | ) {
120 | pt1xx = 1;
121 | pt1yx = 1;
122 | pt1zx = 0;
123 | } else {
124 | assert(_isOnCurve(
125 | pt1xx, pt1xy,
126 | pt1yx, pt1yy
127 | ));
128 | }
129 |
130 | uint256[6] memory pt2 = _ECTwistMulJacobian(
131 | s,
132 | pt1xx, pt1xy,
133 | pt1yx, pt1yy,
134 | pt1zx, 0
135 | );
136 |
137 | return _fromJacobian(
138 | pt2[PTXX], pt2[PTXY],
139 | pt2[PTYX], pt2[PTYY],
140 | pt2[PTZX], pt2[PTZY]
141 | );
142 | }
143 |
144 | /**
145 | * @notice Get the field modulus
146 | * @return The field modulus
147 | */
148 | function GetFieldModulus() public pure returns (uint256) {
149 | return FIELD_MODULUS;
150 | }
151 |
152 | function submod(uint256 a, uint256 b, uint256 n) internal pure returns (uint256) {
153 | return addmod(a, n - b, n);
154 | }
155 |
156 | function _FQ2Mul(
157 | uint256 xx, uint256 xy,
158 | uint256 yx, uint256 yy
159 | ) internal pure returns (uint256, uint256) {
160 | return (
161 | submod(mulmod(xx, yx, FIELD_MODULUS), mulmod(xy, yy, FIELD_MODULUS), FIELD_MODULUS),
162 | addmod(mulmod(xx, yy, FIELD_MODULUS), mulmod(xy, yx, FIELD_MODULUS), FIELD_MODULUS)
163 | );
164 | }
165 |
166 | function _FQ2Muc(
167 | uint256 xx, uint256 xy,
168 | uint256 c
169 | ) internal pure returns (uint256, uint256) {
170 | return (
171 | mulmod(xx, c, FIELD_MODULUS),
172 | mulmod(xy, c, FIELD_MODULUS)
173 | );
174 | }
175 |
176 | function _FQ2Add(
177 | uint256 xx, uint256 xy,
178 | uint256 yx, uint256 yy
179 | ) internal pure returns (uint256, uint256) {
180 | return (
181 | addmod(xx, yx, FIELD_MODULUS),
182 | addmod(xy, yy, FIELD_MODULUS)
183 | );
184 | }
185 |
186 | function _FQ2Sub(
187 | uint256 xx, uint256 xy,
188 | uint256 yx, uint256 yy
189 | ) internal pure returns (uint256 rx, uint256 ry) {
190 | return (
191 | submod(xx, yx, FIELD_MODULUS),
192 | submod(xy, yy, FIELD_MODULUS)
193 | );
194 | }
195 |
196 | function _FQ2Div(
197 | uint256 xx, uint256 xy,
198 | uint256 yx, uint256 yy
199 | ) internal view returns (uint256, uint256) {
200 | (yx, yy) = _FQ2Inv(yx, yy);
201 | return _FQ2Mul(xx, xy, yx, yy);
202 | }
203 |
204 | function _FQ2Inv(uint256 x, uint256 y) internal view returns (uint256, uint256) {
205 | uint256 inv = _modInv(addmod(mulmod(y, y, FIELD_MODULUS), mulmod(x, x, FIELD_MODULUS), FIELD_MODULUS), FIELD_MODULUS);
206 | return (
207 | mulmod(x, inv, FIELD_MODULUS),
208 | FIELD_MODULUS - mulmod(y, inv, FIELD_MODULUS)
209 | );
210 | }
211 |
212 | function _isOnCurve(
213 | uint256 xx, uint256 xy,
214 | uint256 yx, uint256 yy
215 | ) internal pure returns (bool) {
216 | uint256 yyx;
217 | uint256 yyy;
218 | uint256 xxxx;
219 | uint256 xxxy;
220 | (yyx, yyy) = _FQ2Mul(yx, yy, yx, yy);
221 | (xxxx, xxxy) = _FQ2Mul(xx, xy, xx, xy);
222 | (xxxx, xxxy) = _FQ2Mul(xxxx, xxxy, xx, xy);
223 | (yyx, yyy) = _FQ2Sub(yyx, yyy, xxxx, xxxy);
224 | (yyx, yyy) = _FQ2Sub(yyx, yyy, TWISTBX, TWISTBY);
225 | return yyx == 0 && yyy == 0;
226 | }
227 |
228 | function _modInv(uint256 a, uint256 n) internal view returns (uint256 result) {
229 | bool success;
230 | assembly {
231 | let freemem := mload(0x40)
232 | mstore(freemem, 0x20)
233 | mstore(add(freemem,0x20), 0x20)
234 | mstore(add(freemem,0x40), 0x20)
235 | mstore(add(freemem,0x60), a)
236 | mstore(add(freemem,0x80), sub(n, 2))
237 | mstore(add(freemem,0xA0), n)
238 | success := staticcall(sub(gas(), 2000), 5, freemem, 0xC0, freemem, 0x20)
239 | result := mload(freemem)
240 | }
241 | require(success);
242 | }
243 |
244 | function _fromJacobian(
245 | uint256 pt1xx, uint256 pt1xy,
246 | uint256 pt1yx, uint256 pt1yy,
247 | uint256 pt1zx, uint256 pt1zy
248 | ) internal view returns (
249 | uint256 pt2xx, uint256 pt2xy,
250 | uint256 pt2yx, uint256 pt2yy
251 | ) {
252 | uint256 invzx;
253 | uint256 invzy;
254 | (invzx, invzy) = _FQ2Inv(pt1zx, pt1zy);
255 | (pt2xx, pt2xy) = _FQ2Mul(pt1xx, pt1xy, invzx, invzy);
256 | (pt2yx, pt2yy) = _FQ2Mul(pt1yx, pt1yy, invzx, invzy);
257 | }
258 |
259 | function _ECTwistAddJacobian(
260 | uint256 pt1xx, uint256 pt1xy,
261 | uint256 pt1yx, uint256 pt1yy,
262 | uint256 pt1zx, uint256 pt1zy,
263 | uint256 pt2xx, uint256 pt2xy,
264 | uint256 pt2yx, uint256 pt2yy,
265 | uint256 pt2zx, uint256 pt2zy) internal pure returns (uint256[6] memory pt3) {
266 | if (pt1zx == 0 && pt1zy == 0) {
267 | (
268 | pt3[PTXX], pt3[PTXY],
269 | pt3[PTYX], pt3[PTYY],
270 | pt3[PTZX], pt3[PTZY]
271 | ) = (
272 | pt2xx, pt2xy,
273 | pt2yx, pt2yy,
274 | pt2zx, pt2zy
275 | );
276 | return pt3;
277 | } else if (pt2zx == 0 && pt2zy == 0) {
278 | (
279 | pt3[PTXX], pt3[PTXY],
280 | pt3[PTYX], pt3[PTYY],
281 | pt3[PTZX], pt3[PTZY]
282 | ) = (
283 | pt1xx, pt1xy,
284 | pt1yx, pt1yy,
285 | pt1zx, pt1zy
286 | );
287 | return pt3;
288 | }
289 |
290 | (pt2yx, pt2yy) = _FQ2Mul(pt2yx, pt2yy, pt1zx, pt1zy); // U1 = y2 * z1
291 | (pt3[PTYX], pt3[PTYY]) = _FQ2Mul(pt1yx, pt1yy, pt2zx, pt2zy); // U2 = y1 * z2
292 | (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt1zx, pt1zy); // V1 = x2 * z1
293 | (pt3[PTZX], pt3[PTZY]) = _FQ2Mul(pt1xx, pt1xy, pt2zx, pt2zy); // V2 = x1 * z2
294 |
295 | if (pt2xx == pt3[PTZX] && pt2xy == pt3[PTZY]) {
296 | if (pt2yx == pt3[PTYX] && pt2yy == pt3[PTYY]) {
297 | (
298 | pt3[PTXX], pt3[PTXY],
299 | pt3[PTYX], pt3[PTYY],
300 | pt3[PTZX], pt3[PTZY]
301 | ) = _ECTwistDoubleJacobian(pt1xx, pt1xy, pt1yx, pt1yy, pt1zx, pt1zy);
302 | return pt3;
303 | }
304 | (
305 | pt3[PTXX], pt3[PTXY],
306 | pt3[PTYX], pt3[PTYY],
307 | pt3[PTZX], pt3[PTZY]
308 | ) = (
309 | 1, 0,
310 | 1, 0,
311 | 0, 0
312 | );
313 | return pt3;
314 | }
315 |
316 | (pt2zx, pt2zy) = _FQ2Mul(pt1zx, pt1zy, pt2zx, pt2zy); // W = z1 * z2
317 | (pt1xx, pt1xy) = _FQ2Sub(pt2yx, pt2yy, pt3[PTYX], pt3[PTYY]); // U = U1 - U2
318 | (pt1yx, pt1yy) = _FQ2Sub(pt2xx, pt2xy, pt3[PTZX], pt3[PTZY]); // V = V1 - V2
319 | (pt1zx, pt1zy) = _FQ2Mul(pt1yx, pt1yy, pt1yx, pt1yy); // V_squared = V * V
320 | (pt2yx, pt2yy) = _FQ2Mul(pt1zx, pt1zy, pt3[PTZX], pt3[PTZY]); // V_squared_times_V2 = V_squared * V2
321 | (pt1zx, pt1zy) = _FQ2Mul(pt1zx, pt1zy, pt1yx, pt1yy); // V_cubed = V * V_squared
322 | (pt3[PTZX], pt3[PTZY]) = _FQ2Mul(pt1zx, pt1zy, pt2zx, pt2zy); // newz = V_cubed * W
323 | (pt2xx, pt2xy) = _FQ2Mul(pt1xx, pt1xy, pt1xx, pt1xy); // U * U
324 | (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt2zx, pt2zy); // U * U * W
325 | (pt2xx, pt2xy) = _FQ2Sub(pt2xx, pt2xy, pt1zx, pt1zy); // U * U * W - V_cubed
326 | (pt2zx, pt2zy) = _FQ2Muc(pt2yx, pt2yy, 2); // 2 * V_squared_times_V2
327 | (pt2xx, pt2xy) = _FQ2Sub(pt2xx, pt2xy, pt2zx, pt2zy); // A = U * U * W - V_cubed - 2 * V_squared_times_V2
328 | (pt3[PTXX], pt3[PTXY]) = _FQ2Mul(pt1yx, pt1yy, pt2xx, pt2xy); // newx = V * A
329 | (pt1yx, pt1yy) = _FQ2Sub(pt2yx, pt2yy, pt2xx, pt2xy); // V_squared_times_V2 - A
330 | (pt1yx, pt1yy) = _FQ2Mul(pt1xx, pt1xy, pt1yx, pt1yy); // U * (V_squared_times_V2 - A)
331 | (pt1xx, pt1xy) = _FQ2Mul(pt1zx, pt1zy, pt3[PTYX], pt3[PTYY]); // V_cubed * U2
332 | (pt3[PTYX], pt3[PTYY]) = _FQ2Sub(pt1yx, pt1yy, pt1xx, pt1xy); // newy = U * (V_squared_times_V2 - A) - V_cubed * U2
333 | }
334 |
335 | function _ECTwistDoubleJacobian(
336 | uint256 pt1xx, uint256 pt1xy,
337 | uint256 pt1yx, uint256 pt1yy,
338 | uint256 pt1zx, uint256 pt1zy
339 | ) internal pure returns (
340 | uint256 pt2xx, uint256 pt2xy,
341 | uint256 pt2yx, uint256 pt2yy,
342 | uint256 pt2zx, uint256 pt2zy
343 | ) {
344 | (pt2xx, pt2xy) = _FQ2Muc(pt1xx, pt1xy, 3); // 3 * x
345 | (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt1xx, pt1xy); // W = 3 * x * x
346 | (pt1zx, pt1zy) = _FQ2Mul(pt1yx, pt1yy, pt1zx, pt1zy); // S = y * z
347 | (pt2yx, pt2yy) = _FQ2Mul(pt1xx, pt1xy, pt1yx, pt1yy); // x * y
348 | (pt2yx, pt2yy) = _FQ2Mul(pt2yx, pt2yy, pt1zx, pt1zy); // B = x * y * S
349 | (pt1xx, pt1xy) = _FQ2Mul(pt2xx, pt2xy, pt2xx, pt2xy); // W * W
350 | (pt2zx, pt2zy) = _FQ2Muc(pt2yx, pt2yy, 8); // 8 * B
351 | (pt1xx, pt1xy) = _FQ2Sub(pt1xx, pt1xy, pt2zx, pt2zy); // H = W * W - 8 * B
352 | (pt2zx, pt2zy) = _FQ2Mul(pt1zx, pt1zy, pt1zx, pt1zy); // S_squared = S * S
353 | (pt2yx, pt2yy) = _FQ2Muc(pt2yx, pt2yy, 4); // 4 * B
354 | (pt2yx, pt2yy) = _FQ2Sub(pt2yx, pt2yy, pt1xx, pt1xy); // 4 * B - H
355 | (pt2yx, pt2yy) = _FQ2Mul(pt2yx, pt2yy, pt2xx, pt2xy); // W * (4 * B - H)
356 | (pt2xx, pt2xy) = _FQ2Muc(pt1yx, pt1yy, 8); // 8 * y
357 | (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt1yx, pt1yy); // 8 * y * y
358 | (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt2zx, pt2zy); // 8 * y * y * S_squared
359 | (pt2yx, pt2yy) = _FQ2Sub(pt2yx, pt2yy, pt2xx, pt2xy); // newy = W * (4 * B - H) - 8 * y * y * S_squared
360 | (pt2xx, pt2xy) = _FQ2Muc(pt1xx, pt1xy, 2); // 2 * H
361 | (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt1zx, pt1zy); // newx = 2 * H * S
362 | (pt2zx, pt2zy) = _FQ2Mul(pt1zx, pt1zy, pt2zx, pt2zy); // S * S_squared
363 | (pt2zx, pt2zy) = _FQ2Muc(pt2zx, pt2zy, 8); // newz = 8 * S * S_squared
364 | }
365 |
366 | function _ECTwistMulJacobian(
367 | uint256 d,
368 | uint256 pt1xx, uint256 pt1xy,
369 | uint256 pt1yx, uint256 pt1yy,
370 | uint256 pt1zx, uint256 pt1zy
371 | ) internal pure returns (uint256[6] memory pt2) {
372 | while (d != 0) {
373 | if ((d & 1) != 0) {
374 | pt2 = _ECTwistAddJacobian(
375 | pt2[PTXX], pt2[PTXY],
376 | pt2[PTYX], pt2[PTYY],
377 | pt2[PTZX], pt2[PTZY],
378 | pt1xx, pt1xy,
379 | pt1yx, pt1yy,
380 | pt1zx, pt1zy);
381 | }
382 | (
383 | pt1xx, pt1xy,
384 | pt1yx, pt1yy,
385 | pt1zx, pt1zy
386 | ) = _ECTwistDoubleJacobian(
387 | pt1xx, pt1xy,
388 | pt1yx, pt1yy,
389 | pt1zx, pt1zy
390 | );
391 |
392 | d = d / 2;
393 | }
394 | }
395 | }
396 | // This file is MIT Licensed.
397 | //
398 | // Copyright 2017 Christian Reitwiessner
399 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
400 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
401 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
402 |
403 | library Pairing {
404 | struct G1Point {
405 | uint X;
406 | uint Y;
407 | }
408 | // Encoding of field elements is: X[0] * z + X[1]
409 | struct G2Point {
410 | uint[2] X;
411 | uint[2] Y;
412 | }
413 | /// @return the generator of G1
414 | function P1() pure internal returns (G1Point memory) {
415 | return G1Point(1, 2);
416 | }
417 | /// @return the generator of G2
418 | function P2() pure internal returns (G2Point memory) {
419 | return G2Point(
420 | [10857046999023057135944570762232829481370756359578518086990519993285655852781,
421 | 11559732032986387107991004021392285783925812861821192530917403151452391805634],
422 | [8495653923123431417604973247489272438418190587263600148770280649306958101930,
423 | 4082367875863433681332203403145435568316851327593401208105741076214120093531]
424 | );
425 | }
426 | /// @return the negation of p, i.e. p.addition(p.negate()) should be zero.
427 | function negate(G1Point memory p) pure internal returns (G1Point memory) {
428 | // The prime q in the base field F_q for G1
429 | uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
430 | if (p.X == 0 && p.Y == 0)
431 | return G1Point(0, 0);
432 | return G1Point(p.X, q - (p.Y % q));
433 | }
434 | /// @return r the sum of two points of G1
435 | function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {
436 | uint[4] memory input;
437 | input[0] = p1.X;
438 | input[1] = p1.Y;
439 | input[2] = p2.X;
440 | input[3] = p2.Y;
441 | bool success;
442 | assembly {
443 | success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60)
444 | // Use "invalid" to make gas estimation work
445 | switch success case 0 { invalid() }
446 | }
447 | require(success);
448 | }
449 |
450 |
451 | /// @return r the sum of two points of G2
452 | function addition(G2Point memory p1, G2Point memory p2) internal view returns (G2Point memory r) {
453 | (r.X[0], r.X[1], r.Y[0], r.Y[1]) = BN256G2.ECTwistAdd(p1.X[0],p1.X[1],p1.Y[0],p1.Y[1],p2.X[0],p2.X[1],p2.Y[0],p2.Y[1]);
454 | }
455 |
456 |
457 | /// @return r the product of a point on G1 and a scalar, i.e.
458 | /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p.
459 | function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) {
460 | uint[3] memory input;
461 | input[0] = p.X;
462 | input[1] = p.Y;
463 | input[2] = s;
464 | bool success;
465 | assembly {
466 | success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60)
467 | // Use "invalid" to make gas estimation work
468 | switch success case 0 { invalid() }
469 | }
470 | require (success);
471 | }
472 | /// @return the result of computing the pairing check
473 | /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1
474 | /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should
475 | /// return true.
476 | function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {
477 | require(p1.length == p2.length);
478 | uint elements = p1.length;
479 | uint inputSize = elements * 6;
480 | uint[] memory input = new uint[](inputSize);
481 | for (uint i = 0; i < elements; i++)
482 | {
483 | input[i * 6 + 0] = p1[i].X;
484 | input[i * 6 + 1] = p1[i].Y;
485 | input[i * 6 + 2] = p2[i].X[1];
486 | input[i * 6 + 3] = p2[i].X[0];
487 | input[i * 6 + 4] = p2[i].Y[1];
488 | input[i * 6 + 5] = p2[i].Y[0];
489 | }
490 | uint[1] memory out;
491 | bool success;
492 | assembly {
493 | success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)
494 | // Use "invalid" to make gas estimation work
495 | switch success case 0 { invalid() }
496 | }
497 | require(success);
498 | return out[0] != 0;
499 | }
500 | /// Convenience method for a pairing check for two pairs.
501 | function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) {
502 | G1Point[] memory p1 = new G1Point[](2);
503 | G2Point[] memory p2 = new G2Point[](2);
504 | p1[0] = a1;
505 | p1[1] = b1;
506 | p2[0] = a2;
507 | p2[1] = b2;
508 | return pairing(p1, p2);
509 | }
510 | /// Convenience method for a pairing check for three pairs.
511 | function pairingProd3(
512 | G1Point memory a1, G2Point memory a2,
513 | G1Point memory b1, G2Point memory b2,
514 | G1Point memory c1, G2Point memory c2
515 | ) internal view returns (bool) {
516 | G1Point[] memory p1 = new G1Point[](3);
517 | G2Point[] memory p2 = new G2Point[](3);
518 | p1[0] = a1;
519 | p1[1] = b1;
520 | p1[2] = c1;
521 | p2[0] = a2;
522 | p2[1] = b2;
523 | p2[2] = c2;
524 | return pairing(p1, p2);
525 | }
526 | /// Convenience method for a pairing check for four pairs.
527 | function pairingProd4(
528 | G1Point memory a1, G2Point memory a2,
529 | G1Point memory b1, G2Point memory b2,
530 | G1Point memory c1, G2Point memory c2,
531 | G1Point memory d1, G2Point memory d2
532 | ) internal view returns (bool) {
533 | G1Point[] memory p1 = new G1Point[](4);
534 | G2Point[] memory p2 = new G2Point[](4);
535 | p1[0] = a1;
536 | p1[1] = b1;
537 | p1[2] = c1;
538 | p1[3] = d1;
539 | p2[0] = a2;
540 | p2[1] = b2;
541 | p2[2] = c2;
542 | p2[3] = d2;
543 | return pairing(p1, p2);
544 | }
545 | }
546 |
547 | contract Verifier {
548 | using Pairing for *;
549 | struct VerifyingKey {
550 | Pairing.G2Point h;
551 | Pairing.G1Point g_alpha;
552 | Pairing.G2Point h_beta;
553 | Pairing.G1Point g_gamma;
554 | Pairing.G2Point h_gamma;
555 | Pairing.G1Point[] query;
556 | }
557 | struct Proof {
558 | Pairing.G1Point a;
559 | Pairing.G2Point b;
560 | Pairing.G1Point c;
561 | }
562 | function verifyingKey() pure internal returns (VerifyingKey memory vk) {
563 | vk.h= Pairing.G2Point([uint256(0x052f6d551c292af5839a17b48560ccc26a13c8afe06d052d018659e5af208b7c), uint256(0x199b9e1b80889d9e0f34c19d4583cea80c5ab4443e44c0eb2c20aa476b8242a9)], [uint256(0x0710d972dfb67510e174bc9e8dc8ee92c32d116886989403fcb436d7744f7e93), uint256(0x2d316a218f66e3c109bebe0977c7dce799f32c96ba466e5ed3d6a5595d7a1cee)]);
564 | vk.g_alpha = Pairing.G1Point(uint256(0x007d622529cae0ede1b6d47220be1aa7e3eaa6a411876e10474670530f0ead5e), uint256(0x20759f0b508aaa59367290123502d6b1f4ac9b79c30390e01c27cb5888b4f654));
565 | vk.h_beta = Pairing.G2Point([uint256(0x2ae3cddf0644841615ea88c37c842c0453726b097e8199abdb422ba37b3da76f), uint256(0x19a13e4fd10eb3fcc40cdecf4c252eac62f530a41d3d5258107029c4284b32fb)], [uint256(0x2c18b03f3facfff359059d7768a7e05cdd935e138398f3f46db977de502dfb62), uint256(0x293949d189148c142d2fbd8500cbd117091e79e554876d75fcda6b83bc1abf0a)]);
566 | vk.g_gamma = Pairing.G1Point(uint256(0x1b25a7980e7464aafc15c4cdea1d1681f9e7f6f09c7858b1b9f74c260328832b), uint256(0x1f179761cb7db872d21bb79bb2861ac6376cab386f5f29410d7329d50066a936));
567 | vk.h_gamma = Pairing.G2Point([uint256(0x052f6d551c292af5839a17b48560ccc26a13c8afe06d052d018659e5af208b7c), uint256(0x199b9e1b80889d9e0f34c19d4583cea80c5ab4443e44c0eb2c20aa476b8242a9)], [uint256(0x0710d972dfb67510e174bc9e8dc8ee92c32d116886989403fcb436d7744f7e93), uint256(0x2d316a218f66e3c109bebe0977c7dce799f32c96ba466e5ed3d6a5595d7a1cee)]);
568 | vk.query = new Pairing.G1Point[](10);
569 | vk.query[0] = Pairing.G1Point(uint256(0x26f33e6bdb65847214bddf2125032fd01a2b0d3e6b54ed44ce6c10575aa239bd), uint256(0x205f6940fb76063144d3f2bba040a64be6f88e694ae52f190e58363370b59119));
570 | vk.query[1] = Pairing.G1Point(uint256(0x1f0555d3d1a746b8ed44ff828ca6efea721edd25aae37b31d975b939c0ebfd3e), uint256(0x29ae78fe19a8360540643626488a2c18f6af48cec366ceb32882c363fae20950));
571 | vk.query[2] = Pairing.G1Point(uint256(0x2ac91afbbcb0f05c90c7e48a2097247cb9e408b7d02a30950f9282e141e9ff9e), uint256(0x2a37ccd4413e5cffda7f73b19fe303575df1b2a9e7869395a8498ae284fc2e19));
572 | vk.query[3] = Pairing.G1Point(uint256(0x03fce0c74a2e351905e49ec649546dba62d2f598885b88dccdf7743523bed875), uint256(0x08566668adaefc7d7157ec6fa201ab9e05954e22b248292d51f6d97f147e4158));
573 | vk.query[4] = Pairing.G1Point(uint256(0x06a37dc1f6eceff90bfc47d7d1a84e7cc757cb211249e0a486d44c2a6a51c3de), uint256(0x0b3e008cccc17e3bfa06284b6f1cbf1f67f46538ebfa6264ed260edeeb69f354));
574 | vk.query[5] = Pairing.G1Point(uint256(0x07c76bcc8101df58bd32ea34432892c0d75d4ba7d4a40836d40b897fbdb4a714), uint256(0x284f5cd8279eb6bb963f98d74a4eea4c87414023c3d69e9d6701cc0c2e8cf0bf));
575 | vk.query[6] = Pairing.G1Point(uint256(0x06ba14ce5053eb68fcb0d05411f653fa9fe0fd99b7e2a52b06f1332f4917f260), uint256(0x15dbe842fc42006c2b43ed405995143b2ec68693326a2177e977bbc420c04e9f));
576 | vk.query[7] = Pairing.G1Point(uint256(0x13b9efc46d5ca316206f7e50f82148235a0179c8c22b13fc28d0ae780ed7d58a), uint256(0x01d71a7aa55424f791982e6dfa886bb632d93d7728e6189771eea6e799f477b7));
577 | vk.query[8] = Pairing.G1Point(uint256(0x2169a2d87f0aee29058d470ff6643fe76a042b6dac01b3ec6ea4a082aa6d68ed), uint256(0x25cce33ca9728bd84e48b09876e26e80945b02920965c8d9a2a790724e98989a));
578 | vk.query[9] = Pairing.G1Point(uint256(0x0f110f8d946356e8db0882527b5bf6b3eaea881de1cbacffdaec40e0488eb67b), uint256(0x1f24b10abdcac6c6b2c980968264a33c3d334f2e0ae0a8b8c88ecd462676a4ed));
579 | }
580 | function verify(uint[] memory input, Proof memory proof) internal view returns (uint) {
581 | uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
582 | VerifyingKey memory vk = verifyingKey();
583 | require(input.length + 1 == vk.query.length);
584 | // Compute the linear combination vk_x
585 | Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0);
586 | for (uint i = 0; i < input.length; i++) {
587 | require(input[i] < snark_scalar_field);
588 | vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.query[i + 1], input[i]));
589 | }
590 | vk_x = Pairing.addition(vk_x, vk.query[0]);
591 | /**
592 | * e(A*G^{alpha}, B*H^{beta}) = e(G^{alpha}, H^{beta}) * e(G^{psi}, H^{gamma})
593 | * * e(C, H)
594 | * where psi = \sum_{i=0}^l input_i pvk.query[i]
595 | */
596 | if (!Pairing.pairingProd4(vk.g_alpha, vk.h_beta, vk_x, vk.h_gamma, proof.c, vk.h, Pairing.negate(Pairing.addition(proof.a, vk.g_alpha)), Pairing.addition(proof.b, vk.h_beta))) return 1;
597 | /**
598 | * e(A, H^{gamma}) = e(G^{gamma}, B)
599 | */
600 | if (!Pairing.pairingProd2(proof.a, vk.h_gamma, Pairing.negate(vk.g_gamma), proof.b)) return 2;
601 | return 0;
602 | }
603 | function verifyTx(
604 | Proof memory proof, uint[9] memory input
605 | ) public view returns (bool r) {
606 | uint[] memory inputValues = new uint[](9);
607 |
608 | for(uint i = 0; i < input.length; i++){
609 | inputValues[i] = input[i];
610 | }
611 | if (verify(inputValues, proof) == 0) {
612 | return true;
613 | } else {
614 | return false;
615 | }
616 | }
617 | }
618 |
--------------------------------------------------------------------------------
/sources/zk/hardhat.config.ts:
--------------------------------------------------------------------------------
1 | import { HardhatUserConfig } from "hardhat/config";
2 | import "@nomicfoundation/hardhat-toolbox";
3 | import "hardhat-tracer";
4 |
5 | const config: HardhatUserConfig = {
6 | solidity: "0.8.14",
7 | };
8 |
9 | export default config;
10 |
--------------------------------------------------------------------------------
/sources/zk/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hardhat-project",
3 | "devDependencies": {
4 | "@nomicfoundation/hardhat-toolbox": "^2.0.0",
5 | "hardhat": "^2.11.2"
6 | },
7 | "dependencies": {
8 | "@nomicfoundation/hardhat-chai-matchers": "^1.0.0",
9 | "@nomicfoundation/hardhat-network-helpers": "^1.0.0",
10 | "@nomiclabs/hardhat-ethers": "^2.0.0",
11 | "@nomiclabs/hardhat-etherscan": "^3.0.0",
12 | "@typechain/ethers-v5": "^10.1.0",
13 | "@typechain/hardhat": "^6.1.2",
14 | "@types/chai": "^4.2.0",
15 | "@types/mocha": ">=9.1.0",
16 | "chai": "^4.2.0",
17 | "hardhat-gas-reporter": "^1.0.8",
18 | "hardhat-tracer": "^2.6.0",
19 | "solidity-coverage": "^0.8.1",
20 | "ts-node": "^10.9.1",
21 | "typechain": "^8.1.0",
22 | "typescript": "^5.2.2",
23 | "zokrates-js": "^1.1.8"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/sources/zk/scripts/deploy.ts:
--------------------------------------------------------------------------------
1 | import { ethers } from "hardhat";
2 |
3 | async function main() {
4 | const currentTimestampInSeconds = Math.round(Date.now() / 1000);
5 | const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60;
6 | const unlockTime = currentTimestampInSeconds + ONE_YEAR_IN_SECS;
7 |
8 | const lockedAmount = ethers.utils.parseEther("1");
9 |
10 | const Lock = await ethers.getContractFactory("Lock");
11 | const lock = await Lock.deploy(unlockTime, { value: lockedAmount });
12 |
13 | await lock.deployed();
14 |
15 | console.log(`Lock with 1 ETH and unlock timestamp ${unlockTime} deployed to ${lock.address}`);
16 | }
17 |
18 | // We recommend this pattern to be able to use async/await everywhere
19 | // and properly handle errors.
20 | main().catch((error) => {
21 | console.error(error);
22 | process.exitCode = 1;
23 | });
24 |
--------------------------------------------------------------------------------
/sources/zk/test/verifier.test.ts:
--------------------------------------------------------------------------------
1 | import { expect } from "chai";
2 | import { ethers } from "hardhat";
3 | import { Verifier } from "../typechain-types/Verifier";
4 | import { CompilationArtifacts, ZoKratesProvider } from "zokrates-js";
5 | import { readFileSync } from "fs";
6 | import { Master } from "../typechain-types";
7 | import { resolve } from 'path'
8 |
9 | describe("Verifier", function () {
10 | let master: Master;
11 | let zokratesProvider: ZoKratesProvider
12 |
13 | const zokArtifacts: CompilationArtifacts = {
14 | program: readFileSync(resolve(__dirname, '../zok/out')),
15 | abi: JSON.parse(readFileSync(resolve(__dirname, '../zok/abi.json'), 'utf-8'))
16 | }
17 |
18 | const provingKey = readFileSync(resolve(__dirname, '../zok/proving.key'))
19 |
20 | beforeEach(async () => {
21 | const { initialize } = await import("zokrates-js");
22 | zokratesProvider = (await initialize()).withOptions({
23 | backend: 'ark',
24 | curve: 'bn128',
25 | scheme: 'gm17'
26 | });
27 |
28 | const bn256 = await ethers.getContractFactory("BN256G2").then((f) => f.deploy());
29 |
30 | master = await ethers.getContractFactory("Master", {
31 | libraries: {
32 | "contracts/verifier.sol:BN256G2": bn256.address,
33 | }
34 | }).then((f) => f.deploy());
35 | })
36 |
37 | it("should verify a proof", async () => {
38 | const { witness, output } = zokratesProvider.computeWitness(
39 | zokArtifacts,
40 | [`${ethers.constants.WeiPerEther}`, '23'],
41 | )
42 |
43 | const commitment = hexListToUint256BigEndian(JSON.parse(output)).toString();
44 |
45 | await master.deposit(
46 | commitment,
47 | { value: ethers.constants.WeiPerEther }
48 | )
49 |
50 | const proof = zokratesProvider.generateProof(
51 | zokArtifacts.program,
52 | witness,
53 | provingKey);
54 |
55 |
56 | const sender = (await ethers.getSigners())[0];
57 | expect(() => master.connect(sender).
58 | withdraw(commitment, proof.proof as Verifier.ProofStruct, proof.inputs)
59 | ).to.changeEtherBalance(sender, ethers.constants.WeiPerEther);
60 | })
61 | });
62 |
63 |
64 | function hexListToUint256BigEndian(hexList: string[]) {
65 | let uint256Data = "0x";
66 | for (const hex of hexList) {
67 | const cleanedHex = hex.replace("0x", "");
68 | uint256Data += cleanedHex;
69 | }
70 | const uint256BigNumber = ethers.BigNumber.from(uint256Data);
71 | return uint256BigNumber;
72 | }
--------------------------------------------------------------------------------
/sources/zk/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2020",
4 | "module": "node16",
5 | "esModuleInterop": true,
6 | "allowJs": true,
7 | "allowSyntheticDefaultImports": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "strict": true,
10 | "skipLibCheck": true
11 | },
12 | "include": ["**/*.ts"]
13 | }
14 |
--------------------------------------------------------------------------------
/sources/zk/zok/abi.json:
--------------------------------------------------------------------------------
1 | {
2 | "inputs": [
3 | {
4 | "name": "deposit_amount",
5 | "public": true,
6 | "type": "field"
7 | },
8 | {
9 | "name": "secret",
10 | "public": false,
11 | "type": "field"
12 | }
13 | ],
14 | "output": {
15 | "type": "array",
16 | "components": {
17 | "size": 8,
18 | "type": "u32"
19 | }
20 | }
21 | }
--------------------------------------------------------------------------------
/sources/zk/zok/deposit.zok:
--------------------------------------------------------------------------------
1 | import "hashes/sha256/512bit" as sha256;
2 | import "utils/pack/u32/nonStrictUnpack256" as unpack256;
3 |
4 | // deposit_amount: 存款金额
5 | // secret: 随机数
6 | // returns: 用于取款的commitment
7 | def main(field deposit_amount, private field secret) -> u32[8] {
8 | return sha256(unpack256(deposit_amount), unpack256(secret));
9 | }
--------------------------------------------------------------------------------
/sources/zk/zok/out:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nishuzumi/blog/HEAD/sources/zk/zok/out
--------------------------------------------------------------------------------
/sources/zk/zok/out.r1cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nishuzumi/blog/HEAD/sources/zk/zok/out.r1cs
--------------------------------------------------------------------------------
/sources/zk/zok/out.wtns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nishuzumi/blog/HEAD/sources/zk/zok/out.wtns
--------------------------------------------------------------------------------
/sources/zk/zok/proof.json:
--------------------------------------------------------------------------------
1 | {
2 | "scheme": "gm17",
3 | "curve": "bn128",
4 | "proof": {
5 | "a": [
6 | "0x05a83e3c3b3ff9d59bdffdcf7aa655f42b941b0063f82cf26516846056d09aa6",
7 | "0x018039b7de92979ef6251c877971888ae049d09a6b48e5aa98c23ef91550ed36"
8 | ],
9 | "b": [
10 | [
11 | "0x1e88e783456a27e4f02dde8c742610339e395eb0bbf7f7efc1113815dcf0a16f",
12 | "0x1cc9de9e60c6519ea69c9b3a71c0809ac7ae3389a598d66fc27d378738d5de29"
13 | ],
14 | [
15 | "0x0715544abbc18e741620ff7c76cb2a7d3558ee157d23f275ab65c43c25357d07",
16 | "0x0344257236ba33a3ce7ce34b8d518f7572984036db6f77fc2fc13f51c548a837"
17 | ]
18 | ],
19 | "c": [
20 | "0x177113e528c76661a03a8f3f072f29e684244297a62926a0000d3a7135c1441f",
21 | "0x18cf275d0bc621473688848946584af771afca42e4f2bd0ef1e5d06e0adefd0f"
22 | ]
23 | },
24 | "inputs": [
25 | "0x0000000000000000000000000000000000000000000000000000000000000151",
26 | "0x00000000000000000000000000000000000000000000000000000000bb3eada7",
27 | "0x000000000000000000000000000000000000000000000000000000004b704815",
28 | "0x00000000000000000000000000000000000000000000000000000000cddda451",
29 | "0x00000000000000000000000000000000000000000000000000000000ca701d2a",
30 | "0x000000000000000000000000000000000000000000000000000000001f278e64",
31 | "0x00000000000000000000000000000000000000000000000000000000ef16f074",
32 | "0x0000000000000000000000000000000000000000000000000000000040e13298",
33 | "0x0000000000000000000000000000000000000000000000000000000026c5da72"
34 | ]
35 | }
--------------------------------------------------------------------------------
/sources/zk/zok/proving.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nishuzumi/blog/HEAD/sources/zk/zok/proving.key
--------------------------------------------------------------------------------
/sources/zk/zok/verification.key:
--------------------------------------------------------------------------------
1 | {
2 | "scheme": "gm17",
3 | "curve": "bn128",
4 | "h": [
5 | [
6 | "0x052f6d551c292af5839a17b48560ccc26a13c8afe06d052d018659e5af208b7c",
7 | "0x199b9e1b80889d9e0f34c19d4583cea80c5ab4443e44c0eb2c20aa476b8242a9"
8 | ],
9 | [
10 | "0x0710d972dfb67510e174bc9e8dc8ee92c32d116886989403fcb436d7744f7e93",
11 | "0x2d316a218f66e3c109bebe0977c7dce799f32c96ba466e5ed3d6a5595d7a1cee"
12 | ]
13 | ],
14 | "g_alpha": [
15 | "0x007d622529cae0ede1b6d47220be1aa7e3eaa6a411876e10474670530f0ead5e",
16 | "0x20759f0b508aaa59367290123502d6b1f4ac9b79c30390e01c27cb5888b4f654"
17 | ],
18 | "h_beta": [
19 | [
20 | "0x2ae3cddf0644841615ea88c37c842c0453726b097e8199abdb422ba37b3da76f",
21 | "0x19a13e4fd10eb3fcc40cdecf4c252eac62f530a41d3d5258107029c4284b32fb"
22 | ],
23 | [
24 | "0x2c18b03f3facfff359059d7768a7e05cdd935e138398f3f46db977de502dfb62",
25 | "0x293949d189148c142d2fbd8500cbd117091e79e554876d75fcda6b83bc1abf0a"
26 | ]
27 | ],
28 | "g_gamma": [
29 | "0x1b25a7980e7464aafc15c4cdea1d1681f9e7f6f09c7858b1b9f74c260328832b",
30 | "0x1f179761cb7db872d21bb79bb2861ac6376cab386f5f29410d7329d50066a936"
31 | ],
32 | "h_gamma": [
33 | [
34 | "0x052f6d551c292af5839a17b48560ccc26a13c8afe06d052d018659e5af208b7c",
35 | "0x199b9e1b80889d9e0f34c19d4583cea80c5ab4443e44c0eb2c20aa476b8242a9"
36 | ],
37 | [
38 | "0x0710d972dfb67510e174bc9e8dc8ee92c32d116886989403fcb436d7744f7e93",
39 | "0x2d316a218f66e3c109bebe0977c7dce799f32c96ba466e5ed3d6a5595d7a1cee"
40 | ]
41 | ],
42 | "query": [
43 | [
44 | "0x26f33e6bdb65847214bddf2125032fd01a2b0d3e6b54ed44ce6c10575aa239bd",
45 | "0x205f6940fb76063144d3f2bba040a64be6f88e694ae52f190e58363370b59119"
46 | ],
47 | [
48 | "0x1f0555d3d1a746b8ed44ff828ca6efea721edd25aae37b31d975b939c0ebfd3e",
49 | "0x29ae78fe19a8360540643626488a2c18f6af48cec366ceb32882c363fae20950"
50 | ],
51 | [
52 | "0x2ac91afbbcb0f05c90c7e48a2097247cb9e408b7d02a30950f9282e141e9ff9e",
53 | "0x2a37ccd4413e5cffda7f73b19fe303575df1b2a9e7869395a8498ae284fc2e19"
54 | ],
55 | [
56 | "0x03fce0c74a2e351905e49ec649546dba62d2f598885b88dccdf7743523bed875",
57 | "0x08566668adaefc7d7157ec6fa201ab9e05954e22b248292d51f6d97f147e4158"
58 | ],
59 | [
60 | "0x06a37dc1f6eceff90bfc47d7d1a84e7cc757cb211249e0a486d44c2a6a51c3de",
61 | "0x0b3e008cccc17e3bfa06284b6f1cbf1f67f46538ebfa6264ed260edeeb69f354"
62 | ],
63 | [
64 | "0x07c76bcc8101df58bd32ea34432892c0d75d4ba7d4a40836d40b897fbdb4a714",
65 | "0x284f5cd8279eb6bb963f98d74a4eea4c87414023c3d69e9d6701cc0c2e8cf0bf"
66 | ],
67 | [
68 | "0x06ba14ce5053eb68fcb0d05411f653fa9fe0fd99b7e2a52b06f1332f4917f260",
69 | "0x15dbe842fc42006c2b43ed405995143b2ec68693326a2177e977bbc420c04e9f"
70 | ],
71 | [
72 | "0x13b9efc46d5ca316206f7e50f82148235a0179c8c22b13fc28d0ae780ed7d58a",
73 | "0x01d71a7aa55424f791982e6dfa886bb632d93d7728e6189771eea6e799f477b7"
74 | ],
75 | [
76 | "0x2169a2d87f0aee29058d470ff6643fe76a042b6dac01b3ec6ea4a082aa6d68ed",
77 | "0x25cce33ca9728bd84e48b09876e26e80945b02920965c8d9a2a790724e98989a"
78 | ],
79 | [
80 | "0x0f110f8d946356e8db0882527b5bf6b3eaea881de1cbacffdaec40e0488eb67b",
81 | "0x1f24b10abdcac6c6b2c980968264a33c3d334f2e0ae0a8b8c88ecd462676a4ed"
82 | ]
83 | ]
84 | }
--------------------------------------------------------------------------------
/sources/zk/zok/witness:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nishuzumi/blog/HEAD/sources/zk/zok/witness
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | body {
6 | font-feature-settings: "rlig" 1, "calt" 1;
7 | }
8 |
9 | .home-content p {
10 | margin-top: 1.5em;
11 | line-height: 1.75em;
12 | }
13 |
14 | .home-content a {
15 | --tw-ring-color: hsl(var(--nextra-primary-hue) 100% 50%/0.3);
16 | --tw-text-opacity: 1;
17 | text-underline-position: under;
18 | text-decoration-line: underline;
19 | text-decoration-thickness: from-font;
20 | color: hsl(var(--nextra-primary-hue) 100% 50% / var(--tw-text-opacity));
21 | }
22 |
23 | figcaption {
24 | font-size: 0.85rem;
25 | line-height: 1.5rem;
26 | display: block;
27 | text-align: center;
28 | margin-top: 0.5rem;
29 | }
30 |
31 | code.text-\[\.9em\] {
32 | font-size: 14px;
33 | }
34 |
35 | @media screen and (max-width: 1200px) {
36 | .home-content .hide-medium {
37 | display: none;
38 | }
39 | }
40 |
41 | @media screen and (max-width: 720px) {
42 | .home-content p {
43 | font-size: 0.9rem;
44 | }
45 | .home-content .hide-small {
46 | display: none;
47 | }
48 | }
49 |
50 | /* Mermaid */
51 | svg[aria-roledescription="sequence"] {
52 | @apply rounded-lg p-4;
53 | background: linear-gradient(135deg, rgb(102, 126, 234), rgb(118, 75, 162));
54 | }
55 |
56 | svg[aria-roledescription="sequence"] line {
57 | stroke: black !important;
58 | }
59 |
60 | text.actor {
61 | @apply text-base;
62 | }
63 |
64 | text.actor > tspan {
65 | fill: #ececff !important;
66 | }
67 |
68 | .actor {
69 | fill: #22272e !important;
70 | stroke: none !important;
71 | }
72 |
73 | .messageText {
74 | fill: white !important;
75 | stroke: none;
76 | }
77 |
78 | .messageLine0 {
79 | stroke: white !important;
80 | }
81 |
82 | .actor-line {
83 | stroke: grey;
84 | }
85 |
86 | /* End Mermaid */
87 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./pages/**/*.{js,jsx,ts,tsx,md,mdx}",
5 | "./components/**/*.{js,jsx,ts,tsx,md,mdx}",
6 | "./theme.config.tsx",
7 | ],
8 | theme: {
9 | extend: {},
10 | },
11 | plugins: [],
12 | };
13 |
--------------------------------------------------------------------------------
/theme.config.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { DocsThemeConfig, Link } from "nextra-theme-docs";
3 | import { Preamble } from "components/preamble";
4 |
5 | const config: DocsThemeConfig = {
6 | logo: ByteMahou,
7 | project: {
8 | link: "https://github.com/nishuzumi/blog",
9 | },
10 | chat: {
11 | link: "https://t.me/BoxMrChen",
12 | },
13 | docsRepositoryBase: "https://github.com/nishuzumi/blog/tree/main",
14 | footer: {
15 | text: (
16 |
17 |
18 | 简约的字节魔法
19 |
20 |
21 |
22 | Made by Box With
23 | ❤️
24 |
25 |
26 |
27 | ),
28 | },
29 | useNextSeoProps() {
30 | return {
31 | titleTemplate: "%s - ByteMahou",
32 | };
33 | },
34 | editLink: {
35 | text: "修正此文章",
36 | },
37 | feedback: {
38 | content: "有疑问?请在此提出你的问题。",
39 | },
40 | components: {
41 | Preamble,
42 | },
43 | toc: {
44 | title: "目录",
45 | },
46 | head: (
47 | <>
48 |
49 |
50 |
51 | >
52 | ),
53 | };
54 |
55 | export default config;
56 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2021",
4 | "baseUrl": ".",
5 | "lib": ["dom", "dom.iterable", "esnext"],
6 | "allowJs": true,
7 | "skipLibCheck": true,
8 | "strict": false,
9 | "forceConsistentCasingInFileNames": true,
10 | "noEmit": true,
11 | "incremental": true,
12 | "esModuleInterop": true,
13 | "module": "esnext",
14 | "moduleResolution": "node",
15 | "resolveJsonModule": true,
16 | "isolatedModules": true,
17 | "jsx": "preserve"
18 | },
19 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
20 | "exclude": ["node_modules", "sources"]
21 | }
22 |
--------------------------------------------------------------------------------