@noorm/broccolidb 2.0.1

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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/dist/TokenCompressionService.d.ts +59 -0
  4. package/dist/TokenCompressionService.d.ts.map +1 -0
  5. package/dist/TokenCompressionService.js +179 -0
  6. package/dist/TokenCompressionService.js.map +1 -0
  7. package/dist/broccolidb-aggregation.d.ts +14 -0
  8. package/dist/broccolidb-aggregation.d.ts.map +1 -0
  9. package/dist/broccolidb-aggregation.js +158 -0
  10. package/dist/broccolidb-aggregation.js.map +1 -0
  11. package/dist/broccolidb-cas.d.ts +56 -0
  12. package/dist/broccolidb-cas.d.ts.map +1 -0
  13. package/dist/broccolidb-cas.js +285 -0
  14. package/dist/broccolidb-cas.js.map +1 -0
  15. package/dist/broccolidb-kernel.d.ts +63 -0
  16. package/dist/broccolidb-kernel.d.ts.map +1 -0
  17. package/dist/broccolidb-kernel.js +287 -0
  18. package/dist/broccolidb-kernel.js.map +1 -0
  19. package/dist/broccolidb-mutex.d.ts +37 -0
  20. package/dist/broccolidb-mutex.d.ts.map +1 -0
  21. package/dist/broccolidb-mutex.js +121 -0
  22. package/dist/broccolidb-mutex.js.map +1 -0
  23. package/dist/broccolidb-natural-query.d.ts +13 -0
  24. package/dist/broccolidb-natural-query.d.ts.map +1 -0
  25. package/dist/broccolidb-natural-query.js +188 -0
  26. package/dist/broccolidb-natural-query.js.map +1 -0
  27. package/dist/broccolidb-table.d.ts +62 -0
  28. package/dist/broccolidb-table.d.ts.map +1 -0
  29. package/dist/broccolidb-table.js +893 -0
  30. package/dist/broccolidb-table.js.map +1 -0
  31. package/dist/broccolidb-wal.d.ts +49 -0
  32. package/dist/broccolidb-wal.d.ts.map +1 -0
  33. package/dist/broccolidb-wal.js +168 -0
  34. package/dist/broccolidb-wal.js.map +1 -0
  35. package/dist/broccolidb.contracts.d.ts +232 -0
  36. package/dist/broccolidb.contracts.d.ts.map +1 -0
  37. package/dist/broccolidb.contracts.js +7 -0
  38. package/dist/broccolidb.contracts.js.map +1 -0
  39. package/dist/index.d.ts +17 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +17 -0
  42. package/dist/index.js.map +1 -0
  43. package/docs/API.md +208 -0
  44. package/docs/ARCHITECTURE.md +160 -0
  45. package/docs/BRIEF.md +56 -0
  46. package/docs/CONTRIBUTING.md +82 -0
  47. package/docs/GLOSSARY.md +23 -0
  48. package/docs/OPERATIONS.md +176 -0
  49. package/docs/PHILOSOPHY.md +91 -0
  50. package/docs/README.md +116 -0
  51. package/docs/RELEASE_NOTES.md +34 -0
  52. package/docs/TROUBLESHOOTING.md +145 -0
  53. package/docs/adr/ADR-001-portable-inmemory-kernel.md +74 -0
  54. package/docs/adr/README.md +38 -0
  55. package/docs/adr/TEMPLATE.md +35 -0
  56. package/package.json +43 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broccolidb-aggregation.js","sourceRoot":"","sources":["../src/broccolidb-aggregation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * GALXAI: BroccoliDB Content-Addressable Storage (CAS) Vault (Zenith Tier)
3
+ * 256-Way Sharded CAS Vault with Adaptive Brotli Compression,
4
+ * Cryptographic Read-Verification, and Automatic Corruption Quarantine.
5
+ */
6
+ export declare class StorageIntegrityError extends Error {
7
+ constructor(message: string, options?: ErrorOptions);
8
+ }
9
+ export declare class BroccoliCASStorageService {
10
+ private readonly baseDir;
11
+ private readonly blobsDir;
12
+ private readonly corruptDir;
13
+ private readonly verifiedCache;
14
+ private corruptCount;
15
+ private isStarted;
16
+ constructor(workspaceRoot?: string);
17
+ start(): Promise<void>;
18
+ stop(): Promise<void>;
19
+ /**
20
+ * Computes normalized SHA-256 hash of content.
21
+ */
22
+ static computeSha256(content: Buffer | string): string;
23
+ /**
24
+ * Stores a content buffer or string into the CAS vault.
25
+ */
26
+ store(content: Buffer | string): Promise<string>;
27
+ /**
28
+ * Reads raw decompressed content from CAS.
29
+ */
30
+ read(hash: string): Promise<Buffer | null>;
31
+ /**
32
+ * Checks whether a blob exists in CAS.
33
+ */
34
+ exists(hash: string): Promise<boolean>;
35
+ /**
36
+ * Quarantines a corrupted blob to the corrupt directory with an audit manifest entry.
37
+ */
38
+ private quarantineBlob;
39
+ /**
40
+ * Runs 2-Phase Mark-Sweep Garbage Collection.
41
+ */
42
+ pruneUnreferenced(referencedHashes: Set<string>): Promise<number>;
43
+ /**
44
+ * Computes comprehensive CAS vault statistics.
45
+ */
46
+ getStats(): Promise<{
47
+ totalBlobs: number;
48
+ totalRawBytes: number;
49
+ totalStoredBytes: number;
50
+ compressionSavingsPct: number;
51
+ corruptCount: number;
52
+ quarantinedBlobs: readonly string[];
53
+ }>;
54
+ getBaseDir(): string;
55
+ }
56
+ //# sourceMappingURL=broccolidb-cas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broccolidb-cas.d.ts","sourceRoot":"","sources":["../src/broccolidb-cas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAAS;gBAEd,aAAa,GAAE,MAAsB;IAM3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAItD;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgDtD;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwChD;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa5C;;OAEG;YACW,cAAc;IA0B5B;;OAEG;IACG,iBAAiB,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA2CvE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;KACrC,CAAC;IAqDF,UAAU,IAAI,MAAM;CAGrB"}
@@ -0,0 +1,285 @@
1
+ /**
2
+ * GALXAI: BroccoliDB Content-Addressable Storage (CAS) Vault (Zenith Tier)
3
+ * 256-Way Sharded CAS Vault with Adaptive Brotli Compression,
4
+ * Cryptographic Read-Verification, and Automatic Corruption Quarantine.
5
+ */
6
+ import * as crypto from "node:crypto";
7
+ import * as fs from "node:fs/promises";
8
+ import * as path from "node:path";
9
+ import { promisify } from "node:util";
10
+ import * as zlib from "node:zlib";
11
+ const compressBrotli = promisify(zlib.brotliCompress);
12
+ const decompressBrotli = promisify(zlib.brotliDecompress);
13
+ const BROTLI_MINIMUM_BYTES = 1024;
14
+ const BROTLI_MINIMUM_SAVINGS_RATIO = 0.9;
15
+ const MAGIC_RAW = Buffer.from("BR_RAW\0");
16
+ const MAGIC_BROTLI = Buffer.from("BR_BRZ\0");
17
+ export class StorageIntegrityError extends Error {
18
+ constructor(message, options) {
19
+ super(message, options);
20
+ this.name = "StorageIntegrityError";
21
+ }
22
+ }
23
+ export class BroccoliCASStorageService {
24
+ baseDir;
25
+ blobsDir;
26
+ corruptDir;
27
+ verifiedCache = new Set();
28
+ corruptCount = 0;
29
+ isStarted = false;
30
+ constructor(workspaceRoot = process.cwd()) {
31
+ this.baseDir = path.resolve(workspaceRoot, ".broccolidb", "cas");
32
+ this.blobsDir = path.join(this.baseDir, "blobs");
33
+ this.corruptDir = path.join(this.baseDir, "corrupt");
34
+ }
35
+ async start() {
36
+ if (this.isStarted)
37
+ return;
38
+ await fs.mkdir(this.blobsDir, { recursive: true });
39
+ await fs.mkdir(this.corruptDir, { recursive: true });
40
+ this.isStarted = true;
41
+ }
42
+ async stop() {
43
+ this.isStarted = false;
44
+ }
45
+ /**
46
+ * Computes normalized SHA-256 hash of content.
47
+ */
48
+ static computeSha256(content) {
49
+ return crypto.createHash("sha256").update(content).digest("hex");
50
+ }
51
+ /**
52
+ * Stores a content buffer or string into the CAS vault.
53
+ */
54
+ async store(content) {
55
+ const rawBuffer = typeof content === "string" ? Buffer.from(content, "utf-8") : content;
56
+ const hash = BroccoliCASStorageService.computeSha256(rawBuffer);
57
+ if (this.verifiedCache.has(hash)) {
58
+ return hash;
59
+ }
60
+ const shard = hash.slice(0, 2);
61
+ const shardDir = path.join(this.blobsDir, shard);
62
+ const filePath = path.join(shardDir, hash);
63
+ try {
64
+ await fs.access(filePath);
65
+ this.verifiedCache.add(hash);
66
+ return hash;
67
+ }
68
+ catch {
69
+ // Blob does not exist yet
70
+ }
71
+ let payload;
72
+ if (rawBuffer.length >= BROTLI_MINIMUM_BYTES) {
73
+ try {
74
+ const compressed = await compressBrotli(rawBuffer, {
75
+ params: {
76
+ [zlib.constants.BROTLI_PARAM_QUALITY]: 4,
77
+ },
78
+ });
79
+ if (compressed.length / rawBuffer.length <= BROTLI_MINIMUM_SAVINGS_RATIO) {
80
+ payload = Buffer.concat([MAGIC_BROTLI, compressed]);
81
+ }
82
+ else {
83
+ payload = Buffer.concat([MAGIC_RAW, rawBuffer]);
84
+ }
85
+ }
86
+ catch {
87
+ payload = Buffer.concat([MAGIC_RAW, rawBuffer]);
88
+ }
89
+ }
90
+ else {
91
+ payload = Buffer.concat([MAGIC_RAW, rawBuffer]);
92
+ }
93
+ await fs.mkdir(shardDir, { recursive: true });
94
+ const tmpPath = `${filePath}.tmp.${Date.now()}`;
95
+ await fs.writeFile(tmpPath, payload);
96
+ await fs.rename(tmpPath, filePath);
97
+ this.verifiedCache.add(hash);
98
+ return hash;
99
+ }
100
+ /**
101
+ * Reads raw decompressed content from CAS.
102
+ */
103
+ async read(hash) {
104
+ const shard = hash.slice(0, 2);
105
+ const filePath = path.join(this.blobsDir, shard, hash);
106
+ let storedBuffer;
107
+ try {
108
+ storedBuffer = await fs.readFile(filePath);
109
+ }
110
+ catch (err) {
111
+ const error = err;
112
+ if (error.code === "ENOENT")
113
+ return null;
114
+ throw err;
115
+ }
116
+ let rawBuffer;
117
+ if (storedBuffer.subarray(0, MAGIC_BROTLI.length).equals(MAGIC_BROTLI)) {
118
+ const compressed = storedBuffer.subarray(MAGIC_BROTLI.length);
119
+ try {
120
+ rawBuffer = await decompressBrotli(compressed);
121
+ }
122
+ catch (err) {
123
+ await this.quarantineBlob(hash, filePath, "brotli_decompression_failure");
124
+ throw new StorageIntegrityError(`Corrupted Brotli payload in blob ${hash}`, { cause: err });
125
+ }
126
+ }
127
+ else if (storedBuffer.subarray(0, MAGIC_RAW.length).equals(MAGIC_RAW)) {
128
+ rawBuffer = storedBuffer.subarray(MAGIC_RAW.length);
129
+ }
130
+ else {
131
+ rawBuffer = storedBuffer;
132
+ }
133
+ const actualHash = BroccoliCASStorageService.computeSha256(rawBuffer);
134
+ if (actualHash !== hash) {
135
+ await this.quarantineBlob(hash, filePath, `sha256_mismatch: expected ${hash} got ${actualHash}`);
136
+ throw new StorageIntegrityError(`CAS cryptographic integrity failure for blob ${hash} (actual hash: ${actualHash}). Quarantined.`);
137
+ }
138
+ this.verifiedCache.add(hash);
139
+ return rawBuffer;
140
+ }
141
+ /**
142
+ * Checks whether a blob exists in CAS.
143
+ */
144
+ async exists(hash) {
145
+ if (this.verifiedCache.has(hash))
146
+ return true;
147
+ const shard = hash.slice(0, 2);
148
+ const filePath = path.join(this.blobsDir, shard, hash);
149
+ try {
150
+ await fs.access(filePath);
151
+ this.verifiedCache.add(hash);
152
+ return true;
153
+ }
154
+ catch {
155
+ return false;
156
+ }
157
+ }
158
+ /**
159
+ * Quarantines a corrupted blob to the corrupt directory with an audit manifest entry.
160
+ */
161
+ async quarantineBlob(expectedHash, originalPath, reason) {
162
+ await fs.mkdir(this.corruptDir, { recursive: true });
163
+ const timestamp = Date.now();
164
+ const quarantinedPath = path.join(this.corruptDir, `${expectedHash}.${timestamp}.corrupt`);
165
+ try {
166
+ await fs.rename(originalPath, quarantinedPath);
167
+ }
168
+ catch {
169
+ // File may already be moved
170
+ }
171
+ this.verifiedCache.delete(expectedHash);
172
+ this.corruptCount += 1;
173
+ const manifestEntry = {
174
+ timestamp: new Date(timestamp).toISOString(),
175
+ expectedHash,
176
+ reason,
177
+ originalPath,
178
+ quarantinedPath,
179
+ };
180
+ const manifestPath = path.join(this.corruptDir, "manifest.jsonl");
181
+ await fs.appendFile(manifestPath, `${JSON.stringify(manifestEntry)}\n`, "utf-8");
182
+ }
183
+ /**
184
+ * Runs 2-Phase Mark-Sweep Garbage Collection.
185
+ */
186
+ async pruneUnreferenced(referencedHashes) {
187
+ let prunedCount = 0;
188
+ let shards;
189
+ try {
190
+ shards = await fs.readdir(this.blobsDir);
191
+ }
192
+ catch {
193
+ return 0;
194
+ }
195
+ for (const shard of shards) {
196
+ const shardDir = path.join(this.blobsDir, shard);
197
+ let stats;
198
+ try {
199
+ stats = await fs.stat(shardDir);
200
+ }
201
+ catch {
202
+ continue;
203
+ }
204
+ if (!stats.isDirectory())
205
+ continue;
206
+ let files;
207
+ try {
208
+ files = await fs.readdir(shardDir);
209
+ }
210
+ catch {
211
+ continue;
212
+ }
213
+ for (const file of files) {
214
+ if (!referencedHashes.has(file)) {
215
+ try {
216
+ await fs.unlink(path.join(shardDir, file));
217
+ this.verifiedCache.delete(file);
218
+ prunedCount += 1;
219
+ }
220
+ catch {
221
+ // Ignored
222
+ }
223
+ }
224
+ }
225
+ }
226
+ return prunedCount;
227
+ }
228
+ /**
229
+ * Computes comprehensive CAS vault statistics.
230
+ */
231
+ async getStats() {
232
+ let totalBlobs = 0;
233
+ let totalStoredBytes = 0;
234
+ let totalRawBytes = 0;
235
+ let shards = [];
236
+ try {
237
+ shards = await fs.readdir(this.blobsDir);
238
+ }
239
+ catch {
240
+ shards = [];
241
+ }
242
+ for (const shard of shards) {
243
+ const shardDir = path.join(this.blobsDir, shard);
244
+ let files = [];
245
+ try {
246
+ files = await fs.readdir(shardDir);
247
+ }
248
+ catch {
249
+ continue;
250
+ }
251
+ for (const file of files) {
252
+ const filePath = path.join(shardDir, file);
253
+ try {
254
+ const stat = await fs.stat(filePath);
255
+ totalBlobs += 1;
256
+ totalStoredBytes += stat.size;
257
+ totalRawBytes += stat.size;
258
+ }
259
+ catch { }
260
+ }
261
+ }
262
+ let quarantinedBlobs = [];
263
+ try {
264
+ quarantinedBlobs = (await fs.readdir(this.corruptDir)).filter((f) => f.endsWith(".corrupt"));
265
+ }
266
+ catch {
267
+ quarantinedBlobs = [];
268
+ }
269
+ const savingsPct = totalRawBytes > 0 && totalStoredBytes < totalRawBytes
270
+ ? Math.round(((totalRawBytes - totalStoredBytes) / totalRawBytes) * 100)
271
+ : 0;
272
+ return {
273
+ totalBlobs,
274
+ totalRawBytes,
275
+ totalStoredBytes,
276
+ compressionSavingsPct: savingsPct,
277
+ corruptCount: this.corruptCount + quarantinedBlobs.length,
278
+ quarantinedBlobs,
279
+ };
280
+ }
281
+ getBaseDir() {
282
+ return this.baseDir;
283
+ }
284
+ }
285
+ //# sourceMappingURL=broccolidb-cas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broccolidb-cas.js","sourceRoot":"","sources":["../src/broccolidb-cas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * GALXAI: BroccoliDB Master Deterministic Hybrid In-Memory + Handrolled Kernel (Zenith Tier)
3
+ * Unifies L1 Hot In-Memory Reactive Tables, L2 Micro-Batched Write-Ahead Log (WAL),
4
+ * L3 Sharded Content-Addressable Storage (CAS), L4 Double-Buffered Atomic Checkpointing,
5
+ * and the 4-Pillar Forensic Diagnostic Probe.
6
+ */
7
+ import type { DbHealthReport, IBroccoliDatabaseKernel, IDbTable, TimelineCheckpointRecord } from "./broccolidb.contracts.js";
8
+ export interface DatabaseKernelOptions {
9
+ readonly workspaceRoot?: string;
10
+ readonly walDebounceMs?: number;
11
+ }
12
+ export declare class BroccoliDatabaseKernel implements IBroccoliDatabaseKernel {
13
+ readonly workspaceRoot: string;
14
+ private readonly dbDir;
15
+ private readonly checkpointsDir;
16
+ private readonly baseDbPath;
17
+ private readonly tables;
18
+ private readonly checkpoints;
19
+ private readonly memorySnapshots;
20
+ private readonly wal;
21
+ private readonly cas;
22
+ private readonly mutex;
23
+ private isStarted;
24
+ private frameIndex;
25
+ constructor(options?: DatabaseKernelOptions);
26
+ /**
27
+ * Initializes the kernel, mounts CAS, and executes cold-start crash replay.
28
+ */
29
+ start(): Promise<void>;
30
+ /**
31
+ * Gracefully flushes WAL and stops kernel subsystems.
32
+ */
33
+ stop(): Promise<void>;
34
+ /**
35
+ * Flushes WAL write buffers to disk.
36
+ */
37
+ flush(): Promise<void>;
38
+ /**
39
+ * Returns a typed in-memory reactive table, creating it if it does not exist.
40
+ */
41
+ getTable<T extends Record<string, unknown> = Record<string, unknown>>(name: string): IDbTable<T>;
42
+ /**
43
+ * Executes an async operation in an isolated transaction protected by re-entrant mutex.
44
+ */
45
+ transaction<R>(fn: () => Promise<R>): Promise<R>;
46
+ /**
47
+ * Creates an atomic double-buffered state checkpoint and rotates the WAL journal.
48
+ */
49
+ checkpoint(label?: string): Promise<TimelineCheckpointRecord>;
50
+ /**
51
+ * Restores state to a prior timeline checkpoint with frame-perfect precision.
52
+ */
53
+ rollback(checkpointId: string): Promise<boolean>;
54
+ listCheckpoints(): readonly TimelineCheckpointRecord[];
55
+ storeBlob(content: Buffer | string): Promise<string>;
56
+ readBlob(hash: string): Promise<Buffer | null>;
57
+ gc(): Promise<number>;
58
+ health(): Promise<DbHealthReport>;
59
+ private loadBaseCheckpoint;
60
+ private replayWal;
61
+ }
62
+ export declare const broccolidb: BroccoliDatabaseKernel;
63
+ //# sourceMappingURL=broccolidb-kernel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broccolidb-kernel.d.ts","sourceRoot":"","sources":["../src/broccolidb-kernel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,uBAAuB,EACvB,QAAQ,EACR,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AAMnC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,sBAAuB,YAAW,uBAAuB;IACpE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+D;IACtF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+C;IAC3E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwE;IACxG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsD;IAC5E,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAK;gBAEX,OAAO,GAAE,qBAA0B;IAU/C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAehG;;OAEG;IACG,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAQtD;;OAEG;IACG,UAAU,CAAC,KAAK,GAAE,MAA4B,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAiDxF;;OAEG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuCtD,eAAe,IAAI,SAAS,wBAAwB,EAAE;IAIhD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI9C,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC;IAgBrB,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;YAiEzB,kBAAkB;YAiBlB,SAAS;CAiBxB;AAED,eAAO,MAAM,UAAU,wBAA+B,CAAC"}