@volter/browser-wali 0.1.10 → 0.1.11

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 (113) hide show
  1. package/dist/bulk-memory.d.ts +23 -0
  2. package/dist/bulk-memory.d.ts.map +1 -0
  3. package/dist/bulk-memory.js +50 -0
  4. package/dist/bulk-memory.js.map +1 -0
  5. package/dist/coherent-file-locks.d.ts +4 -1
  6. package/dist/coherent-file-locks.d.ts.map +1 -1
  7. package/dist/coherent-file-locks.js +24 -1
  8. package/dist/coherent-file-locks.js.map +1 -1
  9. package/dist/descriptors.d.ts +18 -1
  10. package/dist/descriptors.d.ts.map +1 -1
  11. package/dist/descriptors.js +51 -6
  12. package/dist/descriptors.js.map +1 -1
  13. package/dist/filesystem-host.d.ts +81 -0
  14. package/dist/filesystem-host.d.ts.map +1 -0
  15. package/dist/filesystem-host.js +849 -0
  16. package/dist/filesystem-host.js.map +1 -0
  17. package/dist/filesystem-protocol.d.ts +49 -1
  18. package/dist/filesystem-protocol.d.ts.map +1 -1
  19. package/dist/filesystem-protocol.js +17 -0
  20. package/dist/filesystem-protocol.js.map +1 -1
  21. package/dist/filesystem-remote.d.ts +72 -18
  22. package/dist/filesystem-remote.d.ts.map +1 -1
  23. package/dist/filesystem-remote.js +271 -40
  24. package/dist/filesystem-remote.js.map +1 -1
  25. package/dist/filesystem-worker.js +8 -502
  26. package/dist/filesystem-worker.js.map +1 -1
  27. package/dist/filesystem.d.ts +9 -0
  28. package/dist/filesystem.d.ts.map +1 -1
  29. package/dist/filesystem.js +209 -61
  30. package/dist/filesystem.js.map +1 -1
  31. package/dist/host-idle.d.ts +29 -0
  32. package/dist/host-idle.d.ts.map +1 -0
  33. package/dist/host-idle.js +68 -0
  34. package/dist/host-idle.js.map +1 -0
  35. package/dist/host.d.ts +1 -0
  36. package/dist/host.d.ts.map +1 -1
  37. package/dist/host.js +1 -3
  38. package/dist/host.js.map +1 -1
  39. package/dist/memory.d.ts.map +1 -1
  40. package/dist/memory.js +79 -18
  41. package/dist/memory.js.map +1 -1
  42. package/dist/module-layout.d.ts +6 -0
  43. package/dist/module-layout.d.ts.map +1 -1
  44. package/dist/module-layout.js +26 -3
  45. package/dist/module-layout.js.map +1 -1
  46. package/dist/monotonic-clock.d.ts +9 -0
  47. package/dist/monotonic-clock.d.ts.map +1 -1
  48. package/dist/monotonic-clock.js +11 -0
  49. package/dist/monotonic-clock.js.map +1 -1
  50. package/dist/network-worker.js +7 -2
  51. package/dist/network-worker.js.map +1 -1
  52. package/dist/network.d.ts.map +1 -1
  53. package/dist/network.js +11 -8
  54. package/dist/network.js.map +1 -1
  55. package/dist/process-bridge.d.ts.map +1 -1
  56. package/dist/process-bridge.js +25 -5
  57. package/dist/process-bridge.js.map +1 -1
  58. package/dist/program.d.ts +5 -1
  59. package/dist/program.d.ts.map +1 -1
  60. package/dist/program.js +13 -12
  61. package/dist/program.js.map +1 -1
  62. package/dist/runtime.d.ts.map +1 -1
  63. package/dist/runtime.js +75 -9
  64. package/dist/runtime.js.map +1 -1
  65. package/dist/shared-file-layer.d.ts +69 -0
  66. package/dist/shared-file-layer.d.ts.map +1 -0
  67. package/dist/shared-file-layer.js +299 -0
  68. package/dist/shared-file-layer.js.map +1 -0
  69. package/dist/shared-pipes.d.ts +7 -0
  70. package/dist/shared-pipes.d.ts.map +1 -1
  71. package/dist/shared-pipes.js +56 -17
  72. package/dist/shared-pipes.js.map +1 -1
  73. package/dist/signals.d.ts +2 -0
  74. package/dist/signals.d.ts.map +1 -1
  75. package/dist/signals.js +5 -1
  76. package/dist/signals.js.map +1 -1
  77. package/dist/snapshot-filesystem.d.ts +36 -3
  78. package/dist/snapshot-filesystem.d.ts.map +1 -1
  79. package/dist/snapshot-filesystem.js +204 -19
  80. package/dist/snapshot-filesystem.js.map +1 -1
  81. package/dist/stdin.d.ts.map +1 -1
  82. package/dist/stdin.js +3 -2
  83. package/dist/stdin.js.map +1 -1
  84. package/dist/symlink.d.ts.map +1 -1
  85. package/dist/symlink.js +91 -1
  86. package/dist/symlink.js.map +1 -1
  87. package/dist/system.d.ts.map +1 -1
  88. package/dist/system.js +17 -6
  89. package/dist/system.js.map +1 -1
  90. package/dist/thread-coordinator-worker.d.ts +1 -25
  91. package/dist/thread-coordinator-worker.d.ts.map +1 -1
  92. package/dist/thread-coordinator-worker.js +29 -2
  93. package/dist/thread-coordinator-worker.js.map +1 -1
  94. package/dist/thread-worker.js +13 -8
  95. package/dist/thread-worker.js.map +1 -1
  96. package/dist/threads.d.ts +4 -0
  97. package/dist/threads.d.ts.map +1 -1
  98. package/dist/threads.js +72 -43
  99. package/dist/threads.js.map +1 -1
  100. package/dist/types.d.ts +10 -0
  101. package/dist/types.d.ts.map +1 -1
  102. package/dist/websocket-peer.d.ts.map +1 -1
  103. package/dist/websocket-peer.js +2 -1
  104. package/dist/websocket-peer.js.map +1 -1
  105. package/dist/worker-program-protocol.d.ts +26 -0
  106. package/dist/worker-program-protocol.d.ts.map +1 -1
  107. package/dist/worker-program-worker.js +26 -8
  108. package/dist/worker-program-worker.js.map +1 -1
  109. package/dist/worker-program.d.ts +43 -0
  110. package/dist/worker-program.d.ts.map +1 -1
  111. package/dist/worker-program.js +198 -24
  112. package/dist/worker-program.js.map +1 -1
  113. package/package.json +1 -1
@@ -2,6 +2,7 @@ import { takeStandbyWorker } from "./worker-standby.js";
2
2
  import { encodeBase64, decodeBase64 } from "@volter/browser-runtime/browser-base64.js";
3
3
  import { FILESYSTEM_ROOT_PAYLOAD_BYTES, FILESYSTEM_SNAPSHOT_CHUNK_BYTES, FilesystemOperation, } from "./filesystem-protocol.js";
4
4
  import { pageWorker } from "@volter/browser-runtime/page-workers.js";
5
+ import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
5
6
  export class WaliFilesystemClient {
6
7
  channel;
7
8
  control;
@@ -9,10 +10,54 @@ export class WaliFilesystemClient {
9
10
  encoder = new TextEncoder();
10
11
  decoder = new TextDecoder();
11
12
  nextRequestId = 1;
13
+ bell;
14
+ wakeMemory;
15
+ /**
16
+ * A syscall's handler to call with nothing between, when the host is this
17
+ * thread's (ADR-0046); undefined for one that must go through `syscall` (a
18
+ * lock that may block, or a host elsewhere).
19
+ */
20
+ directSyscall(name) {
21
+ const local = this.channel.local;
22
+ if (!local || name === "SYS_flock" || name === "SYS_fcntl")
23
+ return undefined;
24
+ return (args) => {
25
+ const { imports, errno } = local.handlers();
26
+ const handler = imports[name];
27
+ if (!handler)
28
+ throw remoteError(-38);
29
+ let result;
30
+ try {
31
+ result = handler(...args);
32
+ }
33
+ catch (error) {
34
+ throw remoteError(errno(error));
35
+ }
36
+ return typeof result === "bigint" ? result : BigInt(result ?? 0);
37
+ };
38
+ }
39
+ /**
40
+ * Whether the host on this thread holds `fd` as one of its own files, which
41
+ * is exactly when every layer above the router passes a call on `fd` to the
42
+ * router and the router calls the host's handler (`ownedFileImports`).
43
+ * False where the host is in another realm.
44
+ */
45
+ ownsLocalFile(fd) {
46
+ const local = this.channel.local;
47
+ return local !== undefined && local.handlers().owns(fd);
48
+ }
49
+ /** The host's handlers on this thread, as `directSyscall` calls them; undefined where the host is elsewhere. */
50
+ localHandlers() {
51
+ const local = this.channel.local;
52
+ return local ? () => local.handlers() : undefined;
53
+ }
54
+ /** The program's memory, whose futex word a main thread holding the filesystem publishes while it waits (ADR-0046). */
55
+ wakeThrough(memory) { this.wakeMemory = memory; }
12
56
  constructor(channel) {
13
57
  this.channel = channel;
14
58
  this.control = new Int32Array(channel.control);
15
59
  this.payload = new Uint8Array(channel.payload);
60
+ this.bell = channel.doorbell ? new Int32Array(channel.doorbell) : undefined;
16
61
  }
17
62
  attachMemory(memory) { this.channel.port.postMessage({ memory }); }
18
63
  copyForExec(stdio) { return this.call(FilesystemOperation.CopyForExec, { stdio }).process; }
@@ -25,9 +70,14 @@ export class WaliFilesystemClient {
25
70
  const sharedPipes = this.channel.sharedPipes && { ...this.channel.sharedPipes,
26
71
  table: process === undefined ? this.channel.sharedPipes.table : new SharedArrayBuffer(65_536 * 4) };
27
72
  const release = process === undefined ? undefined : new MessageChannel();
28
- this.channel.port.postMessage({ kind: "attach", ...channel.server, process,
29
- ...(sharedPipes ? { sharedPipes } : {}), ...(release ? { releasePort: release.port2 } : {}) }, [channel.server.port, ...(release ? [release.port2] : [])]);
30
- return { ...channel.client, ...(sharedPipes ? { sharedPipes } : {}), ...(release ? { releasePort: release.port1 } : {}) };
73
+ const attach = { ...channel.server, ...(process === undefined ? {} : { process }), ...(sharedPipes ? { sharedPipes } : {}), ...(release ? { releasePort: release.port2 } : {}) };
74
+ if (this.channel.local)
75
+ this.channel.local.attach(attach);
76
+ else
77
+ this.channel.port.postMessage({ kind: "attach", ...attach }, [channel.server.port, ...(release ? [release.port2] : [])]);
78
+ const doorbell = this.channel.local?.doorbell ?? this.channel.doorbell;
79
+ return { ...channel.client, ...(sharedPipes ? { sharedPipes } : {}), ...(release ? { releasePort: release.port1 } : {}),
80
+ ...(doorbell ? { doorbell } : {}) };
31
81
  }
32
82
  copyForExecChannel(stdio) {
33
83
  return this.createChannel(FILESYSTEM_ROOT_PAYLOAD_BYTES, this.copyForExec(stdio));
@@ -139,25 +189,59 @@ export class WaliFilesystemClient {
139
189
  }
140
190
  }
141
191
  syscall(name, args) {
142
- const result = this.call(FilesystemOperation.Syscall, {
143
- name,
144
- args: args.map((value) => String(value)),
145
- }, isBlockingFileLock(name, args) ? null : 30_000);
146
- return BigInt(result.result);
192
+ const local = this.channel.local;
193
+ if (local) {
194
+ // The host is this thread's (ADR-0046): called, as a one-thread program's filesystem is.
195
+ for (;;) {
196
+ const result = local.syscall(name, args);
197
+ if (typeof result === "bigint")
198
+ return result;
199
+ if (result !== undefined)
200
+ throw remoteError(result.failed);
201
+ // Deferred: a blocking lock another holder has. The wait is the lock's
202
+ // and is counted with the lock requests (the profile's `locks`).
203
+ const began = performance.now();
204
+ local.idle();
205
+ BrowserFileLockClient.waited.ms += performance.now() - began;
206
+ }
207
+ }
208
+ let encodedName = this.names.get(name);
209
+ if (!encodedName) {
210
+ encodedName = this.encoder.encode(name);
211
+ this.names.set(name, encodedName);
212
+ }
213
+ const view = this.view ??= new DataView(this.payload.buffer, this.payload.byteOffset, this.payload.byteLength);
214
+ this.payload[0] = args.length;
215
+ this.payload[1] = encodedName.byteLength;
216
+ for (let index = 0; index < args.length; index += 1)
217
+ view.setBigInt64(8 + index * 8, BigInt(args[index]), true);
218
+ this.payload.set(encodedName, 8 + args.length * 8);
219
+ // No deadline for a main thread's host (ADR-0046): it answers when the
220
+ // main thread next enters the host, as Emscripten's proxied calls do, and
221
+ // a program whose main thread is gone has ended.
222
+ this.exchange(FilesystemOperation.SyscallBinary, 8 + args.length * 8 + encodedName.byteLength, isBlockingFileLock(name, args) || this.bell ? null : 30_000);
223
+ return view.getBigInt64(0, true);
147
224
  }
225
+ names = new Map();
226
+ /** The last answer's result, for operations that answer more than an errno. */
227
+ lastResult = 0;
228
+ view;
148
229
  /** Chunked for the same reason as readFileSync: a mapping of a large file is one RPC per piece, never one answer. */
149
230
  readForMapping(fd, offset, length) {
150
231
  const out = new Uint8Array(length);
232
+ const view = this.view ??= new DataView(this.payload.buffer, this.payload.byteOffset, this.payload.byteLength);
151
233
  let filled = 0;
152
234
  while (filled < length) {
153
- const piece = Math.min(FILESYSTEM_SNAPSHOT_CHUNK_BYTES, length - filled);
154
- const result = this.call(FilesystemOperation.ReadForMapping, { fd, offset: offset + filled, length: piece });
155
- if (result.content === undefined)
235
+ const piece = Math.min(this.payload.byteLength, length - filled);
236
+ view.setInt32(0, fd, true);
237
+ view.setFloat64(8, offset + filled, true);
238
+ view.setInt32(16, piece, true);
239
+ const received = this.exchange(FilesystemOperation.ReadForMappingBinary, 20, 30_000);
240
+ if (this.lastResult === 1)
156
241
  return filled === 0 ? undefined : out.subarray(0, filled);
157
- const chunk = decodeBase64(result.content);
158
- out.set(chunk, filled);
159
- filled += chunk.byteLength;
160
- if (chunk.byteLength < piece)
242
+ out.set(this.payload.subarray(0, received), filled);
243
+ filled += received;
244
+ if (received < piece)
161
245
  break;
162
246
  }
163
247
  return filled === length ? out : out.subarray(0, filled);
@@ -166,24 +250,69 @@ export class WaliFilesystemClient {
166
250
  return this.call(FilesystemOperation.MappingPath, { fd }).path;
167
251
  }
168
252
  writeForMapping(path, offset, value) {
169
- return this.call(FilesystemOperation.WriteForMapping, {
170
- path, offset, content: encodeBase64(value),
171
- }).written;
253
+ const encodedPath = this.encoder.encode(path);
254
+ if (16 + encodedPath.byteLength + value.byteLength > this.payload.byteLength) {
255
+ return this.call(FilesystemOperation.WriteForMapping, {
256
+ path, offset, content: encodeBase64(value),
257
+ }).written;
258
+ }
259
+ const view = this.view ??= new DataView(this.payload.buffer, this.payload.byteOffset, this.payload.byteLength);
260
+ view.setFloat64(0, offset, true);
261
+ view.setUint32(8, encodedPath.byteLength, true);
262
+ view.setUint32(12, value.byteLength, true);
263
+ this.payload.set(encodedPath, 16);
264
+ this.payload.set(value, 16 + encodedPath.byteLength);
265
+ this.exchange(FilesystemOperation.WriteForMappingBinary, 16 + encodedPath.byteLength + value.byteLength, 30_000);
266
+ return this.payload[0] === 1;
172
267
  }
173
268
  call(operation, input = {}, timeoutMs = 30_000) {
174
269
  const encoded = this.encoder.encode(JSON.stringify(input));
175
270
  if (encoded.byteLength > this.payload.byteLength)
176
271
  throw remoteError(-90);
272
+ if (Atomics.load(this.control, 0) !== 0)
273
+ throw new Error("Concurrent WALI filesystem RPC on one channel.");
274
+ this.payload.set(encoded);
275
+ const outputLength = this.exchange(operation, encoded.byteLength, timeoutMs);
276
+ return outputLength > 0
277
+ ? JSON.parse(this.decoder.decode(this.payload.slice(0, outputLength)))
278
+ : undefined;
279
+ }
280
+ /** One request whose input is already in the payload: its answer's length, the answer left in the payload. */
281
+ exchange(operation, inputLength, timeoutMs) {
177
282
  if (Atomics.load(this.control, 0) !== 0)
178
283
  throw new Error("Concurrent WALI filesystem RPC on one channel.");
179
284
  const requestId = this.nextRequestId;
180
285
  this.nextRequestId = requestId >= 0x3fff_fffd ? 1 : requestId + 2;
181
286
  this.control.fill(0);
182
- this.payload.set(encoded);
183
287
  Atomics.store(this.control, 1, operation);
184
- Atomics.store(this.control, 3, encoded.byteLength);
288
+ Atomics.store(this.control, 3, inputLength);
185
289
  Atomics.store(this.control, 0, requestId);
186
- this.channel.port.postMessage(requestId);
290
+ const local = this.channel.local;
291
+ if (local) {
292
+ // Answered here, by the host this realm runs (ADR-0046). A request a
293
+ // held lock defers waits for its holder, which other threads' requests,
294
+ // answered meanwhile, may be.
295
+ for (;;) {
296
+ local.serveNow();
297
+ if (Atomics.load(this.control, 0) === requestId + 1)
298
+ break;
299
+ local.idle();
300
+ }
301
+ }
302
+ else if (this.bell) {
303
+ // A host on the program's main thread (ADR-0046) reads no messages
304
+ // while the program runs; it is rung, and the futex word it waits on,
305
+ // if any, is woken (review of c96148c: a message per request queued
306
+ // there for the whole run).
307
+ Atomics.add(this.bell, 0, 1);
308
+ Atomics.notify(this.bell, 0);
309
+ const word = Atomics.load(this.bell, 1);
310
+ if (word !== 0 && this.wakeMemory)
311
+ Atomics.notify(new Int32Array(this.wakeMemory.buffer), word - 1);
312
+ }
313
+ else {
314
+ this.channel.port.postMessage(requestId);
315
+ }
187
316
  const deadline = timeoutMs === null ? undefined : Date.now() + timeoutMs;
188
317
  for (;;) {
189
318
  const state = Atomics.load(this.control, 0);
@@ -201,13 +330,11 @@ export class WaliFilesystemClient {
201
330
  }
202
331
  const result = Atomics.load(this.control, 2);
203
332
  const outputLength = Atomics.load(this.control, 4);
204
- const output = outputLength > 0
205
- ? JSON.parse(this.decoder.decode(this.payload.slice(0, outputLength)))
206
- : undefined;
207
333
  Atomics.store(this.control, 0, 0);
208
334
  if (result < 0)
209
335
  throw remoteError(result);
210
- return output;
336
+ this.lastResult = result;
337
+ return outputLength;
211
338
  }
212
339
  }
213
340
  function isBlockingFileLock(name, args) {
@@ -220,15 +347,55 @@ function isBlockingFileLock(name, args) {
220
347
  const command = Number(args[1] ?? 0);
221
348
  return command === 7 || command === 38;
222
349
  }
350
+ /** How long a blocked main thread waits for a ring before it owes the host again (ADR-0046). */
351
+ const IN_THREAD_IDLE_MS = 5;
223
352
  export class WaliFilesystemCoordinator {
224
- worker;
353
+ sink;
225
354
  root;
226
355
  sharedPipes;
227
- constructor(worker, root, sharedPipes) {
228
- this.worker = worker;
356
+ constructor(sink, root, sharedPipes) {
357
+ this.sink = sink;
229
358
  this.root = root;
230
359
  this.sharedPipes = sharedPipes;
231
360
  }
361
+ /**
362
+ * The host on this realm's main thread (ADR-0046): the realm's own file
363
+ * syscalls are calls, and other threads' requests are answered when it
364
+ * enters the host (`pump`).
365
+ */
366
+ static async createInThread(snapshot, options) {
367
+ const host = await import("./filesystem-host.js");
368
+ const doorbell = new SharedArrayBuffer(2 * Int32Array.BYTES_PER_ELEMENT);
369
+ const bell = new Int32Array(doorbell);
370
+ host.hostInThread(doorbell);
371
+ await host.initializeHost({ kind: "initialize", snapshot, ...options });
372
+ const rootChannel = createChannel(FILESYSTEM_ROOT_PAYLOAD_BYTES);
373
+ const entry = host.attachChannel({ ...rootChannel.server, ...(options.sharedPipes ? { sharedPipes: options.sharedPipes } : {}) });
374
+ const root = new WaliFilesystemClient({
375
+ ...rootChannel.client,
376
+ ...(options.sharedPipes ? { sharedPipes: options.sharedPipes } : {}),
377
+ local: {
378
+ doorbell,
379
+ serveNow: () => host.serveNow(entry),
380
+ attach: (channel) => { host.attachChannel(channel); },
381
+ syscall: (name, args) => host.syscallNow(entry, name, args),
382
+ handlers: () => host.handlersNow(entry),
383
+ idle: () => {
384
+ host.pumpHost(true);
385
+ Atomics.wait(bell, 0, Atomics.load(bell, 0), IN_THREAD_IDLE_MS);
386
+ },
387
+ },
388
+ });
389
+ const sink = { attach: (channel) => { host.attachChannel(channel); }, terminate: () => host.resetHost(), doorbell, host };
390
+ return new WaliFilesystemCoordinator(sink, root, options.sharedPipes);
391
+ }
392
+ /** The program is about to run on this thread: the host's port is read no longer (ADR-0046). */
393
+ closePort() { this.sink.host?.closeHostPort(); }
394
+ /** What the main thread owes while it is in the host, when the host runs here (ADR-0046). */
395
+ pump(blocking = false) { if (this.sink.host?.hostWaiting() || blocking)
396
+ this.sink.host?.pumpHost(blocking); }
397
+ /** The word a blocked main thread waits on, so a request wakes it, when the host runs here. */
398
+ doorbell() { return this.sink.doorbell ? new Int32Array(this.sink.doorbell) : undefined; }
232
399
  static async create(snapshot, options) {
233
400
  const worker = takeStandbyWorker("filesystem", () => pageWorker(new Worker(new URL("./filesystem-worker.js", import.meta.url), {
234
401
  type: "module", name: "wali-filesystem",
@@ -255,14 +422,18 @@ export class WaliFilesystemCoordinator {
255
422
  });
256
423
  const rootChannel = createChannel(FILESYSTEM_ROOT_PAYLOAD_BYTES);
257
424
  worker.postMessage({ kind: "attach", ...rootChannel.server }, [rootChannel.server.port]);
258
- return new WaliFilesystemCoordinator(worker, new WaliFilesystemClient({ ...rootChannel.client, ...(options.sharedPipes ? { sharedPipes: options.sharedPipes } : {}) }), options.sharedPipes);
425
+ const sink = {
426
+ attach: (channel, transfer) => worker.postMessage({ kind: "attach", ...channel }, transfer),
427
+ terminate: () => worker.terminate(),
428
+ };
429
+ return new WaliFilesystemCoordinator(sink, new WaliFilesystemClient({ ...rootChannel.client, ...(options.sharedPipes ? { sharedPipes: options.sharedPipes } : {}) }), options.sharedPipes);
259
430
  }
260
431
  createChannel(payloadBytes, process = 0) {
261
432
  const channel = createChannel(payloadBytes);
262
433
  const sharedPipes = this.sharedPipes && { ...this.sharedPipes,
263
434
  table: process === 0 ? this.sharedPipes.table : new SharedArrayBuffer(65_536 * 4) };
264
- this.worker.postMessage({ kind: "attach", process, ...channel.server, ...(sharedPipes ? { sharedPipes } : {}) }, [channel.server.port]);
265
- return { ...channel.client, ...(sharedPipes ? { sharedPipes } : {}) };
435
+ this.sink.attach({ process, ...channel.server, ...(sharedPipes ? { sharedPipes } : {}) }, [channel.server.port]);
436
+ return { ...channel.client, ...(sharedPipes ? { sharedPipes } : {}), ...(this.sink.doorbell ? { doorbell: this.sink.doorbell } : {}) };
266
437
  }
267
438
  copyForExec() {
268
439
  return this.createChannel(FILESYSTEM_ROOT_PAYLOAD_BYTES, this.root.copyForExec());
@@ -271,9 +442,11 @@ export class WaliFilesystemCoordinator {
271
442
  snapshot() { return this.root.toSnapshot(); }
272
443
  finalSnapshot() { return this.root.finalSnapshot(); }
273
444
  replaceSnapshot(snapshot) { this.root.replaceSnapshot(snapshot); }
274
- terminate() { this.worker.terminate(); }
445
+ terminate() { this.sink.terminate(); }
275
446
  }
276
447
  const SHARED_FILE_FD_LIMIT = 10_000;
448
+ /** fcntl's lock commands (F_GETLK, F_SETLK, F_SETLKW and their OFD forms): the ones that may wait on another holder. */
449
+ const FCNTL_LOCKS = new Set([5, 6, 7, 36, 37, 38]);
277
450
  const PATH_SYSCALLS = new Set([
278
451
  "SYS_open", "SYS_openat", "SYS_stat", "SYS_lstat", "SYS_newfstatat", "SYS_access",
279
452
  "SYS_faccessat", "SYS_faccessat2", "SYS_chmod", "SYS_fchmodat", "SYS_chdir", "SYS_getcwd",
@@ -297,23 +470,81 @@ export class WaliSharedFileDescriptorHost {
297
470
  this.stdioAliasRegistry = stdioAliasRegistry;
298
471
  this.descriptorState = descriptorState;
299
472
  }
473
+ /**
474
+ * ONE OWNERSHIP QUESTION PER CALL, THEN THE OWNER (2026-09-28). A call on a
475
+ * descriptor walked every layer above the router -- network, events, pipes
476
+ * -- each asking whether the descriptor was its own, before the router
477
+ * called the host's handler: the multi-realm composition, paid on every
478
+ * call by a program whose host is on its own thread. Where the host on
479
+ * this thread holds `fd` as one of its files, each of those layers passes
480
+ * the call on and the router calls `direct`; so these call `direct` at
481
+ * once, the same closure, and every other descriptor takes `layered`,
482
+ * the composed handler, as before. A kernel's file table points each open
483
+ * file at its operations; this is that, for the files.
484
+ */
485
+ ownedFileImports(layered) {
486
+ const imports = {};
487
+ for (const name of FD_SYSCALLS) {
488
+ // fcntl's commands other than the locks cannot wait (musl's open sends
489
+ // F_SETFD after every O_CLOEXEC), so they come here too; the locks
490
+ // keep the deferring path. flock is always a lock.
491
+ const commands = name === "SYS_fcntl";
492
+ const direct = commands ? undefined : this.client.directSyscall(name);
493
+ const through = layered[name];
494
+ if ((!direct && !commands) || !through || name === "SYS_flock")
495
+ continue;
496
+ const local = this.client.localHandlers();
497
+ if (!local)
498
+ continue;
499
+ // `direct`'s body, with the host's handlers looked up once for both the question and the call.
500
+ imports[name] = (...args) => {
501
+ const fd = Number(args[0]);
502
+ if (fd < 3 || fd >= SHARED_FILE_FD_LIMIT || (commands && FCNTL_LOCKS.has(Number(args[1]))))
503
+ return through(...args);
504
+ const { imports: handlers, errno, owns } = local();
505
+ if (!owns(fd))
506
+ return through(...args);
507
+ const handler = handlers[name];
508
+ if (!handler)
509
+ throw remoteError(-38);
510
+ let result;
511
+ try {
512
+ result = handler(...args);
513
+ }
514
+ catch (error) {
515
+ throw remoteError(errno(error));
516
+ }
517
+ return typeof result === "bigint" ? result : BigInt(result ?? 0);
518
+ };
519
+ }
520
+ return imports;
521
+ }
300
522
  imports(fallback) {
301
523
  const imports = {};
302
524
  for (const name of PATH_SYSCALLS) {
303
- imports[name] = (...args) => this.client.syscall(name, args);
525
+ // Called, when the host is this thread's: no client and no channel between (ADR-0046).
526
+ const direct = this.client.directSyscall(name);
527
+ imports[name] = direct ? (...args) => direct(args) : (...args) => this.client.syscall(name, args);
304
528
  }
529
+ // Made once, not for every call: two views of the shared tables and the
530
+ // stream calls' names were allocated per syscall (2026-09-27).
531
+ const table = this.descriptorState ? new Int32Array(this.descriptorState.table) : undefined;
532
+ const descriptions = this.descriptorState ? new Int32Array(this.descriptorState.descriptions) : undefined;
305
533
  for (const name of FD_SYSCALLS) {
534
+ const direct = this.client.directSyscall(name);
535
+ const streamCall = name === "SYS_read" || name === "SYS_readv" || name === "SYS_write" || name === "SYS_writev" || name === "SYS_fstat";
536
+ const writes = name === "SYS_write" || name === "SYS_writev";
306
537
  imports[name] = (...args) => {
307
538
  const fd = Number(args[0]);
308
- if (this.descriptorState && fd >= 0 && fd < 20_000) {
309
- const id = Atomics.load(new Int32Array(this.descriptorState.table), fd);
310
- const stream = Atomics.load(new Int32Array(this.descriptorState.descriptions), id * 3 + 2);
311
- if (stream && ["SYS_read", "SYS_readv", "SYS_write", "SYS_writev", "SYS_fstat"].includes(name)) {
312
- if (name === "SYS_write" || name === "SYS_writev")
539
+ if (table && descriptions && fd >= 0 && fd < 20_000) {
540
+ const id = Atomics.load(table, fd);
541
+ const stream = Atomics.load(descriptions, id * 3 + 2);
542
+ if (stream && streamCall) {
543
+ if (writes)
313
544
  this.client.prepareSpawn();
314
545
  return fallback[name]?.(...args) ?? -9n;
315
546
  }
316
- return this.client.syscall(name, args);
547
+ return direct ? direct(args) : this.client.syscall(name, args);
317
548
  }
318
549
  const alias = this.stdioAliasRegistry && fd >= 0 && fd < this.stdioAliasRegistry.length
319
550
  ? Atomics.load(this.stdioAliasRegistry, fd)
@@ -330,7 +561,7 @@ export class WaliSharedFileDescriptorHost {
330
561
  this.client.prepareSpawn();
331
562
  return fallback[name]?.(...args) ?? -9n;
332
563
  }
333
- return this.client.syscall(name, args);
564
+ return direct ? direct(args) : this.client.syscall(name, args);
334
565
  };
335
566
  }
336
567
  return { ...fallback, ...imports };
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-remote.js","sourceRoot":"","sources":["../src/filesystem-remote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,mBAAmB,GAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAqBrE,MAAM,OAAO,oBAAoB;IAOF;IANZ,OAAO,CAAa;IACpB,OAAO,CAAa;IACpB,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAC5B,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IACrC,aAAa,GAAG,CAAC,CAAC;IAE1B,YAA6B,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;QACzD,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,MAA0B,IAAU,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7F,WAAW,CAAC,KAAgB,IAAY,OAAO,IAAI,CAAC,IAAI,CAAsB,mBAAmB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACpI,uBAAuB,KAAa,OAAO,IAAI,CAAC,IAAI,CAAS,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3F,kBAAkB;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAAE,IAAI,CAAC,IAAI,CAAsB,mBAAmB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;IACpI,CAAC;IACD,aAAa,CAAC,YAAoB,EAAE,OAAgB;QAClD,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;YAC3E,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,OAAO,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO;YACxE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAC7F,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5H,CAAC;IACD,kBAAkB,CAAC,KAAe;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,YAAY,KAAW,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAErE,UAAU,CAAC,IAAY,IAAa,OAAO,IAAI,CAAC,IAAI,CAAU,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtG,QAAQ,CAAC,IAAY,IAAkB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAa,mBAAmB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvH,SAAS,CAAC,IAAY,IAAkB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAa,mBAAmB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzH,+EAA+E;IAC/E,YAAY,CAAC,IAAY;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,IAAI,+BAA+B,EAAE,CAAC;YAC5C,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAsB,mBAAmB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,+BAA+B,EAAE,CAAC;YAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;YACzG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvB,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,GAAG,MAAM,CAAC;gBAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QACrI,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,IAAY,IAAyB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrF,aAAa,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc;QACxD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;YACzE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAsB,mBAAmB,CAAC,SAAS,EAAE;gBACvF,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK;aAC7C,CAAC,CAAC,OAAO,CAAC,CAAC;YACZ,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;YAC3B,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK;gBAAE,MAAM;QACtC,CAAC;QACD,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IACD,cAAc,CAAC,IAAY,EAAE,MAAc,EAAE,IAAgB;QAC3D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,+BAA+B,EAAE,CAAC;YACxI,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE;gBACxC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;gBAC9B,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,+BAA+B,CAAC,CAAC;aACzF,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;gBAAE,MAAM;QACnC,CAAC;IACH,CAAC;IACD,aAAa,CAAC,IAAY,EAAE,IAAyB;QACnD,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,IAAI,KAAK,CAAC,UAAU,IAAI,+BAA+B,EAAE,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,SAAS,CAAC,IAAY,EAAE,OAAiC;QACvD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,WAAW,CAAC,IAAY,IAAc,OAAO,IAAI,CAAC,IAAI,CAAW,mBAAmB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1G,UAAU,CAAC,IAAY,IAAU,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnF,SAAS,CAAC,IAAY,IAAU,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,UAAU,CAAC,IAAY,EAAE,EAAU,IAAU,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACnG,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAA8B,CAAC;IAC1H,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAA8B,CAAC;IAC/H,CAAC;IACO,WAAW,CAAC,aAAkC;QACpD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAqB,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,+BAA+B,EAAE,CAAC;YAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;YAC5E,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAsB,mBAAmB,CAAC,aAAa,EAAE;gBACpF,MAAM;gBACN,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ;gBAAE,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,YAAY,KAAW,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrE,eAAe,CAAC,KAAkE;QAChF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,IAAI,+BAA+B,EAAE,CAAC;YAC5F,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE;gBAClD,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,+BAA+B,CAAC,CAAC;aAClG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,eAAe,CAAC,QAAmC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,IAAI,+BAA+B,EAAE,CAAC;YAC5F,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,+BAA+B,CAAC,CAAC;YACjF,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE;gBAClD,MAAM;gBACN,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAY,EAAE,IAA4B;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAqB,mBAAmB,CAAC,OAAO,EAAE;YACxE,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACzC,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,qHAAqH;IACrH,cAAc,CAAC,EAAU,EAAE,MAAc,EAAE,MAAc;QACvD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAuB,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACnI,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;gBAAE,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5F,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3C,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;YAC3B,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK;gBAAE,MAAM;QACtC,CAAC;QACD,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IACD,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAoB,mBAAmB,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;IACpF,CAAC;IACD,eAAe,CAAC,IAAY,EAAE,MAAc,EAAE,KAAiB;QAC7D,OAAO,IAAI,CAAC,IAAI,CAAuB,mBAAmB,CAAC,eAAe,EAAE;YAC1E,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC,OAAO,CAAC;IACb,CAAC;IAEO,IAAI,CACV,SAA8B,EAC9B,QAAiC,EAAE,EACnC,YAA2B,MAAM;QAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC3G,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACzE,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5C,IAAI,KAAK,KAAK,SAAS,GAAG,CAAC;gBAAE,MAAM;YACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;gBAChD,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,gBAAgB,SAAS,GAAG,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,SAAS,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1F,IAAI,SAAS,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS;mBACrC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1E,MAAM,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,YAAY,GAAG,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAM;YAC3E,CAAC,CAAC,SAAc,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,IAA4B;IACpE,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,OAAO,yBAAyB;IACC;IAAiC;IAA6C;IAAnH,YAAqC,MAAc,EAAmB,IAA0B,EAAmB,WAA6D;QAA3I,WAAM,GAAN,MAAM,CAAQ;QAAmB,SAAI,GAAJ,IAAI,CAAsB;QAAmB,gBAAW,GAAX,WAAW,CAAkD;IAAG,CAAC;IAEpL,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAmC,EAAE,OAcxD;QACC,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC7H,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB;SACxC,CAAC,CAAC,CAAC,CAAC;QACL,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,SAAS,GAAG,CAAC,KAAuD,EAAQ,EAAE;gBAClF,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAAC,OAAO,EAAE,CAAC;gBAAC,CAAC;gBACjG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAC,CAAC;YAC/H,CAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7G,MAAM,SAAS,GAAG;gBAChB,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,aAAa,CAAC,6BAA6B,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF,OAAO,IAAI,yBAAyB,CAAC,MAAM,EAAE,IAAI,oBAAoB,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/L,CAAC;IAED,aAAa,CAAC,YAAoB,EAAE,OAAO,GAAG,CAAC;QAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW;YAC3D,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACtF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxI,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,UAAU,KAA2B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,QAAQ,KAAgC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACxE,aAAa,KAAgC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAChF,eAAe,CAAC,QAAmC,IAAU,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnG,SAAS,KAAW,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY;IACjF,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY;IACzF,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc;IACnF,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB;IAC/F,kBAAkB,EAAE,mBAAmB;CACxC,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY;IAC9F,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,uBAAuB;IAC5F,sBAAsB,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB;IACxF,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe;CAC3D,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,OAAO,4BAA4B;IAEpB;IACA;IACA;IAHnB,YACmB,MAA4B,EAC5B,kBAA+B,EAC/B,eAAiE;QAFjE,WAAM,GAAN,MAAM,CAAsB;QAC5B,uBAAkB,GAAlB,kBAAkB,CAAa;QAC/B,oBAAe,GAAf,eAAe,CAAkD;IACjF,CAAC;IAEJ,OAAO,CAAC,QAA2C;QACjD,MAAM,OAAO,GAAsC,EAAE,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE;gBAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,IAAI,CAAC,eAAe,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;oBACnD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;oBACxE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC3F,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC/F,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,YAAY;4BAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;wBAC9E,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,CAAC;oBACD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM;oBACrF,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;oBAC3C,CAAC,CAAC,CAAC,CAAC,CAAC;gBACP,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,oBAAoB,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBACtF,qEAAqE;oBACrE,gEAAgE;oBAChE,mEAAmE;oBACnE,uEAAuE;oBACvE,qEAAqE;oBACrE,oEAAoE;oBACpE,iEAAiE;oBACjE,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,YAAY;wBAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBAC9E,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,CAAC;gBACD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,cAAc,CAAC,EAAU,EAAE,MAAc,EAAE,MAAc;QACvD,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,oBAAoB;YAAE,OAAO;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,oBAAoB;YAAE,OAAO;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,MAAc,EAAE,KAAiB;QAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,SAAS,aAAa,CAAC,YAAoB;IACzC,MAAM,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACpD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;QAC/C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAgB;IACnC,OAAO;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI;QACvB,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS;QACjC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI;QAChD,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC7H,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAmB,KAAQ,EAAE,GAAG,IAAoB;IACnE,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAe,CAAC;AACtH,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,IAAI,GAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS;QAChF,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ;QAClF,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAA6B,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;IACjH,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"filesystem-remote.js","sourceRoot":"","sources":["../src/filesystem-remote.ts"],"names":[],"mappings":"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"}