@powerhousedao/reactor 4.1.0-dev.8 → 4.1.0-dev.80

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 (198) hide show
  1. package/dist/src/client/reactor-client.d.ts +103 -0
  2. package/dist/src/client/reactor-client.d.ts.map +1 -0
  3. package/dist/src/client/reactor-client.js +184 -0
  4. package/dist/src/client/reactor-client.js.map +1 -0
  5. package/dist/src/client/types.d.ts +213 -0
  6. package/dist/src/client/types.d.ts.map +1 -0
  7. package/dist/src/client/types.js +14 -0
  8. package/dist/src/client/types.js.map +1 -0
  9. package/dist/src/core/builder.d.ts +20 -0
  10. package/dist/src/core/builder.d.ts.map +1 -0
  11. package/dist/src/core/builder.js +47 -0
  12. package/dist/src/core/builder.js.map +1 -0
  13. package/dist/src/core/reactor.d.ts +92 -0
  14. package/dist/src/core/reactor.d.ts.map +1 -0
  15. package/dist/src/core/reactor.js +647 -0
  16. package/dist/src/core/reactor.js.map +1 -0
  17. package/dist/src/core/types.d.ts +121 -0
  18. package/dist/src/core/types.d.ts.map +1 -0
  19. package/dist/src/core/types.js +2 -0
  20. package/dist/src/core/types.js.map +1 -0
  21. package/dist/src/core/utils.d.ts +11 -0
  22. package/dist/src/core/utils.d.ts.map +1 -0
  23. package/dist/src/core/utils.js +31 -0
  24. package/dist/src/core/utils.js.map +1 -0
  25. package/dist/src/events/event-bus.d.ts +3 -3
  26. package/dist/src/events/event-bus.d.ts.map +1 -1
  27. package/dist/src/events/event-bus.js.map +1 -1
  28. package/dist/src/events/interfaces.d.ts +1 -1
  29. package/dist/src/events/interfaces.d.ts.map +1 -1
  30. package/dist/src/events/types.d.ts +15 -1
  31. package/dist/src/events/types.d.ts.map +1 -1
  32. package/dist/src/events/types.js +6 -0
  33. package/dist/src/events/types.js.map +1 -1
  34. package/dist/src/executor/interfaces.d.ts +31 -54
  35. package/dist/src/executor/interfaces.d.ts.map +1 -1
  36. package/dist/src/executor/simple-job-executor-manager.d.ts +30 -0
  37. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  38. package/dist/src/executor/simple-job-executor-manager.js +178 -0
  39. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  40. package/dist/src/executor/simple-job-executor.d.ts +60 -0
  41. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  42. package/dist/src/executor/simple-job-executor.js +537 -0
  43. package/dist/src/executor/simple-job-executor.js.map +1 -0
  44. package/dist/src/executor/types.d.ts +24 -8
  45. package/dist/src/executor/types.d.ts.map +1 -1
  46. package/dist/src/executor/types.js.map +1 -1
  47. package/dist/src/index.d.ts +26 -3
  48. package/dist/src/index.d.ts.map +1 -1
  49. package/dist/src/index.js +33 -2
  50. package/dist/src/index.js.map +1 -1
  51. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +15 -0
  52. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -0
  53. package/dist/src/job-tracker/in-memory-job-tracker.js +78 -0
  54. package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -0
  55. package/dist/src/job-tracker/index.d.ts +3 -0
  56. package/dist/src/job-tracker/index.d.ts.map +1 -0
  57. package/dist/src/job-tracker/index.js +2 -0
  58. package/dist/src/job-tracker/index.js.map +1 -0
  59. package/dist/src/job-tracker/interfaces.d.ts +41 -0
  60. package/dist/src/job-tracker/interfaces.d.ts.map +1 -0
  61. package/dist/src/job-tracker/interfaces.js +2 -0
  62. package/dist/src/job-tracker/interfaces.js.map +1 -0
  63. package/dist/src/queue/interfaces.d.ts +45 -5
  64. package/dist/src/queue/interfaces.d.ts.map +1 -1
  65. package/dist/src/queue/job-execution-handle.d.ts +24 -0
  66. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  67. package/dist/src/queue/job-execution-handle.js +62 -0
  68. package/dist/src/queue/job-execution-handle.js.map +1 -0
  69. package/dist/src/queue/queue.d.ts +54 -5
  70. package/dist/src/queue/queue.d.ts.map +1 -1
  71. package/dist/src/queue/queue.js +265 -36
  72. package/dist/src/queue/queue.js.map +1 -1
  73. package/dist/src/queue/types.d.ts +30 -5
  74. package/dist/src/queue/types.d.ts.map +1 -1
  75. package/dist/src/queue/types.js +12 -0
  76. package/dist/src/queue/types.js.map +1 -1
  77. package/dist/src/read-models/coordinator.d.ts +38 -0
  78. package/dist/src/read-models/coordinator.d.ts.map +1 -0
  79. package/dist/src/read-models/coordinator.js +62 -0
  80. package/dist/src/read-models/coordinator.js.map +1 -0
  81. package/dist/src/read-models/document-view.d.ts +20 -0
  82. package/dist/src/read-models/document-view.d.ts.map +1 -0
  83. package/dist/src/read-models/document-view.js +363 -0
  84. package/dist/src/read-models/document-view.js.map +1 -0
  85. package/dist/src/read-models/interfaces.d.ts +29 -0
  86. package/dist/src/read-models/interfaces.d.ts.map +1 -0
  87. package/dist/src/read-models/interfaces.js +2 -0
  88. package/dist/src/read-models/interfaces.js.map +1 -0
  89. package/dist/src/read-models/types.d.ts +46 -0
  90. package/dist/src/read-models/types.d.ts.map +1 -0
  91. package/dist/src/read-models/types.js +2 -0
  92. package/dist/src/read-models/types.js.map +1 -0
  93. package/dist/src/registry/implementation.d.ts +62 -0
  94. package/dist/src/registry/implementation.d.ts.map +1 -0
  95. package/dist/src/registry/implementation.js +96 -0
  96. package/dist/src/registry/implementation.js.map +1 -0
  97. package/dist/src/registry/index.d.ts +3 -0
  98. package/dist/src/registry/index.d.ts.map +1 -0
  99. package/dist/src/registry/index.js +2 -0
  100. package/dist/src/registry/index.js.map +1 -0
  101. package/dist/src/registry/interfaces.d.ts +39 -0
  102. package/dist/src/registry/interfaces.d.ts.map +1 -0
  103. package/dist/src/registry/interfaces.js +2 -0
  104. package/dist/src/registry/interfaces.js.map +1 -0
  105. package/dist/src/shared/awaiter.d.ts +32 -0
  106. package/dist/src/shared/awaiter.d.ts.map +1 -0
  107. package/dist/src/shared/awaiter.js +132 -0
  108. package/dist/src/shared/awaiter.js.map +1 -0
  109. package/dist/src/shared/errors.d.ts +9 -0
  110. package/dist/src/shared/errors.d.ts.map +1 -0
  111. package/dist/src/shared/errors.js +18 -0
  112. package/dist/src/shared/errors.js.map +1 -0
  113. package/dist/src/shared/factories.d.ts +16 -0
  114. package/dist/src/shared/factories.d.ts.map +1 -0
  115. package/dist/src/shared/factories.js +33 -0
  116. package/dist/src/shared/factories.js.map +1 -0
  117. package/dist/src/shared/types.d.ts +91 -19
  118. package/dist/src/shared/types.d.ts.map +1 -1
  119. package/dist/src/shared/types.js +35 -1
  120. package/dist/src/shared/types.js.map +1 -1
  121. package/dist/src/shared/utils.d.ts +3 -0
  122. package/dist/src/shared/utils.d.ts.map +1 -0
  123. package/dist/src/shared/utils.js +8 -0
  124. package/dist/src/shared/utils.js.map +1 -0
  125. package/dist/src/signer/passthrough-signer.d.ts +6 -0
  126. package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
  127. package/dist/src/signer/passthrough-signer.js +6 -0
  128. package/dist/src/signer/passthrough-signer.js.map +1 -0
  129. package/dist/src/signer/types.d.ts +15 -0
  130. package/dist/src/signer/types.d.ts.map +1 -0
  131. package/dist/src/signer/types.js +2 -0
  132. package/dist/src/signer/types.js.map +1 -0
  133. package/dist/src/storage/interfaces.d.ts +108 -0
  134. package/dist/src/storage/interfaces.d.ts.map +1 -0
  135. package/dist/src/storage/interfaces.js +19 -0
  136. package/dist/src/storage/interfaces.js.map +1 -0
  137. package/dist/src/storage/kysely/store.d.ts +15 -0
  138. package/dist/src/storage/kysely/store.d.ts.map +1 -0
  139. package/dist/src/storage/kysely/store.js +197 -0
  140. package/dist/src/storage/kysely/store.js.map +1 -0
  141. package/dist/src/storage/kysely/types.d.ts +26 -0
  142. package/dist/src/storage/kysely/types.d.ts.map +1 -0
  143. package/dist/src/storage/kysely/types.js +2 -0
  144. package/dist/src/storage/kysely/types.js.map +1 -0
  145. package/dist/src/storage/txn.d.ts +15 -0
  146. package/dist/src/storage/txn.d.ts.map +1 -0
  147. package/dist/src/storage/txn.js +42 -0
  148. package/dist/src/storage/txn.js.map +1 -0
  149. package/dist/src/subs/default-error-handler.d.ts +13 -0
  150. package/dist/src/subs/default-error-handler.d.ts.map +1 -0
  151. package/dist/src/subs/default-error-handler.js +27 -0
  152. package/dist/src/subs/default-error-handler.js.map +1 -0
  153. package/dist/src/subs/react-subscription-manager.d.ts +45 -0
  154. package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
  155. package/dist/src/subs/react-subscription-manager.js +185 -0
  156. package/dist/src/subs/react-subscription-manager.js.map +1 -0
  157. package/dist/src/subs/types.d.ts +64 -0
  158. package/dist/src/subs/types.d.ts.map +1 -0
  159. package/dist/src/subs/types.js +2 -0
  160. package/dist/src/subs/types.js.map +1 -0
  161. package/dist/src/utils/reshuffle.d.ts +30 -0
  162. package/dist/src/utils/reshuffle.d.ts.map +1 -0
  163. package/dist/src/utils/reshuffle.js +47 -0
  164. package/dist/src/utils/reshuffle.js.map +1 -0
  165. package/package.json +15 -6
  166. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  167. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  168. package/dist/bench/end-to-end-flow.bench.js +0 -256
  169. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  170. package/dist/bench/event-bus.bench.d.ts +0 -2
  171. package/dist/bench/event-bus.bench.d.ts.map +0 -1
  172. package/dist/bench/event-bus.bench.js +0 -238
  173. package/dist/bench/event-bus.bench.js.map +0 -1
  174. package/dist/bench/queue-only.bench.d.ts +0 -2
  175. package/dist/bench/queue-only.bench.d.ts.map +0 -1
  176. package/dist/bench/queue-only.bench.js +0 -40
  177. package/dist/bench/queue-only.bench.js.map +0 -1
  178. package/dist/bench/reactor-throughput.bench.d.ts +0 -2
  179. package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
  180. package/dist/bench/reactor-throughput.bench.js +0 -137
  181. package/dist/bench/reactor-throughput.bench.js.map +0 -1
  182. package/dist/src/executor/job-executor.d.ts +0 -62
  183. package/dist/src/executor/job-executor.d.ts.map +0 -1
  184. package/dist/src/executor/job-executor.js +0 -325
  185. package/dist/src/executor/job-executor.js.map +0 -1
  186. package/dist/test/event-bus.test.d.ts +0 -2
  187. package/dist/test/event-bus.test.d.ts.map +0 -1
  188. package/dist/test/event-bus.test.js +0 -532
  189. package/dist/test/event-bus.test.js.map +0 -1
  190. package/dist/test/job-executor.test.d.ts +0 -2
  191. package/dist/test/job-executor.test.d.ts.map +0 -1
  192. package/dist/test/job-executor.test.js +0 -581
  193. package/dist/test/job-executor.test.js.map +0 -1
  194. package/dist/test/queue.test.d.ts +0 -2
  195. package/dist/test/queue.test.d.ts.map +0 -1
  196. package/dist/test/queue.test.js +0 -396
  197. package/dist/test/queue.test.js.map +0 -1
  198. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,647 @@
1
+ import { AbortError } from "document-drive";
2
+ import { v4 as uuidv4 } from "uuid";
3
+ import { createMutableShutdownStatus } from "../shared/factories.js";
4
+ import { JobStatus } from "../shared/types.js";
5
+ import { matchesScope } from "../shared/utils.js";
6
+ import { filterByParentId, filterByType } from "./utils.js";
7
+ /**
8
+ * This class implements the IReactor interface and serves as the main entry point
9
+ * for the new Reactor architecture.
10
+ */
11
+ export class Reactor {
12
+ driveServer;
13
+ documentStorage;
14
+ shutdownStatus;
15
+ setShutdown;
16
+ queue;
17
+ jobTracker;
18
+ readModelCoordinator;
19
+ constructor(driveServer, documentStorage, queue, jobTracker, readModelCoordinator) {
20
+ // Store required dependencies
21
+ this.driveServer = driveServer;
22
+ this.documentStorage = documentStorage;
23
+ this.queue = queue;
24
+ this.jobTracker = jobTracker;
25
+ this.readModelCoordinator = readModelCoordinator;
26
+ // Start the read model coordinator
27
+ this.readModelCoordinator.start();
28
+ // Create mutable shutdown status using factory method
29
+ const [status, setter] = createMutableShutdownStatus(false);
30
+ this.shutdownStatus = status;
31
+ this.setShutdown = setter;
32
+ }
33
+ /**
34
+ * Signals that the reactor should shutdown.
35
+ */
36
+ kill() {
37
+ // Mark the reactor as shutdown
38
+ this.setShutdown(true);
39
+ // Stop the read model coordinator
40
+ this.readModelCoordinator.stop();
41
+ // TODO: Phase 3+ - Implement graceful shutdown for queue, executors, etc.
42
+ // For now, we just mark as shutdown and return status
43
+ return this.shutdownStatus;
44
+ }
45
+ /**
46
+ * Retrieves a list of document model specifications
47
+ */
48
+ getDocumentModels(namespace, paging, signal) {
49
+ // Get document model modules from the drive server + filter
50
+ const modules = this.driveServer.getDocumentModelModules();
51
+ const filteredModels = modules.filter((module) => !namespace || module.documentModel.global.name.startsWith(namespace));
52
+ // Apply paging
53
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
54
+ const limit = paging?.limit || filteredModels.length;
55
+ const pagedModels = filteredModels.slice(startIndex, startIndex + limit);
56
+ // Create paged results
57
+ const hasMore = startIndex + limit < filteredModels.length;
58
+ const nextCursor = hasMore ? String(startIndex + limit) : undefined;
59
+ // even thought this is currently synchronous, they could have passed in an already-aborted signal
60
+ if (signal?.aborted) {
61
+ throw new AbortError();
62
+ }
63
+ return Promise.resolve({
64
+ results: pagedModels,
65
+ options: paging || { cursor: "0", limit: filteredModels.length },
66
+ nextCursor,
67
+ next: hasMore
68
+ ? () => this.getDocumentModels(namespace, { cursor: nextCursor, limit }, signal)
69
+ : undefined,
70
+ });
71
+ }
72
+ /**
73
+ * Retrieves a specific PHDocument by id
74
+ */
75
+ async get(id, view, signal) {
76
+ const document = await this.documentStorage.get(id);
77
+ if (signal?.aborted) {
78
+ throw new AbortError();
79
+ }
80
+ const childIds = await this.documentStorage.getChildren(id);
81
+ if (signal?.aborted) {
82
+ throw new AbortError();
83
+ }
84
+ // Apply view filter - This will be removed when we pass the viewfilter along
85
+ // to the underlying store, but is here now for the interface.
86
+ for (const scope in document.state) {
87
+ if (!matchesScope(view, scope)) {
88
+ delete document.state[scope];
89
+ }
90
+ }
91
+ return {
92
+ document,
93
+ childIds,
94
+ };
95
+ }
96
+ /**
97
+ * Retrieves a specific PHDocument by slug
98
+ */
99
+ async getBySlug(slug, view, signal) {
100
+ // Use the storage layer to resolve slug to ID
101
+ let ids;
102
+ try {
103
+ ids = await this.documentStorage.resolveIds([slug], signal);
104
+ }
105
+ catch (error) {
106
+ // If the error is from resolveIds (document not found), wrap it with our message
107
+ if (error instanceof Error && error.message.includes("not found")) {
108
+ throw new Error(`Document not found with slug: ${slug}`);
109
+ }
110
+ throw error;
111
+ }
112
+ if (ids.length === 0 || !ids[0]) {
113
+ throw new Error(`Document not found with slug: ${slug}`);
114
+ }
115
+ // Now get the document by its resolved ID
116
+ return await this.get(ids[0], view, signal);
117
+ }
118
+ /**
119
+ * Retrieves the operations for a document
120
+ */
121
+ async getOperations(documentId, view, paging, signal) {
122
+ // Use storage directly to get the document
123
+ const document = await this.documentStorage.get(documentId);
124
+ if (signal?.aborted) {
125
+ throw new AbortError();
126
+ }
127
+ const operations = document.operations;
128
+ const result = {};
129
+ // apply view filter, per scope -- this will be removed when we pass the viewfilter along
130
+ // to the underlying store, but is here now for the interface.
131
+ for (const scope in operations) {
132
+ if (matchesScope(view, scope)) {
133
+ const scopeOperations = operations[scope];
134
+ // apply paging too
135
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
136
+ const limit = paging?.limit || scopeOperations.length;
137
+ const pagedOperations = scopeOperations.slice(startIndex, startIndex + limit);
138
+ result[scope] = {
139
+ results: pagedOperations,
140
+ options: { cursor: String(startIndex + limit), limit },
141
+ };
142
+ }
143
+ }
144
+ return Promise.resolve(result);
145
+ }
146
+ /**
147
+ * Filters documents by criteria and returns a list of them
148
+ */
149
+ async find(search, view, paging, signal) {
150
+ let results;
151
+ if (search.ids) {
152
+ if (search.slugs && search.slugs.length > 0) {
153
+ throw new Error("Cannot use both ids and slugs in the same search");
154
+ }
155
+ results = await this.findByIds(search.ids, view, paging, signal);
156
+ if (search.parentId) {
157
+ results = filterByParentId(results, search.parentId);
158
+ }
159
+ if (search.type) {
160
+ results = filterByType(results, search.type);
161
+ }
162
+ }
163
+ else if (search.slugs) {
164
+ results = await this.findBySlugs(search.slugs, view, paging, signal);
165
+ if (search.parentId) {
166
+ results = filterByParentId(results, search.parentId);
167
+ }
168
+ if (search.type) {
169
+ results = filterByType(results, search.type);
170
+ }
171
+ }
172
+ else if (search.parentId) {
173
+ results = await this.findByParentId(search.parentId, view, paging, signal);
174
+ if (search.type) {
175
+ results = filterByType(results, search.type);
176
+ }
177
+ }
178
+ else if (search.type) {
179
+ results = await this.findByType(search.type, view, paging, signal);
180
+ }
181
+ else {
182
+ throw new Error("No search criteria provided");
183
+ }
184
+ if (signal?.aborted) {
185
+ throw new AbortError();
186
+ }
187
+ return results;
188
+ }
189
+ /**
190
+ * Creates a document
191
+ */
192
+ async create(document, signal) {
193
+ const createdAtUtcIso = new Date().toISOString();
194
+ if (signal?.aborted) {
195
+ throw new AbortError();
196
+ }
197
+ // Create a CREATE_DOCUMENT action with proper CreateDocumentActionInput
198
+ const input = {
199
+ model: document.header.documentType,
200
+ version: "0.0.0",
201
+ documentId: document.header.id,
202
+ };
203
+ // Add signing info
204
+ input.signing = {
205
+ signature: document.header.id,
206
+ publicKey: document.header.sig.publicKey,
207
+ nonce: document.header.sig.nonce,
208
+ createdAtUtcIso: document.header.createdAtUtcIso,
209
+ documentType: document.header.documentType,
210
+ };
211
+ // Add optional mutable header fields (always include even if empty/undefined)
212
+ input.slug = document.header.slug;
213
+ input.name = document.header.name;
214
+ input.branch = document.header.branch;
215
+ input.meta = document.header.meta;
216
+ const createAction = {
217
+ id: `${document.header.id}-create`,
218
+ type: "CREATE_DOCUMENT",
219
+ scope: "document",
220
+ timestampUtcMs: new Date().toISOString(),
221
+ input,
222
+ };
223
+ // Create an UPGRADE_DOCUMENT action to set the initial state
224
+ const upgradeInput = {
225
+ model: document.header.documentType,
226
+ fromVersion: "0.0.0",
227
+ toVersion: "0.0.0", // Same version since we're just setting initial state
228
+ documentId: document.header.id,
229
+ initialState: document.state,
230
+ };
231
+ const upgradeAction = {
232
+ id: `${document.header.id}-upgrade`,
233
+ type: "UPGRADE_DOCUMENT",
234
+ scope: "document",
235
+ timestampUtcMs: new Date().toISOString(),
236
+ input: upgradeInput,
237
+ };
238
+ // Create a single job with both CREATE_DOCUMENT and UPGRADE_DOCUMENT actions
239
+ const job = {
240
+ id: uuidv4(),
241
+ documentId: document.header.id,
242
+ scope: "document",
243
+ branch: "main",
244
+ actions: [createAction, upgradeAction],
245
+ createdAt: new Date().toISOString(),
246
+ queueHint: [],
247
+ maxRetries: 3,
248
+ };
249
+ // Create job info and register with tracker
250
+ const jobInfo = {
251
+ id: job.id,
252
+ status: JobStatus.PENDING,
253
+ createdAtUtcIso,
254
+ };
255
+ this.jobTracker.registerJob(jobInfo);
256
+ // Enqueue the job
257
+ await this.queue.enqueue(job);
258
+ return jobInfo;
259
+ }
260
+ /**
261
+ * Deletes a document
262
+ */
263
+ async deleteDocument(id, propagate, signal) {
264
+ const createdAtUtcIso = new Date().toISOString();
265
+ if (signal?.aborted) {
266
+ throw new AbortError();
267
+ }
268
+ // Create a DELETE_DOCUMENT action
269
+ const deleteInput = {
270
+ documentId: id,
271
+ propagate,
272
+ };
273
+ const action = {
274
+ id: `${id}-delete`,
275
+ type: "DELETE_DOCUMENT",
276
+ scope: "document",
277
+ timestampUtcMs: new Date().toISOString(),
278
+ input: deleteInput,
279
+ };
280
+ // Create a job for the DELETE_DOCUMENT action
281
+ const job = {
282
+ id: uuidv4(),
283
+ documentId: id,
284
+ scope: "document",
285
+ branch: "main",
286
+ actions: [action],
287
+ createdAt: new Date().toISOString(),
288
+ queueHint: [],
289
+ maxRetries: 3,
290
+ };
291
+ // Create job info and register with tracker
292
+ const jobInfo = {
293
+ id: job.id,
294
+ status: JobStatus.PENDING,
295
+ createdAtUtcIso,
296
+ };
297
+ this.jobTracker.registerJob(jobInfo);
298
+ // Enqueue the job
299
+ await this.queue.enqueue(job);
300
+ return jobInfo;
301
+ }
302
+ /**
303
+ * Applies a list of actions to a document
304
+ */
305
+ async mutate(id, actions) {
306
+ const createdAtUtcIso = new Date().toISOString();
307
+ // Determine scope from first action (all actions should have the same scope)
308
+ const scope = actions.length > 0 ? actions[0].scope || "global" : "global";
309
+ // Create a single job with all actions
310
+ const job = {
311
+ id: uuidv4(),
312
+ documentId: id,
313
+ scope: scope,
314
+ branch: "main", // Default to main branch
315
+ actions: actions,
316
+ createdAt: new Date().toISOString(),
317
+ queueHint: [],
318
+ maxRetries: 3,
319
+ };
320
+ // Create job info and register with tracker
321
+ const jobInfo = {
322
+ id: job.id,
323
+ status: JobStatus.PENDING,
324
+ createdAtUtcIso,
325
+ };
326
+ this.jobTracker.registerJob(jobInfo);
327
+ // Enqueue the job
328
+ await this.queue.enqueue(job);
329
+ return jobInfo;
330
+ }
331
+ /**
332
+ * Adds multiple documents as children to another
333
+ */
334
+ async addChildren(parentId, documentIds, view, signal) {
335
+ const createdAtUtcIso = new Date().toISOString();
336
+ const jobId = uuidv4();
337
+ // Check abort signal before starting
338
+ if (signal?.aborted) {
339
+ throw new AbortError();
340
+ }
341
+ // TODO: Implement when drive server supports hierarchical documents
342
+ // For now, this is a placeholder implementation
343
+ // Verify parent exists
344
+ try {
345
+ await this.driveServer.getDocument(parentId);
346
+ }
347
+ catch (error) {
348
+ return {
349
+ id: jobId,
350
+ status: JobStatus.FAILED,
351
+ createdAtUtcIso,
352
+ error: error instanceof Error ? error.message : "Unknown error",
353
+ };
354
+ }
355
+ // Check abort signal after parent verification
356
+ if (signal?.aborted) {
357
+ throw new AbortError();
358
+ }
359
+ // Verify all children exist
360
+ for (const childId of documentIds) {
361
+ try {
362
+ await this.driveServer.getDocument(childId);
363
+ }
364
+ catch (error) {
365
+ return {
366
+ id: jobId,
367
+ status: JobStatus.FAILED,
368
+ createdAtUtcIso,
369
+ error: error instanceof Error ? error.message : "Unknown error",
370
+ };
371
+ }
372
+ // Check abort signal after each child verification
373
+ if (signal?.aborted) {
374
+ throw new AbortError();
375
+ }
376
+ }
377
+ // TODO: Actually establish parent-child relationships
378
+ // Return success job info
379
+ return {
380
+ id: jobId,
381
+ status: JobStatus.COMPLETED,
382
+ createdAtUtcIso,
383
+ completedAtUtcIso: new Date().toISOString(),
384
+ };
385
+ }
386
+ /**
387
+ * Removes multiple documents as children from another
388
+ */
389
+ async removeChildren(parentId, documentIds, view, signal) {
390
+ const createdAtUtcIso = new Date().toISOString();
391
+ const jobId = uuidv4();
392
+ // Check abort signal before starting
393
+ if (signal?.aborted) {
394
+ throw new AbortError();
395
+ }
396
+ // TODO: Implement when drive server supports hierarchical documents
397
+ // For now, this is a placeholder implementation
398
+ // Verify parent exists
399
+ try {
400
+ await this.driveServer.getDocument(parentId);
401
+ }
402
+ catch (error) {
403
+ return {
404
+ id: jobId,
405
+ status: JobStatus.FAILED,
406
+ createdAtUtcIso,
407
+ error: error instanceof Error ? error.message : "Unknown error",
408
+ };
409
+ }
410
+ // Check abort signal after parent verification
411
+ if (signal?.aborted) {
412
+ throw new AbortError();
413
+ }
414
+ // TODO: Actually remove parent-child relationships
415
+ // Return success job info
416
+ return {
417
+ id: jobId,
418
+ status: JobStatus.COMPLETED,
419
+ createdAtUtcIso,
420
+ completedAtUtcIso: new Date().toISOString(),
421
+ };
422
+ }
423
+ /**
424
+ * Retrieves the status of a job
425
+ */
426
+ getJobStatus(jobId, signal) {
427
+ if (signal?.aborted) {
428
+ throw new AbortError();
429
+ }
430
+ const jobInfo = this.jobTracker.getJobStatus(jobId);
431
+ if (!jobInfo) {
432
+ // Job not found - return FAILED status with appropriate error
433
+ return Promise.resolve({
434
+ id: jobId,
435
+ status: JobStatus.FAILED,
436
+ createdAtUtcIso: new Date().toISOString(),
437
+ completedAtUtcIso: new Date().toISOString(),
438
+ error: "Job not found",
439
+ });
440
+ }
441
+ return Promise.resolve(jobInfo);
442
+ }
443
+ /**
444
+ * Finds documents by their IDs
445
+ */
446
+ async findByIds(ids, view, paging, signal) {
447
+ const documents = [];
448
+ // Fetch each document by ID using storage directly
449
+ for (const id of ids) {
450
+ if (signal?.aborted) {
451
+ throw new AbortError();
452
+ }
453
+ let document;
454
+ try {
455
+ document = await this.documentStorage.get(id);
456
+ }
457
+ catch {
458
+ // Skip documents that don't exist or can't be accessed
459
+ // This matches the behavior expected from a search operation
460
+ continue;
461
+ }
462
+ // Apply view filter - This will be removed when we pass the viewfilter along
463
+ // to the underlying store, but is here now for the interface.
464
+ for (const scope in document.state) {
465
+ if (!matchesScope(view, scope)) {
466
+ delete document.state[scope];
467
+ }
468
+ }
469
+ documents.push(document);
470
+ }
471
+ if (signal?.aborted) {
472
+ throw new AbortError();
473
+ }
474
+ // Apply paging
475
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
476
+ const limit = paging?.limit || documents.length;
477
+ const pagedDocuments = documents.slice(startIndex, startIndex + limit);
478
+ // Create paged results
479
+ const hasMore = startIndex + limit < documents.length;
480
+ const nextCursor = hasMore ? String(startIndex + limit) : undefined;
481
+ return {
482
+ results: pagedDocuments,
483
+ options: paging || { cursor: "0", limit: documents.length },
484
+ nextCursor,
485
+ next: hasMore
486
+ ? () => this.findByIds(ids, view, { cursor: nextCursor, limit }, signal)
487
+ : undefined,
488
+ };
489
+ }
490
+ /**
491
+ * Finds documents by their slugs
492
+ */
493
+ async findBySlugs(slugs, view, paging, signal) {
494
+ const documents = [];
495
+ // Use storage to resolve slugs to IDs
496
+ let ids;
497
+ try {
498
+ ids = await this.documentStorage.resolveIds(slugs, signal);
499
+ }
500
+ catch {
501
+ // If slug resolution fails, return empty results
502
+ // This matches the behavior expected from a search operation
503
+ ids = [];
504
+ }
505
+ // Fetch each document by resolved ID
506
+ for (const id of ids) {
507
+ if (signal?.aborted) {
508
+ throw new AbortError();
509
+ }
510
+ let document;
511
+ try {
512
+ document = await this.documentStorage.get(id);
513
+ }
514
+ catch {
515
+ // Skip documents that don't exist or can't be accessed
516
+ continue;
517
+ }
518
+ // Apply view filter - This will be removed when we pass the viewfilter along
519
+ // to the underlying store, but is here now for the interface.
520
+ for (const scope in document.state) {
521
+ if (!matchesScope(view, scope)) {
522
+ delete document.state[scope];
523
+ }
524
+ }
525
+ documents.push(document);
526
+ }
527
+ if (signal?.aborted) {
528
+ throw new AbortError();
529
+ }
530
+ // Apply paging - this will be removed when we pass the paging along
531
+ // to the underlying store, but is here now for the interface.
532
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
533
+ const limit = paging?.limit || documents.length;
534
+ const pagedDocuments = documents.slice(startIndex, startIndex + limit);
535
+ // Create paged results
536
+ const hasMore = startIndex + limit < documents.length;
537
+ const nextCursor = hasMore ? String(startIndex + limit) : undefined;
538
+ return {
539
+ results: pagedDocuments,
540
+ options: paging || { cursor: "0", limit: documents.length },
541
+ nextCursor,
542
+ next: hasMore
543
+ ? () => this.findBySlugs(slugs, view, { cursor: nextCursor, limit }, signal)
544
+ : undefined,
545
+ };
546
+ }
547
+ /**
548
+ * Finds documents by parent ID
549
+ */
550
+ async findByParentId(parentId, view, paging, signal) {
551
+ // Get child document IDs from storage
552
+ const childIds = await this.documentStorage.getChildren(parentId);
553
+ if (signal?.aborted) {
554
+ throw new AbortError();
555
+ }
556
+ const documents = [];
557
+ // Fetch each child document
558
+ for (const childId of childIds) {
559
+ if (signal?.aborted) {
560
+ throw new AbortError();
561
+ }
562
+ let document;
563
+ try {
564
+ document = await this.documentStorage.get(childId);
565
+ }
566
+ catch {
567
+ // Skip documents that don't exist or can't be accessed
568
+ // This matches the behavior expected from a search operation
569
+ continue;
570
+ }
571
+ // Apply view filter - This will be removed when we pass the viewfilter along
572
+ // to the underlying store, but is here now for the interface.
573
+ for (const scope in document.state) {
574
+ if (!matchesScope(view, scope)) {
575
+ delete document.state[scope];
576
+ }
577
+ }
578
+ documents.push(document);
579
+ }
580
+ if (signal?.aborted) {
581
+ throw new AbortError();
582
+ }
583
+ // Apply paging
584
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
585
+ const limit = paging?.limit || documents.length;
586
+ const pagedDocuments = documents.slice(startIndex, startIndex + limit);
587
+ // Create paged results
588
+ const hasMore = startIndex + limit < documents.length;
589
+ const nextCursor = hasMore ? String(startIndex + limit) : undefined;
590
+ return {
591
+ results: pagedDocuments,
592
+ options: paging || { cursor: "0", limit: documents.length },
593
+ nextCursor,
594
+ next: hasMore
595
+ ? () => this.findByParentId(parentId, view, { cursor: nextCursor, limit }, signal)
596
+ : undefined,
597
+ };
598
+ }
599
+ /**
600
+ * Finds documents by type
601
+ */
602
+ async findByType(type, view, paging, signal) {
603
+ const documents = [];
604
+ // Use storage's findByType method directly
605
+ const cursor = paging?.cursor;
606
+ const limit = paging?.limit || 100;
607
+ // Get document IDs of the specified type
608
+ const { documents: documentIds, nextCursor } = await this.documentStorage.findByType(type, limit, cursor);
609
+ if (signal?.aborted) {
610
+ throw new AbortError();
611
+ }
612
+ // Fetch each document by its ID
613
+ for (const documentId of documentIds) {
614
+ if (signal?.aborted) {
615
+ throw new AbortError();
616
+ }
617
+ let document;
618
+ try {
619
+ document = await this.documentStorage.get(documentId);
620
+ }
621
+ catch {
622
+ // Skip documents that can't be retrieved
623
+ continue;
624
+ }
625
+ // Apply view filter
626
+ for (const scope in document.state) {
627
+ if (!matchesScope(view, scope)) {
628
+ delete document.state[scope];
629
+ }
630
+ }
631
+ documents.push(document);
632
+ }
633
+ if (signal?.aborted) {
634
+ throw new AbortError();
635
+ }
636
+ // Results are already paged from the storage layer
637
+ return {
638
+ results: documents,
639
+ options: paging || { cursor: cursor || "0", limit },
640
+ nextCursor,
641
+ next: nextCursor
642
+ ? async () => this.findByType(type, view, { cursor: nextCursor, limit }, signal)
643
+ : undefined,
644
+ };
645
+ }
646
+ }
647
+ //# sourceMappingURL=reactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.js","sourceRoot":"","sources":["../../../src/core/reactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAW5C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAKpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAUrE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,MAAM,OAAO,OAAO;IACV,WAAW,CAA0B;IACrC,eAAe,CAAmB;IAClC,cAAc,CAAiB;IAC/B,WAAW,CAA2B;IACtC,KAAK,CAAS;IACd,UAAU,CAAc;IACxB,oBAAoB,CAAwB;IAEpD,YACE,WAAoC,EACpC,eAAiC,EACjC,KAAa,EACb,UAAuB,EACvB,oBAA2C;QAE3C,8BAA8B;QAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAEjD,mCAAmC;QACnC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAElC,sDAAsD;QACtD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI;QACF,+BAA+B;QAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEvB,kCAAkC;QAClC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAEjC,0EAA0E;QAC1E,sDAAsD;QAEtD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,iBAAiB,CACf,SAAkB,EAClB,MAAsB,EACtB,MAAoB;QAEpB,4DAA4D;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,uBAAuB,EAAE,CAAC;QAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CACnC,CAAC,MAAM,EAAE,EAAE,CACT,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CACvE,CAAC;QAEF,eAAe;QACf,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC;QACrD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;QAEzE,uBAAuB;QACvB,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC;QAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,kGAAkG;QAClG,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE;YAChE,UAAU;YACV,IAAI,EAAE,OAAO;gBACX,CAAC,CAAC,GAAG,EAAE,CACH,IAAI,CAAC,iBAAiB,CACpB,SAAS,EACT,EAAE,MAAM,EAAE,UAAW,EAAE,KAAK,EAAE,EAC9B,MAAM,CACP;gBACL,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,EAAU,EACV,IAAiB,EACjB,MAAoB;QAKpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAY,EAAE,CAAC,CAAC;QAE/D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAE5D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,6EAA6E;QAC7E,8DAA8D;QAC9D,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,KAA0B,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ;YACR,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,IAAiB,EACjB,MAAoB;QAKpB,8CAA8C;QAC9C,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iFAAiF;YACjF,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,0CAA0C;QAC1C,OAAO,MAAM,IAAI,CAAC,GAAG,CAAY,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,UAAkB,EAClB,IAAiB,EACjB,MAAsB,EACtB,MAAoB;QAEpB,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE5D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,MAAM,MAAM,GAA4C,EAAE,CAAC;QAE3D,yFAAyF;QACzF,8DAA8D;QAC9D,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAE1C,mBAAmB;gBACnB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC;gBACtD,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAC3C,UAAU,EACV,UAAU,GAAG,KAAK,CACnB,CAAC;gBAEF,MAAM,CAAC,KAAK,CAAC,GAAG;oBACd,OAAO,EAAE,eAAe;oBACxB,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE;iBACvD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,MAAoB,EACpB,IAAiB,EACjB,MAAsB,EACtB,MAAoB;QAEpB,IAAI,OAAiC,CAAC;QACtC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YAED,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAEjE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAErE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CACjC,MAAM,CAAC,QAAQ,EACf,IAAI,EACJ,MAAM,EACN,MAAM,CACP,CAAC;YAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAoB,EAAE,MAAoB;QACrD,MAAM,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,wEAAwE;QACxE,MAAM,KAAK,GAA8B;YACvC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;YACnC,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;SAC/B,CAAC;QAEF,mBAAmB;QACnB,KAAK,CAAC,OAAO,GAAG;YACd,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC7B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS;YACxC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK;YAChC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe;YAChD,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;SAC3C,CAAC;QAEF,8EAA8E;QAC9E,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;QAElC,MAAM,YAAY,GAAW;YAC3B,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS;YAClC,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,UAAU;YACjB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxC,KAAK;SACN,CAAC;QAEF,6DAA6D;QAC7D,MAAM,YAAY,GAA+B;YAC/C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;YACnC,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,OAAO,EAAE,sDAAsD;YAC1E,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC9B,YAAY,EAAE,QAAQ,CAAC,KAAK;SAC7B,CAAC;QAEF,MAAM,aAAa,GAAW;YAC5B,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU;YACnC,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,UAAU;YACjB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxC,KAAK,EAAE,YAAY;SACpB,CAAC;QAEF,6EAA6E;QAC7E,MAAM,GAAG,GAAQ;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC9B,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;YACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,CAAC;SACd,CAAC;QAEF,4CAA4C;QAC5C,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,SAAS,CAAC,OAAO;YACzB,eAAe;SAChB,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAErC,kBAAkB;QAClB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,EAAU,EACV,SAA2B,EAC3B,MAAoB;QAEpB,MAAM,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,kCAAkC;QAClC,MAAM,WAAW,GAA8B;YAC7C,UAAU,EAAE,EAAE;YACd,SAAS;SACV,CAAC;QAEF,MAAM,MAAM,GAAW;YACrB,EAAE,EAAE,GAAG,EAAE,SAAS;YAClB,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,UAAU;YACjB,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxC,KAAK,EAAE,WAAW;SACnB,CAAC;QAEF,8CAA8C;QAC9C,MAAM,GAAG,GAAQ;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,CAAC;SACd,CAAC;QAEF,4CAA4C;QAC5C,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,SAAS,CAAC,OAAO;YACzB,eAAe;SAChB,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAErC,kBAAkB;QAClB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAiB;QACxC,MAAM,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjD,6EAA6E;QAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAE3E,uCAAuC;QACvC,MAAM,GAAG,GAAQ;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM,EAAE,yBAAyB;YACzC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,CAAC;SACd,CAAC;QAEF,4CAA4C;QAC5C,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,SAAS,CAAC,OAAO;YACzB,eAAe;SAChB,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAErC,kBAAkB;QAClB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,WAAqB,EACrB,IAAiB,EACjB,MAAoB;QAEpB,MAAM,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;QAEvB,qCAAqC;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,oEAAoE;QACpE,gDAAgD;QAEhD,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,eAAe;gBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,4BAA4B;QAC5B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,eAAe;oBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC;YACJ,CAAC;YAED,mDAAmD;YACnD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,UAAU,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,sDAAsD;QAEtD,0BAA0B;QAC1B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,SAAS,CAAC,SAAS;YAC3B,eAAe;YACf,iBAAiB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,WAAqB,EACrB,IAAiB,EACjB,MAAoB;QAEpB,MAAM,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;QAEvB,qCAAqC;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,oEAAoE;QACpE,gDAAgD;QAEhD,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,eAAe;gBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,mDAAmD;QAEnD,0BAA0B;QAC1B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,SAAS,CAAC,SAAS;YAC3B,eAAe;YACf,iBAAiB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAa,EAAE,MAAoB;QAC9C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,8DAA8D;YAC9D,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACzC,iBAAiB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC3C,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CACrB,GAAa,EACb,IAAiB,EACjB,MAAsB,EACtB,MAAoB;QAEpB,MAAM,SAAS,GAAiB,EAAE,CAAC;QAEnC,mDAAmD;QACnD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,UAAU,EAAE,CAAC;YACzB,CAAC;YAED,IAAI,QAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAa,EAAE,CAAC,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;gBACvD,6DAA6D;gBAC7D,SAAS;YACX,CAAC;YAED,6EAA6E;YAC7E,8DAA8D;YAC9D,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;oBAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,KAA0B,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,eAAe;QACf,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC;QAChD,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;QAEvE,uBAAuB;QACvB,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QACtD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE;YAC3D,UAAU;YACV,IAAI,EAAE,OAAO;gBACX,CAAC,CAAC,GAAG,EAAE,CACH,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAW,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC;gBACrE,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CACvB,KAAe,EACf,IAAiB,EACjB,MAAsB,EACtB,MAAoB;QAEpB,MAAM,SAAS,GAAiB,EAAE,CAAC;QAEnC,sCAAsC;QACtC,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;YACjD,6DAA6D;YAC7D,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;QAED,qCAAqC;QACrC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,UAAU,EAAE,CAAC;YACzB,CAAC;YAED,IAAI,QAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAa,EAAE,CAAC,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;gBACvD,SAAS;YACX,CAAC;YAED,6EAA6E;YAC7E,8DAA8D;YAC9D,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;oBAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,KAA0B,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,oEAAoE;QACpE,8DAA8D;QAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC;QAChD,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;QAEvE,uBAAuB;QACvB,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QACtD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE;YAC3D,UAAU;YACV,IAAI,EAAE,OAAO;gBACX,CAAC,CAAC,GAAG,EAAE,CACH,IAAI,CAAC,WAAW,CACd,KAAK,EACL,IAAI,EACJ,EAAE,MAAM,EAAE,UAAW,EAAE,KAAK,EAAE,EAC9B,MAAM,CACP;gBACL,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,QAAgB,EAChB,IAAiB,EACjB,MAAsB,EACtB,MAAoB;QAEpB,sCAAsC;QACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAElE,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,SAAS,GAAiB,EAAE,CAAC;QAEnC,4BAA4B;QAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,UAAU,EAAE,CAAC;YACzB,CAAC;YAED,IAAI,QAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAa,OAAO,CAAC,CAAC;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;gBACvD,6DAA6D;gBAC7D,SAAS;YACX,CAAC;YAED,6EAA6E;YAC7E,8DAA8D;YAC9D,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;oBAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,KAA0B,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,eAAe;QACf,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC;QAChD,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;QAEvE,uBAAuB;QACvB,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QACtD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE;YAC3D,UAAU;YACV,IAAI,EAAE,OAAO;gBACX,CAAC,CAAC,GAAG,EAAE,CACH,IAAI,CAAC,cAAc,CACjB,QAAQ,EACR,IAAI,EACJ,EAAE,MAAM,EAAE,UAAW,EAAE,KAAK,EAAE,EAC9B,MAAM,CACP;gBACL,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CACtB,IAAY,EACZ,IAAiB,EACjB,MAAsB,EACtB,MAAoB;QAEpB,MAAM,SAAS,GAAiB,EAAE,CAAC;QAEnC,2CAA2C;QAC3C,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,GAAG,CAAC;QAEnC,yCAAyC;QACzC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,GAC1C,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAE7D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,gCAAgC;QAChC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,UAAU,EAAE,CAAC;YACzB,CAAC;YAED,IAAI,QAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAa,UAAU,CAAC,CAAC;YACpE,CAAC;YAAC,MAAM,CAAC;gBACP,yCAAyC;gBACzC,SAAS;YACX,CAAC;YAED,oBAAoB;YACpB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;oBAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,KAA0B,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,mDAAmD;QACnD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE;YACnD,UAAU;YACV,IAAI,EAAE,UAAU;gBACd,CAAC,CAAC,KAAK,IAAI,EAAE,CACT,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC;gBACtE,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;CACF"}