jiren 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/components/native-node.ts +71 -17
- package/components/native.ts +44 -3
- package/dist/components/native-node.d.ts +6 -6
- package/dist/components/native-node.d.ts.map +1 -1
- package/dist/components/native-node.js +57 -17
- package/dist/components/native-node.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -57,6 +57,31 @@ Jiren outperforms top clients in every metric—throughput, latency, and stabili
|
|
|
57
57
|
bun add jiren
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
+
### Windows native deps (curl-impersonate)
|
|
61
|
+
|
|
62
|
+
To keep Windows performance on par with macOS, provide curl-impersonate binaries:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Option A: build from source in MSYS2 (MINGW64 shell)
|
|
66
|
+
JIREN_IMPERSONATE_BUILD=1 bun run install-deps
|
|
67
|
+
|
|
68
|
+
# Option B: download a prebuilt zip or tar.gz containing curl-impersonate.dll + import lib
|
|
69
|
+
JIREN_IMPERSONATE_URL=https://example.com/curl-impersonate-win64.zip bun run install-deps
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
MSYS2 packages usually required: `git`, `mingw-w64-x86_64-toolchain`, `mingw-w64-x86_64-cmake`, `mingw-w64-x86_64-ninja`.
|
|
73
|
+
|
|
74
|
+
Expected files after install:
|
|
75
|
+
|
|
76
|
+
- `jiren/lib/windows/curl-impersonate.dll`
|
|
77
|
+
- `jiren/lib/windows/curl-impersonate.lib` (or `jiren/lib/windows/libcurl-impersonate.dll.a`)
|
|
78
|
+
|
|
79
|
+
Then build with impersonation enabled:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
zig build -Dimpersonate=true
|
|
83
|
+
```
|
|
84
|
+
|
|
60
85
|
---
|
|
61
86
|
|
|
62
87
|
## 🚀 Quick Start
|
|
@@ -7,24 +7,76 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
7
7
|
const __dirname = path.dirname(__filename);
|
|
8
8
|
|
|
9
9
|
const platform = process.platform;
|
|
10
|
-
const arch = process.arch;
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
const suffix =
|
|
12
|
+
platform === "darwin" ? "dylib" : platform === "win32" ? "dll" : "so";
|
|
13
|
+
|
|
14
|
+
const libDirs = [
|
|
15
|
+
path.resolve(__dirname, "../lib"),
|
|
16
|
+
path.resolve(__dirname, "../../lib"),
|
|
17
|
+
];
|
|
18
|
+
const libNames =
|
|
19
|
+
platform === "win32"
|
|
20
|
+
? [`libhttpclient.${suffix}`, `httpclient.${suffix}`]
|
|
21
|
+
: [`libhttpclient.${suffix}`];
|
|
22
|
+
|
|
23
|
+
const libCandidates: string[] = [];
|
|
24
|
+
for (const dir of libDirs) {
|
|
25
|
+
for (const name of libNames) {
|
|
26
|
+
libCandidates.push(path.join(dir, name));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const libPath = libCandidates.find((candidate) => fs.existsSync(candidate));
|
|
31
|
+
if (!libPath) {
|
|
32
|
+
throw new Error(
|
|
33
|
+
`Native library not found. Looked in:\n${libCandidates
|
|
34
|
+
.map((p) => `- ${p}`)
|
|
35
|
+
.join("\n")}`,
|
|
36
|
+
);
|
|
17
37
|
}
|
|
18
38
|
|
|
19
|
-
|
|
20
|
-
|
|
39
|
+
if (platform === "win32") {
|
|
40
|
+
const dllDirs = [
|
|
41
|
+
path.dirname(libPath),
|
|
42
|
+
...libDirs.map((dir) => path.join(dir, "windows")),
|
|
43
|
+
].filter((dir, index, arr) => fs.existsSync(dir) && arr.indexOf(dir) === index);
|
|
44
|
+
|
|
45
|
+
if (dllDirs.length > 0) {
|
|
46
|
+
const currentPath = process.env.PATH ?? "";
|
|
47
|
+
const currentPathLower = currentPath.toLowerCase();
|
|
48
|
+
const toPrepend = dllDirs.filter(
|
|
49
|
+
(dir) => !currentPathLower.includes(dir.toLowerCase()),
|
|
50
|
+
);
|
|
51
|
+
if (toPrepend.length > 0) {
|
|
52
|
+
process.env.PATH = `${toPrepend.join(";")};${currentPath}`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
21
55
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
56
|
+
for (const dir of dllDirs) {
|
|
57
|
+
for (const depName of ["curl-impersonate.dll", "libcurl-impersonate.dll"]) {
|
|
58
|
+
const depPath = path.join(dir, depName);
|
|
59
|
+
if (!fs.existsSync(depPath)) continue;
|
|
60
|
+
try {
|
|
61
|
+
koffi.load(depPath);
|
|
62
|
+
} catch {
|
|
63
|
+
// Best-effort preload; main load error below is the actionable one.
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
25
67
|
}
|
|
26
68
|
|
|
27
|
-
|
|
69
|
+
let lib: ReturnType<typeof koffi.load>;
|
|
70
|
+
try {
|
|
71
|
+
lib = koffi.load(libPath);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
74
|
+
throw new Error(
|
|
75
|
+
platform === "win32"
|
|
76
|
+
? `Failed to load ${libPath}. Ensure Windows deps are present in jiren/lib/windows (curl-impersonate.dll + import lib). Original error: ${reason}`
|
|
77
|
+
: `Failed to load ${libPath}: ${reason}`,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
28
80
|
|
|
29
81
|
export const symbols = {
|
|
30
82
|
zclient_new: lib.func("zclient_new", "void *", []),
|
|
@@ -98,13 +150,15 @@ export const symbols = {
|
|
|
98
150
|
zfull_response_status: lib.func("zfull_response_status", "uint16_t", [
|
|
99
151
|
"void *",
|
|
100
152
|
]),
|
|
101
|
-
|
|
153
|
+
zfull_response_headers: lib.func("zfull_response_headers", "void *", [
|
|
102
154
|
"void *",
|
|
103
155
|
]),
|
|
104
|
-
|
|
105
|
-
"
|
|
106
|
-
|
|
107
|
-
|
|
156
|
+
zfull_response_headers_len: lib.func(
|
|
157
|
+
"zfull_response_headers_len",
|
|
158
|
+
"uint64_t",
|
|
159
|
+
["void *"],
|
|
160
|
+
),
|
|
161
|
+
zfull_response_body: lib.func("zfull_response_body", "void *", [
|
|
108
162
|
"void *",
|
|
109
163
|
]),
|
|
110
164
|
zfull_response_body_len: lib.func("zfull_response_body_len", "uint64_t", [
|
package/components/native.ts
CHANGED
|
@@ -1,11 +1,52 @@
|
|
|
1
1
|
import { dlopen, FFIType, suffix } from "bun:ffi";
|
|
2
|
+
import { existsSync } from "fs";
|
|
2
3
|
import { join } from "path";
|
|
3
4
|
|
|
4
5
|
const platform = process.platform;
|
|
5
|
-
const arch = process.arch;
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const libDirs = [
|
|
8
|
+
join(import.meta.dir, "../lib"),
|
|
9
|
+
join(import.meta.dir, "../../lib"),
|
|
10
|
+
];
|
|
11
|
+
const libNames =
|
|
12
|
+
platform === "win32"
|
|
13
|
+
? [`libhttpclient.${suffix}`, `httpclient.${suffix}`]
|
|
14
|
+
: [`libhttpclient.${suffix}`];
|
|
15
|
+
const libCandidates: string[] = [];
|
|
16
|
+
for (const dir of libDirs) {
|
|
17
|
+
for (const name of libNames) {
|
|
18
|
+
libCandidates.push(join(dir, name));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const libPath = libCandidates.find((candidate) => existsSync(candidate));
|
|
22
|
+
|
|
23
|
+
if (!libPath) {
|
|
24
|
+
throw new Error(
|
|
25
|
+
`Native library not found. Looked in:\n${libCandidates
|
|
26
|
+
.map((p) => `- ${p}`)
|
|
27
|
+
.join("\n")}`,
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (platform === "win32") {
|
|
32
|
+
const dllDirs = [
|
|
33
|
+
join(import.meta.dir, "../lib"),
|
|
34
|
+
join(import.meta.dir, "../../lib"),
|
|
35
|
+
join(import.meta.dir, "../lib/windows"),
|
|
36
|
+
join(import.meta.dir, "../../lib/windows"),
|
|
37
|
+
].filter(
|
|
38
|
+
(dir, index, arr) => existsSync(dir) && arr.indexOf(dir) === index,
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const currentPath = process.env.PATH ?? "";
|
|
42
|
+
const currentPathLower = currentPath.toLowerCase();
|
|
43
|
+
const toPrepend = dllDirs.filter(
|
|
44
|
+
(dir) => !currentPathLower.includes(dir.toLowerCase()),
|
|
45
|
+
);
|
|
46
|
+
if (toPrepend.length > 0) {
|
|
47
|
+
process.env.PATH = `${toPrepend.join(";")};${currentPath}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
9
50
|
|
|
10
51
|
export const ffiDef = {
|
|
11
52
|
zclient_new: {
|
|
@@ -19,9 +19,9 @@ export declare const symbols: {
|
|
|
19
19
|
zclient_set_benchmark_mode: koffi.KoffiFunction;
|
|
20
20
|
zclient_request_full: koffi.KoffiFunction;
|
|
21
21
|
zfull_response_status: koffi.KoffiFunction;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
zfull_response_headers: koffi.KoffiFunction;
|
|
23
|
+
zfull_response_headers_len: koffi.KoffiFunction;
|
|
24
|
+
zfull_response_body: koffi.KoffiFunction;
|
|
25
25
|
zfull_response_body_len: koffi.KoffiFunction;
|
|
26
26
|
zfull_response_was_decompressed: koffi.KoffiFunction;
|
|
27
27
|
z_simd_key_match: koffi.KoffiFunction;
|
|
@@ -98,9 +98,9 @@ export declare const nativeLib: {
|
|
|
98
98
|
zclient_set_benchmark_mode: koffi.KoffiFunction;
|
|
99
99
|
zclient_request_full: koffi.KoffiFunction;
|
|
100
100
|
zfull_response_status: koffi.KoffiFunction;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
zfull_response_headers: koffi.KoffiFunction;
|
|
102
|
+
zfull_response_headers_len: koffi.KoffiFunction;
|
|
103
|
+
zfull_response_body: koffi.KoffiFunction;
|
|
104
104
|
zfull_response_body_len: koffi.KoffiFunction;
|
|
105
105
|
zfull_response_was_decompressed: koffi.KoffiFunction;
|
|
106
106
|
z_simd_key_match: koffi.KoffiFunction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-node.d.ts","sourceRoot":"","sources":["../../components/native-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"native-node.d.ts","sourceRoot":"","sources":["../../components/native-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgF1B,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqPnB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAErB,CAAC"}
|
|
@@ -5,21 +5,63 @@ import { fileURLToPath } from "url";
|
|
|
5
5
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = path.dirname(__filename);
|
|
7
7
|
const platform = process.platform;
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const suffix = platform === "darwin" ? "dylib" : platform === "win32" ? "dll" : "so";
|
|
9
|
+
const libDirs = [
|
|
10
|
+
path.resolve(__dirname, "../lib"),
|
|
11
|
+
path.resolve(__dirname, "../../lib"),
|
|
12
|
+
];
|
|
13
|
+
const libNames = platform === "win32"
|
|
14
|
+
? [`libhttpclient.${suffix}`, `httpclient.${suffix}`]
|
|
15
|
+
: [`libhttpclient.${suffix}`];
|
|
16
|
+
const libCandidates = [];
|
|
17
|
+
for (const dir of libDirs) {
|
|
18
|
+
for (const name of libNames) {
|
|
19
|
+
libCandidates.push(path.join(dir, name));
|
|
20
|
+
}
|
|
12
21
|
}
|
|
13
|
-
|
|
14
|
-
|
|
22
|
+
const libPath = libCandidates.find((candidate) => fs.existsSync(candidate));
|
|
23
|
+
if (!libPath) {
|
|
24
|
+
throw new Error(`Native library not found. Looked in:\n${libCandidates
|
|
25
|
+
.map((p) => `- ${p}`)
|
|
26
|
+
.join("\n")}`);
|
|
15
27
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
if (platform === "win32") {
|
|
29
|
+
const dllDirs = [
|
|
30
|
+
path.dirname(libPath),
|
|
31
|
+
...libDirs.map((dir) => path.join(dir, "windows")),
|
|
32
|
+
].filter((dir, index, arr) => fs.existsSync(dir) && arr.indexOf(dir) === index);
|
|
33
|
+
if (dllDirs.length > 0) {
|
|
34
|
+
const currentPath = process.env.PATH ?? "";
|
|
35
|
+
const currentPathLower = currentPath.toLowerCase();
|
|
36
|
+
const toPrepend = dllDirs.filter((dir) => !currentPathLower.includes(dir.toLowerCase()));
|
|
37
|
+
if (toPrepend.length > 0) {
|
|
38
|
+
process.env.PATH = `${toPrepend.join(";")};${currentPath}`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (const dir of dllDirs) {
|
|
42
|
+
for (const depName of ["curl-impersonate.dll", "libcurl-impersonate.dll"]) {
|
|
43
|
+
const depPath = path.join(dir, depName);
|
|
44
|
+
if (!fs.existsSync(depPath))
|
|
45
|
+
continue;
|
|
46
|
+
try {
|
|
47
|
+
koffi.load(depPath);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Best-effort preload; main load error below is the actionable one.
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
let lib;
|
|
56
|
+
try {
|
|
57
|
+
lib = koffi.load(libPath);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
61
|
+
throw new Error(platform === "win32"
|
|
62
|
+
? `Failed to load ${libPath}. Ensure Windows deps are present in jiren/lib/windows (curl-impersonate.dll + import lib). Original error: ${reason}`
|
|
63
|
+
: `Failed to load ${libPath}: ${reason}`);
|
|
21
64
|
}
|
|
22
|
-
const lib = koffi.load(libPath);
|
|
23
65
|
export const symbols = {
|
|
24
66
|
zclient_new: lib.func("zclient_new", "void *", []),
|
|
25
67
|
zclient_free: lib.func("zclient_free", "void", ["void *"]),
|
|
@@ -84,13 +126,11 @@ export const symbols = {
|
|
|
84
126
|
zfull_response_status: lib.func("zfull_response_status", "uint16_t", [
|
|
85
127
|
"void *",
|
|
86
128
|
]),
|
|
87
|
-
|
|
88
|
-
"void *",
|
|
89
|
-
]),
|
|
90
|
-
zfull_response_header_len: lib.func("zfull_response_header_len", "uint64_t", [
|
|
129
|
+
zfull_response_headers: lib.func("zfull_response_headers", "void *", [
|
|
91
130
|
"void *",
|
|
92
131
|
]),
|
|
93
|
-
|
|
132
|
+
zfull_response_headers_len: lib.func("zfull_response_headers_len", "uint64_t", ["void *"]),
|
|
133
|
+
zfull_response_body: lib.func("zfull_response_body", "void *", [
|
|
94
134
|
"void *",
|
|
95
135
|
]),
|
|
96
136
|
zfull_response_body_len: lib.func("zfull_response_body_len", "uint64_t", [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-node.js","sourceRoot":"","sources":["../../components/native-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"native-node.js","sourceRoot":"","sources":["../../components/native-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AAElC,MAAM,MAAM,GACV,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAExE,MAAM,OAAO,GAAG;IACd,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;CACrC,CAAC;AACF,MAAM,QAAQ,GACZ,QAAQ,KAAK,OAAO;IAClB,CAAC,CAAC,CAAC,iBAAiB,MAAM,EAAE,EAAE,cAAc,MAAM,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;AAElC,MAAM,aAAa,GAAa,EAAE,CAAC;AACnC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5E,IAAI,CAAC,OAAO,EAAE,CAAC;IACb,MAAM,IAAI,KAAK,CACb,yCAAyC,aAAa;SACnD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;SACpB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;AACJ,CAAC;AAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG;QACd,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;KACnD,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;IAEhF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CACvD,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,EAAE,CAAC;YAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;YACtE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,GAAkC,CAAC;AACvC,IAAI,CAAC;IACH,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,IAAI,KAAK,CACb,QAAQ,KAAK,OAAO;QAClB,CAAC,CAAC,kBAAkB,OAAO,+GAA+G,MAAM,EAAE;QAClJ,CAAC,CAAC,kBAAkB,OAAO,KAAK,MAAM,EAAE,CAC3C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC;IAClD,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC1D,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC1E,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE;QAC/C,QAAQ;QACR,cAAc;QACd,cAAc;KACf,CAAC;IACF,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE;QACrD,QAAQ,EAAE,MAAM;QAChB,cAAc,EAAE,SAAS;QACzB,cAAc,EAAE,MAAM;QACtB,cAAc,EAAE,UAAU;QAC1B,cAAc,EAAE,OAAO;QACvB,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,UAAU;KACnB,CAAC;IACF,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE;QACrD,QAAQ;QACR,cAAc;KACf,CAAC;IACF,uBAAuB,EAAE,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,UAAU,EAAE;QACvE,QAAQ;KACT,CAAC;IACF,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE;QACjE,QAAQ;KACT,CAAC;IACF,yBAAyB,EAAE,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,UAAU,EAAE;QAC3E,QAAQ;KACT,CAAC;IACF,wBAAwB,EAAE,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,QAAQ,EAAE;QACvE,QAAQ;KACT,CAAC;IACF,4BAA4B,EAAE,GAAG,CAAC,IAAI,CACpC,8BAA8B,EAC9B,UAAU,EACV,CAAC,QAAQ,CAAC,CACX;IACD,qCAAqC,EAAE,GAAG,CAAC,IAAI,CAC7C,uCAAuC,EACvC,QAAQ,EACR,CAAC,QAAQ,CAAC,CACX;IACD,2BAA2B,EAAE,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,MAAM,EAAE;QAC3E,QAAQ;KACT,CAAC;IACF,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE;QAC7D,QAAQ,EAAE,kBAAkB;QAC5B,UAAU,EAAE,MAAM;QAClB,cAAc,EAAE,MAAM;KACvB,CAAC;IACF,yBAAyB,EAAE,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,EAAE;QACvE,QAAQ;KACT,CAAC;IACF,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5E,0BAA0B,EAAE,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,MAAM,EAAE;QACzE,QAAQ;QACR,MAAM;KACP,CAAC;IACF,oBAAoB,EAAE,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,QAAQ,EAAE;QAC/D,QAAQ;QACR,cAAc;QACd,cAAc;QACd,cAAc;QACd,cAAc;QACd,SAAS;QACT,MAAM;KACP,CAAC;IACF,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,UAAU,EAAE;QACnE,QAAQ;KACT,CAAC;IACF,sBAAsB,EAAE,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,EAAE;QACnE,QAAQ;KACT,CAAC;IACF,0BAA0B,EAAE,GAAG,CAAC,IAAI,CAClC,4BAA4B,EAC5B,UAAU,EACV,CAAC,QAAQ,CAAC,CACX;IACD,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE;QAC7D,QAAQ;KACT,CAAC;IACF,uBAAuB,EAAE,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,UAAU,EAAE;QACvE,QAAQ;KACT,CAAC;IACF,+BAA+B,EAAE,GAAG,CAAC,IAAI,CACvC,iCAAiC,EACjC,SAAS,EACT,CAAC,QAAQ,CAAC,CACX;IACD,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE;QACrD,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,UAAU;KACX,CAAC;IACF,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,SAAS,EAAE;QAC5D,QAAQ;QACR,UAAU;KACX,CAAC;IACF,uBAAuB,EAAE,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,QAAQ,EAAE;QACrE,QAAQ;QACR,cAAc;QACd,eAAe;QACf,UAAU;KACX,CAAC;IACF,2BAA2B,EAAE,GAAG,CAAC,IAAI,CACnC,6BAA6B,EAC7B,QAAQ,EACR;QACE,QAAQ;QACR,cAAc;QACd,cAAc;QACd,cAAc;QACd,cAAc;QACd,eAAe;QACf,UAAU;KACX,CACF;IACD,wBAAwB,EAAE,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,EAAE;QACrE,QAAQ;KACT,CAAC;IACF,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE;QACrD,QAAQ;QACR,UAAU;KACX,CAAC;IACF,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE;QACvD,QAAQ;QACR,UAAU;KACX,CAAC;IACF,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,EAAE;QACxD,QAAQ;QACR,UAAU;KACX,CAAC;IACF,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtE,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1E,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtE,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE;QACvD,QAAQ;QACR,cAAc;KACf,CAAC;IACF,oBAAoB,EAAE,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,EAAE;QACjE,QAAQ;QACR,cAAc;KACf,CAAC;IACF,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE;QAClD,QAAQ;QACR,cAAc;KACf,CAAC;IACF,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE;QACjD,QAAQ;QACR,cAAc;KACf,CAAC;IACF,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC5E,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC;IACjE,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IACpE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IAEtD,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;IAC1D,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxD,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACxE,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACpE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;QACzC,QAAQ,EAAE,QAAQ;QAClB,cAAc,EAAE,MAAM;QACtB,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,cAAc;QACxB,UAAU,EAAE,cAAc;QAC1B,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,WAAW;QACvB,SAAS,EAAE,MAAM;KAClB,CAAC;IACF,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE;QACvD,QAAQ;QACR,cAAc;KACf,CAAC;IACF,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC1D,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5D,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IAEpE,4EAA4E;IAC5E,6CAA6C;IAC7C,4EAA4E;IAC5E,sBAAsB,EAAE,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,EAAE;QACnE,QAAQ,EAAE,SAAS;QACnB,cAAc,EAAE,SAAS;QACzB,cAAc,EAAE,MAAM;QACtB,cAAc,EAAE,qBAAqB;QACrC,cAAc,EAAE,kBAAkB;QAClC,QAAQ,EAAE,+BAA+B;KAC1C,CAAC;IACF,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9D,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5D,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtE,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClE,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5E,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClE,sBAAsB,EAAE,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,UAAU,EAAE;QACrE,QAAQ;KACT,CAAC;IACF,sBAAsB,EAAE,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,UAAU,EAAE;QACrE,QAAQ;KACT,CAAC;IACF,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxE,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE1D,4EAA4E;IAC5E,2CAA2C;IAC3C,4EAA4E;IAC5E,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE;QACjE,QAAQ,EAAE,SAAS;QACnB,cAAc,EAAE,SAAS;QACzB,cAAc,EAAE,MAAM;QACtB,cAAc,EAAE,qBAAqB;QACrC,QAAQ,EAAE,eAAe;QACzB,UAAU,EAAE,cAAc;QAC1B,QAAQ,EAAE,+BAA+B;KAC1C,CAAC;IACF,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC1E,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,UAAU,EAAE;QACnE,QAAQ;KACT,CAAC;IACF,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC1E,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5E,0BAA0B,EAAE,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,MAAM,EAAE;QACzE,QAAQ;KACT,CAAC;IACF,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxE,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClE,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE;QACjE,QAAQ;KACT,CAAC;IACF,yBAAyB,EAAE,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,UAAU,EAAE;QAC3E,QAAQ;KACT,CAAC;IACF,wBAAwB,EAAE,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,QAAQ,EAAE;QACvE,QAAQ;KACT,CAAC;IACF,4BAA4B,EAAE,GAAG,CAAC,IAAI,CACpC,8BAA8B,EAC9B,UAAU,EACV,CAAC,QAAQ,CAAC,CACX;IACD,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO;CACR,CAAC"}
|