openplanr 1.13.2 → 1.14.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.
Files changed (159) hide show
  1. package/README.md +46 -4
  2. package/dist/cli/commands/artifact.d.ts.map +1 -1
  3. package/dist/cli/commands/artifact.js +17 -6
  4. package/dist/cli/commands/artifact.js.map +1 -1
  5. package/dist/cli/commands/operate.d.ts +3 -0
  6. package/dist/cli/commands/operate.d.ts.map +1 -0
  7. package/dist/cli/commands/operate.js +568 -0
  8. package/dist/cli/commands/operate.js.map +1 -0
  9. package/dist/cli/index.js +42 -2
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/services/ai-service.d.ts +9 -2
  12. package/dist/services/ai-service.d.ts.map +1 -1
  13. package/dist/services/ai-service.js +14 -6
  14. package/dist/services/ai-service.js.map +1 -1
  15. package/dist/services/artifact-pipeline-service.d.ts +1 -0
  16. package/dist/services/artifact-pipeline-service.d.ts.map +1 -1
  17. package/dist/services/artifact-pipeline-service.js.map +1 -1
  18. package/dist/services/delta-apply-service.js +1 -1
  19. package/dist/services/delta-apply-service.js.map +1 -1
  20. package/dist/services/operate/advisors.d.ts +219 -0
  21. package/dist/services/operate/advisors.d.ts.map +1 -0
  22. package/dist/services/operate/advisors.js +745 -0
  23. package/dist/services/operate/advisors.js.map +1 -0
  24. package/dist/services/operate/artifact-route-generation.d.ts +111 -0
  25. package/dist/services/operate/artifact-route-generation.d.ts.map +1 -0
  26. package/dist/services/operate/artifact-route-generation.js +459 -0
  27. package/dist/services/operate/artifact-route-generation.js.map +1 -0
  28. package/dist/services/operate/artifacts.d.ts +26 -0
  29. package/dist/services/operate/artifacts.d.ts.map +1 -0
  30. package/dist/services/operate/artifacts.js +92 -0
  31. package/dist/services/operate/artifacts.js.map +1 -0
  32. package/dist/services/operate/canonical.d.ts +18 -0
  33. package/dist/services/operate/canonical.d.ts.map +1 -0
  34. package/dist/services/operate/canonical.js +157 -0
  35. package/dist/services/operate/canonical.js.map +1 -0
  36. package/dist/services/operate/config.d.ts +56 -0
  37. package/dist/services/operate/config.d.ts.map +1 -0
  38. package/dist/services/operate/config.js +644 -0
  39. package/dist/services/operate/config.js.map +1 -0
  40. package/dist/services/operate/consolidation.d.ts +18 -0
  41. package/dist/services/operate/consolidation.d.ts.map +1 -0
  42. package/dist/services/operate/consolidation.js +539 -0
  43. package/dist/services/operate/consolidation.js.map +1 -0
  44. package/dist/services/operate/doctor.d.ts +12 -0
  45. package/dist/services/operate/doctor.d.ts.map +1 -0
  46. package/dist/services/operate/doctor.js +307 -0
  47. package/dist/services/operate/doctor.js.map +1 -0
  48. package/dist/services/operate/engine.d.ts +53 -0
  49. package/dist/services/operate/engine.d.ts.map +1 -0
  50. package/dist/services/operate/engine.js +1097 -0
  51. package/dist/services/operate/engine.js.map +1 -0
  52. package/dist/services/operate/event-store.d.ts +57 -0
  53. package/dist/services/operate/event-store.d.ts.map +1 -0
  54. package/dist/services/operate/event-store.js +232 -0
  55. package/dist/services/operate/event-store.js.map +1 -0
  56. package/dist/services/operate/evidence-cache.d.ts +17 -0
  57. package/dist/services/operate/evidence-cache.d.ts.map +1 -0
  58. package/dist/services/operate/evidence-cache.js +96 -0
  59. package/dist/services/operate/evidence-cache.js.map +1 -0
  60. package/dist/services/operate/evidence-import.d.ts +40 -0
  61. package/dist/services/operate/evidence-import.d.ts.map +1 -0
  62. package/dist/services/operate/evidence-import.js +340 -0
  63. package/dist/services/operate/evidence-import.js.map +1 -0
  64. package/dist/services/operate/evidence-readiness.d.ts +8 -0
  65. package/dist/services/operate/evidence-readiness.d.ts.map +1 -0
  66. package/dist/services/operate/evidence-readiness.js +78 -0
  67. package/dist/services/operate/evidence-readiness.js.map +1 -0
  68. package/dist/services/operate/evidence.d.ts +71 -0
  69. package/dist/services/operate/evidence.d.ts.map +1 -0
  70. package/dist/services/operate/evidence.js +1022 -0
  71. package/dist/services/operate/evidence.js.map +1 -0
  72. package/dist/services/operate/ids.d.ts +7 -0
  73. package/dist/services/operate/ids.d.ts.map +1 -0
  74. package/dist/services/operate/ids.js +23 -0
  75. package/dist/services/operate/ids.js.map +1 -0
  76. package/dist/services/operate/index.d.ts +14 -0
  77. package/dist/services/operate/index.d.ts.map +1 -0
  78. package/dist/services/operate/index.js +881 -0
  79. package/dist/services/operate/index.js.map +1 -0
  80. package/dist/services/operate/journal.d.ts +34 -0
  81. package/dist/services/operate/journal.d.ts.map +1 -0
  82. package/dist/services/operate/journal.js +229 -0
  83. package/dist/services/operate/journal.js.map +1 -0
  84. package/dist/services/operate/legacy-import-service.d.ts +58 -0
  85. package/dist/services/operate/legacy-import-service.d.ts.map +1 -0
  86. package/dist/services/operate/legacy-import-service.js +922 -0
  87. package/dist/services/operate/legacy-import-service.js.map +1 -0
  88. package/dist/services/operate/lifecycle.d.ts +88 -0
  89. package/dist/services/operate/lifecycle.d.ts.map +1 -0
  90. package/dist/services/operate/lifecycle.js +556 -0
  91. package/dist/services/operate/lifecycle.js.map +1 -0
  92. package/dist/services/operate/lock-service.d.ts +37 -0
  93. package/dist/services/operate/lock-service.d.ts.map +1 -0
  94. package/dist/services/operate/lock-service.js +208 -0
  95. package/dist/services/operate/lock-service.js.map +1 -0
  96. package/dist/services/operate/maintenance.d.ts +38 -0
  97. package/dist/services/operate/maintenance.d.ts.map +1 -0
  98. package/dist/services/operate/maintenance.js +699 -0
  99. package/dist/services/operate/maintenance.js.map +1 -0
  100. package/dist/services/operate/outcomes.d.ts +48 -0
  101. package/dist/services/operate/outcomes.d.ts.map +1 -0
  102. package/dist/services/operate/outcomes.js +312 -0
  103. package/dist/services/operate/outcomes.js.map +1 -0
  104. package/dist/services/operate/pipeline-handoff.d.ts +138 -0
  105. package/dist/services/operate/pipeline-handoff.d.ts.map +1 -0
  106. package/dist/services/operate/pipeline-handoff.js +175 -0
  107. package/dist/services/operate/pipeline-handoff.js.map +1 -0
  108. package/dist/services/operate/projection-persistence.d.ts +55 -0
  109. package/dist/services/operate/projection-persistence.d.ts.map +1 -0
  110. package/dist/services/operate/projection-persistence.js +393 -0
  111. package/dist/services/operate/projection-persistence.js.map +1 -0
  112. package/dist/services/operate/projection.d.ts +4 -0
  113. package/dist/services/operate/projection.d.ts.map +1 -0
  114. package/dist/services/operate/projection.js +128 -0
  115. package/dist/services/operate/projection.js.map +1 -0
  116. package/dist/services/operate/protocol.d.ts +60 -0
  117. package/dist/services/operate/protocol.d.ts.map +1 -0
  118. package/dist/services/operate/protocol.js +62 -0
  119. package/dist/services/operate/protocol.js.map +1 -0
  120. package/dist/services/operate/read-only-providers.d.ts +38 -0
  121. package/dist/services/operate/read-only-providers.d.ts.map +1 -0
  122. package/dist/services/operate/read-only-providers.js +286 -0
  123. package/dist/services/operate/read-only-providers.js.map +1 -0
  124. package/dist/services/operate/redaction.d.ts +47 -0
  125. package/dist/services/operate/redaction.d.ts.map +1 -0
  126. package/dist/services/operate/redaction.js +279 -0
  127. package/dist/services/operate/redaction.js.map +1 -0
  128. package/dist/services/operate/reducer.d.ts +10 -0
  129. package/dist/services/operate/reducer.d.ts.map +1 -0
  130. package/dist/services/operate/reducer.js +11 -0
  131. package/dist/services/operate/reducer.js.map +1 -0
  132. package/dist/services/operate/routes.d.ts +49 -0
  133. package/dist/services/operate/routes.d.ts.map +1 -0
  134. package/dist/services/operate/routes.js +996 -0
  135. package/dist/services/operate/routes.js.map +1 -0
  136. package/dist/services/operate/shipment-observer.d.ts +14 -0
  137. package/dist/services/operate/shipment-observer.d.ts.map +1 -0
  138. package/dist/services/operate/shipment-observer.js +321 -0
  139. package/dist/services/operate/shipment-observer.js.map +1 -0
  140. package/dist/services/operate/stalled-item-service.d.ts +18 -0
  141. package/dist/services/operate/stalled-item-service.d.ts.map +1 -0
  142. package/dist/services/operate/stalled-item-service.js +121 -0
  143. package/dist/services/operate/stalled-item-service.js.map +1 -0
  144. package/dist/services/operate/subprocess-env.d.ts +4 -0
  145. package/dist/services/operate/subprocess-env.d.ts.map +1 -0
  146. package/dist/services/operate/subprocess-env.js +45 -0
  147. package/dist/services/operate/subprocess-env.js.map +1 -0
  148. package/dist/services/operate/types.d.ts +729 -0
  149. package/dist/services/operate/types.d.ts.map +1 -0
  150. package/dist/services/operate/types.js +13 -0
  151. package/dist/services/operate/types.js.map +1 -0
  152. package/dist/services/operate/workspace.d.ts +59 -0
  153. package/dist/services/operate/workspace.d.ts.map +1 -0
  154. package/dist/services/operate/workspace.js +316 -0
  155. package/dist/services/operate/workspace.js.map +1 -0
  156. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  157. package/dist/services/runtime-manager-service.js +71 -2
  158. package/dist/services/runtime-manager-service.js.map +1 -1
  159. package/package.json +10 -4
@@ -0,0 +1,208 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { randomBytes } from 'node:crypto';
3
+ import { mkdir, open, readFile, unlink } from 'node:fs/promises';
4
+ import { hostname } from 'node:os';
5
+ import path from 'node:path';
6
+ import { promisify } from 'node:util';
7
+ import { canonicalize } from './canonical.js';
8
+ import { minimalSubprocessEnvironment } from './subprocess-env.js';
9
+ import { OperateError } from './types.js';
10
+ import { resolveOperatingPaths } from './workspace.js';
11
+ const execFileAsync = promisify(execFile);
12
+ const DEFAULT_LEASE_DURATION_MS = 30_000;
13
+ const MINIMUM_LEASE_DURATION_MS = 5_000;
14
+ const MAXIMUM_LEASE_DURATION_MS = 5 * 60_000;
15
+ function assertLeaseDuration(value) {
16
+ if (!Number.isInteger(value) ||
17
+ value < MINIMUM_LEASE_DURATION_MS ||
18
+ value > MAXIMUM_LEASE_DURATION_MS) {
19
+ throw new OperateError('E_OPERATE_STATE_INVALID', `Lock lease must be ${MINIMUM_LEASE_DURATION_MS}-${MAXIMUM_LEASE_DURATION_MS}ms.`);
20
+ }
21
+ }
22
+ async function writeRecord(handle, record) {
23
+ const bytes = Buffer.from(`${canonicalize(record)}\n`);
24
+ await handle.truncate(0);
25
+ await handle.write(bytes, 0, bytes.length, 0);
26
+ await handle.sync();
27
+ }
28
+ function processIsAlive(pid) {
29
+ try {
30
+ process.kill(pid, 0);
31
+ return true;
32
+ }
33
+ catch (error) {
34
+ return error.code === 'EPERM';
35
+ }
36
+ }
37
+ /**
38
+ * Returns null where the platform offers no `ps` — notably Windows. Callers
39
+ * treat a null identity as "cannot corroborate", so lock ownership falls back
40
+ * to the lease and heartbeat rather than to a fabricated identity.
41
+ */
42
+ export async function readProcessStartIdentity(pid) {
43
+ try {
44
+ const { stdout } = await execFileAsync('ps', ['-o', 'lstart=', '-p', String(pid)], {
45
+ env: minimalSubprocessEnvironment({ LANG: 'C', LC_ALL: 'C' }),
46
+ timeout: 2_000,
47
+ maxBuffer: 4096,
48
+ });
49
+ const identity = stdout.trim().replace(/\s+/g, ' ');
50
+ return identity || null;
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ function headsEqual(left, right) {
57
+ return left.sequence === right.sequence && left.hash === right.hash;
58
+ }
59
+ function assertHead(expected, current) {
60
+ if (!headsEqual(expected, current)) {
61
+ throw new OperateError('E_OPERATE_ROUTE_DRIFT', 'The operating event head changed after preview.', { expected, actual: current });
62
+ }
63
+ }
64
+ export async function readOperatingLock(lockPath) {
65
+ const record = JSON.parse(await readFile(lockPath, 'utf8'));
66
+ if (typeof record.projectKey !== 'string' ||
67
+ typeof record.nonce !== 'string' ||
68
+ record.nonce.length < 32 ||
69
+ !Number.isInteger(record.pid) ||
70
+ typeof record.host !== 'string' ||
71
+ typeof record.processStartedAt !== 'string' ||
72
+ typeof record.heartbeatAt !== 'string' ||
73
+ !Number.isFinite(Date.parse(record.leaseExpiresAt)) ||
74
+ !Number.isInteger(record.leaseDurationMs) ||
75
+ !record.expectedEventHead ||
76
+ !Number.isInteger(record.expectedEventHead.sequence)) {
77
+ throw new OperateError('E_OPERATE_STATE_INVALID', 'Operating lock is malformed.');
78
+ }
79
+ assertLeaseDuration(record.leaseDurationMs);
80
+ return record;
81
+ }
82
+ export async function acquireOperatingLock(projectRoot, options) {
83
+ assertHead(options.expectedEventHead, options.currentEventHead);
84
+ const paths = resolveOperatingPaths(projectRoot, { localRoot: options.localRoot });
85
+ await mkdir(paths.locks, { recursive: true, mode: 0o700 });
86
+ const lockPath = path.join(paths.locks, `${options.name ?? 'project'}.lock`);
87
+ const now = options.now ?? new Date();
88
+ const leaseDurationMs = options.leaseDurationMs ?? DEFAULT_LEASE_DURATION_MS;
89
+ assertLeaseDuration(leaseDurationMs);
90
+ const processIdentity = (await readProcessStartIdentity(process.pid)) ??
91
+ `unverified-self:${new Date(now.getTime() - process.uptime() * 1000).toISOString()}`;
92
+ const record = {
93
+ projectKey: options.projectKey,
94
+ nonce: randomBytes(32).toString('base64url'),
95
+ pid: process.pid,
96
+ host: hostname(),
97
+ processStartedAt: processIdentity,
98
+ createdAt: now.toISOString(),
99
+ heartbeatAt: now.toISOString(),
100
+ leaseDurationMs,
101
+ leaseExpiresAt: new Date(now.getTime() + leaseDurationMs).toISOString(),
102
+ expectedEventHead: structuredClone(options.expectedEventHead),
103
+ };
104
+ let handle;
105
+ try {
106
+ handle = await open(lockPath, 'wx', 0o600);
107
+ }
108
+ catch (error) {
109
+ if (error.code !== 'EEXIST')
110
+ throw error;
111
+ const owner = await readOperatingLock(lockPath).catch(() => undefined);
112
+ throw new OperateError('E_OPERATE_CYCLE_ACTIVE', 'Another operating run owns the project.', {
113
+ owner,
114
+ });
115
+ }
116
+ await writeRecord(handle, record);
117
+ let released = false;
118
+ const verifyOwnership = async () => {
119
+ const current = await readOperatingLock(lockPath);
120
+ if (current.nonce !== record.nonce ||
121
+ current.pid !== record.pid ||
122
+ current.host !== record.host ||
123
+ current.processStartedAt !== record.processStartedAt) {
124
+ throw new OperateError('E_OPERATE_CYCLE_ACTIVE', 'Operating lock ownership changed.');
125
+ }
126
+ };
127
+ return {
128
+ record,
129
+ path: lockPath,
130
+ assertEventHead(currentEventHead) {
131
+ assertHead(record.expectedEventHead, currentEventHead);
132
+ },
133
+ async advanceEventHead(currentEventHead, nextEventHead) {
134
+ if (released) {
135
+ throw new OperateError('E_OPERATE_CYCLE_ACTIVE', 'Cannot advance a released lock.');
136
+ }
137
+ assertHead(record.expectedEventHead, currentEventHead);
138
+ await verifyOwnership();
139
+ record.expectedEventHead = structuredClone(nextEventHead);
140
+ await writeRecord(handle, record);
141
+ },
142
+ async heartbeat(currentEventHead, heartbeatNow = new Date()) {
143
+ if (released) {
144
+ throw new OperateError('E_OPERATE_CYCLE_ACTIVE', 'Cannot heartbeat a released lock.');
145
+ }
146
+ assertHead(record.expectedEventHead, currentEventHead);
147
+ await verifyOwnership();
148
+ if (heartbeatNow.getTime() > Date.parse(record.leaseExpiresAt)) {
149
+ throw new OperateError('E_OPERATE_CYCLE_ACTIVE', 'Operating lock lease expired before heartbeat.');
150
+ }
151
+ record.heartbeatAt = heartbeatNow.toISOString();
152
+ record.leaseExpiresAt = new Date(heartbeatNow.getTime() + record.leaseDurationMs).toISOString();
153
+ await writeRecord(handle, record);
154
+ },
155
+ async release() {
156
+ if (released)
157
+ return;
158
+ await verifyOwnership();
159
+ released = true;
160
+ await handle.close();
161
+ await unlink(lockPath);
162
+ },
163
+ };
164
+ }
165
+ export async function recoverStaleOperatingLock(projectRoot, options) {
166
+ const lockPath = path.join(resolveOperatingPaths(projectRoot, { localRoot: options.localRoot }).locks, `${options.name ?? 'project'}.lock`);
167
+ const record = await readOperatingLock(lockPath);
168
+ const now = options.now ?? new Date();
169
+ if (record.projectKey !== options.projectKey ||
170
+ record.nonce !== options.expectedNonce ||
171
+ (options.expectedProcessStartedAt &&
172
+ record.processStartedAt !== options.expectedProcessStartedAt)) {
173
+ throw new OperateError('E_OPERATE_STALE_LOCK_UNSAFE', 'The lock changed after stale-lock preview.');
174
+ }
175
+ if (record.host !== hostname()) {
176
+ throw new OperateError('E_OPERATE_STALE_LOCK_UNSAFE', 'Cross-host locks require manual owner verification and are never auto-removed.');
177
+ }
178
+ if (now.getTime() <= Date.parse(record.leaseExpiresAt)) {
179
+ throw new OperateError('E_OPERATE_STALE_LOCK_UNSAFE', 'The operating lease is active.');
180
+ }
181
+ if (processIsAlive(record.pid)) {
182
+ const liveIdentity = await (options.processIdentityReader ?? readProcessStartIdentity)(record.pid);
183
+ if (!liveIdentity || liveIdentity === record.processStartedAt) {
184
+ throw new OperateError('E_OPERATE_STALE_LOCK_UNSAFE', liveIdentity
185
+ ? 'The lock owner process is still alive.'
186
+ : 'The live process start identity cannot be proven; refusing automatic recovery.');
187
+ }
188
+ // A different start identity proves PID reuse; the expired lease is stale.
189
+ }
190
+ const rechecked = await readOperatingLock(lockPath);
191
+ if (rechecked.nonce !== options.expectedNonce ||
192
+ rechecked.processStartedAt !== record.processStartedAt ||
193
+ rechecked.heartbeatAt !== record.heartbeatAt ||
194
+ rechecked.leaseExpiresAt !== record.leaseExpiresAt) {
195
+ throw new OperateError('E_OPERATE_STALE_LOCK_UNSAFE', 'The lock changed immediately before recovery.');
196
+ }
197
+ await unlink(lockPath);
198
+ }
199
+ export async function withOperatingLock(projectRoot, options, operation) {
200
+ const lock = await acquireOperatingLock(projectRoot, options);
201
+ try {
202
+ return await operation(lock);
203
+ }
204
+ finally {
205
+ await lock.release();
206
+ }
207
+ }
208
+ //# sourceMappingURL=lock-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock-service.js","sourceRoot":"","sources":["../../../src/services/operate/lock-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export declare function operatingCacheAction(input: {
2
+ projectRoot: string;
3
+ action: 'status' | 'purge';
4
+ confirmed?: boolean;
5
+ localRoot?: string;
6
+ }): Promise<unknown>;
7
+ export declare function operatingIntegrityAction(input: {
8
+ projectRoot: string;
9
+ action: 'status' | 'enable';
10
+ confirmed?: boolean;
11
+ localRoot?: string;
12
+ }): Promise<unknown>;
13
+ export declare function exportOperatingDiagnostics(input: {
14
+ projectRoot: string;
15
+ output?: string;
16
+ localRoot?: string;
17
+ }): Promise<{
18
+ path: string;
19
+ digest: `sha256:${string}`;
20
+ }>;
21
+ export declare function repairOperatingSecurity(input: {
22
+ projectRoot: string;
23
+ confirmed: boolean;
24
+ localRoot?: string;
25
+ faultInjector?: (boundary: 'project-quarantined') => void | Promise<void>;
26
+ }): Promise<unknown>;
27
+ export declare function operateAdapterLifecycle(input: {
28
+ projectRoot: string;
29
+ action: 'prepare' | 'record' | 'resume' | 'finalize' | 'cancel';
30
+ cycleId?: string;
31
+ evidenceDigest?: string;
32
+ lease?: string;
33
+ idempotencyKey?: string;
34
+ role?: string;
35
+ stdin?: string;
36
+ localRoot?: string;
37
+ }): Promise<unknown>;
38
+ //# sourceMappingURL=maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../src/services/operate/maintenance.ts"],"names":[],"mappings":"AA0GA,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBnB;AA2BD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqEnB;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,MAAM,EAAE,CAAA;CAAE,CAAC,CAiCxD;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E,GAAG,OAAO,CAAC,OAAO,CAAC,CA4RnB;AAkGD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8SnB"}