contextmate 0.2.4 → 0.2.7

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.
@@ -0,0 +1,539 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import * as readline from 'node:readline/promises';
4
+ import { Writable } from 'node:stream';
5
+ import { stdin, stdout } from 'node:process';
6
+ import { access, readFile, writeFile, unlink } from 'node:fs/promises';
7
+ import { join } from 'node:path';
8
+ import { hostname, homedir } from 'node:os';
9
+ import { exec } from 'node:child_process';
10
+ import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
11
+ import { generateSalt, deriveMasterKey, deriveAuthKey, deriveVaultKey, encryptString, decryptString, createAuthHash, encryptFile, hashContent, deriveKeyForPath, } from '../crypto/index.js';
12
+ import { getConfigPath, getDefaultConfig, loadConfig, saveConfig, ensureDirectories, } from '../config.js';
13
+ import { getAdapter } from '../adapters/index.js';
14
+ import { getBackupsPath, getPidFilePath } from '../utils/paths.js';
15
+ async function ask(prompt) {
16
+ const rl = readline.createInterface({ input: stdin, output: stdout });
17
+ const answer = await rl.question(prompt);
18
+ rl.close();
19
+ return answer;
20
+ }
21
+ async function askSecret(prompt) {
22
+ stdout.write(prompt);
23
+ const muted = new Writable({ write(_chunk, _enc, cb) { cb(); } });
24
+ const rl = readline.createInterface({ input: stdin, output: muted, terminal: true });
25
+ const answer = await rl.question('');
26
+ rl.close();
27
+ stdout.write('\n');
28
+ return answer;
29
+ }
30
+ function openBrowser(url) {
31
+ const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
32
+ exec(`${cmd} ${url}`);
33
+ }
34
+ function isPidRunning(pid) {
35
+ try {
36
+ process.kill(pid, 0);
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ async function registerDevice(serverUrl, token) {
44
+ try {
45
+ const res = await fetch(`${serverUrl}/api/auth/devices`, {
46
+ method: 'POST',
47
+ headers: {
48
+ 'Content-Type': 'application/json',
49
+ 'Authorization': `Bearer ${token}`,
50
+ },
51
+ body: JSON.stringify({ name: hostname() }),
52
+ });
53
+ if (res.ok) {
54
+ const { deviceId } = (await res.json());
55
+ return deviceId;
56
+ }
57
+ }
58
+ catch {
59
+ // Non-critical
60
+ }
61
+ return null;
62
+ }
63
+ async function pushDeviceSettings(config, token, deviceId, vaultKey) {
64
+ const settings = {
65
+ scanPaths: config.adapters.claude.scanPaths,
66
+ adapters: {
67
+ claude: config.adapters.claude.enabled,
68
+ openclaw: config.adapters.openclaw.enabled,
69
+ },
70
+ };
71
+ const encrypted = encryptString(JSON.stringify(settings), vaultKey);
72
+ const encryptedHex = bytesToHex(encrypted);
73
+ try {
74
+ await fetch(`${config.server.url}/api/auth/devices/${deviceId}/settings`, {
75
+ method: 'PUT',
76
+ headers: {
77
+ 'Content-Type': 'application/json',
78
+ 'Authorization': `Bearer ${token}`,
79
+ },
80
+ body: JSON.stringify({ encryptedSettings: encryptedHex }),
81
+ });
82
+ }
83
+ catch {
84
+ // Non-critical
85
+ }
86
+ }
87
+ async function initialSync(config, vaultKey, token) {
88
+ let uploaded = 0;
89
+ let errors = 0;
90
+ // Discover all files in the vault
91
+ const files = await discoverFiles(config.vault.path, config.vault.path);
92
+ for (const filePath of files) {
93
+ try {
94
+ const absolutePath = join(config.vault.path, filePath);
95
+ const content = await readFile(absolutePath);
96
+ const contentBytes = new Uint8Array(content);
97
+ const fileKey = deriveKeyForPath(vaultKey, filePath);
98
+ const encrypted = encryptFile(contentBytes, fileKey);
99
+ const encryptedHash = hashContent(encrypted);
100
+ const res = await fetch(`${config.server.url}/api/files/${encodeURIComponent(filePath)}`, {
101
+ method: 'PUT',
102
+ headers: {
103
+ 'Content-Type': 'application/octet-stream',
104
+ 'Authorization': `Bearer ${token}`,
105
+ 'X-Content-Hash': encryptedHash,
106
+ 'X-Version': '0',
107
+ },
108
+ body: encrypted,
109
+ });
110
+ if (res.ok || res.status === 409) {
111
+ uploaded++;
112
+ }
113
+ else {
114
+ errors++;
115
+ }
116
+ }
117
+ catch {
118
+ errors++;
119
+ }
120
+ }
121
+ return { uploaded, errors };
122
+ }
123
+ async function discoverFiles(dir, base) {
124
+ const { readdir, stat } = await import('node:fs/promises');
125
+ const { relative } = await import('node:path');
126
+ const paths = [];
127
+ let entries;
128
+ try {
129
+ entries = await readdir(dir);
130
+ }
131
+ catch {
132
+ return paths;
133
+ }
134
+ for (const name of entries) {
135
+ if (name.startsWith('.') || name === 'node_modules')
136
+ continue;
137
+ const full = join(dir, name);
138
+ try {
139
+ const s = await stat(full);
140
+ if (s.isDirectory()) {
141
+ paths.push(...await discoverFiles(full, base));
142
+ }
143
+ else if (s.isFile()) {
144
+ paths.push(relative(base, full));
145
+ }
146
+ }
147
+ catch {
148
+ // Skip
149
+ }
150
+ }
151
+ return paths;
152
+ }
153
+ function countByPrefix(items, prefix) {
154
+ return items.filter((i) => i.startsWith(prefix)).length;
155
+ }
156
+ export const setupCommand = new Command('setup')
157
+ .description('Complete guided setup — account, adapters, sync, and dashboard')
158
+ .action(async () => {
159
+ try {
160
+ console.log('');
161
+ console.log(chalk.bold.cyan('ContextMate Setup'));
162
+ console.log(chalk.dim('─'.repeat(40)));
163
+ console.log('');
164
+ // ─── Step 1: Account ───
165
+ let config;
166
+ let token;
167
+ let userId;
168
+ let vaultKey;
169
+ let deviceId = null;
170
+ const configPath = getConfigPath();
171
+ let alreadyInitialized = false;
172
+ try {
173
+ await access(configPath);
174
+ alreadyInitialized = true;
175
+ }
176
+ catch {
177
+ // Not initialized
178
+ }
179
+ // Check for existing account
180
+ let existingAuth = {};
181
+ if (alreadyInitialized) {
182
+ try {
183
+ config = await loadConfig();
184
+ const authPath = join(config.data.path, 'auth.json');
185
+ existingAuth = JSON.parse(await readFile(authPath, 'utf-8'));
186
+ }
187
+ catch {
188
+ // No auth
189
+ }
190
+ }
191
+ if (existingAuth.userId && existingAuth.token) {
192
+ console.log(chalk.green('✓ Account found'));
193
+ console.log(` User ID: ${existingAuth.userId}`);
194
+ console.log('');
195
+ const choice = await ask(chalk.bold('Use this account? (Y/n): '));
196
+ if (choice.trim().toLowerCase() === 'n') {
197
+ console.log(chalk.dim('Run "contextmate init" to switch accounts, then run setup again.'));
198
+ return;
199
+ }
200
+ config = await loadConfig();
201
+ userId = existingAuth.userId;
202
+ token = existingAuth.token;
203
+ deviceId = existingAuth.deviceId || null;
204
+ // We need the vault key — ask for passphrase
205
+ console.log('');
206
+ const passphrase = await askSecret(chalk.bold('Passphrase: '));
207
+ if (!passphrase || !passphrase.trim()) {
208
+ console.error(chalk.red('Error: Passphrase cannot be empty.'));
209
+ process.exit(1);
210
+ }
211
+ // Load salt and derive keys
212
+ const credPath = join(config.data.path, 'credentials.json');
213
+ const creds = JSON.parse(await readFile(credPath, 'utf-8'));
214
+ const salt = hexToBytes(creds.salt);
215
+ const masterKey = await deriveMasterKey(passphrase, salt);
216
+ vaultKey = deriveVaultKey(masterKey);
217
+ // Verify passphrase
218
+ try {
219
+ decryptString(hexToBytes(creds.encryptedMasterKey), vaultKey);
220
+ }
221
+ catch {
222
+ console.error(chalk.red('Error: Incorrect passphrase.'));
223
+ process.exit(1);
224
+ }
225
+ }
226
+ else {
227
+ // Fresh setup
228
+ console.log(' 1. Create new account');
229
+ console.log(' 2. Log into existing account');
230
+ console.log('');
231
+ const choice = await ask(chalk.bold('Choose (1 or 2): '));
232
+ const isLogin = choice.trim() === '2';
233
+ if (isLogin) {
234
+ // Login flow
235
+ userId = (await ask(chalk.bold('User ID: '))).trim();
236
+ if (!userId) {
237
+ console.error(chalk.red('Error: User ID cannot be empty.'));
238
+ process.exit(1);
239
+ }
240
+ const passphrase = await askSecret(chalk.bold('Passphrase: '));
241
+ if (!passphrase || !passphrase.trim()) {
242
+ console.error(chalk.red('Error: Passphrase cannot be empty.'));
243
+ process.exit(1);
244
+ }
245
+ config = getDefaultConfig();
246
+ await ensureDirectories(config);
247
+ await saveConfig(config);
248
+ // Fetch salt from server
249
+ console.log(chalk.dim('Connecting to server...'));
250
+ const saltRes = await fetch(`${config.server.url}/api/auth/salt/${encodeURIComponent(userId)}`);
251
+ if (saltRes.status === 404) {
252
+ console.error(chalk.red('Error: User ID not found.'));
253
+ process.exit(1);
254
+ }
255
+ if (!saltRes.ok) {
256
+ console.error(chalk.red(`Error: Server returned ${saltRes.status}.`));
257
+ process.exit(1);
258
+ }
259
+ const { salt: saltHex } = (await saltRes.json());
260
+ const salt = hexToBytes(saltHex);
261
+ console.log(chalk.dim('Deriving encryption keys...'));
262
+ const masterKey = await deriveMasterKey(passphrase, salt);
263
+ const authKey = deriveAuthKey(masterKey);
264
+ vaultKey = deriveVaultKey(masterKey);
265
+ const authHash = createAuthHash(authKey);
266
+ // Login
267
+ console.log(chalk.dim('Authenticating...'));
268
+ const loginRes = await fetch(`${config.server.url}/api/auth/login`, {
269
+ method: 'POST',
270
+ headers: { 'Content-Type': 'application/json' },
271
+ body: JSON.stringify({ authKeyHash: authHash }),
272
+ });
273
+ if (loginRes.status === 401) {
274
+ console.error(chalk.red('Error: Incorrect passphrase.'));
275
+ process.exit(1);
276
+ }
277
+ if (!loginRes.ok) {
278
+ console.error(chalk.red(`Error: Server returned ${loginRes.status}.`));
279
+ process.exit(1);
280
+ }
281
+ const loginData = (await loginRes.json());
282
+ token = loginData.token;
283
+ userId = loginData.userId;
284
+ // Save credentials
285
+ const encryptedMasterKey = encryptString(bytesToHex(masterKey), vaultKey);
286
+ await writeFile(join(config.data.path, 'credentials.json'), JSON.stringify({ salt: saltHex, encryptedMasterKey: bytesToHex(encryptedMasterKey) }, null, 2), { mode: 0o600 });
287
+ deviceId = await registerDevice(config.server.url, token);
288
+ await writeFile(join(config.data.path, 'auth.json'), JSON.stringify({ authHash, userId, token, deviceId }, null, 2), { mode: 0o600 });
289
+ }
290
+ else {
291
+ // Create account flow
292
+ const passphrase = await askSecret(chalk.bold('Choose a passphrase: '));
293
+ if (!passphrase || !passphrase.trim()) {
294
+ console.error(chalk.red('Error: Passphrase cannot be empty.'));
295
+ process.exit(1);
296
+ }
297
+ const confirmation = await askSecret(chalk.bold('Confirm passphrase: '));
298
+ if (passphrase !== confirmation) {
299
+ console.error(chalk.red('Error: Passphrases do not match.'));
300
+ process.exit(1);
301
+ }
302
+ console.log(chalk.dim('Deriving encryption keys...'));
303
+ const salt = generateSalt();
304
+ const masterKey = await deriveMasterKey(passphrase, salt);
305
+ const authKey = deriveAuthKey(masterKey);
306
+ vaultKey = deriveVaultKey(masterKey);
307
+ config = getDefaultConfig();
308
+ await ensureDirectories(config);
309
+ await saveConfig(config);
310
+ const encryptedMasterKey = encryptString(bytesToHex(masterKey), vaultKey);
311
+ await writeFile(join(config.data.path, 'credentials.json'), JSON.stringify({
312
+ salt: bytesToHex(salt),
313
+ encryptedMasterKey: bytesToHex(encryptedMasterKey),
314
+ }, null, 2), { mode: 0o600 });
315
+ const authHash = createAuthHash(authKey);
316
+ console.log(chalk.dim('Registering with server...'));
317
+ const regRes = await fetch(`${config.server.url}/api/auth/register`, {
318
+ method: 'POST',
319
+ headers: { 'Content-Type': 'application/json' },
320
+ body: JSON.stringify({
321
+ authKeyHash: authHash,
322
+ salt: bytesToHex(salt),
323
+ encryptedMasterKey: bytesToHex(encryptedMasterKey),
324
+ }),
325
+ });
326
+ if (regRes.ok) {
327
+ const regData = (await regRes.json());
328
+ token = regData.token;
329
+ userId = regData.userId;
330
+ deviceId = await registerDevice(config.server.url, token);
331
+ await writeFile(join(config.data.path, 'auth.json'), JSON.stringify({ authHash, userId, token, deviceId }, null, 2), { mode: 0o600 });
332
+ }
333
+ else if (regRes.status === 409) {
334
+ console.error(chalk.red('Error: An account with this passphrase already exists.'));
335
+ process.exit(1);
336
+ }
337
+ else {
338
+ console.error(chalk.red(`Error: Server returned ${regRes.status}.`));
339
+ process.exit(1);
340
+ }
341
+ }
342
+ console.log(chalk.green('✓ Account ready'));
343
+ console.log(` User ID: ${userId}`);
344
+ console.log('');
345
+ console.log(chalk.yellow.bold(' ⚠ Save your User ID and passphrase somewhere safe.'));
346
+ console.log('');
347
+ }
348
+ // Register device if we don't have one
349
+ if (!deviceId) {
350
+ deviceId = await registerDevice(config.server.url, token);
351
+ if (deviceId) {
352
+ // Update auth.json with deviceId
353
+ try {
354
+ const authPath = join(config.data.path, 'auth.json');
355
+ const auth = JSON.parse(await readFile(authPath, 'utf-8'));
356
+ auth.deviceId = deviceId;
357
+ await writeFile(authPath, JSON.stringify(auth, null, 2), { mode: 0o600 });
358
+ }
359
+ catch {
360
+ // Non-critical
361
+ }
362
+ }
363
+ }
364
+ // ─── Step 2: Adapters ───
365
+ console.log(chalk.bold('Detecting AI agents...'));
366
+ console.log('');
367
+ // Claude
368
+ const claudeDir = join(homedir(), '.claude');
369
+ let claudeDetected = false;
370
+ try {
371
+ await access(claudeDir);
372
+ claudeDetected = true;
373
+ }
374
+ catch {
375
+ // Not found
376
+ }
377
+ if (claudeDetected) {
378
+ console.log(chalk.green(' ✓ Claude Code detected'));
379
+ const adapter = getAdapter('claude', {
380
+ vaultPath: config.vault.path,
381
+ backupsPath: getBackupsPath(),
382
+ scanPaths: config.adapters.claude.scanPaths,
383
+ });
384
+ // Import files
385
+ console.log(chalk.dim(' Importing files...'));
386
+ const importResult = await adapter.import(claudeDir);
387
+ const skills = countByPrefix(importResult.imported, 'skills/') +
388
+ countByPrefix(importResult.skipped, 'skills/');
389
+ const rules = countByPrefix(importResult.imported, 'claude/rules/') +
390
+ countByPrefix(importResult.skipped, 'claude/rules/');
391
+ console.log(` ${skills} skills, ${rules} rules`);
392
+ console.log(` ${chalk.green(`${importResult.imported.length} new`)}, ` +
393
+ `${chalk.dim(`${importResult.skipped.length} unchanged`)}`);
394
+ // Create symlinks
395
+ console.log(chalk.dim(' Creating symlinks...'));
396
+ const symlinkResult = await adapter.createSymlinks(claudeDir);
397
+ console.log(` ${chalk.green(`${symlinkResult.created.length} symlinks`)}`);
398
+ config.adapters.claude.enabled = true;
399
+ config.adapters.claude.claudeDir = claudeDir;
400
+ }
401
+ else {
402
+ console.log(chalk.dim(' ○ Claude Code not detected'));
403
+ }
404
+ // OpenClaw
405
+ const openclawDir = join(homedir(), '.openclaw', 'workspace');
406
+ let openclawDetected = false;
407
+ try {
408
+ await access(openclawDir);
409
+ openclawDetected = true;
410
+ }
411
+ catch {
412
+ // Not found
413
+ }
414
+ if (openclawDetected) {
415
+ console.log(chalk.green(' ✓ OpenClaw detected'));
416
+ const adapter = getAdapter('openclaw', {
417
+ vaultPath: config.vault.path,
418
+ backupsPath: getBackupsPath(),
419
+ scanPaths: [],
420
+ });
421
+ console.log(chalk.dim(' Importing files...'));
422
+ const importResult = await adapter.import(openclawDir);
423
+ console.log(` ${chalk.green(`${importResult.imported.length} new`)}, ` +
424
+ `${chalk.dim(`${importResult.skipped.length} unchanged`)}`);
425
+ console.log(chalk.dim(' Creating symlinks...'));
426
+ const symlinkResult = await adapter.createSymlinks(openclawDir);
427
+ console.log(` ${chalk.green(`${symlinkResult.created.length} symlinks`)}`);
428
+ config.adapters.openclaw.enabled = true;
429
+ config.adapters.openclaw.workspacePath = openclawDir;
430
+ }
431
+ else {
432
+ console.log(chalk.dim(' ○ OpenClaw not detected'));
433
+ }
434
+ console.log('');
435
+ // ─── Step 3: Scan paths ───
436
+ if (claudeDetected && config.adapters.claude.scanPaths.length === 0) {
437
+ console.log(chalk.bold('Project skills'));
438
+ console.log(chalk.dim(' ContextMate can scan directories for project-specific'));
439
+ console.log(chalk.dim(' skills in .claude/skills/ folders inside each repo.'));
440
+ console.log('');
441
+ const scanPath = await ask(chalk.bold(' Directory to scan (e.g. ~/Developer), or Enter to skip: '));
442
+ const trimmed = scanPath.trim();
443
+ if (trimmed) {
444
+ const resolved = trimmed.startsWith('~') ? trimmed.replace('~', homedir()) : trimmed;
445
+ config.adapters.claude.scanPaths = [resolved];
446
+ console.log(chalk.green(` ✓ Scan path added: ${resolved}`));
447
+ // Re-import with scan paths
448
+ const adapter = getAdapter('claude', {
449
+ vaultPath: config.vault.path,
450
+ backupsPath: getBackupsPath(),
451
+ scanPaths: config.adapters.claude.scanPaths,
452
+ });
453
+ console.log(chalk.dim(' Scanning for project skills...'));
454
+ const importResult = await adapter.import(claudeDir);
455
+ if (importResult.imported.length > 0) {
456
+ console.log(` ${chalk.green(`${importResult.imported.length} additional files imported`)}`);
457
+ }
458
+ }
459
+ console.log('');
460
+ }
461
+ // Save config
462
+ await saveConfig(config);
463
+ // ─── Step 4: Push device settings ───
464
+ if (deviceId) {
465
+ await pushDeviceSettings(config, token, deviceId, vaultKey);
466
+ }
467
+ // ─── Step 5: Initial sync ───
468
+ console.log(chalk.bold('Syncing files to server...'));
469
+ const syncResult = await initialSync(config, vaultKey, token);
470
+ if (syncResult.uploaded > 0) {
471
+ console.log(chalk.green(` ✓ ${syncResult.uploaded} files uploaded`));
472
+ }
473
+ else {
474
+ console.log(chalk.dim(' No files to sync'));
475
+ }
476
+ if (syncResult.errors > 0) {
477
+ console.log(chalk.yellow(` ${syncResult.errors} files failed`));
478
+ }
479
+ console.log('');
480
+ // ─── Step 6: Open dashboard ───
481
+ console.log(chalk.bold('Opening web dashboard...'));
482
+ openBrowser('https://app.contextmate.dev');
483
+ console.log(chalk.dim(' app.contextmate.dev'));
484
+ console.log('');
485
+ // ─── Step 7: Start daemon ───
486
+ console.log(chalk.dim('─'.repeat(40)));
487
+ console.log('');
488
+ console.log(chalk.green.bold('Setup complete!'));
489
+ console.log('');
490
+ console.log(` ${chalk.bold('User ID:')} ${userId}`);
491
+ console.log(` ${chalk.bold('Server:')} ${config.server.url}`);
492
+ console.log(` ${chalk.bold('Dashboard:')} https://app.contextmate.dev`);
493
+ console.log('');
494
+ const startDaemon = await ask(chalk.bold('Start sync daemon now? (Y/n): '));
495
+ if (startDaemon.trim().toLowerCase() === 'n') {
496
+ console.log('');
497
+ console.log(chalk.dim('Run "contextmate daemon start" whenever you\'re ready to sync.'));
498
+ return;
499
+ }
500
+ // Start daemon
501
+ const pidFile = getPidFilePath(config);
502
+ try {
503
+ await access(pidFile);
504
+ const pidStr = await readFile(pidFile, 'utf-8');
505
+ const pid = parseInt(pidStr.trim(), 10);
506
+ if (isPidRunning(pid)) {
507
+ console.log(chalk.green(`Daemon already running (PID: ${pid}).`));
508
+ return;
509
+ }
510
+ await unlink(pidFile);
511
+ }
512
+ catch {
513
+ // No PID file
514
+ }
515
+ await writeFile(pidFile, String(process.pid), 'utf-8');
516
+ console.log(chalk.green(`Daemon started (PID: ${process.pid})`));
517
+ console.log(chalk.dim('Press Ctrl+C to stop.'));
518
+ const { SyncEngine } = await import('../sync/index.js');
519
+ const engine = new SyncEngine(config, vaultKey, token);
520
+ await engine.start();
521
+ const shutdown = async () => {
522
+ console.log(chalk.dim('\nStopping daemon...'));
523
+ await engine.stop();
524
+ try {
525
+ await unlink(pidFile);
526
+ }
527
+ catch { /* Already removed */ }
528
+ console.log(chalk.green('Daemon stopped.'));
529
+ process.exit(0);
530
+ };
531
+ process.on('SIGINT', () => void shutdown());
532
+ process.on('SIGTERM', () => void shutdown());
533
+ }
534
+ catch (err) {
535
+ console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
536
+ process.exit(1);
537
+ }
538
+ });
539
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAS,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,iBAAiB,GAElB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAiB,MAAM,mBAAmB,CAAC;AAElF,KAAK,UAAU,GAAG,CAAC,MAAc;IAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAc;IACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IACzG,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,KAAa;IAC5D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,mBAAmB,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,KAAK,EAAE;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;SAC3C,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAC;YAChE,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAyB,EACzB,KAAa,EACb,QAAgB,EAChB,QAAoB;IAEpB,MAAM,QAAQ,GAAG;QACf,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS;QAC3C,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO;YACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO;SAC3C;KACF,CAAC;IAEF,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,qBAAqB,QAAQ,WAAW,EAAE;YACxE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,KAAK,EAAE;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,MAAyB,EACzB,QAAoB,EACpB,KAAa;IAEb,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,kCAAkC;IAClC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAExE,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;YAE7C,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YAE7C,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,cAAc,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAChE;gBACE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,0BAA0B;oBAC1C,eAAe,EAAE,UAAU,KAAK,EAAE;oBAClC,gBAAgB,EAAE,aAAa;oBAC/B,WAAW,EAAE,GAAG;iBACjB;gBACD,IAAI,EAAE,SAAgB;aACvB,CACF,CAAC;YAEF,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjC,QAAQ,EAAE,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY;IACpD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,cAAc;YAAE,SAAS;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAe,EAAE,MAAc;IACpD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,0BAA0B;QAC1B,IAAI,MAAyB,CAAC;QAC9B,IAAI,KAAa,CAAC;QAClB,IAAI,MAAc,CAAC;QACnB,IAAI,QAAoB,CAAC;QACzB,IAAI,QAAQ,GAAkB,IAAI,CAAC;QAEnC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;QAED,6BAA6B;QAC7B,IAAI,YAAY,GAA2D,EAAE,CAAC;QAC9E,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACrD,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU;YACZ,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC;gBAC3F,OAAO;YACT,CAAC;YAED,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAC5B,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;YAC7B,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;YAC3B,QAAQ,GAAG,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC;YAEzC,6CAA6C;YAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,4BAA4B;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC1D,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAErC,oBAAoB;YACpB,IAAI,CAAC;gBACH,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,cAAc;YACd,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;YAEtC,IAAI,OAAO,EAAE,CAAC;gBACZ,aAAa;gBACb,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;oBAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC/D,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;oBACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;oBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,GAAG,gBAAgB,EAAE,CAAC;gBAC5B,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;gBAEzB,yBAAyB;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChG,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;oBACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAqB,CAAC;gBACrE,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;gBAEjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gBACzC,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;gBAEzC,QAAQ;gBACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,iBAAiB,EAAE;oBAClE,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;iBAChD,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsC,CAAC;gBAC/E,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;gBACxB,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;gBAE1B,mBAAmB;gBACnB,MAAM,kBAAkB,GAAG,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC1E,MAAM,SAAS,CACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9F,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;gBACF,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC1D,MAAM,SAAS,CACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EACnC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9D,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,sBAAsB;gBACtB,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBACxE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;oBACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;oBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;gBACzE,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;oBAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;oBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACtD,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gBACzC,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBAErC,MAAM,GAAG,gBAAgB,EAAE,CAAC;gBAC5B,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;gBAEzB,MAAM,kBAAkB,GAAG,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC1E,MAAM,SAAS,CACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC;oBACtB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,CAAC;iBACnD,EAAE,IAAI,EAAE,CAAC,CAAC,EACX,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;gBAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;gBAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACrD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,oBAAoB,EAAE;oBACnE,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,WAAW,EAAE,QAAQ;wBACrB,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC;wBACtB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,CAAC;qBACnD,CAAC;iBACH,CAAC,CAAC;gBAEH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAsC,CAAC;oBAC3E,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;oBACtB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;oBACxB,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC1D,MAAM,SAAS,CACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EACnC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9D,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;gBACJ,CAAC;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBACjC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;oBACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,uCAAuC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAM,CAAC,CAAC;YAC5D,IAAI,QAAQ,EAAE,CAAC;gBACb,iCAAiC;gBACjC,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC3D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBACzB,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,SAAS;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACxB,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE;gBACnC,SAAS,EAAE,MAAO,CAAC,KAAK,CAAC,IAAI;gBAC7B,WAAW,EAAE,cAAc,EAAE;gBAC7B,SAAS,EAAE,MAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS;aAC7C,CAAC,CAAC;YAEH,eAAe;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC5D,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC;gBACjE,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,YAAY,KAAK,QAAQ,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI;gBAC7D,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,EAAE,CAC3D,CAAC;YAEF,kBAAkB;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACnD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;YAE9E,MAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACvC,MAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,WAAW;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC9D,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1B,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE;gBACrC,SAAS,EAAE,MAAO,CAAC,KAAK,CAAC,IAAI;gBAC7B,WAAW,EAAE,cAAc,EAAE;gBAC7B,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI;gBAC7D,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,EAAE,CAC3D,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACnD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;YAE9E,MAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACzC,MAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,GAAG,WAAW,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,6BAA6B;QAC7B,IAAI,cAAc,IAAI,MAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;YACrG,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEhC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACrF,MAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAE7D,4BAA4B;gBAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE;oBACnC,SAAS,EAAE,MAAO,CAAC,KAAK,CAAC,IAAI;oBAC7B,WAAW,EAAE,cAAc,EAAE;oBAC7B,SAAS,EAAE,MAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS;iBAC7C,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBAC3D,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,4BAA4B,CAAC,EAAE,CAAC,CAAC;gBAC/F,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,cAAc;QACd,MAAM,UAAU,CAAC,MAAO,CAAC,CAAC;QAE1B,uCAAuC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,kBAAkB,CAAC,MAAO,EAAE,KAAM,EAAE,QAAQ,EAAE,QAAS,CAAC,CAAC;QACjE,CAAC;QAED,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,MAAO,EAAE,QAAS,EAAE,KAAM,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,QAAQ,iBAAiB,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,iCAAiC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,MAAO,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,MAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5E,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;YACzF,OAAO;QACT,CAAC;QAED,eAAe;QACf,MAAM,OAAO,GAAG,cAAc,CAAC,MAAO,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;YACD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;QAED,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAEhD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAO,EAAE,QAAS,EAAE,KAAM,CAAC,CAAC;QAC1D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC;gBAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1E,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;gBAEpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKxC,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,UAAU,EACzB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BzB,YAAY,CAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBlE,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAa1C,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAaxD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBhE,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAa5B,cAAc;CAkC7B;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAErB,QAAQ,EAAE,MAAM;CAK7B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1E,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;gBAEpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKxC,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,UAAU,EACzB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BzB,YAAY,CAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBlE,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAc1C,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAaxD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBhE,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAa5B,cAAc;CAkC7B;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAErB,QAAQ,EAAE,MAAM;CAK7B"}
@@ -40,7 +40,8 @@ export class SyncClient {
40
40
  if (!response.ok) {
41
41
  throw new Error(`List files failed: ${response.status} ${response.statusText}`);
42
42
  }
43
- return (await response.json());
43
+ const data = (await response.json());
44
+ return data.files;
44
45
  }
45
46
  async getRemoteChanges(since) {
46
47
  const response = await this.fetchWithRetry(`${this.baseUrl}/api/changes?since=${since}`, { method: 'GET' });
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,12 @@ export declare class SyncEngine {
8
8
  private readonly vaultKey;
9
9
  private readonly config;
10
10
  private pollTimer;
11
- constructor(config: ContextMateConfig, vaultKey: Uint8Array);
11
+ constructor(config: ContextMateConfig, vaultKey: Uint8Array, authToken?: string);
12
12
  start(): Promise<void>;
13
13
  stop(): Promise<void>;
14
14
  handleLocalChange(relativePath: string): Promise<void>;
15
15
  handleRemoteUpdate(path: string, version: number): Promise<void>;
16
+ private discoverLocalFiles;
16
17
  syncAll(): Promise<SyncResult>;
17
18
  private handleLocalDelete;
18
19
  private handleRemoteDelete;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/sync/engine.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,SAAS,CAA+C;gBAEpD,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU;IAMrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DtD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDhE,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;YA6GtB,iBAAiB;YAMjB,kBAAkB;YAMlB,yBAAyB;CAmCxC"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/sync/engine.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,SAAS,CAA+C;gBAEpD,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM;IAMzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DtD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAoDxD,kBAAkB;IAyB1B,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;YA0JtB,iBAAiB;YAMjB,kBAAkB;YAMlB,yBAAyB;CAmCxC"}