@ixo/flow-work 0.2.0 → 0.3.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.
- package/dist/capability.d.ts +18 -1
- package/dist/capability.d.ts.map +1 -1
- package/dist/capability.js.map +1 -1
- package/dist/flow-work.plugin.d.ts +1 -3
- package/dist/flow-work.plugin.d.ts.map +1 -1
- package/dist/flow-work.plugin.js +20 -11
- package/dist/flow-work.plugin.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/listener.d.ts +33 -20
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +352 -111
- package/dist/listener.js.map +1 -1
- package/dist/matrix-port.d.ts +20 -8
- package/dist/matrix-port.d.ts.map +1 -1
- package/dist/matrix-port.js +51 -17
- package/dist/matrix-port.js.map +1 -1
- package/dist/protocol.d.ts +144 -17
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +165 -16
- package/dist/protocol.js.map +1 -1
- package/package.json +1 -1
package/dist/listener.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { findCapability } from './capability.js';
|
|
2
|
-
import { FLOW_WORK_INVOKE_EVENT, FLOW_WORK_RECEIPT_EVENT, flowWorkInvokeSchema, } from './protocol.js';
|
|
2
|
+
import { FLOW_WORK_ASSIGN_EVENT, FLOW_WORK_BINDING_FIELDS, FLOW_WORK_INVOKE_EVENT, FLOW_WORK_READY_EVENT, FLOW_WORK_RECEIPT_EVENT, computeFlowWorkInputHash, flowWorkAssignSchema, flowWorkInvokeSchema, flowWorkReadySchema, flowWorkReceiptSchema, sameFlowWorkBinding, sameFlowWorkNb, } from './protocol.js';
|
|
3
3
|
class FlowWorkFailure extends Error {
|
|
4
4
|
code;
|
|
5
5
|
constructor(code, message) {
|
|
@@ -8,54 +8,39 @@ class FlowWorkFailure extends Error {
|
|
|
8
8
|
this.name = 'FlowWorkFailure';
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
-
/** Hostname of '@user:server.tld' or a bare/prefixed server name. */
|
|
12
|
-
export function homeserverOf(value) {
|
|
13
|
-
let candidate = value.trim().toLowerCase();
|
|
14
|
-
if (candidate.startsWith('@')) {
|
|
15
|
-
const separator = candidate.indexOf(':');
|
|
16
|
-
if (separator < 0)
|
|
17
|
-
return null;
|
|
18
|
-
candidate = candidate.slice(separator + 1);
|
|
19
|
-
}
|
|
20
|
-
if (candidate === '')
|
|
21
|
-
return null;
|
|
22
|
-
try {
|
|
23
|
-
return new URL(candidate.includes('://') ? candidate : `matrix://${candidate}`).hostname
|
|
24
|
-
.replace(/\.$/, '')
|
|
25
|
-
.toLowerCase();
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
11
|
function isRecord(value) {
|
|
32
12
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
33
13
|
}
|
|
34
14
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
15
|
+
* Oracle-side flow-work v2 state machine.
|
|
16
|
+
*
|
|
17
|
+
* Assignment and ready are durable state events. Invoke remains a timeline
|
|
18
|
+
* command. Receipt is durable state keyed by invocationId, so restart replay
|
|
19
|
+
* does not depend on a recent-event window.
|
|
38
20
|
*/
|
|
39
21
|
export class FlowWorkListener {
|
|
40
22
|
options;
|
|
41
|
-
|
|
23
|
+
assignments = new Map();
|
|
42
24
|
active = new Set();
|
|
43
25
|
completed = new Set();
|
|
26
|
+
pendingReceipts = new Map();
|
|
27
|
+
publishedReceipts = new Map();
|
|
28
|
+
publishing = new Set();
|
|
29
|
+
retryTimers = new Map();
|
|
30
|
+
readyTimers = new Map();
|
|
44
31
|
unsubscribe = [];
|
|
32
|
+
started = false;
|
|
45
33
|
constructor(options) {
|
|
46
34
|
this.options = options;
|
|
47
|
-
const trusted = options.trustedHomeservers
|
|
48
|
-
.map(homeserverOf)
|
|
49
|
-
.filter((value) => value !== null);
|
|
50
|
-
this.trusted = new Set(trusted);
|
|
51
|
-
if (this.trusted.size === 0) {
|
|
52
|
-
throw new Error('flow-work has no valid trusted homeserver domains');
|
|
53
|
-
}
|
|
54
35
|
if (options.capabilities.length === 0) {
|
|
55
36
|
throw new Error('flow-work has no declared capabilities');
|
|
56
37
|
}
|
|
57
38
|
}
|
|
39
|
+
/** Subscribe synchronously before any Matrix initial sync is started. */
|
|
58
40
|
start() {
|
|
41
|
+
if (this.started)
|
|
42
|
+
return;
|
|
43
|
+
this.started = true;
|
|
59
44
|
const { port, logger } = this.options;
|
|
60
45
|
this.unsubscribe = [
|
|
61
46
|
port.onInvite((invite) => {
|
|
@@ -69,93 +54,255 @@ export class FlowWorkListener {
|
|
|
69
54
|
});
|
|
70
55
|
}),
|
|
71
56
|
];
|
|
72
|
-
logger.log(`[flow-work] listening
|
|
57
|
+
logger.log(`[flow-work] listening - capabilities: ${this.options.capabilities
|
|
73
58
|
.map((entry) => `${entry.can}#${entry.actionType}`)
|
|
74
59
|
.join(', ')}`);
|
|
60
|
+
void this.bootstrap().catch((error) => {
|
|
61
|
+
logger.error(`[flow-work] bootstrap failed: ${message(error)}`);
|
|
62
|
+
});
|
|
63
|
+
for (const key of this.pendingReceipts.keys())
|
|
64
|
+
void this.publishReceipt(key);
|
|
75
65
|
}
|
|
76
66
|
stop() {
|
|
77
67
|
for (const off of this.unsubscribe)
|
|
78
68
|
off();
|
|
79
69
|
this.unsubscribe = [];
|
|
70
|
+
for (const timer of this.retryTimers.values())
|
|
71
|
+
clearTimeout(timer);
|
|
72
|
+
for (const timer of this.readyTimers.values())
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
this.retryTimers.clear();
|
|
75
|
+
this.readyTimers.clear();
|
|
76
|
+
this.started = false;
|
|
80
77
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
this.
|
|
85
|
-
|
|
78
|
+
/** Reconcile invitations and current assignment state after initial sync. */
|
|
79
|
+
async bootstrap() {
|
|
80
|
+
for (const invite of this.options.port.getPendingInvites()) {
|
|
81
|
+
await this.handleInvite(invite);
|
|
82
|
+
}
|
|
83
|
+
for (const roomId of this.options.port.getJoinedRoomIds()) {
|
|
84
|
+
await this.bootstrapRoom(roomId);
|
|
86
85
|
}
|
|
86
|
+
}
|
|
87
|
+
now() {
|
|
88
|
+
return this.options.now?.() ?? Date.now();
|
|
89
|
+
}
|
|
90
|
+
retryMs() {
|
|
91
|
+
const configured = this.options.receiptRetryMs ?? 1_000;
|
|
92
|
+
return Number.isFinite(configured) && configured >= 0 ? configured : 1_000;
|
|
93
|
+
}
|
|
94
|
+
async handleInvite(invite) {
|
|
87
95
|
await this.options.port.joinRoom(invite.roomId);
|
|
88
96
|
this.options.logger.log(`[flow-work] joined ${invite.roomId} (invited by ${invite.inviterUserId})`);
|
|
97
|
+
await this.bootstrapRoom(invite.roomId);
|
|
98
|
+
}
|
|
99
|
+
async bootstrapRoom(roomId) {
|
|
100
|
+
for (const event of this.options.port.stateEvents(roomId, FLOW_WORK_ASSIGN_EVENT)) {
|
|
101
|
+
await this.handleAssignment(event);
|
|
102
|
+
}
|
|
89
103
|
}
|
|
90
104
|
async handleRoomEvent(event) {
|
|
91
|
-
if (event.type
|
|
105
|
+
if (event.type === FLOW_WORK_ASSIGN_EVENT) {
|
|
106
|
+
await this.handleAssignment(event);
|
|
92
107
|
return;
|
|
93
108
|
}
|
|
109
|
+
if (event.type === FLOW_WORK_INVOKE_EVENT) {
|
|
110
|
+
await this.handleInvocation(event);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async handleAssignment(event) {
|
|
114
|
+
if (!isRecord(event.content))
|
|
115
|
+
return;
|
|
94
116
|
if (event.content.audience !== this.options.oracleDid)
|
|
95
117
|
return;
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
118
|
+
const parsed = flowWorkAssignSchema.safeParse(event.content);
|
|
119
|
+
if (!parsed.success) {
|
|
120
|
+
this.options.logger.warn(`[flow-work] ignored malformed assignment in ${event.roomId}: ${issues(parsed.error.issues)}`);
|
|
98
121
|
return;
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
|
|
122
|
+
}
|
|
123
|
+
const assignmentContent = parsed.data;
|
|
124
|
+
const assignment = bindingOf(assignmentContent);
|
|
125
|
+
const selfUserId = this.options.port.getUserId();
|
|
126
|
+
if (event.stateKey !== assignment.invocationId ||
|
|
127
|
+
!event.sender ||
|
|
128
|
+
!selfUserId ||
|
|
129
|
+
assignmentContent.oracleMatrixId !== selfUserId) {
|
|
130
|
+
this.options.logger.warn(`[flow-work] ignored malformed assignment ${assignment.invocationId} in ${event.roomId}`);
|
|
102
131
|
return;
|
|
103
|
-
|
|
104
|
-
|
|
132
|
+
}
|
|
133
|
+
if (assignment.deadline <= this.now()) {
|
|
134
|
+
this.options.logger.warn(`[flow-work] ignored expired assignment ${assignment.invocationId}`);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const key = assignmentKey(event.roomId, assignment.invocationId);
|
|
138
|
+
const existing = this.assignments.get(key);
|
|
139
|
+
if (existing) {
|
|
140
|
+
if (existing.sender !== event.sender ||
|
|
141
|
+
assignment.attempt < existing.binding.attempt ||
|
|
142
|
+
(assignment.attempt === existing.binding.attempt &&
|
|
143
|
+
!sameFlowWorkBinding(existing.binding, assignment))) {
|
|
144
|
+
this.options.logger.warn(`[flow-work] ignored mutation of accepted assignment ${assignment.invocationId}`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (assignment.attempt === existing.binding.attempt &&
|
|
148
|
+
sameFlowWorkBinding(existing.binding, assignment)) {
|
|
149
|
+
if (!existing.ready) {
|
|
150
|
+
await this.acknowledgeAssignment(event.roomId, existing);
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const oldTimer = this.readyTimers.get(key);
|
|
155
|
+
if (oldTimer)
|
|
156
|
+
clearTimeout(oldTimer);
|
|
157
|
+
this.readyTimers.delete(key);
|
|
158
|
+
}
|
|
159
|
+
const accepted = {
|
|
160
|
+
binding: cloneBinding(assignment),
|
|
161
|
+
sender: event.sender,
|
|
162
|
+
ready: this.hasOwnReady(event.roomId, assignment),
|
|
163
|
+
};
|
|
164
|
+
this.assignments.set(key, accepted);
|
|
165
|
+
if (!accepted.ready)
|
|
166
|
+
await this.acknowledgeAssignment(event.roomId, accepted);
|
|
167
|
+
}
|
|
168
|
+
hasOwnReady(roomId, binding) {
|
|
169
|
+
const self = this.options.port.getUserId();
|
|
170
|
+
if (!self)
|
|
171
|
+
return false;
|
|
172
|
+
return this.options.port
|
|
173
|
+
.stateEvents(roomId, FLOW_WORK_READY_EVENT)
|
|
174
|
+
.some((event) => {
|
|
175
|
+
if (event.stateKey !== binding.invocationId || event.sender !== self) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const ready = flowWorkReadySchema.safeParse(event.content);
|
|
179
|
+
return ready.success && sameFlowWorkBinding(ready.data, binding);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
async acknowledgeAssignment(roomId, assignment) {
|
|
183
|
+
const key = assignmentKey(roomId, assignment.binding.invocationId);
|
|
105
184
|
try {
|
|
106
|
-
|
|
107
|
-
|
|
185
|
+
await this.options.port.sendStateEvent(roomId, FLOW_WORK_READY_EVENT, assignment.binding.invocationId, { ...assignment.binding, status: 'ready' });
|
|
186
|
+
assignment.ready = true;
|
|
187
|
+
const timer = this.readyTimers.get(key);
|
|
188
|
+
if (timer)
|
|
189
|
+
clearTimeout(timer);
|
|
190
|
+
this.readyTimers.delete(key);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
assignment.ready = false;
|
|
194
|
+
this.options.logger.error(`[flow-work] failed to publish ready for ${assignment.binding.invocationId}: ${message(error)}`);
|
|
195
|
+
if (this.started && !this.readyTimers.has(key)) {
|
|
196
|
+
const timer = setTimeout(() => {
|
|
197
|
+
this.readyTimers.delete(key);
|
|
198
|
+
const current = this.assignments.get(key);
|
|
199
|
+
if (current === assignment && !current.ready) {
|
|
200
|
+
void this.acknowledgeAssignment(roomId, current);
|
|
201
|
+
}
|
|
202
|
+
}, this.retryMs());
|
|
203
|
+
timer.unref?.();
|
|
204
|
+
this.readyTimers.set(key, timer);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async handleInvocation(event) {
|
|
209
|
+
if (!isRecord(event.content))
|
|
210
|
+
return;
|
|
211
|
+
if (event.content.audience !== this.options.oracleDid)
|
|
212
|
+
return;
|
|
213
|
+
const parsed = flowWorkInvokeSchema.safeParse(event.content);
|
|
214
|
+
if (!parsed.success) {
|
|
215
|
+
this.options.logger.warn(`[flow-work] ignored malformed invoke in ${event.roomId}: ${issues(parsed.error.issues)}`);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const invoke = parsed.data;
|
|
219
|
+
const binding = bindingOf(invoke);
|
|
220
|
+
const assignment = this.assignments.get(assignmentKey(event.roomId, invoke.invocationId));
|
|
221
|
+
if (!assignment) {
|
|
222
|
+
this.options.logger.warn(`[flow-work] ignored invoke ${invoke.invocationId}: no accepted assignment`);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (!event.sender || event.sender !== assignment.sender) {
|
|
226
|
+
this.options.logger.warn(`[flow-work] ignored invoke ${invoke.invocationId}: Matrix sender does not match assignment`);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (!assignment.ready) {
|
|
230
|
+
// sendStateEvent may be accepted by Matrix even when its response is
|
|
231
|
+
// lost. The manager can then observe our durable ready state and send
|
|
232
|
+
// the invoke while the original promise left this flag false. Reconcile
|
|
233
|
+
// against authenticated current state before rejecting the command.
|
|
234
|
+
if (this.hasOwnReady(event.roomId, assignment.binding)) {
|
|
235
|
+
assignment.ready = true;
|
|
236
|
+
const readyTimer = this.readyTimers.get(assignmentKey(event.roomId, invoke.invocationId));
|
|
237
|
+
if (readyTimer)
|
|
238
|
+
clearTimeout(readyTimer);
|
|
239
|
+
this.readyTimers.delete(assignmentKey(event.roomId, invoke.invocationId));
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
this.options.logger.warn(`[flow-work] ignored invoke ${invoke.invocationId}: ready handshake is incomplete`);
|
|
108
243
|
return;
|
|
109
244
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
245
|
+
}
|
|
246
|
+
if (!sameFlowWorkBinding(assignment.binding, binding)) {
|
|
247
|
+
this.options.logger.warn(`[flow-work] ignored invoke ${invoke.invocationId}: immutable assignment binding differs`);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const key = workKey(event.roomId, binding);
|
|
251
|
+
if (this.completed.has(key)) {
|
|
252
|
+
if (this.hasOwnReceipt(event.roomId, binding))
|
|
253
|
+
return;
|
|
254
|
+
const published = this.publishedReceipts.get(key);
|
|
255
|
+
if (published) {
|
|
256
|
+
this.pendingReceipts.set(key, published);
|
|
257
|
+
await this.publishReceipt(key);
|
|
117
258
|
return;
|
|
118
259
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
260
|
+
// Current state no longer contains our receipt. A forged state event
|
|
261
|
+
// must not suppress authenticated redelivery after a process restart.
|
|
262
|
+
this.completed.delete(key);
|
|
263
|
+
}
|
|
264
|
+
if (this.pendingReceipts.has(key)) {
|
|
265
|
+
await this.publishReceipt(key);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (this.active.has(key))
|
|
269
|
+
return;
|
|
270
|
+
if (this.hasOwnReceipt(event.roomId, binding)) {
|
|
122
271
|
this.completed.add(key);
|
|
272
|
+
return;
|
|
123
273
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
await this.postFailure(event.roomId, invocationId, failure.code, failure.message);
|
|
130
|
-
receiptPosted = true;
|
|
131
|
-
this.completed.add(key);
|
|
274
|
+
this.active.add(key);
|
|
275
|
+
try {
|
|
276
|
+
let receipt;
|
|
277
|
+
if (binding.deadline <= this.now()) {
|
|
278
|
+
receipt = failureReceipt(binding, 'deadline_expired', `Invocation deadline ${binding.deadline} has passed.`);
|
|
132
279
|
}
|
|
133
|
-
|
|
134
|
-
|
|
280
|
+
else if (computeFlowWorkInputHash(invoke.inputs) !== binding.inputHash) {
|
|
281
|
+
receipt = failureReceipt(binding, 'binding_mismatch', 'Invocation inputs do not match the assignment inputHash.');
|
|
135
282
|
}
|
|
283
|
+
else {
|
|
284
|
+
try {
|
|
285
|
+
receipt = await this.execute(invoke, binding);
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
const failure = error instanceof FlowWorkFailure
|
|
289
|
+
? error
|
|
290
|
+
: new FlowWorkFailure('tool_error', message(error));
|
|
291
|
+
receipt = failureReceipt(binding, failure.code, failure.message);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
this.pendingReceipts.set(key, {
|
|
295
|
+
roomId: event.roomId,
|
|
296
|
+
workKey: key,
|
|
297
|
+
receipt,
|
|
298
|
+
});
|
|
136
299
|
}
|
|
137
300
|
finally {
|
|
138
301
|
this.active.delete(key);
|
|
139
|
-
if (!receiptPosted)
|
|
140
|
-
this.completed.delete(key);
|
|
141
302
|
}
|
|
303
|
+
await this.publishReceipt(key);
|
|
142
304
|
}
|
|
143
|
-
|
|
144
|
-
* Bind nb caveats to the invocation before executing. A delegation minted
|
|
145
|
-
* for one claim schema must not be reusable with unrelated claim data:
|
|
146
|
-
* `nb.claimSchema` requires the invocation's `inputs.claimSchemaId` to be
|
|
147
|
-
* present and equal.
|
|
148
|
-
*/
|
|
149
|
-
enforceCaveats(nb, invoke) {
|
|
150
|
-
const claimSchema = nb?.claimSchema;
|
|
151
|
-
if (typeof claimSchema !== 'string' || claimSchema === '')
|
|
152
|
-
return;
|
|
153
|
-
const provided = invoke.inputs.claimSchemaId;
|
|
154
|
-
if (provided !== claimSchema) {
|
|
155
|
-
throw new FlowWorkFailure('delegation_invalid', `Delegation is caveated to claim schema '${claimSchema}' but the invocation carries '${typeof provided === 'string' ? provided : 'none'}'.`);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
async execute(invoke) {
|
|
305
|
+
async execute(invoke, binding) {
|
|
159
306
|
const capability = findCapability(this.options.capabilities, invoke.capability, invoke.actionType);
|
|
160
307
|
if (!capability) {
|
|
161
308
|
throw new FlowWorkFailure('capability_not_declared', `Capability '${invoke.capability}' with actionType '${invoke.actionType}' is not declared by this oracle.`);
|
|
@@ -164,24 +311,38 @@ export class FlowWorkListener {
|
|
|
164
311
|
if (!validation.ok) {
|
|
165
312
|
throw new FlowWorkFailure(validation.code, validation.message);
|
|
166
313
|
}
|
|
167
|
-
if (validation.
|
|
168
|
-
validation.
|
|
169
|
-
|
|
314
|
+
if (validation.invokerDid !== binding.managerDid) {
|
|
315
|
+
throw new FlowWorkFailure('delegation_invalid', `Delegation invoker '${validation.invokerDid}' does not match managerDid '${binding.managerDid}'.`);
|
|
316
|
+
}
|
|
317
|
+
if (!validation.capability) {
|
|
318
|
+
throw new FlowWorkFailure('delegation_invalid', 'Delegation validation returned no capability grant.');
|
|
319
|
+
}
|
|
320
|
+
if (validation.capability.can !== binding.capability ||
|
|
321
|
+
validation.capability.with !== binding.resource ||
|
|
322
|
+
!sameFlowWorkNb(validation.capability.nb, binding)) {
|
|
323
|
+
throw new FlowWorkFailure('delegation_invalid', 'Delegation can, with, or nb does not exactly match the assigned work binding.');
|
|
324
|
+
}
|
|
325
|
+
this.enforceCaveats(validation.capability.nb, invoke);
|
|
326
|
+
if (binding.deadline <= this.now()) {
|
|
327
|
+
throw new FlowWorkFailure('deadline_expired', `Invocation deadline ${binding.deadline} passed before execution.`);
|
|
170
328
|
}
|
|
171
|
-
this.enforceCaveats(validation.capability?.nb, invoke);
|
|
172
329
|
const inputs = capability.inputSchema.safeParse(invoke.inputs);
|
|
173
330
|
if (!inputs.success) {
|
|
174
|
-
throw new FlowWorkFailure('input_invalid', inputs.error.issues
|
|
175
|
-
.map((issue) => `${issue.path.join('.')}: ${issue.message}`)
|
|
176
|
-
.join('; '));
|
|
331
|
+
throw new FlowWorkFailure('input_invalid', issues(inputs.error.issues));
|
|
177
332
|
}
|
|
178
333
|
let output;
|
|
179
334
|
try {
|
|
180
335
|
output = await capability.handler(inputs.data, {
|
|
181
336
|
invocationId: invoke.invocationId,
|
|
337
|
+
managerDid: invoke.managerDid,
|
|
182
338
|
capability: invoke.capability,
|
|
183
339
|
actionType: invoke.actionType,
|
|
184
340
|
nodeId: invoke.nodeId,
|
|
341
|
+
resource: invoke.resource,
|
|
342
|
+
inputHash: invoke.inputHash,
|
|
343
|
+
attempt: invoke.attempt,
|
|
344
|
+
deadline: invoke.deadline,
|
|
345
|
+
contractCaveats: structuredClone(binding.contractCaveats),
|
|
185
346
|
audience: invoke.audience,
|
|
186
347
|
delegation: invoke.delegation,
|
|
187
348
|
});
|
|
@@ -189,35 +350,110 @@ export class FlowWorkListener {
|
|
|
189
350
|
catch (error) {
|
|
190
351
|
throw new FlowWorkFailure('tool_error', message(error));
|
|
191
352
|
}
|
|
353
|
+
if (capability.outputSchema) {
|
|
354
|
+
const validatedOutput = capability.outputSchema.safeParse(output);
|
|
355
|
+
if (!validatedOutput.success) {
|
|
356
|
+
throw new FlowWorkFailure('output_invalid', issues(validatedOutput.error.issues));
|
|
357
|
+
}
|
|
358
|
+
output = validatedOutput.data;
|
|
359
|
+
}
|
|
192
360
|
return {
|
|
193
|
-
|
|
361
|
+
...binding,
|
|
194
362
|
status: 'success',
|
|
195
363
|
output: toReceiptOutput(output),
|
|
196
364
|
error: null,
|
|
197
365
|
};
|
|
198
366
|
}
|
|
199
|
-
|
|
200
|
-
|
|
367
|
+
/** Preserve service contract caveats after the full exact nb comparison. */
|
|
368
|
+
enforceCaveats(nb, invoke) {
|
|
369
|
+
const claimSchema = nb?.claimSchema;
|
|
370
|
+
if (typeof claimSchema !== 'string' || claimSchema === '')
|
|
371
|
+
return;
|
|
372
|
+
const provided = invoke.inputs.claimSchemaId;
|
|
373
|
+
if (provided !== claimSchema) {
|
|
374
|
+
throw new FlowWorkFailure('delegation_invalid', `Delegation is caveated to claim schema '${claimSchema}' but the invocation carries '${typeof provided === 'string' ? provided : 'none'}'.`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
hasOwnReceipt(roomId, binding) {
|
|
378
|
+
const self = this.options.port.getUserId();
|
|
379
|
+
if (!self)
|
|
380
|
+
return false;
|
|
201
381
|
return this.options.port
|
|
202
|
-
.
|
|
203
|
-
.some((event) =>
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
invocationId,
|
|
210
|
-
status: 'failure',
|
|
211
|
-
output: null,
|
|
212
|
-
error: { code, message: errorMessage },
|
|
382
|
+
.stateEvents(roomId, FLOW_WORK_RECEIPT_EVENT)
|
|
383
|
+
.some((event) => {
|
|
384
|
+
if (event.stateKey !== binding.invocationId || event.sender !== self) {
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
387
|
+
const parsed = flowWorkReceiptSchema.safeParse(event.content);
|
|
388
|
+
return parsed.success && sameFlowWorkBinding(parsed.data, binding);
|
|
213
389
|
});
|
|
214
390
|
}
|
|
215
|
-
async
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
391
|
+
async publishReceipt(key) {
|
|
392
|
+
const pending = this.pendingReceipts.get(key);
|
|
393
|
+
if (!pending || this.publishing.has(key))
|
|
394
|
+
return;
|
|
395
|
+
this.publishing.add(key);
|
|
396
|
+
try {
|
|
397
|
+
await this.options.port.sendStateEvent(pending.roomId, FLOW_WORK_RECEIPT_EVENT, pending.receipt.invocationId, { ...pending.receipt });
|
|
398
|
+
this.pendingReceipts.delete(key);
|
|
399
|
+
this.publishedReceipts.set(key, pending);
|
|
400
|
+
this.completed.add(pending.workKey);
|
|
401
|
+
const timer = this.retryTimers.get(key);
|
|
402
|
+
if (timer)
|
|
403
|
+
clearTimeout(timer);
|
|
404
|
+
this.retryTimers.delete(key);
|
|
405
|
+
}
|
|
406
|
+
catch (error) {
|
|
407
|
+
this.options.logger.error(`[flow-work] failed to publish receipt for ${pending.receipt.invocationId}: ${message(error)}`);
|
|
408
|
+
this.scheduleReceiptRetry(key);
|
|
409
|
+
}
|
|
410
|
+
finally {
|
|
411
|
+
this.publishing.delete(key);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
scheduleReceiptRetry(key) {
|
|
415
|
+
if (!this.started || this.retryTimers.has(key))
|
|
416
|
+
return;
|
|
417
|
+
const timer = setTimeout(() => {
|
|
418
|
+
this.retryTimers.delete(key);
|
|
419
|
+
void this.publishReceipt(key);
|
|
420
|
+
}, this.retryMs());
|
|
421
|
+
timer.unref?.();
|
|
422
|
+
this.retryTimers.set(key, timer);
|
|
219
423
|
}
|
|
220
424
|
}
|
|
425
|
+
function assignmentKey(roomId, invocationId) {
|
|
426
|
+
return `${roomId}\u0000${invocationId}`;
|
|
427
|
+
}
|
|
428
|
+
function workKey(roomId, binding) {
|
|
429
|
+
return `${roomId}\u0000${binding.invocationId}\u0000${binding.attempt}`;
|
|
430
|
+
}
|
|
431
|
+
function bindingOf(value) {
|
|
432
|
+
return cloneBinding(Object.fromEntries(FLOW_WORK_BINDING_FIELDS.map((field) => [field, value[field]])));
|
|
433
|
+
}
|
|
434
|
+
function cloneBinding(binding) {
|
|
435
|
+
return deepFreeze({
|
|
436
|
+
...binding,
|
|
437
|
+
contractCaveats: structuredClone(binding.contractCaveats),
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
function deepFreeze(value) {
|
|
441
|
+
if (value && typeof value === 'object' && !Object.isFrozen(value)) {
|
|
442
|
+
Object.freeze(value);
|
|
443
|
+
for (const nested of Object.values(value)) {
|
|
444
|
+
deepFreeze(nested);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return value;
|
|
448
|
+
}
|
|
449
|
+
function failureReceipt(binding, code, errorMessage) {
|
|
450
|
+
return {
|
|
451
|
+
...binding,
|
|
452
|
+
status: 'failure',
|
|
453
|
+
output: null,
|
|
454
|
+
error: { code, message: errorMessage },
|
|
455
|
+
};
|
|
456
|
+
}
|
|
221
457
|
function toReceiptOutput(value) {
|
|
222
458
|
if (value === null || value === undefined)
|
|
223
459
|
return null;
|
|
@@ -227,6 +463,11 @@ function toReceiptOutput(value) {
|
|
|
227
463
|
const serializable = JSON.parse(json);
|
|
228
464
|
return isRecord(serializable) ? serializable : { value: serializable };
|
|
229
465
|
}
|
|
466
|
+
function issues(values) {
|
|
467
|
+
return values
|
|
468
|
+
.map((issue) => `${issue.path.map(String).join('.')}: ${issue.message}`)
|
|
469
|
+
.join('; ');
|
|
470
|
+
}
|
|
230
471
|
function message(error) {
|
|
231
472
|
return error instanceof Error ? error.message : String(error);
|
|
232
473
|
}
|
package/dist/listener.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2B,MAAM,iBAAiB,CAAC;AAM1E,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GAKf,MAAM,eAAe,CAAC;AAwBvB,MAAM,eAAgB,SAAQ,KAAK;IAEtB;IADX,YACW,IAAuB,EAChC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAmB;QAIhC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAcD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IAkBE;IAjBZ,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IACpD,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3B,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;IACpD,iBAAiB,GAAG,IAAI,GAAG,EAA0B,CAAC;IACtD,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,WAAW,GAAG,IAAI,GAAG,EAGnC,CAAC;IACa,WAAW,GAAG,IAAI,GAAG,EAGnC,CAAC;IACI,WAAW,GAAsB,EAAE,CAAC;IACpC,OAAO,GAAG,KAAK,CAAC;IAExB,YAA6B,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QAC3D,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG;YACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvB,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBACtD,MAAM,CAAC,KAAK,CAAC,uCAAuC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzB,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBACxD,MAAM,CAAC,KAAK,CACV,wCAAwC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,CAC1E,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;SACH,CAAC;QACF,MAAM,CAAC,GAAG,CACR,yCAAyC,IAAI,CAAC,OAAO,CAAC,YAAY;aAC/D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;aAClD,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;QACF,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,iCAAiC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;YAC3C,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,IAAI;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW;YAAE,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACnE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,SAAS;QACb,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,GAAG;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;IAEO,OAAO;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;QACxD,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAsB;QAC/C,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CACrB,sBAAsB,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,aAAa,GAAG,CAC3E,CAAC;QACF,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAc;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAC/C,MAAM,EACN,sBAAsB,CACvB,EAAE,CAAC;YACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,KAAwB;QACpD,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,KAAwB;QACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO;QAC9D,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,+CAA+C,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAC9F,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC;QACtC,MAAM,UAAU,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjD,IACE,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,YAAY;YAC1C,CAAC,KAAK,CAAC,MAAM;YACb,CAAC,UAAU;YACX,iBAAiB,CAAC,cAAc,KAAK,UAAU,EAC/C,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,4CAA4C,UAAU,CAAC,YAAY,OAAO,KAAK,CAAC,MAAM,EAAE,CACzF,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,0CAA0C,UAAU,CAAC,YAAY,EAAE,CACpE,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,IACE,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAChC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO;gBAC7C,CAAC,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,OAAO;oBAC9C,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,EACrD,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,uDAAuD,UAAU,CAAC,YAAY,EAAE,CACjF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IACE,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,OAAO;gBAC/C,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,EACjD,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACpB,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC3D,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,QAAQ;gBAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,QAAQ,GAAuB;YACnC,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC;YACjC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC;SAClD,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,KAAK;YACjB,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAEO,WAAW,CAAC,MAAc,EAAE,OAAwB;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI;aACrB,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC;aAC1C,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBACrE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,MAAc,EACd,UAA8B;QAE9B,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CACpC,MAAM,EACN,qBAAqB,EACrB,UAAU,CAAC,OAAO,CAAC,YAAY,EAC/B,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAC3C,CAAC;YACF,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,2CAA2C,UAAU,CAAC,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,CAChG,CAAC;YACF,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC1C,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;wBAC7C,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnB,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,KAAwB;QACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO;QAC9D,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,2CAA2C,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAC1F,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CACrC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CACjD,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,8BAA8B,MAAM,CAAC,YAAY,0BAA0B,CAC5E,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,8BAA8B,MAAM,CAAC,YAAY,2CAA2C,CAC7F,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,qEAAqE;YACrE,sEAAsE;YACtE,wEAAwE;YACxE,oEAAoE;YACpE,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;gBACxB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CACrC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CACjD,CAAC;gBACF,IAAI,UAAU;oBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,CAAC,WAAW,CAAC,MAAM,CACrB,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CACjD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,8BAA8B,MAAM,CAAC,YAAY,iCAAiC,CACnF,CAAC;gBACF,OAAO;YACT,CAAC;QACH,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,8BAA8B,MAAM,CAAC,YAAY,wCAAwC,CAC1F,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;gBAAE,OAAO;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACzC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,qEAAqE;YACrE,sEAAsE;YACtE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,OAAwB,CAAC;YAC7B,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACnC,OAAO,GAAG,cAAc,CACtB,OAAO,EACP,kBAAkB,EAClB,uBAAuB,OAAO,CAAC,QAAQ,cAAc,CACtD,CAAC;YACJ,CAAC;iBAAM,IACL,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,SAAS,EAC7D,CAAC;gBACD,OAAO,GAAG,cAAc,CACtB,OAAO,EACP,kBAAkB,EAClB,0DAA0D,CAC3D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,GACX,KAAK,YAAY,eAAe;wBAC9B,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,IAAI,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxD,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,GAAG;gBACZ,OAAO;aACR,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAsB,EACtB,OAAwB;QAExB,MAAM,UAAU,GAAG,cAAc,CAC/B,IAAI,CAAC,OAAO,CAAC,YAAY,EACzB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CAClB,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,eAAe,CACvB,yBAAyB,EACzB,eAAe,MAAM,CAAC,UAAU,sBAAsB,MAAM,CAAC,UAAU,mCAAmC,CAC3G,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,IAAI,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;YACjD,MAAM,IAAI,eAAe,CACvB,oBAAoB,EACpB,uBAAuB,UAAU,CAAC,UAAU,gCAAgC,OAAO,CAAC,UAAU,IAAI,CACnG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAC3B,MAAM,IAAI,eAAe,CACvB,oBAAoB,EACpB,qDAAqD,CACtD,CAAC;QACJ,CAAC;QACD,IACE,UAAU,CAAC,UAAU,CAAC,GAAG,KAAK,OAAO,CAAC,UAAU;YAChD,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ;YAC/C,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,EAClD,CAAC;YACD,MAAM,IAAI,eAAe,CACvB,oBAAoB,EACpB,+EAA+E,CAChF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAEtD,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,eAAe,CACvB,kBAAkB,EAClB,uBAAuB,OAAO,CAAC,QAAQ,2BAA2B,CACnE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC7C,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC;gBACzD,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;YAC5B,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,eAAe,CACvB,gBAAgB,EAChB,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CACrC,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC;QAChC,CAAC;QAED,OAAO;YACL,GAAG,OAAO;YACV,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;YAC/B,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,4EAA4E;IACpE,cAAc,CACpB,EAAuC,EACvC,MAAsB;QAEtB,MAAM,WAAW,GAAG,EAAE,EAAE,WAAW,CAAC;QACpC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,EAAE;YAAE,OAAO;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAC7C,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAI,eAAe,CACvB,oBAAoB,EACpB,2CAA2C,WAAW,iCACpD,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAC5C,IAAI,CACL,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,OAAwB;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI;aACrB,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC;aAC5C,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBACrE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,GAAW;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CACpC,OAAO,CAAC,MAAM,EACd,uBAAuB,EACvB,OAAO,CAAC,OAAO,CAAC,YAAY,EAC5B,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CACvB,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,6CAA6C,OAAO,CAAC,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,CAC/F,CAAC;YACF,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,GAAW;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QACvD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACnB,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;CACF;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,YAAoB;IACzD,OAAO,GAAG,MAAM,SAAS,YAAY,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,OAAwB;IACvD,OAAO,GAAG,MAAM,SAAS,OAAO,CAAC,YAAY,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,SAAS,CAAC,KAAsB;IACvC,OAAO,YAAY,CACjB,MAAM,CAAC,WAAW,CAChB,wBAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACjC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAwB;IAC5C,OAAO,UAAU,CAAC;QAChB,GAAG,OAAO;QACV,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAI,KAAQ;IAC7B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,EAAE,CAAC;YACrE,UAAU,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CACrB,OAAwB,EACxB,IAAuB,EACvB,YAAoB;IAEpB,OAAO;QACL,GAAG,OAAO;QACV,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACjD,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,MAAM,CACb,MAA2D;IAE3D,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;SACvE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|