@kernel.chat/kbot 3.36.0 → 3.38.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.
@@ -0,0 +1,457 @@
1
+ // kbot Hooks Integration — Wire kbot into Claude Code's hook system
2
+ //
3
+ // Claude Code hooks fire at key lifecycle moments. This module generates
4
+ // the hooks configuration for settings.json and dispatches hook events
5
+ // to the right kbot subsystem:
6
+ //
7
+ // FileChanged → kbot pair mode analysis
8
+ // TaskCompleted → meta-agent observation recording
9
+ // SessionStart → load kbot learning context
10
+ // SessionEnd → run dream mode consolidation
11
+ // StopFailure → log to self-defense incident system
12
+ //
13
+ // Usage:
14
+ // import { generateHooksConfig, handleHookEvent } from './hooks-integration.js'
15
+ // const config = generateHooksConfig() // → JSON for settings.json
16
+ // await handleHookEvent('FileChanged', { file: 'src/app.ts' })
17
+ import { existsSync, readFileSync } from 'node:fs';
18
+ import { join, extname } from 'node:path';
19
+ import { homedir } from 'node:os';
20
+ // ---------------------------------------------------------------------------
21
+ // Constants
22
+ // ---------------------------------------------------------------------------
23
+ const KBOT_DIR = join(homedir(), '.kbot');
24
+ /** File extensions that trigger pair mode analysis */
25
+ const ANALYZABLE_EXTENSIONS = new Set([
26
+ '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
27
+ '.py', '.rs', '.go', '.java', '.kt', '.swift',
28
+ '.c', '.cpp', '.h', '.hpp', '.cs',
29
+ '.rb', '.php', '.vue', '.svelte',
30
+ '.css', '.scss', '.less',
31
+ '.json', '.yaml', '.yml', '.toml',
32
+ '.sql', '.graphql', '.gql',
33
+ '.sh', '.bash', '.zsh',
34
+ '.md', '.mdx',
35
+ ]);
36
+ /** Paths to ignore for file change analysis */
37
+ const IGNORE_PATTERNS = [
38
+ 'node_modules',
39
+ 'dist',
40
+ 'build',
41
+ '.git',
42
+ 'coverage',
43
+ '.next',
44
+ '.nuxt',
45
+ '__pycache__',
46
+ '.cache',
47
+ 'target',
48
+ 'vendor',
49
+ ];
50
+ // ---------------------------------------------------------------------------
51
+ // 1. generateHooksConfig
52
+ // ---------------------------------------------------------------------------
53
+ /**
54
+ * Generate the hooks configuration JSON for Claude Code's settings.json.
55
+ *
56
+ * This produces the `hooks` array that should be merged into
57
+ * `.claude/settings.json` or `~/.claude/settings.json`.
58
+ *
59
+ * Each hook calls `kbot hook-dispatch <event>` with context passed via
60
+ * environment variables.
61
+ *
62
+ * @param options.kbotPath - Path to kbot binary (default: 'kbot')
63
+ * @param options.timeout - Default timeout in ms (default: 30000)
64
+ * @returns The hooks section for settings.json
65
+ */
66
+ export function generateHooksConfig(options) {
67
+ const kbot = options?.kbotPath ?? 'kbot';
68
+ const defaultTimeout = options?.timeout ?? 30000;
69
+ const hooks = [
70
+ {
71
+ event: 'FileChanged',
72
+ command: `${kbot} hook-dispatch FileChanged`,
73
+ timeout: defaultTimeout,
74
+ matcher: '**/*.{ts,tsx,js,jsx,py,rs,go,java,rb,swift,c,cpp,css,json,yaml,sh}',
75
+ },
76
+ {
77
+ event: 'TaskCompleted',
78
+ command: `${kbot} hook-dispatch TaskCompleted`,
79
+ timeout: 15000,
80
+ },
81
+ {
82
+ event: 'SessionStart',
83
+ command: `${kbot} hook-dispatch SessionStart`,
84
+ timeout: 10000,
85
+ },
86
+ {
87
+ event: 'SessionEnd',
88
+ command: `${kbot} hook-dispatch SessionEnd`,
89
+ timeout: 60000, // Dream mode can take a while
90
+ },
91
+ {
92
+ event: 'StopFailure',
93
+ command: `${kbot} hook-dispatch StopFailure`,
94
+ timeout: 5000,
95
+ },
96
+ ];
97
+ return { hooks };
98
+ }
99
+ // ---------------------------------------------------------------------------
100
+ // 2. handleHookEvent — dispatcher
101
+ // ---------------------------------------------------------------------------
102
+ /**
103
+ * Dispatch a Claude Code hook event to the appropriate kbot subsystem.
104
+ *
105
+ * @param event - The hook event type
106
+ * @param data - Event-specific payload
107
+ * @returns Result of handling the event
108
+ */
109
+ export async function handleHookEvent(event, data) {
110
+ const start = Date.now();
111
+ try {
112
+ switch (event) {
113
+ case 'FileChanged':
114
+ return await handleFileChanged(data, start);
115
+ case 'TaskCompleted':
116
+ return await handleTaskCompleted(data, start);
117
+ case 'SessionStart':
118
+ return await handleSessionStart(data, start);
119
+ case 'SessionEnd':
120
+ return await handleSessionEnd(data, start);
121
+ case 'StopFailure':
122
+ return await handleStopFailure(data, start);
123
+ default: {
124
+ // Exhaustiveness check
125
+ const _exhaustive = event;
126
+ return {
127
+ event: _exhaustive,
128
+ handled: false,
129
+ subsystem: 'unknown',
130
+ error: `Unknown hook event: ${String(event)}`,
131
+ duration_ms: Date.now() - start,
132
+ };
133
+ }
134
+ }
135
+ }
136
+ catch (err) {
137
+ const message = err instanceof Error ? err.message : String(err);
138
+ return {
139
+ event,
140
+ handled: false,
141
+ subsystem: 'error',
142
+ error: message,
143
+ duration_ms: Date.now() - start,
144
+ };
145
+ }
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // Event handlers
149
+ // ---------------------------------------------------------------------------
150
+ /**
151
+ * FileChanged → Trigger kbot pair mode analysis.
152
+ *
153
+ * Analyzes the changed file for bugs, type errors, security issues,
154
+ * and refactoring opportunities using the pair programming module.
155
+ */
156
+ async function handleFileChanged(data, startTime) {
157
+ const { file, changeType } = data;
158
+ // Skip non-analyzable files
159
+ const ext = extname(file).toLowerCase();
160
+ if (!ANALYZABLE_EXTENSIONS.has(ext)) {
161
+ return {
162
+ event: 'FileChanged',
163
+ handled: false,
164
+ subsystem: 'pair',
165
+ output: `Skipped: ${ext} not in analyzable extensions`,
166
+ duration_ms: Date.now() - startTime,
167
+ };
168
+ }
169
+ // Skip ignored paths
170
+ if (IGNORE_PATTERNS.some(p => file.includes(p))) {
171
+ return {
172
+ event: 'FileChanged',
173
+ handled: false,
174
+ subsystem: 'pair',
175
+ output: `Skipped: file in ignored path`,
176
+ duration_ms: Date.now() - startTime,
177
+ };
178
+ }
179
+ // Skip deletions — nothing to analyze
180
+ if (changeType === 'delete') {
181
+ return {
182
+ event: 'FileChanged',
183
+ handled: false,
184
+ subsystem: 'pair',
185
+ output: 'Skipped: file deleted',
186
+ duration_ms: Date.now() - startTime,
187
+ };
188
+ }
189
+ // Verify file exists
190
+ if (!existsSync(file)) {
191
+ return {
192
+ event: 'FileChanged',
193
+ handled: false,
194
+ subsystem: 'pair',
195
+ output: `Skipped: file does not exist`,
196
+ duration_ms: Date.now() - startTime,
197
+ };
198
+ }
199
+ // Dynamic import to avoid loading the entire pair module at startup
200
+ try {
201
+ const { analyzeWithAgent } = await import('./pair.js');
202
+ const analysis = await analyzeWithAgent(file, { agent: 'coder' });
203
+ return {
204
+ event: 'FileChanged',
205
+ handled: true,
206
+ subsystem: 'pair',
207
+ output: analysis,
208
+ duration_ms: Date.now() - startTime,
209
+ };
210
+ }
211
+ catch (err) {
212
+ const message = err instanceof Error ? err.message : String(err);
213
+ return {
214
+ event: 'FileChanged',
215
+ handled: false,
216
+ subsystem: 'pair',
217
+ error: `Pair analysis failed: ${message}`,
218
+ duration_ms: Date.now() - startTime,
219
+ };
220
+ }
221
+ }
222
+ /**
223
+ * TaskCompleted → Record observation for meta-agent.
224
+ *
225
+ * Every completed task feeds into the meta-agent's observation log,
226
+ * enabling self-improvement through performance analysis.
227
+ */
228
+ async function handleTaskCompleted(data, startTime) {
229
+ try {
230
+ const { recordObservation } = await import('./meta-agent.js');
231
+ recordObservation({
232
+ timestamp: new Date().toISOString(),
233
+ agent: data.agent || 'unknown',
234
+ task: data.task || 'unspecified',
235
+ tools_used: data.tools_used ?? [],
236
+ success: data.success,
237
+ duration_ms: data.duration_ms,
238
+ tokens_in: data.tokens_in ?? 0,
239
+ tokens_out: data.tokens_out ?? 0,
240
+ cost: data.cost ?? 0,
241
+ user_satisfaction: data.success ? 'positive' : 'negative',
242
+ error: data.error,
243
+ });
244
+ return {
245
+ event: 'TaskCompleted',
246
+ handled: true,
247
+ subsystem: 'meta-agent',
248
+ output: `Recorded observation: ${data.agent}/${data.task} (${data.success ? 'success' : 'failure'})`,
249
+ duration_ms: Date.now() - startTime,
250
+ };
251
+ }
252
+ catch (err) {
253
+ const message = err instanceof Error ? err.message : String(err);
254
+ return {
255
+ event: 'TaskCompleted',
256
+ handled: false,
257
+ subsystem: 'meta-agent',
258
+ error: `Failed to record observation: ${message}`,
259
+ duration_ms: Date.now() - startTime,
260
+ };
261
+ }
262
+ }
263
+ /**
264
+ * SessionStart → Load kbot learning context.
265
+ *
266
+ * Hydrates the learning engine with patterns, solutions, user profile,
267
+ * and project memory so the session starts with full context.
268
+ */
269
+ async function handleSessionStart(data, startTime) {
270
+ try {
271
+ const { buildFullLearningContext } = await import('./learning.js');
272
+ // Build learning context for the session's working directory
273
+ const context = buildFullLearningContext('session-start', // seed message for context retrieval
274
+ data.cwd);
275
+ // Also run the kbot session-start lifecycle hook if it exists
276
+ try {
277
+ const { runLifecycleHook } = await import('./hooks.js');
278
+ runLifecycleHook('session-start', data.agent ?? 'auto');
279
+ }
280
+ catch {
281
+ // Non-critical: kbot hooks may not be set up
282
+ }
283
+ const contextSize = context.length;
284
+ const summary = contextSize > 0
285
+ ? `Loaded learning context (${contextSize} chars)`
286
+ : 'No learning context available (new project?)';
287
+ return {
288
+ event: 'SessionStart',
289
+ handled: true,
290
+ subsystem: 'learning',
291
+ output: summary,
292
+ duration_ms: Date.now() - startTime,
293
+ };
294
+ }
295
+ catch (err) {
296
+ const message = err instanceof Error ? err.message : String(err);
297
+ return {
298
+ event: 'SessionStart',
299
+ handled: false,
300
+ subsystem: 'learning',
301
+ error: `Failed to load learning context: ${message}`,
302
+ duration_ms: Date.now() - startTime,
303
+ };
304
+ }
305
+ }
306
+ /**
307
+ * SessionEnd → Run dream mode consolidation.
308
+ *
309
+ * Triggers kbot's dream mode which:
310
+ * - Consolidates short-term memory into long-term patterns
311
+ * - Runs meta-agent cycle (analyze performance, propose improvements)
312
+ * - Speculatively pre-builds tools for tomorrow's tasks
313
+ * - Self-benchmarks against yesterday's performance
314
+ */
315
+ async function handleSessionEnd(data, startTime) {
316
+ try {
317
+ const { runDreamMode } = await import('./dream-mode.js');
318
+ // Run dream mode with verbose=false (we're in a hook, not interactive)
319
+ const report = await runDreamMode(false);
320
+ // Also run the kbot session-end lifecycle hook
321
+ try {
322
+ const { runLifecycleHook } = await import('./hooks.js');
323
+ runLifecycleHook('session-end', data.agent ?? 'auto');
324
+ }
325
+ catch {
326
+ // Non-critical
327
+ }
328
+ // Also flush any pending learning writes
329
+ try {
330
+ const { flushPendingWrites } = await import('./learning.js');
331
+ flushPendingWrites();
332
+ }
333
+ catch {
334
+ // Non-critical
335
+ }
336
+ const summary = [
337
+ `Dream mode completed in ${report.duration_ms}ms`,
338
+ `Phases: ${report.phases_completed}`,
339
+ `Findings: ${report.total_findings}`,
340
+ `Actions: ${report.total_actions}`,
341
+ `Improvements: ${report.total_improvements}`,
342
+ ].join(', ');
343
+ return {
344
+ event: 'SessionEnd',
345
+ handled: true,
346
+ subsystem: 'dream-mode',
347
+ output: summary,
348
+ duration_ms: Date.now() - startTime,
349
+ };
350
+ }
351
+ catch (err) {
352
+ const message = err instanceof Error ? err.message : String(err);
353
+ return {
354
+ event: 'SessionEnd',
355
+ handled: false,
356
+ subsystem: 'dream-mode',
357
+ error: `Dream mode failed: ${message}`,
358
+ duration_ms: Date.now() - startTime,
359
+ };
360
+ }
361
+ }
362
+ /**
363
+ * StopFailure → Log to self-defense incident system.
364
+ *
365
+ * When Claude Code encounters a stop failure (tool rejection, permission
366
+ * denial, safety filter), kbot logs it as a security incident for
367
+ * anomaly detection and pattern analysis.
368
+ */
369
+ async function handleStopFailure(data, startTime) {
370
+ try {
371
+ const { logIncident } = await import('./self-defense.js');
372
+ // Determine severity based on context
373
+ const severity = determineSeverity(data);
374
+ logIncident('stop_failure', severity, buildIncidentDescription(data), 'logged');
375
+ return {
376
+ event: 'StopFailure',
377
+ handled: true,
378
+ subsystem: 'self-defense',
379
+ output: `Incident logged: ${severity} — ${data.reason.slice(0, 100)}`,
380
+ duration_ms: Date.now() - startTime,
381
+ };
382
+ }
383
+ catch (err) {
384
+ const message = err instanceof Error ? err.message : String(err);
385
+ return {
386
+ event: 'StopFailure',
387
+ handled: false,
388
+ subsystem: 'self-defense',
389
+ error: `Failed to log incident: ${message}`,
390
+ duration_ms: Date.now() - startTime,
391
+ };
392
+ }
393
+ }
394
+ // ---------------------------------------------------------------------------
395
+ // Helpers
396
+ // ---------------------------------------------------------------------------
397
+ /** Determine incident severity from stop failure data */
398
+ function determineSeverity(data) {
399
+ const reason = data.reason.toLowerCase();
400
+ // High severity: potential security issues
401
+ if (reason.includes('injection') || reason.includes('malicious') || reason.includes('exploit')) {
402
+ return 'high';
403
+ }
404
+ // Medium severity: permission or safety issues
405
+ if (reason.includes('permission') || reason.includes('denied') || reason.includes('blocked')) {
406
+ return 'medium';
407
+ }
408
+ // Medium severity: command failures that might indicate attacks
409
+ if (data.exitCode && data.exitCode > 128) {
410
+ return 'medium';
411
+ }
412
+ // Low severity: general failures
413
+ return 'low';
414
+ }
415
+ /** Build a descriptive string for the incident log */
416
+ function buildIncidentDescription(data) {
417
+ const parts = [
418
+ `Stop failure: ${data.reason}`,
419
+ ];
420
+ if (data.command) {
421
+ parts.push(`Command: ${data.command.slice(0, 200)}`);
422
+ }
423
+ if (data.exitCode !== undefined) {
424
+ parts.push(`Exit code: ${data.exitCode}`);
425
+ }
426
+ if (data.stderr) {
427
+ parts.push(`Stderr: ${data.stderr.slice(0, 300)}`);
428
+ }
429
+ return parts.join(' | ');
430
+ }
431
+ // ---------------------------------------------------------------------------
432
+ // Convenience: merge into existing settings.json
433
+ // ---------------------------------------------------------------------------
434
+ /**
435
+ * Read existing Claude Code settings.json and merge kbot hooks into it.
436
+ * Returns the merged JSON object. Does not write to disk.
437
+ *
438
+ * @param settingsPath - Path to settings.json (default: .claude/settings.json)
439
+ */
440
+ export function mergeHooksIntoSettings(settingsPath, kbotPath) {
441
+ const defaultPath = join(process.cwd(), '.claude', 'settings.json');
442
+ const filePath = settingsPath ?? defaultPath;
443
+ let existing = {};
444
+ if (existsSync(filePath)) {
445
+ try {
446
+ existing = JSON.parse(readFileSync(filePath, 'utf-8'));
447
+ }
448
+ catch {
449
+ // Start fresh if parse fails
450
+ }
451
+ }
452
+ const hooksConfig = generateHooksConfig({ kbotPath });
453
+ // Merge: replace any existing hooks array
454
+ existing['hooks'] = hooksConfig.hooks;
455
+ return existing;
456
+ }
457
+ //# sourceMappingURL=hooks-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-integration.js","sourceRoot":"","sources":["../src/hooks-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ interface TaskObservation {
2
+ timestamp: string;
3
+ agent: string;
4
+ task: string;
5
+ tools_used: string[];
6
+ success: boolean;
7
+ duration_ms: number;
8
+ tokens_in: number;
9
+ tokens_out: number;
10
+ cost: number;
11
+ user_satisfaction?: 'positive' | 'negative' | 'neutral';
12
+ error?: string;
13
+ }
14
+ interface PerformanceProfile {
15
+ agent: string;
16
+ total_tasks: number;
17
+ success_rate: number;
18
+ avg_duration_ms: number;
19
+ avg_cost: number;
20
+ common_tools: Array<{
21
+ name: string;
22
+ frequency: number;
23
+ }>;
24
+ failure_patterns: string[];
25
+ improvement_potential: 'low' | 'medium' | 'high';
26
+ }
27
+ interface Improvement {
28
+ id: string;
29
+ timestamp: string;
30
+ target: 'routing' | 'prompt' | 'tool_selection' | 'fallback' | 'agent_config';
31
+ agent: string;
32
+ description: string;
33
+ before: string;
34
+ after: string;
35
+ expected_impact: string;
36
+ measured_impact?: string;
37
+ status: 'proposed' | 'applied' | 'measured' | 'reverted';
38
+ }
39
+ interface MetaReport {
40
+ timestamp: string;
41
+ observations_analyzed: number;
42
+ profiles: PerformanceProfile[];
43
+ improvements_proposed: Improvement[];
44
+ improvements_applied: Improvement[];
45
+ cycle_number: number;
46
+ }
47
+ export declare function recordObservation(obs: TaskObservation): void;
48
+ export declare function analyzePerformance(): PerformanceProfile[];
49
+ export declare function proposeImprovements(profiles: PerformanceProfile[]): Improvement[];
50
+ export declare function applyImprovement(improvement: Improvement): boolean;
51
+ export declare function measureImpact(improvementId: string): string;
52
+ export declare function runMetaAgent(): Promise<MetaReport>;
53
+ export declare function getImprovementHistory(): Improvement[];
54
+ export declare function getActiveImprovements(): Improvement[];
55
+ export declare function getMetaStats(): {
56
+ cycles: number;
57
+ observations: number;
58
+ improvements: number;
59
+ active: number;
60
+ };
61
+ export {};
62
+ //# sourceMappingURL=meta-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-agent.d.ts","sourceRoot":"","sources":["../src/meta-agent.ts"],"names":[],"mappings":"AA6BA,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,iBAAiB,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxD,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,qBAAqB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;CACjD;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,gBAAgB,GAAG,UAAU,GAAG,cAAc,CAAA;IAC7E,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAA;CACzD;AAED,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,qBAAqB,EAAE,WAAW,EAAE,CAAA;IACpC,oBAAoB,EAAE,WAAW,EAAE,CAAA;IACnC,YAAY,EAAE,MAAM,CAAA;CACrB;AA0BD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAO5D;AAID,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CA0DzD;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,WAAW,EAAE,CAmDjF;AAID,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAiBlE;AAID,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAwB3D;AAID,wBAAsB,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAyFxD;AAID,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAErD;AAED,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAGrD;AAED,wBAAgB,YAAY,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAO7G"}