@mcptoolshop/roll 1.0.0 → 2.0.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 (69) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +105 -137
  3. package/dist/analyze/distribution.d.ts.map +1 -1
  4. package/dist/analyze/distribution.js +249 -33
  5. package/dist/analyze/distribution.js.map +1 -1
  6. package/dist/bridge/handler.d.ts +14 -0
  7. package/dist/bridge/handler.d.ts.map +1 -0
  8. package/dist/bridge/handler.js +163 -0
  9. package/dist/bridge/handler.js.map +1 -0
  10. package/dist/bridge/protocol.d.ts +53 -0
  11. package/dist/bridge/protocol.d.ts.map +1 -0
  12. package/dist/bridge/protocol.js +8 -0
  13. package/dist/bridge/protocol.js.map +1 -0
  14. package/dist/bridge/server.d.ts +3 -0
  15. package/dist/bridge/server.d.ts.map +1 -0
  16. package/dist/bridge/server.js +71 -0
  17. package/dist/bridge/server.js.map +1 -0
  18. package/dist/display/format.d.ts.map +1 -1
  19. package/dist/display/format.js +28 -3
  20. package/dist/display/format.js.map +1 -1
  21. package/dist/engine/pipeline.d.ts +27 -0
  22. package/dist/engine/pipeline.d.ts.map +1 -0
  23. package/dist/engine/pipeline.js +304 -0
  24. package/dist/engine/pipeline.js.map +1 -0
  25. package/dist/engine/roller.d.ts +3 -0
  26. package/dist/engine/roller.d.ts.map +1 -1
  27. package/dist/engine/roller.js +82 -125
  28. package/dist/engine/roller.js.map +1 -1
  29. package/dist/index.d.ts +9 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +9 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/mcp/server.d.ts +3 -0
  34. package/dist/mcp/server.d.ts.map +1 -0
  35. package/dist/mcp/server.js +182 -0
  36. package/dist/mcp/server.js.map +1 -0
  37. package/dist/mcp/tools.d.ts +12 -0
  38. package/dist/mcp/tools.d.ts.map +1 -0
  39. package/dist/mcp/tools.js +106 -0
  40. package/dist/mcp/tools.js.map +1 -0
  41. package/dist/parser/ast.d.ts +7 -1
  42. package/dist/parser/ast.d.ts.map +1 -1
  43. package/dist/parser/lexer.d.ts.map +1 -1
  44. package/dist/parser/lexer.js +138 -45
  45. package/dist/parser/lexer.js.map +1 -1
  46. package/dist/parser/parser.d.ts.map +1 -1
  47. package/dist/parser/parser.js +107 -15
  48. package/dist/parser/parser.js.map +1 -1
  49. package/dist/parser/tokens.d.ts +14 -0
  50. package/dist/parser/tokens.d.ts.map +1 -1
  51. package/dist/parser/tokens.js +22 -0
  52. package/dist/parser/tokens.js.map +1 -1
  53. package/dist/tables/conditions.d.ts +7 -0
  54. package/dist/tables/conditions.d.ts.map +1 -0
  55. package/dist/tables/conditions.js +65 -0
  56. package/dist/tables/conditions.js.map +1 -0
  57. package/dist/tables/engine.d.ts +10 -0
  58. package/dist/tables/engine.d.ts.map +1 -0
  59. package/dist/tables/engine.js +147 -0
  60. package/dist/tables/engine.js.map +1 -0
  61. package/dist/tables/schema.d.ts +89 -0
  62. package/dist/tables/schema.d.ts.map +1 -0
  63. package/dist/tables/schema.js +3 -0
  64. package/dist/tables/schema.js.map +1 -0
  65. package/dist/tables/validate.d.ts +4 -0
  66. package/dist/tables/validate.d.ts.map +1 -0
  67. package/dist/tables/validate.js +98 -0
  68. package/dist/tables/validate.js.map +1 -0
  69. package/package.json +12 -2
@@ -1,3 +1,4 @@
1
+ import { matchesCompare } from "../engine/pipeline.js";
1
2
  import { monteCarloDistribution } from "./montecarlo.js";
2
3
  const MAX_EXACT_STATES = 10_000_000;
3
4
  function sideCount(sides) {
@@ -7,6 +8,7 @@ function sideCount(sides) {
7
8
  return 3;
8
9
  return sides;
9
10
  }
11
+ // ─── Single-die distributions ────────────────────────────────────────────────
10
12
  /** Distribution for a single die roll. */
11
13
  function singleDieDistribution(sides) {
12
14
  const dist = new Map();
@@ -24,6 +26,108 @@ function singleDieDistribution(sides) {
24
26
  }
25
27
  return dist;
26
28
  }
29
+ /** Single-die distribution after reroll modifiers.
30
+ * Unlimited reroll: faces matching the compare point have zero probability;
31
+ * their mass redistributes uniformly to remaining faces via geometric series.
32
+ * Reroll-once: two-step probability. */
33
+ function singleDieWithReroll(sides, mods) {
34
+ const s = sideCount(sides);
35
+ const isFate = sides === "F";
36
+ const base = singleDieDistribution(sides);
37
+ // Get all faces
38
+ const faces = [];
39
+ if (isFate) {
40
+ faces.push(-1, 0, 1);
41
+ }
42
+ else {
43
+ for (let i = 1; i <= s; i++)
44
+ faces.push(i);
45
+ }
46
+ let dist = new Map(base);
47
+ for (const mod of mods) {
48
+ if (mod.kind !== "reroll" && mod.kind !== "reroll_once")
49
+ continue;
50
+ if (!mod.compare)
51
+ continue;
52
+ const newDist = new Map();
53
+ const matchingFaces = faces.filter((f) => matchesCompare(f, mod.compare));
54
+ const nonMatchingFaces = faces.filter((f) => !matchesCompare(f, mod.compare));
55
+ if (nonMatchingFaces.length === 0) {
56
+ // All faces match — infinite reroll would never terminate, return uniform
57
+ return dist;
58
+ }
59
+ if (mod.kind === "reroll") {
60
+ // Unlimited reroll: matching faces have 0 probability.
61
+ // Total probability of non-matching faces: each gets its base prob + share of removed mass.
62
+ // Result: uniform over non-matching faces.
63
+ const pEach = 1 / nonMatchingFaces.length;
64
+ for (const face of nonMatchingFaces) {
65
+ newDist.set(face, pEach);
66
+ }
67
+ }
68
+ else {
69
+ // Reroll once: if face matches, reroll one time.
70
+ // P(end on face f) = P(roll f initially, f doesn't match) + P(roll matching, then roll f)
71
+ const pMatch = matchingFaces.length / s;
72
+ const pFace = 1 / s;
73
+ for (const face of faces) {
74
+ const isMatch = matchesCompare(face, mod.compare);
75
+ if (isMatch) {
76
+ // Can only end here if initial roll was a match AND reroll also lands here
77
+ newDist.set(face, pMatch * pFace);
78
+ }
79
+ else {
80
+ // End here from: direct roll + (match then reroll to here)
81
+ newDist.set(face, pFace + pMatch * pFace);
82
+ }
83
+ }
84
+ }
85
+ dist = newDist;
86
+ }
87
+ return dist;
88
+ }
89
+ /** Single-die distribution after min/max clamping. */
90
+ function singleDieWithMinMax(baseDist, mods) {
91
+ let dist = new Map(baseDist);
92
+ for (const mod of mods) {
93
+ if (mod.kind === "min" && mod.value !== undefined) {
94
+ const floor = mod.value;
95
+ const newDist = new Map();
96
+ let piledMass = 0;
97
+ for (const [v, p] of dist) {
98
+ if (v < floor) {
99
+ piledMass += p;
100
+ }
101
+ else {
102
+ newDist.set(v, (newDist.get(v) ?? 0) + p);
103
+ }
104
+ }
105
+ if (piledMass > 0) {
106
+ newDist.set(floor, (newDist.get(floor) ?? 0) + piledMass);
107
+ }
108
+ dist = newDist;
109
+ }
110
+ if (mod.kind === "max" && mod.value !== undefined) {
111
+ const ceiling = mod.value;
112
+ const newDist = new Map();
113
+ let piledMass = 0;
114
+ for (const [v, p] of dist) {
115
+ if (v > ceiling) {
116
+ piledMass += p;
117
+ }
118
+ else {
119
+ newDist.set(v, (newDist.get(v) ?? 0) + p);
120
+ }
121
+ }
122
+ if (piledMass > 0) {
123
+ newDist.set(ceiling, (newDist.get(ceiling) ?? 0) + piledMass);
124
+ }
125
+ dist = newDist;
126
+ }
127
+ }
128
+ return dist;
129
+ }
130
+ // ─── Convolution ─────────────────────────────────────────────────────────────
27
131
  /** Convolve two distributions (sum of independent random variables). */
28
132
  function convolve(a, b) {
29
133
  const result = new Map();
@@ -38,12 +142,21 @@ function convolve(a, b) {
38
142
  /** Distribution for NdM via iterative convolution. */
39
143
  function convolveDice(count, sides) {
40
144
  const single = singleDieDistribution(sides);
41
- let dist = new Map([[0, 1]]); // identity: always 0
145
+ let dist = new Map([[0, 1]]);
146
+ for (let i = 0; i < count; i++) {
147
+ dist = convolve(dist, single);
148
+ }
149
+ return dist;
150
+ }
151
+ /** Convolve a single-die distribution N times. */
152
+ function convolveN(single, count) {
153
+ let dist = new Map([[0, 1]]);
42
154
  for (let i = 0; i < count; i++) {
43
155
  dist = convolve(dist, single);
44
156
  }
45
157
  return dist;
46
158
  }
159
+ // ─── Exact strategies ────────────────────────────────────────────────────────
47
160
  /** Distribution with keep/drop via full enumeration. */
48
161
  function enumerateKeepDrop(node) {
49
162
  const s = sideCount(node.sides);
@@ -53,15 +166,24 @@ function enumerateKeepDrop(node) {
53
166
  const isFate = node.sides === "F";
54
167
  const dist = new Map();
55
168
  const prob = 1 / totalStates;
56
- // Enumerate all outcomes
57
169
  const rolls = new Array(node.count);
58
170
  function enumerate(depth) {
59
171
  if (depth === node.count) {
60
- // Apply keep/drop
61
- const sorted = [...rolls].sort((a, b) => a - b);
62
- let kept = sorted.slice(); // start with all
172
+ // Apply reroll + min/max per die, then keep/drop on the result
173
+ let values = rolls.slice();
174
+ // Apply min/max per die
175
+ for (const mod of node.modifiers) {
176
+ if (mod.kind === "min" && mod.value !== undefined) {
177
+ values = values.map((v) => Math.max(v, mod.value));
178
+ }
179
+ if (mod.kind === "max" && mod.value !== undefined) {
180
+ values = values.map((v) => Math.min(v, mod.value));
181
+ }
182
+ }
183
+ const sorted = [...values].sort((a, b) => a - b);
184
+ let kept = sorted.slice();
63
185
  for (const mod of node.modifiers) {
64
- if (mod.kind === "explode")
186
+ if (mod.kind !== "kh" && mod.kind !== "kl" && mod.kind !== "dh" && mod.kind !== "dl")
65
187
  continue;
66
188
  const n = mod.value ?? 1;
67
189
  switch (mod.kind) {
@@ -79,7 +201,30 @@ function enumerateKeepDrop(node) {
79
201
  break;
80
202
  }
81
203
  }
82
- const total = kept.reduce((a, b) => a + b, 0);
204
+ // Compute total based on result mode
205
+ let total;
206
+ if (node.resultMode === "success_count") {
207
+ const csMods = node.modifiers.filter((m) => m.kind === "cs_count");
208
+ const cfMods = node.modifiers.filter((m) => m.kind === "cf_count");
209
+ total = 0;
210
+ for (const v of kept) {
211
+ for (const mod of csMods) {
212
+ if (mod.compare && matchesCompare(v, mod.compare)) {
213
+ total++;
214
+ break;
215
+ }
216
+ }
217
+ for (const mod of cfMods) {
218
+ if (mod.compare && matchesCompare(v, mod.compare)) {
219
+ total--;
220
+ break;
221
+ }
222
+ }
223
+ }
224
+ }
225
+ else {
226
+ total = kept.reduce((a, b) => a + b, 0);
227
+ }
83
228
  dist.set(total, (dist.get(total) ?? 0) + prob);
84
229
  return;
85
230
  }
@@ -100,34 +245,34 @@ function enumerateKeepDrop(node) {
100
245
  enumerate(0);
101
246
  return dist;
102
247
  }
103
- /** Distribution for exploding dice via iterative depth expansion. */
104
- function explodingDistribution(node) {
248
+ /** Distribution for exploding/compounding/penetrating dice via iterative depth expansion. */
249
+ function explosionDistribution(node) {
105
250
  if (node.sides === "F")
106
251
  return null;
107
252
  const s = sideCount(node.sides);
108
- const explodeMod = node.modifiers.find((m) => m.kind === "explode");
253
+ const explodeMod = node.modifiers.find((m) => m.kind === "explode" || m.kind === "compound" || m.kind === "penetrate");
109
254
  if (!explodeMod)
110
255
  return null;
111
- const threshold = explodeMod.value ?? s;
256
+ const threshold = explodeMod.compare?.value ?? s;
257
+ const isCompound = explodeMod.kind === "compound";
258
+ const isPenetrate = explodeMod.kind === "penetrate";
112
259
  const maxExplosions = 10;
113
260
  function singleExploding() {
114
261
  const dist = new Map();
115
262
  const pFace = 1 / s;
116
- // Build depth-by-depth: accumulated tracks (sum → probability) for chains
117
- // that haven't terminated yet
118
263
  let accumulated = new Map([[0, 1]]);
119
264
  for (let depth = 0; depth <= maxExplosions; depth++) {
120
265
  const nextAccumulated = new Map();
121
266
  for (const [accSum, accProb] of accumulated) {
122
267
  for (let face = 1; face <= s; face++) {
123
- const total = accSum + face;
268
+ // Penetrating: explosions subtract 1 (min 1) from the new roll
269
+ const effectiveFace = isPenetrate && depth > 0 ? Math.max(1, face - 1) : face;
270
+ const total = accSum + effectiveFace;
124
271
  const p = accProb * pFace;
125
272
  if (face < threshold || depth === maxExplosions) {
126
- // Terminating roll (or forced cap)
127
273
  dist.set(total, (dist.get(total) ?? 0) + p);
128
274
  }
129
275
  else {
130
- // Exploding — carry forward
131
276
  nextAccumulated.set(total, (nextAccumulated.get(total) ?? 0) + p);
132
277
  }
133
278
  }
@@ -138,14 +283,73 @@ function explodingDistribution(node) {
138
283
  }
139
284
  return dist;
140
285
  }
286
+ // For compounding, the distribution shape is the same as exploding
287
+ // (sum of chain of rolls) — the difference is engine-side (one die vs many).
288
+ // The probability distribution is identical.
141
289
  const single = singleExploding();
142
- let dist = new Map([[0, 1]]);
143
- for (let i = 0; i < node.count; i++) {
144
- dist = convolve(dist, single);
290
+ return convolveN(single, node.count);
291
+ }
292
+ /** Distribution for simple reroll (no keep/drop, no explode). */
293
+ function rerollDistribution(node) {
294
+ const hasReroll = node.modifiers.some((m) => m.kind === "reroll" || m.kind === "reroll_once");
295
+ if (!hasReroll)
296
+ return null;
297
+ const single = singleDieWithReroll(node.sides, node.modifiers);
298
+ return convolveN(single, node.count);
299
+ }
300
+ /** Distribution for simple min/max (no keep/drop, no explode, no reroll). */
301
+ function minMaxDistribution(node) {
302
+ const hasMinMax = node.modifiers.some((m) => m.kind === "min" || m.kind === "max");
303
+ if (!hasMinMax)
304
+ return null;
305
+ const base = singleDieDistribution(node.sides);
306
+ const clamped = singleDieWithMinMax(base, node.modifiers);
307
+ return convolveN(clamped, node.count);
308
+ }
309
+ /** Distribution for success counting pools (no keep/drop, no explode).
310
+ * Each die independently produces +1 (success), -1 (failure), or 0 (neutral).
311
+ * The distribution is over net count, computed via convolution. */
312
+ function successCountDistribution(node) {
313
+ if (node.resultMode !== "success_count")
314
+ return null;
315
+ const csMods = node.modifiers.filter((m) => m.kind === "cs_count");
316
+ const cfMods = node.modifiers.filter((m) => m.kind === "cf_count");
317
+ if (csMods.length === 0)
318
+ return null;
319
+ // Build single-die distribution accounting for reroll + min/max first
320
+ let baseDist;
321
+ const hasReroll = node.modifiers.some((m) => m.kind === "reroll" || m.kind === "reroll_once");
322
+ if (hasReroll) {
323
+ baseDist = singleDieWithReroll(node.sides, node.modifiers);
145
324
  }
146
- return dist;
325
+ else {
326
+ baseDist = singleDieDistribution(node.sides);
327
+ }
328
+ const hasMinMax = node.modifiers.some((m) => m.kind === "min" || m.kind === "max");
329
+ if (hasMinMax) {
330
+ baseDist = singleDieWithMinMax(baseDist, node.modifiers);
331
+ }
332
+ // Map each face to its contribution: +1 (success), -1 (failure), or 0
333
+ const outcomeDist = new Map();
334
+ for (const [face, prob] of baseDist) {
335
+ let contribution = 0;
336
+ for (const mod of csMods) {
337
+ if (mod.compare && matchesCompare(face, mod.compare)) {
338
+ contribution++;
339
+ break;
340
+ }
341
+ }
342
+ for (const mod of cfMods) {
343
+ if (mod.compare && matchesCompare(face, mod.compare)) {
344
+ contribution--;
345
+ break;
346
+ }
347
+ }
348
+ outcomeDist.set(contribution, (outcomeDist.get(contribution) ?? 0) + prob);
349
+ }
350
+ return convolveN(outcomeDist, node.count);
147
351
  }
148
- /** Shift distribution by constant. */
352
+ // ─── Distribution algebra ────────────────────────────────────────────────────
149
353
  function shiftDistribution(dist, offset) {
150
354
  const result = new Map();
151
355
  for (const [v, p] of dist) {
@@ -153,16 +357,14 @@ function shiftDistribution(dist, offset) {
153
357
  }
154
358
  return result;
155
359
  }
156
- /** Scale distribution by constant. */
157
360
  function scaleDistribution(dist, factor) {
158
361
  const result = new Map();
159
362
  for (const [v, p] of dist) {
160
- const scaled = factor >= 0 ? v * factor : v * factor;
363
+ const scaled = v * factor;
161
364
  result.set(scaled, (result.get(scaled) ?? 0) + p);
162
365
  }
163
366
  return result;
164
367
  }
165
- /** Floor-divide distribution by constant. */
166
368
  function divideDistribution(dist, divisor) {
167
369
  if (divisor === 0)
168
370
  return new Map([[0, 1]]);
@@ -173,6 +375,7 @@ function divideDistribution(dist, divisor) {
173
375
  }
174
376
  return result;
175
377
  }
378
+ // ─── Main entry ──────────────────────────────────────────────────────────────
176
379
  /** Compute the full probability distribution for an AST. Falls back to Monte Carlo for complex cases. */
177
380
  export function computeDistribution(ast) {
178
381
  const result = tryExact(ast);
@@ -186,14 +389,31 @@ function tryExact(node) {
186
389
  return new Map([[node.value, 1]]);
187
390
  case "dice": {
188
391
  const hasKeepDrop = node.modifiers.some((m) => m.kind === "kh" || m.kind === "kl" || m.kind === "dh" || m.kind === "dl");
189
- const hasExplode = node.modifiers.some((m) => m.kind === "explode");
190
- if (hasExplode && !hasKeepDrop) {
191
- return explodingDistribution(node);
392
+ const hasExplosion = node.modifiers.some((m) => m.kind === "explode" || m.kind === "compound" || m.kind === "penetrate");
393
+ const hasReroll = node.modifiers.some((m) => m.kind === "reroll" || m.kind === "reroll_once");
394
+ const hasMinMax = node.modifiers.some((m) => m.kind === "min" || m.kind === "max");
395
+ const isSuccessCount = node.resultMode === "success_count";
396
+ // Success counting pool (no keep/drop, no explosion)
397
+ if (isSuccessCount && !hasKeepDrop && !hasExplosion) {
398
+ return successCountDistribution(node);
192
399
  }
400
+ // Keep/drop present — full enumeration (handles reroll + min/max internally)
193
401
  if (hasKeepDrop) {
194
402
  return enumerateKeepDrop(node);
195
403
  }
196
- // Plain NdM use convolution
404
+ // Explosion variants (no keep/drop)
405
+ if (hasExplosion) {
406
+ return explosionDistribution(node);
407
+ }
408
+ // Reroll (no keep/drop, no explosion)
409
+ if (hasReroll) {
410
+ return rerollDistribution(node);
411
+ }
412
+ // Min/max (no keep/drop, no explosion, no reroll)
413
+ if (hasMinMax) {
414
+ return minMaxDistribution(node);
415
+ }
416
+ // Plain NdM
197
417
  return convolveDice(node.count, node.sides);
198
418
  }
199
419
  case "binary": {
@@ -201,7 +421,6 @@ function tryExact(node) {
201
421
  const right = tryExact(node.right);
202
422
  if (!left || !right)
203
423
  return null;
204
- // Optimize: if one side is a constant
205
424
  if (right.size === 1) {
206
425
  const [rv] = [...right.keys()];
207
426
  switch (node.op) {
@@ -221,24 +440,21 @@ function tryExact(node) {
221
440
  case "+":
222
441
  return shiftDistribution(right, lv);
223
442
  case "-": {
224
- // lv - right → negate right, shift by lv
225
443
  const negated = scaleDistribution(right, -1);
226
444
  return shiftDistribution(negated, lv);
227
445
  }
228
446
  case "*":
229
447
  return scaleDistribution(right, lv);
230
448
  case "/":
231
- return null; // constant / distribution is unusual, use MC
449
+ return null;
232
450
  }
233
451
  }
234
- // Both sides are distributions — convolve for +/-, fall back for */÷
235
452
  if (node.op === "+")
236
453
  return convolve(left, right);
237
454
  if (node.op === "-") {
238
455
  const negated = scaleDistribution(right, -1);
239
456
  return convolve(left, negated);
240
457
  }
241
- // Multiplication/division of two distributions — Monte Carlo
242
458
  return null;
243
459
  }
244
460
  case "unary_minus": {
@@ -1 +1 @@
1
- {"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/analyze/distribution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/analyze/distribution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAEpC,SAAS,SAAS,CAAC,KAAgB;IACjC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAC9B,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAEhF,0CAA0C;AAC1C,SAAS,qBAAqB,CAAC,KAAgB;IAC7C,MAAM,IAAI,GAAiB,IAAI,GAAG,EAAE,CAAC;IACrC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;yCAGyC;AACzC,SAAS,mBAAmB,CAAC,KAAgB,EAAE,IAAoB;IACjE,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,KAAK,GAAG,CAAC;IAC7B,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE1C,gBAAgB;IAChB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAEzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QAClE,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,SAAS;QAE3B,MAAM,OAAO,GAAiB,IAAI,GAAG,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,OAAQ,CAAC,CAAC,CAAC;QAC3E,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,OAAQ,CAAC,CAAC,CAAC;QAE/E,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,0EAA0E;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,uDAAuD;YACvD,4FAA4F;YAC5F,2CAA2C;YAC3C,MAAM,KAAK,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,0FAA0F;YAC1F,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,OAAQ,CAAC,CAAC;gBACnD,IAAI,OAAO,EAAE,CAAC;oBACZ,2EAA2E;oBAC3E,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACN,2DAA2D;oBAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,GAAG,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sDAAsD;AACtD,SAAS,mBAAmB,CAAC,QAAsB,EAAE,IAAoB;IACvE,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,MAAM,OAAO,GAAiB,IAAI,GAAG,EAAE,CAAC;YACxC,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;oBACd,SAAS,IAAI,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;YAC1B,MAAM,OAAO,GAAiB,IAAI,GAAG,EAAE,CAAC;YACxC,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;oBAChB,SAAS,IAAI,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAEhF,wEAAwE;AACxE,SAAS,QAAQ,CAAC,CAAe,EAAE,CAAe;IAChD,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sDAAsD;AACtD,SAAS,YAAY,CAAC,KAAa,EAAE,KAAgB;IACnD,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,IAAI,GAAiB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kDAAkD;AAClD,SAAS,SAAS,CAAC,MAAoB,EAAE,KAAa;IACpD,IAAI,IAAI,GAAiB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAEhF,wDAAwD;AACxD,SAAS,iBAAiB,CAAC,IAAc;IACvC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,WAAW,GAAG,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC;IAClC,MAAM,IAAI,GAAiB,IAAI,GAAG,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC;IAE7B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,KAAK,CAAC,CAAC;IAE5C,SAAS,SAAS,CAAC,KAAa;QAC9B,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,+DAA+D;YAC/D,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAE3B,wBAAwB;YACxB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAClD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAM,CAAC,CAAC,CAAC;gBACtD,CAAC;gBACD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAClD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAM,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YAE1B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;oBAAE,SAAS;gBAC/F,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;gBACzB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjB,KAAK,IAAI;wBACP,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACnC,MAAM;oBACR,KAAK,IAAI;wBACP,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACxB,MAAM;oBACR,KAAK,IAAI;wBACP,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACtC,MAAM;oBACR,KAAK,IAAI;wBACP,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACrB,MAAM;gBACV,CAAC;YACH,CAAC;YAED,qCAAqC;YACrC,IAAI,KAAa,CAAC;YAClB,IAAI,IAAI,CAAC,UAAU,KAAK,eAAe,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;gBACnE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;gBACnE,KAAK,GAAG,CAAC,CAAC;gBACV,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;wBACzB,IAAI,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;4BAAC,KAAK,EAAE,CAAC;4BAAC,MAAM;wBAAC,CAAC;oBACxE,CAAC;oBACD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;wBACzB,IAAI,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;4BAAC,KAAK,EAAE,CAAC;4BAAC,MAAM;wBAAC,CAAC;oBACxE,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjB,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjB,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,CAAC,CAAC,CAAC,CAAC;IACb,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6FAA6F;AAC7F,SAAS,qBAAqB,CAAC,IAAc;IAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAC/E,CAAC;IACF,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC;IAClD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,KAAK,WAAW,CAAC;IACpD,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,SAAS,eAAe;QACtB,MAAM,IAAI,GAAiB,IAAI,GAAG,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpB,IAAI,WAAW,GAAiB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC;YACpD,MAAM,eAAe,GAAiB,IAAI,GAAG,EAAE,CAAC;YAEhD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;oBACrC,+DAA+D;oBAC/D,MAAM,aAAa,GACjB,WAAW,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC1D,MAAM,KAAK,GAAG,MAAM,GAAG,aAAa,CAAC;oBACrC,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;oBAE1B,IAAI,IAAI,GAAG,SAAS,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;wBAChD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC9C,CAAC;yBAAM,CAAC;wBACN,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,WAAW,GAAG,eAAe,CAAC;YAC9B,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;gBAAE,MAAM;QACpC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mEAAmE;IACnE,6EAA6E;IAC7E,6CAA6C;IAC7C,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,iEAAiE;AACjE,SAAS,kBAAkB,CAAC,IAAc;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CACvD,CAAC;IACF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/D,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,6EAA6E;AAC7E,SAAS,kBAAkB,CAAC,IAAc;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAC5C,CAAC;IACF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED;;oEAEoE;AACpE,SAAS,wBAAwB,CAAC,IAAc;IAC9C,IAAI,IAAI,CAAC,UAAU,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAEnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,sEAAsE;IACtE,IAAI,QAAsB,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CACvD,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAC5C,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,sEAAsE;IACtE,MAAM,WAAW,GAAiB,IAAI,GAAG,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,YAAY,EAAE,CAAC;gBACf,MAAM;YACR,CAAC;QACH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,YAAY,EAAE,CAAC;gBACf,MAAM;YACR,CAAC;QACH,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,gFAAgF;AAEhF,SAAS,iBAAiB,CAAC,IAAkB,EAAE,MAAc;IAC3D,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB,EAAE,MAAc;IAC3D,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAkB,EAAE,OAAe;IAC7D,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAEhF,yGAAyG;AACzG,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAa;IAC7B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAChF,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAC/E,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CACvD,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAC5C,CAAC;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,KAAK,eAAe,CAAC;YAE3D,qDAAqD;YACrD,IAAI,cAAc,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpD,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;YAED,6EAA6E;YAC7E,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAED,oCAAoC;YACpC,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,sCAAsC;YACtC,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,kDAAkD;YAClD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,YAAY;YACZ,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAEjC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/B,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;oBAChB,KAAK,GAAG;wBACN,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACrC,KAAK,GAAG;wBACN,OAAO,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;oBACtC,KAAK,GAAG;wBACN,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACrC,KAAK,GAAG;wBACN,OAAO,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9B,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;oBAChB,KAAK,GAAG;wBACN,OAAO,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACtC,KAAK,GAAG,CAAC,CAAC,CAAC;wBACT,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC7C,OAAO,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACxC,CAAC;oBACD,KAAK,GAAG;wBACN,OAAO,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACtC,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC;gBAChB,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG;gBAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,OAAO,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { JsonRpcRequest, JsonRpcResponse } from "./protocol.js";
2
+ export declare class BridgeHandler {
3
+ private rng;
4
+ private tables;
5
+ /** Set a deterministic seed for all subsequent rolls. */
6
+ setSeed(seed: number): void;
7
+ /** Reset to cryptographic RNG. */
8
+ resetRng(): void;
9
+ /** Parse a raw JSON string into a request and handle it. */
10
+ handleRaw(raw: string): JsonRpcResponse;
11
+ /** Handle a parsed JSON-RPC request. */
12
+ handle(request: JsonRpcRequest): JsonRpcResponse;
13
+ }
14
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/bridge/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAShB,MAAM,eAAe,CAAC;AAiBvB,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAoB;IAC/B,OAAO,CAAC,MAAM,CAA0C;IAExD,yDAAyD;IACzD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,kCAAkC;IAClC,QAAQ,IAAI,IAAI;IAIhB,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAmBvC,wCAAwC;IACxC,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe;CAiIjD"}
@@ -0,0 +1,163 @@
1
+ import { RPC_METHOD_NOT_FOUND, RPC_INVALID_PARAMS, RPC_INTERNAL_ERROR, RPC_PARSE_ERROR, RPC_INVALID_REQUEST, } from "./protocol.js";
2
+ import { parse } from "../parser/parser.js";
3
+ import { evaluate } from "../engine/roller.js";
4
+ import { computeDistribution } from "../analyze/distribution.js";
5
+ import { computeStats, probabilityAtLeast } from "../analyze/stats.js";
6
+ import { cryptoRng, seededRng } from "../engine/random.js";
7
+ import { rollGameTable } from "../tables/engine.js";
8
+ export class BridgeHandler {
9
+ rng = cryptoRng;
10
+ tables = new Map();
11
+ /** Set a deterministic seed for all subsequent rolls. */
12
+ setSeed(seed) {
13
+ this.rng = seededRng(seed);
14
+ }
15
+ /** Reset to cryptographic RNG. */
16
+ resetRng() {
17
+ this.rng = cryptoRng;
18
+ }
19
+ /** Parse a raw JSON string into a request and handle it. */
20
+ handleRaw(raw) {
21
+ let request;
22
+ try {
23
+ request = JSON.parse(raw);
24
+ }
25
+ catch {
26
+ return { jsonrpc: "2.0", id: 0, error: { code: RPC_PARSE_ERROR, message: "Parse error" } };
27
+ }
28
+ if (!request.jsonrpc || request.jsonrpc !== "2.0" || !request.method || request.id === undefined) {
29
+ return {
30
+ jsonrpc: "2.0",
31
+ id: request.id ?? 0,
32
+ error: { code: RPC_INVALID_REQUEST, message: "Invalid request" },
33
+ };
34
+ }
35
+ return this.handle(request);
36
+ }
37
+ /** Handle a parsed JSON-RPC request. */
38
+ handle(request) {
39
+ const { id, method, params } = request;
40
+ try {
41
+ switch (method) {
42
+ case "ping":
43
+ return ok(id, { ok: true });
44
+ case "shutdown":
45
+ return ok(id, { shutdown: true });
46
+ case "seed": {
47
+ const p = params;
48
+ if (typeof p?.seed !== "number") {
49
+ return err(id, RPC_INVALID_PARAMS, "Missing seed parameter");
50
+ }
51
+ this.setSeed(p.seed);
52
+ return ok(id, { seeded: true });
53
+ }
54
+ case "roll": {
55
+ const p = params;
56
+ if (!p?.expression) {
57
+ return err(id, RPC_INVALID_PARAMS, "Missing expression parameter");
58
+ }
59
+ const rng = p.seed !== undefined ? seededRng(p.seed) : this.rng;
60
+ const ast = parse(p.expression);
61
+ const result = evaluate(ast, rng);
62
+ result.expression = p.expression;
63
+ return ok(id, result);
64
+ }
65
+ case "roll_batch": {
66
+ const p = params;
67
+ if (!p?.expressions || !Array.isArray(p.expressions)) {
68
+ return err(id, RPC_INVALID_PARAMS, "Missing expressions array");
69
+ }
70
+ const rng = p.seed !== undefined ? seededRng(p.seed) : this.rng;
71
+ const results = p.expressions.map((expr) => {
72
+ const ast = parse(expr);
73
+ const result = evaluate(ast, rng);
74
+ result.expression = expr;
75
+ return result;
76
+ });
77
+ return ok(id, results);
78
+ }
79
+ case "analyze": {
80
+ const p = params;
81
+ if (!p?.expression) {
82
+ return err(id, RPC_INVALID_PARAMS, "Missing expression parameter");
83
+ }
84
+ const ast = parse(p.expression);
85
+ const dist = computeDistribution(ast);
86
+ const stats = computeStats(dist);
87
+ // Convert Map to array of tuples for JSON serialization
88
+ const distribution = [...dist.entries()].sort((a, b) => a[0] - b[0]);
89
+ return ok(id, { stats, distribution });
90
+ }
91
+ case "at_least": {
92
+ const p = params;
93
+ if (!p?.expression || typeof p?.target !== "number") {
94
+ return err(id, RPC_INVALID_PARAMS, "Missing expression or target parameter");
95
+ }
96
+ const ast = parse(p.expression);
97
+ const dist = computeDistribution(ast);
98
+ const probability = probabilityAtLeast(dist, p.target);
99
+ return ok(id, { probability, target: p.target });
100
+ }
101
+ case "compare": {
102
+ const p = params;
103
+ if (!p?.expressions || p.expressions.length !== 2) {
104
+ return err(id, RPC_INVALID_PARAMS, "Need exactly 2 expressions");
105
+ }
106
+ const results = p.expressions.map((expr) => {
107
+ const ast = parse(expr);
108
+ const dist = computeDistribution(ast);
109
+ return { expression: expr, stats: computeStats(dist) };
110
+ });
111
+ return ok(id, results);
112
+ }
113
+ case "table_load": {
114
+ const p = params;
115
+ if (!p?.collection) {
116
+ return err(id, RPC_INVALID_PARAMS, "Missing collection parameter");
117
+ }
118
+ const collection = p.collection;
119
+ // Index by each table name
120
+ for (const table of collection.tables) {
121
+ this.tables.set(table.table, collection);
122
+ }
123
+ return ok(id, {
124
+ loaded: collection.tables.map((t) => t.table),
125
+ });
126
+ }
127
+ case "table_list": {
128
+ return ok(id, { tables: [...this.tables.keys()] });
129
+ }
130
+ case "table_roll": {
131
+ const p = params;
132
+ if (!p?.table) {
133
+ return err(id, RPC_INVALID_PARAMS, "Missing table parameter");
134
+ }
135
+ const collection = this.tables.get(p.table);
136
+ if (!collection) {
137
+ return err(id, RPC_INVALID_PARAMS, `Table "${p.table}" not loaded`);
138
+ }
139
+ const context = (p.context ?? {});
140
+ const count = p.count ?? 1;
141
+ const results = [];
142
+ for (let i = 0; i < count; i++) {
143
+ results.push(...rollGameTable(collection, p.table, context, this.rng));
144
+ }
145
+ return ok(id, results);
146
+ }
147
+ default:
148
+ return err(id, RPC_METHOD_NOT_FOUND, `Unknown method: ${method}`);
149
+ }
150
+ }
151
+ catch (e) {
152
+ const message = e instanceof Error ? e.message : String(e);
153
+ return err(id, RPC_INTERNAL_ERROR, message);
154
+ }
155
+ }
156
+ }
157
+ function ok(id, result) {
158
+ return { jsonrpc: "2.0", id, result };
159
+ }
160
+ function err(id, code, message) {
161
+ return { jsonrpc: "2.0", id, error: { code, message } };
162
+ }
163
+ //# sourceMappingURL=handler.js.map