grepmind-config 0.1.0-alpha
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/LICENSE +190 -0
- package/dist/defaults.d.ts +38 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +122 -0
- package/dist/defaults.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +66 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +236 -0
- package/dist/loader.js.map +1 -0
- package/dist/path-utils.d.ts +18 -0
- package/dist/path-utils.d.ts.map +1 -0
- package/dist/path-utils.js +52 -0
- package/dist/path-utils.js.map +1 -0
- package/dist/schema.d.ts +1427 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +144 -0
- package/dist/schema.js.map +1 -0
- package/dist/secrets.d.ts +75 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +145 -0
- package/dist/secrets.js.map +1 -0
- package/dist/types.d.ts +84 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
package/dist/loader.js
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config file loader and saver.
|
|
3
|
+
*
|
|
4
|
+
* Handles loading, saving, finding, and creating grepmind.json files.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs/promises';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { RAGConfigSchema } from './schema.js';
|
|
10
|
+
import { DEFAULT_CONFIG } from './defaults.js';
|
|
11
|
+
import { isRemoteDbPath } from './path-utils.js';
|
|
12
|
+
/**
|
|
13
|
+
* Config file name.
|
|
14
|
+
*/
|
|
15
|
+
export const CONFIG_FILE_NAME = 'grepmind.json';
|
|
16
|
+
/**
|
|
17
|
+
* Legacy config file names (for migration).
|
|
18
|
+
*/
|
|
19
|
+
export const LEGACY_CONFIG_FILE_NAMES = ['RAG.config.json', 'indexmcp.json', '.indexmcp.json'];
|
|
20
|
+
/**
|
|
21
|
+
* All recognized config file names (new + legacy).
|
|
22
|
+
*/
|
|
23
|
+
export const ALL_CONFIG_FILE_NAMES = [CONFIG_FILE_NAME, ...LEGACY_CONFIG_FILE_NAMES];
|
|
24
|
+
/**
|
|
25
|
+
* Load RAG config from a file path.
|
|
26
|
+
*
|
|
27
|
+
* @param configPath - Absolute path to config file
|
|
28
|
+
* @returns Parsed and validated config
|
|
29
|
+
* @throws Error if file not found or invalid
|
|
30
|
+
*/
|
|
31
|
+
export async function loadRAGConfig(configPath) {
|
|
32
|
+
try {
|
|
33
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
34
|
+
const rawConfig = JSON.parse(content);
|
|
35
|
+
return RAGConfigSchema.parse(rawConfig);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (error.code === 'ENOENT') {
|
|
39
|
+
throw new Error(`Config file not found: ${configPath}`);
|
|
40
|
+
}
|
|
41
|
+
if (error instanceof z.ZodError) {
|
|
42
|
+
throw new Error(`Invalid config: ${error.message}`);
|
|
43
|
+
}
|
|
44
|
+
if (error instanceof SyntaxError) {
|
|
45
|
+
throw new Error(`Invalid JSON in config file: ${error.message}`);
|
|
46
|
+
}
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Save RAG config to a file path.
|
|
52
|
+
*
|
|
53
|
+
* @param configPath - Absolute path to config file
|
|
54
|
+
* @param config - Config to save
|
|
55
|
+
*/
|
|
56
|
+
export async function saveRAGConfig(configPath, config) {
|
|
57
|
+
// Validate before saving
|
|
58
|
+
const validated = RAGConfigSchema.parse(config);
|
|
59
|
+
await fs.writeFile(configPath, JSON.stringify(validated, null, 2));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Find config file in a directory.
|
|
63
|
+
* Searches for grepmind.json first, then legacy names.
|
|
64
|
+
*
|
|
65
|
+
* @param dir - Directory to search in
|
|
66
|
+
* @returns Path to config file or null if not found
|
|
67
|
+
*/
|
|
68
|
+
export async function findRAGConfig(dir) {
|
|
69
|
+
for (const fileName of ALL_CONFIG_FILE_NAMES) {
|
|
70
|
+
const configPath = path.join(dir, fileName);
|
|
71
|
+
try {
|
|
72
|
+
await fs.access(configPath);
|
|
73
|
+
return configPath;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// File doesn't exist, try next
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if a directory has a RAG config file.
|
|
83
|
+
*
|
|
84
|
+
* @param dir - Directory to check
|
|
85
|
+
* @returns True if config file exists
|
|
86
|
+
*/
|
|
87
|
+
export async function hasRAGConfig(dir) {
|
|
88
|
+
return (await findRAGConfig(dir)) !== null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a new project with grepmind.json.
|
|
92
|
+
*
|
|
93
|
+
* @param projectPath - Directory for the new project
|
|
94
|
+
* @param options - Project configuration options
|
|
95
|
+
* @returns Path to created config file
|
|
96
|
+
*/
|
|
97
|
+
export async function createProject(projectPath, options = {}) {
|
|
98
|
+
const absolutePath = path.resolve(projectPath);
|
|
99
|
+
// Check if config already exists
|
|
100
|
+
const existingConfig = await findRAGConfig(absolutePath);
|
|
101
|
+
if (existingConfig) {
|
|
102
|
+
throw new Error(`Project already exists at ${absolutePath}`);
|
|
103
|
+
}
|
|
104
|
+
// Create directory if needed
|
|
105
|
+
await fs.mkdir(absolutePath, { recursive: true });
|
|
106
|
+
// Build config with defaults
|
|
107
|
+
const config = {
|
|
108
|
+
name: options.name || path.basename(absolutePath),
|
|
109
|
+
vaultPaths: options.vaultPaths || DEFAULT_CONFIG.vaultPaths,
|
|
110
|
+
lancedb: {
|
|
111
|
+
dbPath: options.lancedb?.dbPath || DEFAULT_CONFIG.lancedb.dbPath,
|
|
112
|
+
storageOptions: options.lancedb?.storageOptions || DEFAULT_CONFIG.lancedb.storageOptions,
|
|
113
|
+
},
|
|
114
|
+
embedding: {
|
|
115
|
+
provider: options.embedding?.provider || DEFAULT_CONFIG.embedding.provider,
|
|
116
|
+
model: options.embedding?.model,
|
|
117
|
+
// dimensions auto-detected from MODEL_DIMENSIONS map
|
|
118
|
+
voyageModel: options.embedding?.voyageModel,
|
|
119
|
+
localaiBaseUrl: options.embedding?.localaiBaseUrl || DEFAULT_CONFIG.embedding.localaiBaseUrl,
|
|
120
|
+
localaiModel: options.embedding?.localaiModel || DEFAULT_CONFIG.embedding.localaiModel,
|
|
121
|
+
},
|
|
122
|
+
reranking: {
|
|
123
|
+
enabled: options.reranking?.enabled ?? DEFAULT_CONFIG.reranking.enabled,
|
|
124
|
+
provider: options.reranking?.provider ?? DEFAULT_CONFIG.reranking.provider,
|
|
125
|
+
topK: options.reranking?.topK ?? DEFAULT_CONFIG.reranking.topK,
|
|
126
|
+
prerankThreshold: options.reranking?.prerankThreshold ?? DEFAULT_CONFIG.reranking.prerankThreshold,
|
|
127
|
+
maxDocumentLength: options.reranking?.maxDocumentLength ?? DEFAULT_CONFIG.reranking.maxDocumentLength,
|
|
128
|
+
batchSize: options.reranking?.batchSize ?? DEFAULT_CONFIG.reranking.batchSize,
|
|
129
|
+
wasmModel: options.reranking?.wasmModel ?? DEFAULT_CONFIG.reranking.wasmModel,
|
|
130
|
+
voyageModel: options.reranking?.voyageModel ?? DEFAULT_CONFIG.reranking.voyageModel,
|
|
131
|
+
localaiBaseUrl: options.reranking?.localaiBaseUrl ?? DEFAULT_CONFIG.reranking.localaiBaseUrl,
|
|
132
|
+
localaiRerankModel: options.reranking?.localaiRerankModel ?? DEFAULT_CONFIG.reranking.localaiRerankModel,
|
|
133
|
+
},
|
|
134
|
+
code: {
|
|
135
|
+
enabled: options.code?.enabled ?? DEFAULT_CONFIG.code.enabled,
|
|
136
|
+
include: options.code?.include || DEFAULT_CONFIG.code.include,
|
|
137
|
+
exclude: options.code?.exclude || DEFAULT_CONFIG.code.exclude,
|
|
138
|
+
graph: options.code?.graph ?? DEFAULT_CONFIG.code.graph,
|
|
139
|
+
tree: options.code?.tree ?? DEFAULT_CONFIG.code.tree,
|
|
140
|
+
},
|
|
141
|
+
notesFts: {
|
|
142
|
+
enabled: options.notesFts?.enabled ?? DEFAULT_CONFIG.notesFts.enabled,
|
|
143
|
+
stem: options.notesFts?.stem ?? DEFAULT_CONFIG.notesFts.stem,
|
|
144
|
+
language: options.notesFts?.language ?? DEFAULT_CONFIG.notesFts.language,
|
|
145
|
+
withPosition: options.notesFts?.withPosition ?? DEFAULT_CONFIG.notesFts.withPosition,
|
|
146
|
+
removeStopWords: options.notesFts?.removeStopWords ?? DEFAULT_CONFIG.notesFts.removeStopWords,
|
|
147
|
+
baseTokenizer: options.notesFts?.baseTokenizer ?? DEFAULT_CONFIG.notesFts.baseTokenizer,
|
|
148
|
+
lowercase: options.notesFts?.lowercase ?? DEFAULT_CONFIG.notesFts.lowercase,
|
|
149
|
+
asciiFolding: options.notesFts?.asciiFolding ?? DEFAULT_CONFIG.notesFts.asciiFolding,
|
|
150
|
+
maxTokenLength: options.notesFts?.maxTokenLength ?? DEFAULT_CONFIG.notesFts.maxTokenLength,
|
|
151
|
+
},
|
|
152
|
+
codeFts: {
|
|
153
|
+
enabled: options.codeFts?.enabled ?? DEFAULT_CONFIG.codeFts.enabled,
|
|
154
|
+
stem: options.codeFts?.stem ?? DEFAULT_CONFIG.codeFts.stem,
|
|
155
|
+
withPosition: options.codeFts?.withPosition ?? DEFAULT_CONFIG.codeFts.withPosition,
|
|
156
|
+
removeStopWords: options.codeFts?.removeStopWords ?? DEFAULT_CONFIG.codeFts.removeStopWords,
|
|
157
|
+
baseTokenizer: options.codeFts?.baseTokenizer ?? DEFAULT_CONFIG.codeFts.baseTokenizer,
|
|
158
|
+
ngramMinLength: options.codeFts?.ngramMinLength ?? DEFAULT_CONFIG.codeFts.ngramMinLength,
|
|
159
|
+
ngramMaxLength: options.codeFts?.ngramMaxLength ?? DEFAULT_CONFIG.codeFts.ngramMaxLength,
|
|
160
|
+
prefixOnly: options.codeFts?.prefixOnly ?? DEFAULT_CONFIG.codeFts.prefixOnly,
|
|
161
|
+
normalizeIdentifiers: options.codeFts?.normalizeIdentifiers ?? DEFAULT_CONFIG.codeFts.normalizeIdentifiers,
|
|
162
|
+
},
|
|
163
|
+
gitSync: {
|
|
164
|
+
enabled: options.gitSync?.enabled ?? DEFAULT_CONFIG.gitSync.enabled,
|
|
165
|
+
autoSyncOnStartup: options.gitSync?.autoSyncOnStartup ?? DEFAULT_CONFIG.gitSync.autoSyncOnStartup,
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
// Validate
|
|
169
|
+
const validated = RAGConfigSchema.parse(config);
|
|
170
|
+
// Create vault directories
|
|
171
|
+
for (const vaultDir of validated.vaultPaths) {
|
|
172
|
+
const vaultPath = path.resolve(absolutePath, vaultDir);
|
|
173
|
+
await fs.mkdir(vaultPath, { recursive: true });
|
|
174
|
+
}
|
|
175
|
+
// Create local LanceDB directory (for local db paths only)
|
|
176
|
+
if (!isRemoteDbPath(validated.lancedb.dbPath)) {
|
|
177
|
+
const lancedbPath = path.resolve(absolutePath, validated.lancedb.dbPath);
|
|
178
|
+
await fs.mkdir(lancedbPath, { recursive: true });
|
|
179
|
+
}
|
|
180
|
+
// Write config file
|
|
181
|
+
const configPath = path.join(absolutePath, CONFIG_FILE_NAME);
|
|
182
|
+
await saveRAGConfig(configPath, validated);
|
|
183
|
+
// Create .gitignore
|
|
184
|
+
if (!isRemoteDbPath(validated.lancedb.dbPath)) {
|
|
185
|
+
const gitignorePath = path.join(absolutePath, '.gitignore');
|
|
186
|
+
const dbPathForGitignore = validated.lancedb.dbPath.replace(/\\/g, '/').replace(/^\.\//, '');
|
|
187
|
+
const dbDirLine = dbPathForGitignore.endsWith('/') ? dbPathForGitignore : `${dbPathForGitignore}/`;
|
|
188
|
+
const gitignoreContent = `# RAG Index
|
|
189
|
+
${dbDirLine}
|
|
190
|
+
*.lock
|
|
191
|
+
`;
|
|
192
|
+
try {
|
|
193
|
+
await fs.access(gitignorePath);
|
|
194
|
+
// .gitignore exists, append if needed
|
|
195
|
+
const existingContent = await fs.readFile(gitignorePath, 'utf-8');
|
|
196
|
+
if (!existingContent.includes(dbDirLine)) {
|
|
197
|
+
await fs.appendFile(gitignorePath, '\n' + gitignoreContent);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// .gitignore doesn't exist, create it
|
|
202
|
+
await fs.writeFile(gitignorePath, gitignoreContent);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return configPath;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Migrate a legacy config file to the new format.
|
|
209
|
+
* Creates a new grepmind.json and optionally deletes the old file.
|
|
210
|
+
*
|
|
211
|
+
* @param projectPath - Project directory
|
|
212
|
+
* @param deleteOld - Whether to delete the old config file
|
|
213
|
+
* @returns Path to new config file
|
|
214
|
+
*/
|
|
215
|
+
export async function migrateConfig(projectPath, deleteOld = false) {
|
|
216
|
+
const configPath = await findRAGConfig(projectPath);
|
|
217
|
+
if (!configPath) {
|
|
218
|
+
throw new Error(`No config file found in ${projectPath}`);
|
|
219
|
+
}
|
|
220
|
+
const fileName = path.basename(configPath);
|
|
221
|
+
if (fileName === CONFIG_FILE_NAME) {
|
|
222
|
+
// Already using new format
|
|
223
|
+
return configPath;
|
|
224
|
+
}
|
|
225
|
+
// Load and convert
|
|
226
|
+
const config = await loadRAGConfig(configPath);
|
|
227
|
+
// Save to new location
|
|
228
|
+
const newConfigPath = path.join(projectPath, CONFIG_FILE_NAME);
|
|
229
|
+
await saveRAGConfig(newConfigPath, config);
|
|
230
|
+
// Optionally delete old file
|
|
231
|
+
if (deleteOld) {
|
|
232
|
+
await fs.unlink(configPath);
|
|
233
|
+
}
|
|
234
|
+
return newConfigPath;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Secrets } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns true when db path is a URI (e.g. s3://bucket/path).
|
|
4
|
+
*/
|
|
5
|
+
export declare function isRemoteDbPath(dbPath: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Resolve db path relative to project when it's local. Keep URI paths unchanged.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveDbPath(projectPath: string, dbPath: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Local directory for runtime state (WAL/locks/meta) when db is remote.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getLocalStateDir(projectPath: string, dbPath: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Build LanceDB storage options by merging config + runtime secrets.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildLanceStorageOptions(configStorageOptions: Record<string, string> | undefined, secrets: Secrets): Record<string, string> | undefined;
|
|
18
|
+
//# sourceMappingURL=path-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../src/path-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACxD,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAsBpC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Returns true when db path is a URI (e.g. s3://bucket/path).
|
|
5
|
+
*/
|
|
6
|
+
export function isRemoteDbPath(dbPath) {
|
|
7
|
+
return /^[a-z][a-z0-9+.-]*:\/\//i.test(dbPath);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolve db path relative to project when it's local. Keep URI paths unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export function resolveDbPath(projectPath, dbPath) {
|
|
13
|
+
if (isRemoteDbPath(dbPath)) {
|
|
14
|
+
return dbPath;
|
|
15
|
+
}
|
|
16
|
+
return path.resolve(projectPath, dbPath);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Local directory for runtime state (WAL/locks/meta) when db is remote.
|
|
20
|
+
*/
|
|
21
|
+
export function getLocalStateDir(projectPath, dbPath) {
|
|
22
|
+
if (!isRemoteDbPath(dbPath)) {
|
|
23
|
+
return path.resolve(projectPath, dbPath);
|
|
24
|
+
}
|
|
25
|
+
const hash = crypto.createHash('sha1').update(dbPath).digest('hex').slice(0, 12);
|
|
26
|
+
return path.resolve(projectPath, '.lancedb-state', hash);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build LanceDB storage options by merging config + runtime secrets.
|
|
30
|
+
*/
|
|
31
|
+
export function buildLanceStorageOptions(configStorageOptions, secrets) {
|
|
32
|
+
const storageOptions = {
|
|
33
|
+
...(configStorageOptions || {}),
|
|
34
|
+
};
|
|
35
|
+
if (secrets.s3AccessKeyId) {
|
|
36
|
+
storageOptions.aws_access_key_id = secrets.s3AccessKeyId;
|
|
37
|
+
}
|
|
38
|
+
if (secrets.s3SecretAccessKey) {
|
|
39
|
+
storageOptions.aws_secret_access_key = secrets.s3SecretAccessKey;
|
|
40
|
+
}
|
|
41
|
+
if (secrets.s3SessionToken) {
|
|
42
|
+
storageOptions.aws_session_token = secrets.s3SessionToken;
|
|
43
|
+
}
|
|
44
|
+
if (secrets.s3Region) {
|
|
45
|
+
storageOptions.region = secrets.s3Region;
|
|
46
|
+
}
|
|
47
|
+
if (secrets.s3Endpoint) {
|
|
48
|
+
storageOptions.endpoint = secrets.s3Endpoint;
|
|
49
|
+
}
|
|
50
|
+
return Object.keys(storageOptions).length > 0 ? storageOptions : undefined;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=path-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../src/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,MAAc;IAC/D,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,MAAc;IAClE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,oBAAwD,EACxD,OAAgB;IAEhB,MAAM,cAAc,GAA2B;QAC7C,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;KAChC,CAAC;IAEF,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,cAAc,CAAC,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,cAAc,CAAC,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,cAAc,CAAC,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,cAAc,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,cAAc,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC"}
|