@map-audio/pam-mcp-server 1.25.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +32 -10
  2. package/dist/audioAnalysis.d.ts +1 -1
  3. package/dist/audioAnalysis.js +3 -4
  4. package/dist/audioAnalysis.js.map +1 -1
  5. package/dist/bridge.d.ts +5 -1
  6. package/dist/bridge.js +48 -48
  7. package/dist/bridge.js.map +1 -1
  8. package/dist/daemon.d.ts +32 -0
  9. package/dist/daemon.js +871 -0
  10. package/dist/daemon.js.map +7 -0
  11. package/dist/drumSynth.d.ts +12 -0
  12. package/dist/drumSynth.js +15 -3
  13. package/dist/drumSynth.js.map +1 -1
  14. package/dist/drumSynthEngines.json +9 -1
  15. package/dist/{fgemma-format.d.ts → functiongemma-format.d.ts} +25 -7
  16. package/dist/{fgemma-format.js → functiongemma-format.js} +34 -11
  17. package/dist/functiongemma-format.js.map +1 -0
  18. package/dist/functiongemma-grammar.d.ts +14 -0
  19. package/dist/functiongemma-grammar.js +140 -0
  20. package/dist/functiongemma-grammar.js.map +1 -0
  21. package/dist/functiongemma-params.d.ts +33 -0
  22. package/dist/functiongemma-params.js +128 -0
  23. package/dist/functiongemma-params.js.map +1 -0
  24. package/dist/{fgemma-runner.d.ts → functiongemma-runner.d.ts} +8 -5
  25. package/dist/{fgemma-runner.js → functiongemma-runner.js} +107 -25
  26. package/dist/functiongemma-runner.js.map +1 -0
  27. package/dist/generated/kvWriteOptions.d.ts +20 -0
  28. package/dist/generated/kvWriteOptions.js +45 -0
  29. package/dist/generated/kvWriteOptions.js.map +1 -0
  30. package/dist/generated/variationSnapshot.js +0 -19
  31. package/dist/generated/variationSnapshot.js.map +1 -1
  32. package/dist/generativePlayerPresets.json +9 -0
  33. package/dist/generativePlayers.json +15 -1
  34. package/dist/launcher.d.ts +2 -0
  35. package/dist/launcher.js +36 -0
  36. package/dist/launcher.js.map +1 -0
  37. package/dist/manifest-mfx.json +12944 -311
  38. package/dist/manifest-msq.json +11446 -0
  39. package/dist/manifest.d.ts +2 -0
  40. package/dist/manifest.js +12 -27
  41. package/dist/manifest.js.map +1 -1
  42. package/dist/manifest.json +37047 -6487
  43. package/dist/mfxCombos.d.ts +2 -0
  44. package/dist/mfxCombos.js +179 -56
  45. package/dist/mfxCombos.js.map +1 -1
  46. package/dist/midiFile.d.ts +20 -6
  47. package/dist/midiFile.js +22 -14
  48. package/dist/midiFile.js.map +1 -1
  49. package/dist/mixAssist.d.ts +35 -0
  50. package/dist/mixAssist.js +250 -21
  51. package/dist/mixAssist.js.map +1 -1
  52. package/dist/patternLanes.d.ts +40 -0
  53. package/dist/patternLanes.js +108 -0
  54. package/dist/patternLanes.js.map +1 -0
  55. package/dist/players.d.ts +22 -0
  56. package/dist/players.js +70 -0
  57. package/dist/players.js.map +1 -1
  58. package/dist/presetSave.d.ts +3 -0
  59. package/dist/presetSave.js +13 -0
  60. package/dist/presetSave.js.map +1 -1
  61. package/dist/productProfile.d.ts +4 -4
  62. package/dist/productProfile.js +10 -1
  63. package/dist/productProfile.js.map +1 -1
  64. package/dist/qwen-format.d.ts +85 -0
  65. package/dist/qwen-format.js +355 -0
  66. package/dist/qwen-format.js.map +1 -0
  67. package/dist/registration.mjs +41 -0
  68. package/dist/server.js +2112 -470
  69. package/dist/server.js.map +1 -1
  70. package/dist/targetDenylist.json +20 -0
  71. package/dist/variationSessionKeys.json +7 -5
  72. package/package.json +13 -7
  73. package/dist/fgemma-format.js.map +0 -1
  74. package/dist/fgemma-runner.js.map +0 -1
  75. package/dist/manifest-cell1.json +0 -12968
@@ -1,20 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * PAM FunctionGemma runner — drives a (fine-tuned) FunctionGemma model against
4
- * the PAM MCP server using the model's native wire format (fgemma-format.ts),
4
+ * the PAM MCP server using the model's native wire format (functiongemma-format.ts),
5
5
  * NOT the OpenAI chat+tools API: raw /completions + our own renderer/parser is
6
6
  * deterministic and byte-matches training (agent.ts remains the big-model
7
7
  * OpenAI-style baseline harness).
8
8
  *
9
9
  * Modes:
10
- * REPL (default) npx tsx src/fgemma-runner.ts [--url http://localhost:1234/v1] [--model id]
11
- * Offline eval ... --eval ../fgemma-poc/out/eval.jsonl --out ../fgemma-poc/out/predictions.jsonl
12
- * Live e2e ... --live ../fgemma-poc/scenarios/live.jsonl [--gold]
10
+ * REPL (default) npx tsx src/functiongemma-runner.ts [--url http://localhost:1234/v1] [--model id]
11
+ * Offline eval ... --eval ../ml-research/out/dev.jsonl --out ../ml-research/out/predictions.jsonl
12
+ * Live e2e ... --live ../ml-research/data/seeds/live_scenarios.jsonl [--gold]
13
13
  *
14
14
  * Flags: --toolpack <path> --bos text|none (default none; use text if the
15
15
  * serving layer does NOT add BOS itself) --max-tokens N --final (generate a
16
16
  * model NL summary after write-tool calls; read-tools always continue)
17
17
  * --no-ctx (skip the live [ctx] session line).
18
+ * --grammar [--grammar-mode lazy|full] constrains calls to the toolpack's GBNF (functiongemma-grammar.ts);
19
+ * --probs [K] records P(first token = <start_function_call>) per eval row from a one-token probe;
20
+ * --token-probs streams the main request and records each generated token's [id, logprob, text].
18
21
  *
19
22
  * Session context (dataset v3): each command's user turn is prefixed with the
20
23
  * [ctx] state line built live from the bridge (get_transport +
@@ -22,7 +25,7 @@
22
25
  * additionally threads the last completed exchanges as history — the same
23
26
  * shapes the in-plugin executor produces. Within one command the runner does
24
27
  * up to MAX_ROUNDS call→response continuations inside the same model turn
25
- * (the trained repair/introspect pattern).
28
+ * (the trained repair/state_read pattern).
26
29
  */
27
30
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
28
31
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
@@ -30,9 +33,10 @@ import { createInterface } from "node:readline";
30
33
  import { readFileSync, writeFileSync } from "node:fs";
31
34
  import { resolve, dirname } from "node:path";
32
35
  import { fileURLToPath } from "node:url";
33
- import { STOP_SEQUENCES, buildGenerationPrompt, renderFunctionCall, renderFunctionResponse, parseFunctionCalls, truncateAtFabricatedResponse, withContext, } from "./fgemma-format.js";
36
+ import { STOP_SEQUENCES, buildGenerationPrompt, renderFunctionCall, renderFunctionResponse, parseFunctionCalls, truncateAtFabricatedResponse, withContext, } from "./functiongemma-format.js";
37
+ import { CALL_TRIGGER, buildToolGrammar, lazyGrammarRequest } from "./functiongemma-grammar.js";
34
38
  const __dirname = dirname(fileURLToPath(import.meta.url));
35
- const DEFAULT_TOOLPACK = resolve(__dirname, "../../fgemma-poc/out/toolpack.json");
39
+ const DEFAULT_TOOLPACK = resolve(__dirname, "../../ml-research/out/toolpack.json");
36
40
  const MAX_ROUNDS = 3;
37
41
  const RESULT_TRUNC = 400; // chars of tool-result JSON fed back as function response
38
42
  function parseArgs() {
@@ -53,6 +57,9 @@ function parseArgs() {
53
57
  outPath: get("--out"),
54
58
  livePath: get("--live"),
55
59
  gold: a.includes("--gold"),
60
+ grammar: a.includes("--grammar") ? (get("--grammar-mode") || "lazy") : null,
61
+ probs: a.includes("--probs") ? Number(/^\d+$/.test(get("--probs") ?? "") ? get("--probs") : 20) : 0,
62
+ tokenProbs: a.includes("--token-probs"),
56
63
  };
57
64
  }
58
65
  const config = parseArgs();
@@ -73,8 +80,10 @@ function resolveAlias(call, pack) {
73
80
  }
74
81
  const READ_TOOL_RE = /^(get_|list_|connection_status)/;
75
82
  // --- generation ----------------------------------------------------------
83
+ let grammarFields = {};
76
84
  async function complete(prompt) {
77
85
  const t0 = Date.now();
86
+ const stream = config.tokenProbs;
78
87
  const resp = await fetch(`${config.url}/completions`, {
79
88
  method: "POST",
80
89
  headers: { "Content-Type": "application/json" },
@@ -84,13 +93,58 @@ async function complete(prompt) {
84
93
  max_tokens: config.maxTokens,
85
94
  temperature: 0,
86
95
  stop: STOP_SEQUENCES,
87
- stream: false,
96
+ stream,
97
+ ...(stream ? { n_probs: 1 } : {}),
98
+ ...grammarFields,
88
99
  }),
89
100
  });
101
+ if (!resp.ok)
102
+ throw new Error(`LLM API error ${resp.status}: ${await resp.text()}`);
103
+ if (!stream) {
104
+ const data = (await resp.json());
105
+ return { text: data.choices[0].text, ms: Date.now() - t0 };
106
+ }
107
+ // Streamed chunks carry every token's probability; the final non-streamed response trims them by the stop word.
108
+ let text = "";
109
+ let buffer = "";
110
+ const tokens = [];
111
+ const decoder = new TextDecoder();
112
+ for await (const chunk of resp.body) {
113
+ buffer += decoder.decode(chunk, { stream: true });
114
+ for (let nl = buffer.indexOf("\n"); nl >= 0; nl = buffer.indexOf("\n")) {
115
+ const line = buffer.slice(0, nl).trim();
116
+ buffer = buffer.slice(nl + 1);
117
+ if (!line.startsWith("data:") || line.endsWith("[DONE]"))
118
+ continue;
119
+ const choice = JSON.parse(line.slice(5)).choices?.[0];
120
+ text += choice?.text ?? "";
121
+ for (const t of choice?.logprobs?.content ?? []) {
122
+ tokens.push([t.id, Math.round(t.logprob * 1e4) / 1e4, t.top_logprobs?.[0]?.id === t.id ? t.top_logprobs[0].token : t.token]);
123
+ }
124
+ }
125
+ }
126
+ return { text, ms: Date.now() - t0, tokens };
127
+ }
128
+ /** The unconstrained first-token distribution; a separate request because llama-server trims
129
+ * final-response probs by the stop word's text tokenization, which can eat a short call's first token. */
130
+ async function probeFirstToken(prompt) {
131
+ const t0 = Date.now();
132
+ const resp = await fetch(`${config.url}/completions`, {
133
+ method: "POST",
134
+ headers: { "Content-Type": "application/json" },
135
+ body: JSON.stringify({ model: config.model, prompt, max_tokens: 1, temperature: 0, n_probs: config.probs, stream: false }),
136
+ });
90
137
  if (!resp.ok)
91
138
  throw new Error(`LLM API error ${resp.status}: ${await resp.text()}`);
92
139
  const data = (await resp.json());
93
- return { text: data.choices[0].text, ms: Date.now() - t0 };
140
+ const top = (data.choices[0].logprobs?.content?.[0]?.top_logprobs ?? []).map((t) => ({
141
+ token: t.token,
142
+ p: Math.exp(t.logprob),
143
+ }));
144
+ if (top.length === 0)
145
+ throw new Error("probe returned no top_logprobs (server too old, or n_probs ignored)");
146
+ const call = top.find((t) => t.token === CALL_TRIGGER);
147
+ return { p_call: call?.p ?? 0, top: top.slice(0, 5), probe_ms: Date.now() - t0 };
94
148
  }
95
149
  // --- MCP -----------------------------------------------------------------
96
150
  async function createMcpClient() {
@@ -99,7 +153,7 @@ async function createMcpClient() {
99
153
  args: ["tsx", resolve(__dirname, "server.ts")],
100
154
  stderr: "inherit",
101
155
  });
102
- const client = new Client({ name: "pam-fgemma-runner", version: "1.0.0" });
156
+ const client = new Client({ name: "pam-functiongemma-runner", version: "1.0.0" });
103
157
  await client.connect(transport);
104
158
  return client;
105
159
  }
@@ -191,7 +245,7 @@ async function runCommandExec(userText, tools, client, log, opts = {}) {
191
245
  const { text: rawFull, ms } = await complete(prompt);
192
246
  const raw = truncateAtFabricatedResponse(rawFull);
193
247
  if (raw !== rawFull) {
194
- trace.quarantineHistory = true;
248
+ trace.droppedHistory = true;
195
249
  log(" (dropped fabricated function-response continuation)");
196
250
  }
197
251
  const calls = parseFunctionCalls(raw);
@@ -203,7 +257,7 @@ async function runCommandExec(userText, tools, client, log, opts = {}) {
203
257
  }
204
258
  const unknown = calls.filter((c) => !declared.has(c.name));
205
259
  if (unknown.length) {
206
- trace.quarantineHistory = true;
260
+ trace.droppedHistory = true;
207
261
  log(` refusing undeclared tool(s): ${unknown.map((c) => c.name).join(", ")}`);
208
262
  return trace;
209
263
  }
@@ -213,7 +267,7 @@ async function runCommandExec(userText, tools, client, log, opts = {}) {
213
267
  for (const call of calls) {
214
268
  const signature = `${call.name} ${JSON.stringify(call.arguments)}`;
215
269
  if (failedCalls.has(signature)) {
216
- trace.quarantineHistory = true;
270
+ trace.droppedHistory = true;
217
271
  log(` stopped — the model repeated a call that already failed (${call.name}).`);
218
272
  return trace;
219
273
  }
@@ -221,7 +275,7 @@ async function runCommandExec(userText, tools, client, log, opts = {}) {
221
275
  const { text, isError } = await execCall(client, call, tools);
222
276
  if (isError) {
223
277
  failedCalls.add(signature);
224
- trace.quarantineHistory = true;
278
+ trace.droppedHistory = true;
225
279
  }
226
280
  trace.executed.push({ call, resultText: text, isError });
227
281
  log(` → ${text.length > 200 ? text.slice(0, 200) + "…" : text || "(ok)"}`);
@@ -272,6 +326,23 @@ function historyFromMessages(messages, lastUser) {
272
326
  }
273
327
  return history;
274
328
  }
329
+ /** An assistant turn whose own calls came back as errors (a repair row's scripted first try). */
330
+ function failedTurn(messages, index) {
331
+ const names = new Set((messages[index].tool_calls ?? []).map((tc) => tc.function.name));
332
+ for (const m of messages.slice(index + 1)) {
333
+ if (m.role !== "tool")
334
+ break;
335
+ for (const item of Array.isArray(m.content) ? m.content : [m.content]) {
336
+ if (!item || typeof item !== "object")
337
+ continue;
338
+ const { name, response } = item;
339
+ const value = (response ?? item);
340
+ if (name && names.has(name) && typeof value === "object" && value && (value.error || value.isError))
341
+ return true;
342
+ }
343
+ }
344
+ return false;
345
+ }
275
346
  async function runEval(tools) {
276
347
  const rows = readFileSync(config.evalPath, "utf-8")
277
348
  .trim()
@@ -282,16 +353,15 @@ async function runEval(tools) {
282
353
  const latencies = [];
283
354
  for (let i = 0; i < rows.length; i++) {
284
355
  const row = rows[i];
285
- // Replay to the LAST user turn (followup rows carry a first exchange as
286
- // history); gold = the first assistant message after it. Rows carry their
287
- // own [ctx] line inside the user content — nothing to inject here.
356
+ // Replay to the LAST user turn; gold = the first assistant turn after it that did not
357
+ // fail, so a repair row scores the working call. Rows carry their own [ctx] line.
288
358
  const lastUser = row.messages.reduce((acc, m, idx) => (m.role === "user" ? idx : acc), -1);
289
359
  const user = row.messages[lastUser];
290
- const firstAssistant = row.messages.slice(lastUser + 1).find((m) => m.role === "assistant");
360
+ const firstAssistant = row.messages.find((m, idx) => idx > lastUser && m.role === "assistant" && !failedTurn(row.messages, idx));
291
361
  const utterance = String(user?.content ?? "");
292
362
  const gold = firstAssistant?.tool_calls
293
363
  ? firstAssistant.tool_calls.map((tc) => ({ name: tc.function.name, arguments: tc.function.arguments }))
294
- : null; // null = abstain expected
364
+ : null; // null = an irrelevance row: no call expected
295
365
  // Protocol: always generate against the FULL toolpack (deployment prompt),
296
366
  // regardless of the subset recorded in the row.
297
367
  const prompt = buildGenerationPrompt(tools, utterance, {
@@ -300,25 +370,33 @@ async function runEval(tools) {
300
370
  });
301
371
  let raw = "";
302
372
  let ms = -1;
373
+ let probs = {};
374
+ let tokenLp = {};
303
375
  try {
304
376
  const r = await complete(prompt);
305
377
  raw = r.text;
306
378
  ms = r.ms;
307
379
  latencies.push(ms);
380
+ if (r.tokens)
381
+ tokenLp = { token_lp: r.tokens };
382
+ if (config.probs > 0)
383
+ probs = await probeFirstToken(prompt);
308
384
  }
309
385
  catch (e) {
310
386
  raw = `__GENERATION_ERROR__ ${e.message}`;
311
387
  }
312
388
  const calls = parseFunctionCalls(raw);
313
- out.push(JSON.stringify({ idx: i, meta: row._meta, utterance, gold, raw, calls, ms }));
389
+ out.push(JSON.stringify({ idx: i, meta: row._meta, utterance, gold, raw, calls, ms, ...probs, ...tokenLp }));
314
390
  if ((i + 1) % 25 === 0)
315
391
  console.error(`eval ${i + 1}/${rows.length}`);
316
392
  }
317
393
  writeFileSync(outPath, out.join("\n") + "\n");
318
394
  latencies.sort((a, b) => a - b);
319
395
  const p = (q) => latencies[Math.min(latencies.length - 1, Math.floor(q * latencies.length))] ?? -1;
320
- console.log(`wrote ${out.length} predictions -> ${outPath}\nlatency ms p50=${p(0.5)} p95=${p(0.95)} (n=${latencies.length})`);
321
- console.log("score with: python3 packages/fgemma-poc/eval_offline.py " + outPath);
396
+ const total = latencies.reduce((sum, ms) => sum + ms, 0);
397
+ console.log(`wrote ${out.length} predictions -> ${outPath}\nlatency ms p50=${p(0.5)} p95=${p(0.95)} total=${total} (n=${latencies.length})` +
398
+ (config.grammar ? ` grammar=${config.grammar}` : ""));
399
+ console.log("score with: uv run --project packages/ml-research pam-ml scoring calls " + outPath);
322
400
  }
323
401
  function callMatches(call, tool, argsSubset) {
324
402
  if (call.name !== tool)
@@ -362,7 +440,7 @@ async function runLive(tools) {
362
440
  let this_ok = false;
363
441
  let detail = "";
364
442
  const allCalls = trace.rounds.flatMap((r) => r.calls);
365
- if (ex.kind === "no_calls") {
443
+ if (ex.kind === "irrelevance") {
366
444
  this_ok = allCalls.length === 0;
367
445
  detail = this_ok ? "" : `emitted ${allCalls.map((c) => c.name).join(",")}`;
368
446
  }
@@ -437,7 +515,7 @@ async function runRepl(tools) {
437
515
  history: history.slice(-HISTORY_MAX_EXCHANGES),
438
516
  failedCalls,
439
517
  });
440
- if (!trace.quarantineHistory && trace.modelTurn && trace.modelTurn.length <= HISTORY_TURN_MAX_CHARS) {
518
+ if (!trace.droppedHistory && trace.modelTurn && trace.modelTurn.length <= HISTORY_TURN_MAX_CHARS) {
441
519
  history.push({ user: input, model: trace.modelTurn });
442
520
  }
443
521
  if (trace.finalText)
@@ -462,6 +540,10 @@ async function runRepl(tools) {
462
540
  }
463
541
  async function main() {
464
542
  const tools = loadToolpack();
543
+ if (config.grammar) {
544
+ const grammar = buildToolGrammar(tools, { mode: config.grammar });
545
+ grammarFields = config.grammar === "lazy" ? lazyGrammarRequest(grammar) : { grammar };
546
+ }
465
547
  if (config.evalPath)
466
548
  return runEval(tools);
467
549
  if (config.livePath)
@@ -472,4 +554,4 @@ main().catch((e) => {
472
554
  console.error("Fatal:", e.message);
473
555
  process.exit(1);
474
556
  });
475
- //# sourceMappingURL=fgemma-runner.js.map
557
+ //# sourceMappingURL=functiongemma-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functiongemma-runner.js","sourceRoot":"","sources":["../src/functiongemma-runner.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAKL,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,4BAA4B,EAC5B,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAoB,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElH,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC;AACnF,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,0DAA0D;AAmBpF,SAAS,SAAS;IAChB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC,CAAC;IACF,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,0BAA0B;QAC1E,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB;QAC7E,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,gBAAgB;QAC/C,GAAG,EAAG,GAAG,CAAC,OAAO,CAAqB,IAAI,MAAM;QAChD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC;QAC7C,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5B,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC7B,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC;QACvB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;QACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,gBAAgB,CAAiB,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QAC5F,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnG,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAM3B,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC,KAAmB,CAAC;AACjC,CAAC;AAED,+EAA+E;AAC/E,SAAS,YAAY,CAAC,IAAkB,EAAE,IAAgB;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAClC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAgD,CAAC;QACjF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,YAAY,GAAG,iCAAiC,CAAC;AAEvD,4EAA4E;AAE5E,IAAI,aAAa,GAA4B,EAAE,CAAC;AAIhD,KAAK,UAAU,QAAQ,CAAC,MAAc;IACpC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,cAAc,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM;YACN,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,cAAc;YACpB,MAAM;YACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,GAAG,aAAa;SACjB,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAoC,CAAC;QACpE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;IAC7D,CAAC;IACD,gHAAgH;IAChH,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,IAA4C,EAAE,CAAC;QAC5E,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,KAAK,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACnE,MAAM,MAAM,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAkC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/H,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAaD;2GAC2G;AAC3G,KAAK,UAAU,eAAe,CAAC,MAAc;IAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,cAAc,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;KAC3H,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;KACvB,CAAC,CAAC,CAAC;IACJ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAC7G,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;IACvD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACnF,CAAC;AAED,4EAA4E;AAE5E,KAAK,UAAU,eAAe;IAC5B,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;QACzC,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC9C,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAClF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,MAAc,EACd,IAAkB,EAClB,IAAgB;IAEhB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,UAAU;aACpB,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aAClD,GAAG,CAAC,CAAC,CAAkC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;aACzD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,eAAgB,CAAW,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkB,EAAE,OAAgB;IAC7D,IAAI,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACjC,OAAO,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC,CAAE,MAAkC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;QAC/G,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;IACvD,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E;;;;+EAI+E;AAC/E,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,KAAiB;IAC3D,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAClF,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACxF,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAA6D,CAAC;QACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAkE,CAAC;QACrG,wEAAwE;QACxE,yEAAyE;QACzE,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC1G,MAAM,UAAU,GAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAmC,CAAC,gBAAgB,CAAC;YAC1F,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC1E,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC1E,MAAM,GAAG,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC;YACjC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC;YAC1D,MAAM;YACN,GAAG,EAAE,IAAI;YACT,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;SACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAcD,KAAK,UAAU,cAAc,CAC3B,QAAgB,EAChB,KAAiB,EACjB,MAAc,EACd,GAAwB,EACxB,OAAkG,EAAE;IAEpG,IAAI,MAAM,GAAG,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;QACzE,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;IACH,MAAM,KAAK,GAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,2EAA2E;IAC3E,8EAA8E;IAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG,EAAU,CAAC;IAE1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;QAChD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YAC5B,GAAG,CAAC,uDAAuD,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAEtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YAC5B,GAAG,CAAC,kCAAkC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,YAAY,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnE,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,GAAG,CAAC,8DAA8D,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;gBACjF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9D,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC3B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACzD,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;YAC5E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACrF,YAAY,IAAI,QAAQ,CAAC;YACzB,SAAS,IAAI,QAAQ,CAAC;YACtB,IAAI,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,YAAY,GAAG,IAAI,CAAC;QACnE,CAAC;QACD,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;QACtE,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACjD,MAAM,IAAI,YAAY,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAaD;;yDAEyD;AACzD,SAAS,mBAAmB,CAAC,QAA6B,EAAE,QAAgB;IAC1E,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B;IACxC,OAAO,CAAC,GAAG,QAAQ,EAAE,CAAC;QACpB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChC,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnD,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC3C,KAAK,IAAI,CAAC,CAAC,UAAU;qBAClB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;qBAC7F,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC/C,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3E,MAAM,CAAC,GAAG,CAAC,CAAC,OAA8C,CAAC;gBAC3D,KAAK,IAAI,sBAAsB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtD,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iGAAiG;AACjG,SAAS,UAAU,CAAC,QAA6B,EAAE,KAAa;IAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACxF,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAChD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAA6C,CAAC;YACzE,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,IAAI,CAA4B,CAAC;YAC5D,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;QACnH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,KAAiB;IACtC,MAAM,IAAI,GAAc,YAAY,CAAC,MAAM,CAAC,QAAS,EAAE,OAAO,CAAC;SAC5D,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAS,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC1F,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,sFAAsF;QACtF,kFAAkF;QAClF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CACvF,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,cAAc,EAAE,UAAU;YACrC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;YACvG,CAAC,CAAC,IAAI,CAAC,CAAC,8CAA8C;QACxD,2EAA2E;QAC3E,gDAAgD;QAChD,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE;YACrD,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;SACrD,CAAC,CAAC;QACH,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACZ,IAAI,KAAK,GAA4C,EAAE,CAAC;QACxD,IAAI,OAAO,GAAkC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;YACb,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YACV,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,IAAI,CAAC,CAAC,MAAM;gBAAE,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC;gBAAE,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,GAAG,wBAAyB,CAAW,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC;QACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtC,GAAG,CAAC,IAAI,CACN,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CACnG,CAAC;QACF,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3G,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CACT,SAAS,GAAG,CAAC,MAAM,mBAAmB,OAAO,oBAAoB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,OAAO,SAAS,CAAC,MAAM,GAAG;QAC7H,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACvD,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,yEAAyE,GAAG,OAAO,CAAC,CAAC;AACnG,CAAC;AAmBD,SAAS,WAAW,CAAC,IAAkB,EAAE,IAAY,EAAE,UAAoC;IACzF,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CACrC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAE,IAAI,CAAC,SAAqC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CACjG,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,KAAiB;IACtC,MAAM,SAAS,GAAmB,YAAY,CAAC,MAAM,CAAC,QAAS,EAAE,OAAO,CAAC;SACtE,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACvC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/E,IAAI,KAAmB,CAAC;QACxB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YACvF,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjD,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC9D,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBACzD,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;YAC9E,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,sEAAsE;YACtE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9C,KAAK,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC9B,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;gBAChC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7E,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,IAAK,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBACzE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,CAAC;YACjG,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC7F,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBACrE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,YAAY,EAAE,CAAC,IAAI,SAAS,CAAC;YACtE,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;oBACZ,QAAQ,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,EAAE,GAAG,KAAK,CAAC;oBACX,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CACT,WAAW,IAAI,IAAI,SAAS,CAAC,MAAM,YAAY,QAAQ,eAAe,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAClI,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,8EAA8E;AAE9E,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,KAAK,UAAU,OAAO,CAAC,KAAiB;IACtC,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACvC,OAAO,CAAC,GAAG,CACT,6CAA6C,KAAK,CAAC,MAAM,iBAAiB,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,GAAG,EAAE,CAC1G,CAAC;IACF,uEAAuE;IACvE,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5G,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtE,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtE,SAAS;QACX,CAAC;QACD,IAAI,KAAK,KAAK,OAAO;YAAE,MAAM;QAC7B,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACnB,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtE,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC9E,GAAG;gBACH,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC;gBAC9C,WAAW;aACZ,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;gBACjG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,KAAK,CAAC,SAAS;gBAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;iBACtE,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC9D,OAAO,CAAC,GAAG,CACT,uBAAuB,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,mBAAmB,CAClG,CAAC;YACJ,CAAC;;gBAAM,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,mBAAmB,KAAK,CAAC,MAAM,CAAC,MAAM,kBAAkB,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,yBAA0B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACxE,CAAC;IACD,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,aAAa,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface KvWriteOptions {
2
+ shouldDispatch: boolean;
3
+ syncKVResources: boolean;
4
+ syncConfigResources: boolean;
5
+ skipFileLoadingIfUnchanged: boolean;
6
+ resyncKVAfterDispatch: boolean;
7
+ updateParameters: boolean;
8
+ clearRecordingSession: boolean;
9
+ broadcastFollowers: boolean;
10
+ }
11
+ /** applyStateUpdate / applyStateDelta: graph dispatch, KV + config sync, followers told. */
12
+ export declare const STATE_UPDATE_KV_OPTIONS: Readonly<KvWriteOptions>;
13
+ /** updateCellConfig: live-polled from cell config KV, so no graph dispatch. */
14
+ export declare const CELL_CONFIG_KV_OPTIONS: Readonly<KvWriteOptions>;
15
+ /** updateEffectConfig: CELL_CONFIG plus the follower broadcast. */
16
+ export declare const EFFECT_CONFIG_KV_OPTIONS: Readonly<KvWriteOptions>;
17
+ /** updateMasterConfig: every master key is live-polled from master_config; a rebuild only risks dropouts. */
18
+ export declare const MASTER_CONFIG_KV_OPTIONS: Readonly<KvWriteOptions>;
19
+ /** updatePattern: sequence lanes adopt the KV publication; parameters and config are untouched. */
20
+ export declare const PATTERN_EDIT_KV_OPTIONS: Readonly<KvWriteOptions>;
@@ -0,0 +1,45 @@
1
+ // GENERATED COPY of shared/kvWriteOptions.ts — do not edit here.
2
+ // Regenerate: node scripts/generate-variation-session-keys.mjs
3
+ /** applyStateUpdate / applyStateDelta: graph dispatch, KV + config sync, followers told. */
4
+ export const STATE_UPDATE_KV_OPTIONS = {
5
+ shouldDispatch: true,
6
+ syncKVResources: true,
7
+ syncConfigResources: true,
8
+ skipFileLoadingIfUnchanged: true,
9
+ resyncKVAfterDispatch: true,
10
+ updateParameters: true,
11
+ clearRecordingSession: true,
12
+ broadcastFollowers: true
13
+ };
14
+ /** updateCellConfig: live-polled from cell config KV, so no graph dispatch. */
15
+ export const CELL_CONFIG_KV_OPTIONS = {
16
+ shouldDispatch: false,
17
+ syncKVResources: true,
18
+ syncConfigResources: true,
19
+ skipFileLoadingIfUnchanged: true,
20
+ resyncKVAfterDispatch: false,
21
+ updateParameters: true,
22
+ clearRecordingSession: false,
23
+ broadcastFollowers: false
24
+ };
25
+ /** updateEffectConfig: CELL_CONFIG plus the follower broadcast. */
26
+ export const EFFECT_CONFIG_KV_OPTIONS = {
27
+ ...CELL_CONFIG_KV_OPTIONS,
28
+ broadcastFollowers: true
29
+ };
30
+ /** updateMasterConfig: every master key is live-polled from master_config; a rebuild only risks dropouts. */
31
+ export const MASTER_CONFIG_KV_OPTIONS = {
32
+ ...CELL_CONFIG_KV_OPTIONS
33
+ };
34
+ /** updatePattern: sequence lanes adopt the KV publication; parameters and config are untouched. */
35
+ export const PATTERN_EDIT_KV_OPTIONS = {
36
+ shouldDispatch: true,
37
+ syncKVResources: true,
38
+ syncConfigResources: false,
39
+ skipFileLoadingIfUnchanged: true,
40
+ resyncKVAfterDispatch: false,
41
+ updateParameters: false,
42
+ clearRecordingSession: false,
43
+ broadcastFollowers: false
44
+ };
45
+ //# sourceMappingURL=kvWriteOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kvWriteOptions.js","sourceRoot":"","sources":["../../src/generated/kvWriteOptions.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,+DAA+D;AAgB/D,4FAA4F;AAC5F,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,mBAAmB,EAAE,IAAI;IACzB,0BAA0B,EAAE,IAAI;IAChC,qBAAqB,EAAE,IAAI;IAC3B,gBAAgB,EAAE,IAAI;IACtB,qBAAqB,EAAE,IAAI;IAC3B,kBAAkB,EAAE,IAAI;CACzB,CAAA;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAA6B;IAC9D,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,IAAI;IACrB,mBAAmB,EAAE,IAAI;IACzB,0BAA0B,EAAE,IAAI;IAChC,qBAAqB,EAAE,KAAK;IAC5B,gBAAgB,EAAE,IAAI;IACtB,qBAAqB,EAAE,KAAK;IAC5B,kBAAkB,EAAE,KAAK;CAC1B,CAAA;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAA6B;IAChE,GAAG,sBAAsB;IACzB,kBAAkB,EAAE,IAAI;CACzB,CAAA;AAED,6GAA6G;AAC7G,MAAM,CAAC,MAAM,wBAAwB,GAA6B;IAChE,GAAG,sBAAsB;CAC1B,CAAA;AAED,mGAAmG;AACnG,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,mBAAmB,EAAE,KAAK;IAC1B,0BAA0B,EAAE,IAAI;IAChC,qBAAqB,EAAE,KAAK;IAC5B,gBAAgB,EAAE,KAAK;IACvB,qBAAqB,EAAE,KAAK;IAC5B,kBAAkB,EAAE,KAAK;CAC1B,CAAA"}
@@ -1,24 +1,5 @@
1
1
  // GENERATED COPY of shared/variationSnapshot.ts — do not edit here.
2
2
  // Regenerate: node scripts/generate-variation-session-keys.mjs
3
- // The variation-snapshot shaping both save paths run.
4
- //
5
- // The UI (interface/src/interop.ts) and MCP (packages/mcp-server) both shape
6
- // through here, because two implementations drift: the MCP side was missing 16
7
- // session keys, the visual-param strip and the LFO-generator reconcile, so a
8
- // variation saved over MCP was not the same bytes as one saved from the window.
9
- //
10
- // This is the PURE half. It takes state plus the contract data and returns the
11
- // shaped snapshot, so both callers produce identical bytes for identical input
12
- // (pinned by interface/test/variationSnapshotParity.test.ts).
13
- //
14
- // The IMPURE half stays per-caller and is genuinely different: the UI can await
15
- // `refreshLoadedPluginStateBlobs()` and stamp hosted-plugin identity/bypass from
16
- // `pluginHostStore`; the headless bridge cannot reach either, and says so on the
17
- // save result instead of writing a silently lossy slot.
18
- //
19
- // GENERATED COPY: packages/mcp-server/src/generated/variationSnapshot.ts is
20
- // produced from this file by scripts/generate-variation-session-keys.mjs.
21
- // Edit THIS file; the drift check fails if the copy is stale.
22
3
  /**
23
4
  * Force each `lfo{g}_enabled` flag to match whether that generator still has a
24
5
  * live link.
@@ -1 +1 @@
1
- {"version":3,"file":"variationSnapshot.js","sourceRoot":"","sources":["../../src/generated/variationSnapshot.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,+DAA+D;AAC/D,sDAAsD;AACtD,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,gFAAgF;AAChF,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,8DAA8D;AAC9D,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,wDAAwD;AACxD,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,8DAA8D;AA2B9D;;;;;;;GAOG;AACH,MAAM,UAAU,iCAAiC,CAC/C,QAAiC,EACjC,iBAAyB;IAEzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAM;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAiB,CAAA;IAEvC,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,IAAI,iBAAiB,EAAE,cAAc,EAAE,EAAE,CAAC;QACnF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,EAAE,iBAAiB,KAAK,cAAc;YACzC,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC;YACzB,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ;YAChC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CACzB,CAAA;QACD,QAAQ,CAAC,MAAM,cAAc,UAAU,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAA8B,EAC9B,QAAmC,EACnC,UAAoC,EAAE;IAEtC,MAAM,QAAQ,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAA;IAEtD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC5D,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,aAAa;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC9D,OAAO,QAAQ,CAAC,gBAAgB,CAAA;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,cAAc;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvE,IAAI,OAAO,CAAC,WAAW;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAA;IAE7C,iCAAiC,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IACvE,OAAO,QAAQ,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"variationSnapshot.js","sourceRoot":"","sources":["../../src/generated/variationSnapshot.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,+DAA+D;AA+C/D;;;;;;;GAOG;AACH,MAAM,UAAU,iCAAiC,CAC/C,QAAiC,EACjC,iBAAyB;IAEzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAM;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAiB,CAAA;IAEvC,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,IAAI,iBAAiB,EAAE,cAAc,EAAE,EAAE,CAAC;QACnF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,EAAE,iBAAiB,KAAK,cAAc;YACzC,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC;YACzB,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ;YAChC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CACzB,CAAA;QACD,QAAQ,CAAC,MAAM,cAAc,UAAU,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAA8B,EAC9B,QAAmC,EACnC,UAAoC,EAAE;IAEtC,MAAM,QAAQ,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAA;IAEtD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC5D,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,aAAa;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC9D,OAAO,QAAQ,CAAC,gBAAgB,CAAA;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,cAAc;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvE,IAAI,OAAO,CAAC,WAAW;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAA;IAE7C,iCAAiC,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IACvE,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -65,6 +65,15 @@
65
65
  { "name": "Filled In", "density": 0.72, "mutate": 0, "p": [0.35, 0.5] },
66
66
  { "name": "Breathing", "density": 0.5, "mutate": 0.35, "p": [0.5, 0.4] },
67
67
  { "name": "Skeleton", "density": 0.16, "mutate": 0.12, "p": [0.9, 0.85] }
68
+ ],
69
+ "10": [
70
+ { "name": "Conga Tumbao", "density": 0.7, "mutate": 0, "p": [0, 0, 0, 0.5] },
71
+ { "name": "Bongo Martillo", "density": 0.7, "mutate": 0, "p": [0.16666666666666666, 0, 0, 0.5] },
72
+ { "name": "Cascara 3-2", "density": 0.7, "mutate": 0, "p": [0.3333333333333333, 0, 0, 0.5] },
73
+ { "name": "Son Clave 3-2", "density": 0.7, "mutate": 0, "p": [0.5, 0, 0, 0.5] },
74
+ { "name": "Djembe Kuku", "density": 0.7, "mutate": 0, "p": [0.6666666666666666, 0, 0, 0.5] },
75
+ { "name": "Darbuka Maqsum", "density": 0.7, "mutate": 0, "p": [0.8333333333333334, 0, 0, 0.5] },
76
+ { "name": "Tabla Keherwa", "density": 0.7, "mutate": 0, "p": [1, 0, 0, 0.5] }
68
77
  ]
69
78
  }
70
79
  }
@@ -65,7 +65,7 @@
65
65
  "tag": "melodic",
66
66
  "replay": true,
67
67
  "doc": "Order-1 chain over scale-degree intervals learned from the cell's own drawn pattern, blended toward the metric-hierarchy prior when the clip is thin. P2 is the temperature (argmax replay to uniform).",
68
- "blurb": "Learns from the pattern you drew and improvises around it. Fidelity holds the line, Temp loosens it.",
68
+ "blurb": "Learns from the pattern you drew and improvises around it. Fidelity holds the line, Freedom loosens it.",
69
69
  "defaults": { "density": 0.6, "mutate": 0.3 },
70
70
  "slots": [
71
71
  { "label": "Fidelity", "default": 0.7, "hint": "How closely it follows the pattern it learnt" },
@@ -129,6 +129,20 @@
129
129
  { "label": "Accent", "default": 0.5, "hint": "How far the off-beats duck under the strong beats" },
130
130
  { "label": "Gate", "default": 0.35, "hint": "Note length, as a share of the step" }
131
131
  ]
132
+ },
133
+ "10": {
134
+ "name": "PERC",
135
+ "tag": "drum",
136
+ "replay": false,
137
+ "doc": "A hand drum's traditional part from the idiom table in shared/randomizer/patternBank.json (#1138), the same parts the pattern dice writes for a perc cell holding that drum. Drum picks the family (its detents are that table's order), Rhythm the form within it, wrapping where a family has fewer. The part's own strokes are its gate weights, accent over hit over ghost, so density thins ghosts first and the accents go last. Ghosts adds low strokes on the empty 16ths and, under each hit, an inverse twin that sounds once density takes the hit; Feel pushes or drags the whole part; MUTATE jitters the weights per cycle.",
138
+ "blurb": "Plays a hand drum's traditional part: tumbao, martillo, cascara, clave, kuku, maqsum, keherwa. Pick the drum, then the rhythm.",
139
+ "defaults": { "density": 0.7, "mutate": 0.0 },
140
+ "slots": [
141
+ { "label": "Drum", "default": 0.0, "steps": 7, "stepLabels": ["Conga", "Bongo", "Timbale", "Clave", "Djembe", "Darbuka", "Tabla"] },
142
+ { "label": "Rhythm", "default": 0.0, "steps": 5, "stepLabels": ["1", "2", "3", "4", "5"] },
143
+ { "label": "Ghosts", "default": 0.0, "hint": "How many quiet extra strokes fill the gaps" },
144
+ { "label": "Feel", "default": 0.5, "center": true, "hint": "Drag behind or push ahead of the beat — the centre is straight" }
145
+ ]
132
146
  }
133
147
  }
134
148
  }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from "node:child_process";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { dirname, isAbsolute, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ const args = process.argv.slice(2);
7
+ if (args.includes("--version") || args.includes("-v")) {
8
+ const metadata = JSON.parse(readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), "../package.json"), "utf8"));
9
+ console.log(metadata.version);
10
+ }
11
+ else {
12
+ const configured = process.env.PAM_CLI_EXECUTABLE;
13
+ if (configured && !isAbsolute(configured))
14
+ throw new Error("PAM_CLI_EXECUTABLE must be absolute");
15
+ const installed = "/Library/Application Support/MAP Audio/PAM/bin/pam";
16
+ const executable = configured ?? (process.platform === "darwin" && existsSync(installed) ? installed : "pam");
17
+ const child = spawn(executable, ["mcp", ...args], { stdio: "inherit" });
18
+ const forward = (signal) => child.kill(signal);
19
+ process.on("SIGINT", forward);
20
+ process.on("SIGTERM", forward);
21
+ child.on("error", (error) => {
22
+ process.off("SIGINT", forward);
23
+ process.off("SIGTERM", forward);
24
+ if (!configured && error.code === "ENOENT") {
25
+ console.error("[pam-mcp] no installed pam CLI; running the bundled PAM MCP server");
26
+ void import("./server.js");
27
+ return;
28
+ }
29
+ console.error(`plugin_unavailable: install a current PAM with pam mcp, or set PAM_CLI_EXECUTABLE to its absolute path (${error.message})`);
30
+ process.exitCode = 1;
31
+ });
32
+ child.on("exit", (code, signal) => {
33
+ process.exitCode = code ?? (signal ? 1 : 0);
34
+ });
35
+ }
36
+ //# sourceMappingURL=launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACvH,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;KAAM,CAAC;IACN,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAClD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAClG,MAAM,SAAS,GAAG,oDAAoD,CAAC;IACvE,MAAM,UAAU,GAAG,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9G,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,CAAC,MAAsB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;QACjD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACpF,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,2GAA2G,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAC3I,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAChC,OAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC"}