@memlab/mcp-server 2.52.0 → 2.86.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -2
- package/dist/anonymized-snapshot.d.ts +75 -0
- package/dist/anonymized-snapshot.d.ts.map +1 -0
- package/dist/anonymized-snapshot.js +101 -0
- package/dist/anonymized-snapshot.js.map +1 -0
- package/dist/eval-hints.d.ts +41 -0
- package/dist/eval-hints.d.ts.map +1 -0
- package/dist/eval-hints.js +115 -0
- package/dist/eval-hints.js.map +1 -0
- package/dist/heap-budget.d.ts +32 -0
- package/dist/heap-budget.d.ts.map +1 -0
- package/dist/heap-budget.js +90 -0
- package/dist/heap-budget.js.map +1 -0
- package/dist/heap-shapes.d.ts +148 -0
- package/dist/heap-shapes.d.ts.map +1 -0
- package/dist/heap-shapes.js +193 -0
- package/dist/heap-shapes.js.map +1 -0
- package/dist/heap-state.d.ts +20 -0
- package/dist/heap-state.d.ts.map +1 -1
- package/dist/heap-state.js +8 -1
- package/dist/heap-state.js.map +1 -1
- package/dist/index.js +64 -1
- package/dist/index.js.map +1 -1
- package/dist/react-shapes.d.ts +42 -0
- package/dist/react-shapes.d.ts.map +1 -0
- package/dist/react-shapes.js +149 -0
- package/dist/react-shapes.js.map +1 -0
- package/dist/server-version.d.ts +19 -0
- package/dist/server-version.d.ts.map +1 -0
- package/dist/server-version.js +19 -0
- package/dist/server-version.js.map +1 -0
- package/dist/snapshot-borrow.d.ts +67 -0
- package/dist/snapshot-borrow.d.ts.map +1 -0
- package/dist/snapshot-borrow.js +113 -0
- package/dist/snapshot-borrow.js.map +1 -0
- package/dist/string-index.d.ts.map +1 -1
- package/dist/string-index.js +8 -0
- package/dist/string-index.js.map +1 -1
- package/dist/tools/analyze-run.d.ts.map +1 -1
- package/dist/tools/analyze-run.js +79 -18
- package/dist/tools/analyze-run.js.map +1 -1
- package/dist/tools/anonymize-snapshot.d.ts +12 -0
- package/dist/tools/anonymize-snapshot.d.ts.map +1 -0
- package/dist/tools/anonymize-snapshot.js +159 -0
- package/dist/tools/anonymize-snapshot.js.map +1 -0
- package/dist/tools/app-config.d.ts +12 -0
- package/dist/tools/app-config.d.ts.map +1 -0
- package/dist/tools/app-config.js +217 -0
- package/dist/tools/app-config.js.map +1 -0
- package/dist/tools/app-heap.d.ts +18 -0
- package/dist/tools/app-heap.d.ts.map +1 -1
- package/dist/tools/app-heap.js +12 -46
- package/dist/tools/app-heap.js.map +1 -1
- package/dist/tools/artifact-budget.d.ts +12 -0
- package/dist/tools/artifact-budget.d.ts.map +1 -0
- package/dist/tools/artifact-budget.js +219 -0
- package/dist/tools/artifact-budget.js.map +1 -0
- package/dist/tools/async-census.d.ts +12 -0
- package/dist/tools/async-census.d.ts.map +1 -0
- package/dist/tools/async-census.js +243 -0
- package/dist/tools/async-census.js.map +1 -0
- package/dist/tools/auto-investigate.d.ts.map +1 -1
- package/dist/tools/auto-investigate.js +54 -5
- package/dist/tools/auto-investigate.js.map +1 -1
- package/dist/tools/batch.d.ts.map +1 -1
- package/dist/tools/batch.js +33 -5
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/cache-analysis.d.ts +15 -0
- package/dist/tools/cache-analysis.d.ts.map +1 -1
- package/dist/tools/cache-analysis.js +85 -10
- package/dist/tools/cache-analysis.js.map +1 -1
- package/dist/tools/census-diff.d.ts +55 -0
- package/dist/tools/census-diff.d.ts.map +1 -0
- package/dist/tools/census-diff.js +228 -0
- package/dist/tools/census-diff.js.map +1 -0
- package/dist/tools/chain-walk.d.ts +12 -0
- package/dist/tools/chain-walk.d.ts.map +1 -0
- package/dist/tools/chain-walk.js +184 -0
- package/dist/tools/chain-walk.js.map +1 -0
- package/dist/tools/collection-diff.d.ts +44 -0
- package/dist/tools/collection-diff.d.ts.map +1 -0
- package/dist/tools/collection-diff.js +343 -0
- package/dist/tools/collection-diff.js.map +1 -0
- package/dist/tools/collection-trend.d.ts.map +1 -1
- package/dist/tools/collection-trend.js +2 -2
- package/dist/tools/collection-trend.js.map +1 -1
- package/dist/tools/detached-dom.d.ts +3 -0
- package/dist/tools/detached-dom.d.ts.map +1 -1
- package/dist/tools/detached-dom.js +78 -3
- package/dist/tools/detached-dom.js.map +1 -1
- package/dist/tools/dev-artifacts.d.ts.map +1 -1
- package/dist/tools/dev-artifacts.js +221 -3
- package/dist/tools/dev-artifacts.js.map +1 -1
- package/dist/tools/diff-snapshots.d.ts.map +1 -1
- package/dist/tools/diff-snapshots.js +18 -2
- package/dist/tools/diff-snapshots.js.map +1 -1
- package/dist/tools/dom-audit.d.ts +37 -0
- package/dist/tools/dom-audit.d.ts.map +1 -0
- package/dist/tools/dom-audit.js +247 -0
- package/dist/tools/dom-audit.js.map +1 -0
- package/dist/tools/duplicated-strings.d.ts.map +1 -1
- package/dist/tools/duplicated-strings.js +3 -2
- package/dist/tools/duplicated-strings.js.map +1 -1
- package/dist/tools/eval-across.d.ts +12 -0
- package/dist/tools/eval-across.d.ts.map +1 -0
- package/dist/tools/eval-across.js +135 -0
- package/dist/tools/eval-across.js.map +1 -0
- package/dist/tools/eval.d.ts +78 -0
- package/dist/tools/eval.d.ts.map +1 -1
- package/dist/tools/eval.js +2270 -701
- package/dist/tools/eval.js.map +1 -1
- package/dist/tools/event-listener-leaks.d.ts.map +1 -1
- package/dist/tools/event-listener-leaks.js +42 -17
- package/dist/tools/event-listener-leaks.js.map +1 -1
- package/dist/tools/event-registry.d.ts.map +1 -1
- package/dist/tools/event-registry.js +42 -8
- package/dist/tools/event-registry.js.map +1 -1
- package/dist/tools/explain-delta.d.ts.map +1 -1
- package/dist/tools/explain-delta.js +61 -10
- package/dist/tools/explain-delta.js.map +1 -1
- package/dist/tools/finding-index.d.ts +181 -0
- package/dist/tools/finding-index.d.ts.map +1 -1
- package/dist/tools/finding-index.js +343 -24
- package/dist/tools/finding-index.js.map +1 -1
- package/dist/tools/get-value.d.ts +16 -0
- package/dist/tools/get-value.d.ts.map +1 -1
- package/dist/tools/get-value.js +96 -2
- package/dist/tools/get-value.js.map +1 -1
- package/dist/tools/hypothesis.d.ts.map +1 -1
- package/dist/tools/hypothesis.js +117 -58
- package/dist/tools/hypothesis.js.map +1 -1
- package/dist/tools/id-space-audit.d.ts +12 -0
- package/dist/tools/id-space-audit.d.ts.map +1 -0
- package/dist/tools/id-space-audit.js +262 -0
- package/dist/tools/id-space-audit.js.map +1 -0
- package/dist/tools/identify.d.ts +12 -0
- package/dist/tools/identify.d.ts.map +1 -0
- package/dist/tools/identify.js +205 -0
- package/dist/tools/identify.js.map +1 -0
- package/dist/tools/identity-diff.d.ts +12 -0
- package/dist/tools/identity-diff.d.ts.map +1 -0
- package/dist/tools/identity-diff.js +188 -0
- package/dist/tools/identity-diff.js.map +1 -0
- package/dist/tools/intern-opportunities.d.ts.map +1 -1
- package/dist/tools/intern-opportunities.js +4 -3
- package/dist/tools/intern-opportunities.js.map +1 -1
- package/dist/tools/ladder-probe.d.ts +65 -0
- package/dist/tools/ladder-probe.d.ts.map +1 -0
- package/dist/tools/ladder-probe.js +445 -0
- package/dist/tools/ladder-probe.js.map +1 -0
- package/dist/tools/ladder.d.ts.map +1 -1
- package/dist/tools/ladder.js +5 -5
- package/dist/tools/ladder.js.map +1 -1
- package/dist/tools/leak-report.d.ts +23 -0
- package/dist/tools/leak-report.d.ts.map +1 -1
- package/dist/tools/leak-report.js +153 -11
- package/dist/tools/leak-report.js.map +1 -1
- package/dist/tools/load-snapshot.d.ts +11 -0
- package/dist/tools/load-snapshot.d.ts.map +1 -1
- package/dist/tools/load-snapshot.js +83 -10
- package/dist/tools/load-snapshot.js.map +1 -1
- package/dist/tools/metric.d.ts +13 -0
- package/dist/tools/metric.d.ts.map +1 -0
- package/dist/tools/metric.js +185 -0
- package/dist/tools/metric.js.map +1 -0
- package/dist/tools/module-attribution.d.ts +36 -0
- package/dist/tools/module-attribution.d.ts.map +1 -0
- package/dist/tools/module-attribution.js +235 -0
- package/dist/tools/module-attribution.js.map +1 -0
- package/dist/tools/next-measurement.d.ts +26 -0
- package/dist/tools/next-measurement.d.ts.map +1 -0
- package/dist/tools/next-measurement.js +149 -0
- package/dist/tools/next-measurement.js.map +1 -0
- package/dist/tools/object-cost-breakdown.d.ts.map +1 -1
- package/dist/tools/object-cost-breakdown.js +64 -0
- package/dist/tools/object-cost-breakdown.js.map +1 -1
- package/dist/tools/population-vs-owners.d.ts +12 -0
- package/dist/tools/population-vs-owners.d.ts.map +1 -0
- package/dist/tools/population-vs-owners.js +183 -0
- package/dist/tools/population-vs-owners.js.map +1 -0
- package/dist/tools/property-names.d.ts +29 -0
- package/dist/tools/property-names.d.ts.map +1 -0
- package/dist/tools/property-names.js +131 -0
- package/dist/tools/property-names.js.map +1 -0
- package/dist/tools/quick-diagnosis.d.ts.map +1 -1
- package/dist/tools/quick-diagnosis.js +7 -1
- package/dist/tools/quick-diagnosis.js.map +1 -1
- package/dist/tools/react-owners.d.ts +12 -0
- package/dist/tools/react-owners.d.ts.map +1 -0
- package/dist/tools/react-owners.js +167 -0
- package/dist/tools/react-owners.js.map +1 -0
- package/dist/tools/react-update-queues.d.ts +12 -0
- package/dist/tools/react-update-queues.d.ts.map +1 -0
- package/dist/tools/react-update-queues.js +173 -0
- package/dist/tools/react-update-queues.js.map +1 -0
- package/dist/tools/replicate.d.ts +49 -0
- package/dist/tools/replicate.d.ts.map +1 -0
- package/dist/tools/replicate.js +241 -0
- package/dist/tools/replicate.js.map +1 -0
- package/dist/tools/retainer-diff.d.ts +12 -0
- package/dist/tools/retainer-diff.d.ts.map +1 -0
- package/dist/tools/retainer-diff.js +168 -0
- package/dist/tools/retainer-diff.js.map +1 -0
- package/dist/tools/retainer-summary.d.ts +17 -0
- package/dist/tools/retainer-summary.d.ts.map +1 -1
- package/dist/tools/retainer-summary.js +85 -22
- package/dist/tools/retainer-summary.js.map +1 -1
- package/dist/tools/retainer-trace.d.ts.map +1 -1
- package/dist/tools/retainer-trace.js +11 -1
- package/dist/tools/retainer-trace.js.map +1 -1
- package/dist/tools/round-audit.d.ts +66 -0
- package/dist/tools/round-audit.d.ts.map +1 -0
- package/dist/tools/round-audit.js +258 -0
- package/dist/tools/round-audit.js.map +1 -0
- package/dist/tools/round-digest.d.ts +12 -0
- package/dist/tools/round-digest.d.ts.map +1 -0
- package/dist/tools/round-digest.js +190 -0
- package/dist/tools/round-digest.js.map +1 -0
- package/dist/tools/script-census.d.ts +12 -0
- package/dist/tools/script-census.d.ts.map +1 -0
- package/dist/tools/script-census.js +182 -0
- package/dist/tools/script-census.js.map +1 -0
- package/dist/tools/sequence-analysis.d.ts +4 -0
- package/dist/tools/sequence-analysis.d.ts.map +1 -1
- package/dist/tools/sequence-analysis.js +53 -9
- package/dist/tools/sequence-analysis.js.map +1 -1
- package/dist/tools/server-status.d.ts.map +1 -1
- package/dist/tools/server-status.js +4 -1
- package/dist/tools/server-status.js.map +1 -1
- package/dist/tools/settle-check.d.ts +12 -0
- package/dist/tools/settle-check.d.ts.map +1 -0
- package/dist/tools/settle-check.js +188 -0
- package/dist/tools/settle-check.js.map +1 -0
- package/dist/tools/sliced-strings.d.ts.map +1 -1
- package/dist/tools/sliced-strings.js +2 -1
- package/dist/tools/sliced-strings.js.map +1 -1
- package/dist/tools/snapshots.d.ts.map +1 -1
- package/dist/tools/snapshots.js +24 -6
- package/dist/tools/snapshots.js.map +1 -1
- package/dist/tools/sparse-elements.d.ts +12 -0
- package/dist/tools/sparse-elements.d.ts.map +1 -0
- package/dist/tools/sparse-elements.js +215 -0
- package/dist/tools/sparse-elements.js.map +1 -0
- package/dist/tools/stale-collections.d.ts +17 -0
- package/dist/tools/stale-collections.d.ts.map +1 -1
- package/dist/tools/stale-collections.js +28 -0
- package/dist/tools/stale-collections.js.map +1 -1
- package/dist/tools/string-patterns.d.ts.map +1 -1
- package/dist/tools/string-patterns.js +2 -1
- package/dist/tools/string-patterns.js.map +1 -1
- package/dist/tools/tools-index.d.ts.map +1 -1
- package/dist/tools/tools-index.js +155 -5
- package/dist/tools/tools-index.js.map +1 -1
- package/dist/tools/trace-all.d.ts +42 -0
- package/dist/tools/trace-all.d.ts.map +1 -0
- package/dist/tools/trace-all.js +263 -0
- package/dist/tools/trace-all.js.map +1 -0
- package/dist/tools/unit-cost.d.ts +12 -0
- package/dist/tools/unit-cost.d.ts.map +1 -0
- package/dist/tools/unit-cost.js +219 -0
- package/dist/tools/unit-cost.js.map +1 -0
- package/dist/tools/verify-fix.d.ts.map +1 -1
- package/dist/tools/verify-fix.js +11 -3
- package/dist/tools/verify-fix.js.map +1 -1
- package/dist/tools/weakref-census.d.ts +15 -0
- package/dist/tools/weakref-census.d.ts.map +1 -0
- package/dist/tools/weakref-census.js +147 -0
- package/dist/tools/weakref-census.js.map +1 -0
- package/dist/tools/what-if.d.ts +12 -0
- package/dist/tools/what-if.d.ts.map +1 -0
- package/dist/tools/what-if.js +285 -0
- package/dist/tools/what-if.js.map +1 -0
- package/dist/utils.d.ts +92 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +172 -5
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
|
@@ -57,7 +57,7 @@ const RING_CAPACITY_PROP_RE = /^_?(?:capacity|log_?capacity|max_?size|buffer_?si
|
|
|
57
57
|
* Biased towards under-detection: a missed ring is a false leak candidate the
|
|
58
58
|
* caller can dismiss, while a wrongly-detected one drops a real leak silently.
|
|
59
59
|
*/
|
|
60
|
-
function looksLikeRingBuffer(owner) {
|
|
60
|
+
export function looksLikeRingBuffer(owner) {
|
|
61
61
|
if (!owner)
|
|
62
62
|
return false;
|
|
63
63
|
let hasAmbiguousCursor = false;
|
|
@@ -191,6 +191,23 @@ function approxEntryCount(node) {
|
|
|
191
191
|
}
|
|
192
192
|
return node.edge_count;
|
|
193
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Entry and slot counts, plus the table's allocated CAPACITY in slots.
|
|
196
|
+
*
|
|
197
|
+
* Capacity comes from the backing store's BYTE SIZE (8 bytes per slot on 64-bit
|
|
198
|
+
* V8), not from its edge count — the edge count is the number of live entries,
|
|
199
|
+
* i.e. the numerator. The distinction matters because V8 never shrinks a hash
|
|
200
|
+
* table: `EphemeronHashTable` in particular keeps whatever capacity it ever
|
|
201
|
+
* reached for the lifetime of the isolate, so a table can be mostly empty and
|
|
202
|
+
* still be one of the largest objects in the heap.
|
|
203
|
+
*
|
|
204
|
+
* Measured on one app, the same WeakMap across two rounds:
|
|
205
|
+
* 2,097,172 B / 262,144 slots / 2,989 live = 1.14% occupancy
|
|
206
|
+
* 8,388,628 B / 1,048,576 slots / 7,564 live = 0.72% occupancy
|
|
207
|
+
* It quadrupled in bytes while live entries only 2.5x'd. Reporting bytes alone
|
|
208
|
+
* invites "the cache grew"; reporting occupancy says "this is stale capacity",
|
|
209
|
+
* which is a different and cheaper fix.
|
|
210
|
+
*/
|
|
194
211
|
function countEntries(node) {
|
|
195
212
|
if (node.name === 'Map' || node.name === 'Set') {
|
|
196
213
|
for (const edge of node.references) {
|
|
@@ -198,6 +215,7 @@ function countEntries(node) {
|
|
|
198
215
|
if ((eName === 'table' || eName === 'backing_store') &&
|
|
199
216
|
(edge.toNode.type === 'array' || edge.toNode.type === 'hidden')) {
|
|
200
217
|
const tableNode = edge.toNode;
|
|
218
|
+
const capacitySlots = Math.round((tableNode.self_size ?? 0) / 8);
|
|
201
219
|
let filledSlots = 0;
|
|
202
220
|
let totalSlots = 0;
|
|
203
221
|
for (const e of tableNode.references) {
|
|
@@ -216,7 +234,7 @@ function countEntries(node) {
|
|
|
216
234
|
totalSlots = filledSlots;
|
|
217
235
|
}
|
|
218
236
|
const entries = node.name === 'Map' ? Math.floor(filledSlots / 2) : filledSlots;
|
|
219
|
-
return { entries, tableSlots: filledSlots };
|
|
237
|
+
return { entries, tableSlots: filledSlots, capacitySlots };
|
|
220
238
|
}
|
|
221
239
|
}
|
|
222
240
|
// Fallback: count non-internal outgoing edges as a proxy for entries
|
|
@@ -228,12 +246,12 @@ function countEntries(node) {
|
|
|
228
246
|
}
|
|
229
247
|
if (propertyCount > 0) {
|
|
230
248
|
const entries = node.name === 'Map' ? Math.floor(propertyCount / 2) : propertyCount;
|
|
231
|
-
return { entries, tableSlots: propertyCount };
|
|
249
|
+
return { entries, tableSlots: propertyCount, capacitySlots: propertyCount };
|
|
232
250
|
}
|
|
233
|
-
return { entries: 0, tableSlots: 0 };
|
|
251
|
+
return { entries: 0, tableSlots: 0, capacitySlots: 0 };
|
|
234
252
|
}
|
|
235
253
|
const count = node.edge_count;
|
|
236
|
-
return { entries: count, tableSlots: count };
|
|
254
|
+
return { entries: count, tableSlots: count, capacitySlots: count };
|
|
237
255
|
}
|
|
238
256
|
function hasWeakRefEntries(node) {
|
|
239
257
|
for (const edge of node.references) {
|
|
@@ -374,7 +392,12 @@ export function registerCacheAnalysis(server) {
|
|
|
374
392
|
.describe('Use compact one-line format for sampled entries (default true). ' +
|
|
375
393
|
'Shows "key_type → value_shape" instead of full object descriptions. ' +
|
|
376
394
|
'Set to false for verbose entry details.'),
|
|
377
|
-
|
|
395
|
+
summary_only: z
|
|
396
|
+
.boolean()
|
|
397
|
+
.optional()
|
|
398
|
+
.default(false)
|
|
399
|
+
.describe('Headline counts and totals ONLY — no ranked table, no per-entry samples, no "long but small" section (default false). Use after the first call in a session, when the ranked table has already been read and only the totals are wanted.'),
|
|
400
|
+
}, async ({ limit, min_entries, min_retained_size, collection_types, detect_object_caches, detect_identical_entries, sample_entries, compact_samples, summary_only, }) => {
|
|
378
401
|
try {
|
|
379
402
|
const snapshot = getSnapshot();
|
|
380
403
|
const meta = getSnapshotMetadata();
|
|
@@ -395,7 +418,7 @@ export function registerCacheAnalysis(server) {
|
|
|
395
418
|
const bigEnough = node.retainedSize >= min_retained_size;
|
|
396
419
|
if (!bigEnough && approxEntryCount(node) < min_entries)
|
|
397
420
|
return;
|
|
398
|
-
const { entries: entryCount, tableSlots } = countEntries(node);
|
|
421
|
+
const { entries: entryCount, tableSlots, capacitySlots, } = countEntries(node);
|
|
399
422
|
if (entryCount < min_entries)
|
|
400
423
|
return;
|
|
401
424
|
if (!bigEnough) {
|
|
@@ -417,6 +440,7 @@ export function registerCacheAnalysis(server) {
|
|
|
417
440
|
collectionType: node.name,
|
|
418
441
|
entryCount,
|
|
419
442
|
tableSlots,
|
|
443
|
+
capacitySlots,
|
|
420
444
|
retainedSize: node.retainedSize,
|
|
421
445
|
selfSize: node.self_size,
|
|
422
446
|
ownerName: owner.name,
|
|
@@ -554,6 +578,10 @@ export function registerCacheAnalysis(server) {
|
|
|
554
578
|
collectionType: cacheType,
|
|
555
579
|
entryCount: dataEntryCount,
|
|
556
580
|
tableSlots: dataEntryCount,
|
|
581
|
+
// Ad-hoc object caches have no hash table; capacity == entries so
|
|
582
|
+
// the occupancy column stays quiet for them rather than reporting
|
|
583
|
+
// a meaningless 100%.
|
|
584
|
+
capacitySlots: dataEntryCount,
|
|
557
585
|
retainedSize: node.retainedSize,
|
|
558
586
|
selfSize: node.self_size,
|
|
559
587
|
ownerName: owner.name,
|
|
@@ -589,6 +617,7 @@ export function registerCacheAnalysis(server) {
|
|
|
589
617
|
collectionType: 'Global registry',
|
|
590
618
|
entryCount: target.edge_count,
|
|
591
619
|
tableSlots: target.edge_count,
|
|
620
|
+
capacitySlots: target.edge_count,
|
|
592
621
|
retainedSize: target.retainedSize,
|
|
593
622
|
selfSize: target.self_size,
|
|
594
623
|
ownerName: node.name,
|
|
@@ -639,12 +668,26 @@ export function registerCacheAnalysis(server) {
|
|
|
639
668
|
}
|
|
640
669
|
const hasAnyFramework = caches.some(c => c.framework !== '');
|
|
641
670
|
const hasSlotDifference = caches.some(c => c.tableSlots !== c.entryCount);
|
|
671
|
+
// Occupancy is only meaningful when the table's allocated capacity is
|
|
672
|
+
// actually known and bigger than what is live in it.
|
|
673
|
+
const occupancyOf = (c) => c.capacitySlots > 0 && c.capacitySlots >= c.tableSlots
|
|
674
|
+
? c.tableSlots / c.capacitySlots
|
|
675
|
+
: null;
|
|
676
|
+
const hasOccupancy = caches.some(c => {
|
|
677
|
+
const o = occupancyOf(c);
|
|
678
|
+
return o != null && o < 0.9;
|
|
679
|
+
});
|
|
680
|
+
const staleCapacity = caches.filter(c => {
|
|
681
|
+
const o = occupancyOf(c);
|
|
682
|
+
return o != null && o < 0.25 && c.retainedSize >= 262144;
|
|
683
|
+
});
|
|
642
684
|
const headers = [
|
|
643
685
|
'ID',
|
|
644
686
|
'Type',
|
|
645
687
|
'Kind',
|
|
646
688
|
'Entries',
|
|
647
689
|
...(hasSlotDifference ? ['Table Slots'] : []),
|
|
690
|
+
...(hasOccupancy ? ['Capacity', 'Occupancy'] : []),
|
|
648
691
|
'Retained',
|
|
649
692
|
'% Heap',
|
|
650
693
|
'Owner',
|
|
@@ -652,9 +695,12 @@ export function registerCacheAnalysis(server) {
|
|
|
652
695
|
'Weak?',
|
|
653
696
|
...(hasAnyFramework ? ['Framework'] : []),
|
|
654
697
|
];
|
|
655
|
-
const
|
|
656
|
-
|
|
657
|
-
|
|
698
|
+
const numericFrom = 3;
|
|
699
|
+
const numericCount = 1 + (hasSlotDifference ? 1 : 0) + (hasOccupancy ? 2 : 0) + 2;
|
|
700
|
+
const rightCols = new Set();
|
|
701
|
+
for (let i = numericFrom; i < numericFrom + numericCount; i++) {
|
|
702
|
+
rightCols.add(i);
|
|
703
|
+
}
|
|
658
704
|
const rows = caches.map(c => {
|
|
659
705
|
const pct = totalSize > 0
|
|
660
706
|
? ((c.retainedSize / totalSize) * 100).toFixed(1) + '%'
|
|
@@ -665,6 +711,15 @@ export function registerCacheAnalysis(server) {
|
|
|
665
711
|
c.classification,
|
|
666
712
|
formatNumber(c.entryCount),
|
|
667
713
|
...(hasSlotDifference ? [formatNumber(c.tableSlots)] : []),
|
|
714
|
+
...(hasOccupancy
|
|
715
|
+
? [
|
|
716
|
+
c.capacitySlots > 0 ? formatNumber(c.capacitySlots) : '—',
|
|
717
|
+
(() => {
|
|
718
|
+
const o = occupancyOf(c);
|
|
719
|
+
return o == null ? '—' : `${(o * 100).toFixed(1)}%`;
|
|
720
|
+
})(),
|
|
721
|
+
]
|
|
722
|
+
: []),
|
|
668
723
|
formatBytes(c.retainedSize),
|
|
669
724
|
pct,
|
|
670
725
|
c.ownerName,
|
|
@@ -675,11 +730,31 @@ export function registerCacheAnalysis(server) {
|
|
|
675
730
|
});
|
|
676
731
|
const totalRetained = caches.reduce((sum, c) => sum + c.retainedSize, 0);
|
|
677
732
|
const cacheLike = caches.filter(c => c.classification === 'cache-like').length;
|
|
733
|
+
if (summary_only) {
|
|
734
|
+
return toolResult([
|
|
735
|
+
`Cache analysis: ${caches.length} large collection(s) (${cacheLike} cache-like, ${caches.length - cacheLike} plain collection/working-set), ${formatBytes(totalRetained)} total retained`,
|
|
736
|
+
'',
|
|
737
|
+
`Largest: \`${caches[0].ownerName}\` — ${formatNumber(caches[0].entryCount)} entries, ${formatBytes(caches[0].retainedSize)}.`,
|
|
738
|
+
'',
|
|
739
|
+
`_summary_only: the ${formatNumber(rows.length)}-row ranked table and the per-entry samples are withheld. Re-run with \`summary_only: false\` for them._`,
|
|
740
|
+
].join('\n'));
|
|
741
|
+
}
|
|
678
742
|
const lines = [
|
|
679
743
|
`Cache analysis: ${caches.length} large collection(s) (${cacheLike} cache-like, ${caches.length - cacheLike} plain collection/working-set), ${formatBytes(totalRetained)} total retained`,
|
|
680
744
|
'',
|
|
681
745
|
markdownTable(headers, rows, rightCols),
|
|
682
746
|
'',
|
|
747
|
+
...(staleCapacity.length > 0
|
|
748
|
+
? [
|
|
749
|
+
`⚠ **${staleCapacity.length} table(s) below 25% occupancy — this is STALE CAPACITY, not live data.** ` +
|
|
750
|
+
'V8 never shrinks a hash table: an `EphemeronHashTable` (WeakMap/WeakSet) in particular keeps whatever capacity it ever reached for the lifetime of the isolate, so a table that once peaked large stays large after its entries die. ' +
|
|
751
|
+
'The fix is not eviction (the entries are already gone) — it is to stop the peak happening, or to rebuild the collection so the table is reallocated at its real size:',
|
|
752
|
+
...staleCapacity
|
|
753
|
+
.slice(0, 6)
|
|
754
|
+
.map(c => `- \`@${c.nodeId}\` ${c.ownerName}.${c.ownerEdge} — ${formatBytes(c.retainedSize)} holding ${formatNumber(c.tableSlots)} of ~${formatNumber(c.capacitySlots)} slots`),
|
|
755
|
+
'',
|
|
756
|
+
]
|
|
757
|
+
: []),
|
|
683
758
|
'**Kind:**',
|
|
684
759
|
'- **cache-like** — named like a cache, owned by a cache class, or carrying TTL/maxSize config. Missing eviction here is a likely leak.',
|
|
685
760
|
'- **collection** — a plain large Map/Set/Array or per-request working set. Large is not the same as leaking; confirm it is actually retained across requests before treating it as a leak.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-analysis.js","sourceRoot":"","sources":["../../src/tools/cache-analysis.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache-analysis.js","sourceRoot":"","sources":["../../src/tools/cache-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAiBrB,MAAM,aAAa,GACjB,mEAAmE,CAAC;AAEtE;;;GAGG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,aAAa;IACb,WAAW;IACX,YAAY;IACZ,aAAa;IACb,UAAU;IACV,UAAU;CACX,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC1C,QAAQ;IACR,MAAM;IACN,MAAM;IACN,WAAW;IACX,WAAW;IACX,YAAY;CACb,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,qBAAqB,GACzB,mEAAmE,CAAC;AAEtE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAuB;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,IAAI,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,kBAAkB,GAAG,IAAI,CAAC;QACrE,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,WAAW,GAAG,IAAI,CAAC;QACzD,IAAI,kBAAkB,IAAI,WAAW;YAAE,OAAO,IAAI,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CACzB,cAAsB,EACtB,SAAiB,EACjB,SAAiB,EACjB,KAAwB;IAExB,2EAA2E;IAC3E,iEAAiE;IACjE,IAAI,mBAAmB,CAAC,KAAK,IAAI,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IAC7D,IAAI,SAAS;QAAE,OAAO,YAAY,CAAC;IACnC,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,OAAO,YAAY,CAAC;IACvD,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,YAAY,CAAC;IACvD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAe,EAAE,SAAiB;IAChE,wDAAwD;IACxD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IACD,IAAI,SAAS,KAAK,eAAe,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QACnE,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IACE,SAAS,KAAK,YAAY;QAC1B,SAAS,KAAK,8BAA8B,EAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,SAAS,KAAK,YAAY,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAEhC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,0DAA0D;QAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,gCAAgC,CAAC;YACjE,IAAI,KAAK,KAAK,aAAa;gBAAE,OAAO,iBAAiB,CAAC;QACxD,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,kCAAkC,CAAC;IAEvE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,IAAe;IAKnC,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC;IACzD,MAAM,QAAQ,GAAqB,IAAI,CAAC,QAAQ,CAAC;IACjD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAEhD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO;YACL,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAChE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,SAAS,GAAqB,IAAI,CAAC,QAAQ,CAAC;QAClD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACxD,OAAO;oBACL,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;oBACnE,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,QAAQ,EAAE;oBACtD,IAAI,EAAE,KAAK;iBACZ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,gBAAgB,CAAC,IAAe;IACvC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,IACE,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,eAAe,CAAC;gBAChD,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,EAC/D,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;gBACrC,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,YAAY,CAAC,IAAe;IAKnC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,IACE,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,eAAe,CAAC;gBAChD,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,EAC/D,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjE,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;oBACrC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;wBAAE,SAAS;oBAC3D,UAAU,EAAE,CAAC;oBACb,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;oBACxB,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC;wBAAE,SAAS;oBAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;wBAC3D,SAAS;oBACX,WAAW,EAAE,CAAC;gBAChB,CAAC;gBACD,IAAI,WAAW,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBAC1C,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC;oBACnC,UAAU,GAAG,WAAW,CAAC;gBAC3B,CAAC;gBACD,MAAM,OAAO,GACX,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBAClE,OAAO,EAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,qEAAqE;QACrE,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACxD,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GACX,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACtE,OAAO,EAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAC,CAAC;QAC5E,CAAC;QACD,OAAO,EAAC,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAC,CAAC;IACvD,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;IAC9B,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAC,CAAC;AACnE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAe;IACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACnE,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACxC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO,IAAI,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAe,EACf,KAAa;IAEb,MAAM,OAAO,GAAsD,EAAE,CAAC;IAEtE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACnE,MAAM,OAAO,GAAgB,EAAE,CAAC;gBAChC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC3D,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC;wBAAE,SAAS;oBACnD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ;wBACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;wBACnE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC;oBAChC,IAAI,MAAM,GAAG,WAAW,CAAC;oBACzB,IAAI,GAAG,EAAE,CAAC;wBACR,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;4BACjB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;wBAC7E,CAAC;6BAAM,CAAC;4BACN,MAAM,KAAK,GAAa,EAAE,CAAC;4BAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gCAChC,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oCAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;oCACrC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;wCAAE,MAAM;gCAC/B,CAAC;4BACH,CAAC;4BACD,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAC3B,CAAC,MAAM,CAAC;4BACT,MAAM;gCACJ,KAAK,CAAC,MAAM,GAAG,CAAC;oCACd,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,UAAU,GAAG,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG;oCACjH,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC;wBACtE,CAAC;oBACH,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAC,CAAC,CAAC;gBAC3D,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACnE,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBACxC,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;wBAAE,MAAM;oBACnC,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC;oBACxB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;wBAAE,SAAS;oBACvD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ;wBAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;wBACvE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;oBACxE,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAC,CAAC,CAAC;gBACnE,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,SAAS;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;gBAAE,SAAS;YAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ;gBAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;gBACvE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,IAAI,GAAG,GAAG,EAAE,YAAY,EAAE,OAAO,EAAC,CAAC,CAAC;YAC9D,GAAG,EAAE,CAAC;QACR,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,8TAA8T,EAC9T;QACE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CACP,mFAAmF,CACpF;QACH,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,gBAAgB,EAAE,CAAC;aAChB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;aAChC,QAAQ,CAAC,qDAAqD,CAAC;QAClE,oBAAoB,EAAE,CAAC;aACpB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CACP,uSAAuS,CACxS;QACH,wBAAwB,EAAE,CAAC;aACxB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CACP,0OAA0O,CAC3O;QACH,cAAc,EAAE,CAAC;aACd,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CACP,qLAAqL,CACtL;QACH,eAAe,EAAE,CAAC;aACf,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CACP,kEAAkE;YAChE,sEAAsE;YACtE,yCAAyC,CAC5C;QACH,YAAY,EAAE,CAAC;aACZ,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,0OAA0O,CAC3O;KACJ,EACD,KAAK,EAAE,EACL,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACd,eAAe,EACf,YAAY,GACb,EAAE,EAAE;QACH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,oEAAoE;YACpE,MAAM,YAAY,GAMb,EAAE,CAAC;YAER,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;oBAAE,OAAO;gBACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO;gBACpC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO;gBACnC,uEAAuE;gBACvE,kEAAkE;gBAClE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,IAAI,iBAAiB,CAAC;gBACzD,IAAI,CAAC,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,WAAW;oBAAE,OAAO;gBAE/D,MAAM,EACJ,OAAO,EAAE,UAAU,EACnB,UAAU,EACV,aAAa,GACd,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,UAAU,GAAG,WAAW;oBAAE,OAAO;gBACrC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,qEAAqE;oBACrE,mEAAmE;oBACnE,YAAY,CAAC,IAAI,CAAC;wBAChB,MAAM,EAAE,IAAI,CAAC,EAAE;wBACf,cAAc,EAAE,IAAI,CAAC,IAAI;wBACzB,UAAU;wBACV,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI;qBACnC,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3D,MAAM,KAAK,GAAe;oBACxB,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,cAAc,EAAE,IAAI,CAAC,IAAI;oBACzB,UAAU;oBACV,UAAU;oBACV,aAAa;oBACb,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,QAAQ,EAAE,IAAI,CAAC,SAAS;oBACxB,SAAS,EAAE,KAAK,CAAC,IAAI;oBACrB,SAAS,EAAE,KAAK,CAAC,IAAI;oBACrB,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC;oBACpC,SAAS;oBACT,cAAc,EAAE,kBAAkB,CAChC,IAAI,CAAC,IAAI,EACT,KAAK,CAAC,IAAI,EACV,SAAS,EACT,KAAK,CAAC,IAAI,CACX;iBACF,CAAC;gBAEF,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;wBAChD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;wBAC3B,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,QAAQ;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK;oBAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,oEAAoE;YACpE,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;oBACzB,MAAM;oBACN,MAAM;oBACN,OAAO;oBACP,SAAS;oBACT,QAAQ;oBACR,OAAO;oBACP,UAAU;oBACV,SAAS;oBACT,iEAAiE;oBACjE,6DAA6D;oBAC7D,+CAA+C;oBAC/C,SAAS;oBACT,SAAS;oBACT,OAAO;oBACP,MAAM;oBACN,OAAO;iBACR,CAAC,CAAC;gBACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;oBAC9B,WAAW;oBACX,UAAU;oBACV,KAAK;oBACL,WAAW;oBACX,WAAW;oBACX,IAAI;oBACJ,OAAO;oBACP,QAAQ;oBACR,WAAW;oBACX,iEAAiE;oBACjE,mEAAmE;oBACnE,uBAAuB;oBACvB,UAAU;oBACV,WAAW;oBACX,WAAW;oBACX,WAAW;oBACX,YAAY;oBACZ,aAAa;oBACb,YAAY;oBACZ,aAAa;iBACd,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;oBAC3B,OAAO;oBACP,SAAS;oBACT,aAAa;oBACb,QAAQ;oBACR,UAAU;iBACX,CAAC,CAAC;gBACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;oBAC7B,cAAc;oBACd,UAAU;oBACV,SAAS;oBACT,iBAAiB;iBAClB,CAAC,CAAC;gBAEH,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,EAAE;oBACxC,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACvC,IAAI,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;4BAChD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;4BAC3B,QAAQ,GAAG,IAAI,CAAC;4BAChB,MAAM;wBACR,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,QAAQ;wBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK;wBAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACnD,CAAC,CAAC;gBAEF,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;wBAAE,OAAO;oBACzB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;wBAAE,OAAO;oBAC7D,IAAI,IAAI,CAAC,YAAY,GAAG,iBAAiB;wBAAE,OAAO;oBAElD,IAAI,WAAW,GAAG,KAAK,CAAC;oBACxB,IAAI,gBAAgB,GAAG,KAAK,CAAC;oBAC7B,IAAI,aAAa,GAAG,KAAK,CAAC;oBAC1B,IAAI,eAAe,GAAG,KAAK,CAAC;oBAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;oBACvB,IAAI,SAAS,GAAG,uBAAuB,CAAC;oBAExC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;4BAAE,SAAS;wBACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAC5C,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC7B,WAAW,GAAG,IAAI,CAAC;4BACnB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;gCAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAC7B,CAAC;gCACD,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;4BAC1C,CAAC;wBACH,CAAC;wBACD,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;4BAAE,gBAAgB,GAAG,IAAI,CAAC;wBAC3D,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;4BAAE,aAAa,GAAG,IAAI,CAAC;wBACrD,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;4BAAE,eAAe,GAAG,IAAI,CAAC;oBAC3D,CAAC;oBAED,+BAA+B;oBAC/B,MAAM,UAAU,GAAG,WAAW,IAAI,gBAAgB,CAAC;oBACnD,MAAM,iBAAiB,GAAG,WAAW,IAAI,aAAa,CAAC;oBACvD,MAAM,WAAW,GAAG,WAAW,IAAI,eAAe,CAAC;oBAEnD,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW;wBAAE,OAAO;oBAE9D,IAAI,iBAAiB;wBAAE,SAAS,GAAG,2BAA2B,CAAC;oBAC/D,IAAI,WAAW;wBAAE,SAAS,GAAG,6BAA6B,CAAC;oBAE3D,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;oBACjC,WAAW,CAAC;wBACV,MAAM,EAAE,IAAI,CAAC,EAAE;wBACf,cAAc,EAAE,SAAS;wBACzB,UAAU,EAAE,cAAc;wBAC1B,UAAU,EAAE,cAAc;wBAC1B,kEAAkE;wBAClE,kEAAkE;wBAClE,sBAAsB;wBACtB,aAAa,EAAE,cAAc;wBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,QAAQ,EAAE,IAAI,CAAC,SAAS;wBACxB,SAAS,EAAE,KAAK,CAAC,IAAI;wBACrB,SAAS,EAAE,KAAK,CAAC,IAAI;wBACrB,WAAW,EAAE,KAAK;wBAClB,SAAS,EAAE,EAAE;wBACb,cAAc,EAAE,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;qBAC9D,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,+CAA+C;gBAC/C,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;wBAAE,OAAO;oBACnD,IACE,IAAI,CAAC,IAAI,KAAK,QAAQ;wBACtB,IAAI,CAAC,IAAI,KAAK,QAAQ;wBACtB,IAAI,CAAC,IAAI,KAAK,YAAY;wBAE1B,OAAO;oBAET,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;4BAAE,SAAS;wBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBAC3B,IAAI,MAAM,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI;4BAAE,SAAS;wBAChD,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC;4BAAE,SAAS;wBAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAC5C,0BAA0B;wBAC1B,IACE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;4BACzB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,WAAW,CAAC;4BAErD,SAAS;wBAEX,WAAW,CAAC;4BACV,MAAM,EAAE,MAAM,CAAC,EAAE;4BACjB,cAAc,EAAE,iBAAiB;4BACjC,UAAU,EAAE,MAAM,CAAC,UAAU;4BAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;4BAC7B,aAAa,EAAE,MAAM,CAAC,UAAU;4BAChC,YAAY,EAAE,MAAM,CAAC,YAAY;4BACjC,QAAQ,EAAE,MAAM,CAAC,SAAS;4BAC1B,SAAS,EAAE,IAAI,CAAC,IAAI;4BACpB,SAAS,EAAE,QAAQ;4BACnB,WAAW,EAAE,KAAK;4BAClB,SAAS,EAAE,EAAE;4BACb,cAAc,EAAE,kBAAkB,CAChC,iBAAiB,EACjB,QAAQ,EACR,EAAE,CACH;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,sEAAsE;YACtE,mEAAmE;YACnE,8DAA8D;YAC9D,MAAM,mBAAmB,GAAG,GAAa,EAAE;gBACzC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,EAAE,CAAC;gBACzC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;gBACzD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,OAAO;oBACL,EAAE;oBACF,wBAAwB,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,0BAA0B,YAAY,CAAC,WAAW,CAAC,sBAAsB,WAAW,CAAC,iBAAiB,CAAC,WAAW;oBAC3K,EAAE;oBACF,gPAAgP;oBAChP,EAAE;oBACF,aAAa,CACX,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EACpD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBACX,CAAC,CAAC,cAAc;wBAChB,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;wBAC1B,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;wBAC3B,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE;4BACrB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;4BAChC,CAAC,CAAC,CAAC,CAAC,SAAS;wBACf,IAAI,CAAC,CAAC,MAAM,EAAE;qBACf,CAAC,EACF,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAChB;oBACD,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;wBAClC,CAAC,CAAC;4BACE,EAAE;4BACF,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,iEAAiE;yBACvH;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;YACJ,CAAC,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,UAAU,CACf;oBACE,qCAAqC,WAAW,mBAAmB,WAAW,CAAC,iBAAiB,CAAC,yCAAyC;oBAC1I,GAAG,mBAAmB,EAAE;iBACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACJ,CAAC;YAED,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;YAC7D,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,CACnC,CAAC;YACF,sEAAsE;YACtE,qDAAqD;YACrD,MAAM,WAAW,GAAG,CAAC,CAAa,EAAiB,EAAE,CACnD,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,UAAU;gBACpD,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,aAAa;gBAChC,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACnC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACtC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC;YAC3D,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG;gBACd,IAAI;gBACJ,MAAM;gBACN,MAAM;gBACN,SAAS;gBACT,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,UAAU;gBACV,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,OAAO;gBACP,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC;YACF,MAAM,WAAW,GAAG,CAAC,CAAC;YACtB,MAAM,YAAY,GAChB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,WAAW,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9D,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC1B,MAAM,GAAG,GACP,SAAS,GAAG,CAAC;oBACX,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;oBACvD,CAAC,CAAC,GAAG,CAAC;gBACV,OAAO;oBACL,IAAI,CAAC,CAAC,MAAM,EAAE;oBACd,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,cAAc;oBAChB,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;oBAC1B,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,GAAG,CAAC,YAAY;wBACd,CAAC,CAAC;4BACE,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;4BACzD,CAAC,GAAG,EAAE;gCACJ,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gCACzB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;4BACtD,CAAC,CAAC,EAAE;yBACL;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC3B,GAAG;oBACH,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBAC5B,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjD,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CACjC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY,EAChC,CAAC,CACF,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,YAAY,CACvC,CAAC,MAAM,CAAC;YAET,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,UAAU,CACf;oBACE,mBAAmB,MAAM,CAAC,MAAM,yBAAyB,SAAS,gBAAgB,MAAM,CAAC,MAAM,GAAG,SAAS,mCAAmC,WAAW,CAAC,aAAa,CAAC,iBAAiB;oBACzL,EAAE;oBACF,cAAc,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG;oBAC9H,EAAE;oBACF,sBAAsB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,0GAA0G;iBAC1J,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG;gBACZ,mBAAmB,MAAM,CAAC,MAAM,yBAAyB,SAAS,gBAAgB,MAAM,CAAC,MAAM,GAAG,SAAS,mCAAmC,WAAW,CAAC,aAAa,CAAC,iBAAiB;gBACzL,EAAE;gBACF,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC;gBACvC,EAAE;gBACF,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;oBAC1B,CAAC,CAAC;wBACE,OAAO,aAAa,CAAC,MAAM,2EAA2E;4BACpG,uOAAuO;4BACvO,uKAAuK;wBACzK,GAAG,aAAa;6BACb,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;6BACX,GAAG,CACF,CAAC,CAAC,EAAE,CACF,QAAQ,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CACvK;wBACH,EAAE;qBACH;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,WAAW;gBACX,wIAAwI;gBACxI,4LAA4L;gBAC5L,iQAAiQ;gBACjQ,EAAE;gBACF,sBAAsB;gBACtB,kFAAkF;gBAClF,+DAA+D;gBAC/D,8DAA8D;aAC/D,CAAC;YAEF,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,KAAK,CAAC,IAAI,CACR,EAAE,EACF,2BAA2B,EAC3B,kDAAkD,GAAG,CAAC,MAAM,KAAK,EACjE,qDAAqD,GAAG,CAAC,MAAM,KAAK,EACpE,iDAAiD,GAAG,CAAC,MAAM,KAAK,EAChE,4FAA4F,CAC7F,CAAC;YACJ,CAAC;YAED,4EAA4E;YAC5E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;gBACzB,OAAO;gBACP,MAAM;gBACN,aAAa;gBACb,cAAc;gBACd,UAAU;gBACV,UAAU;gBACV,WAAW;aACZ,CAAC,CAAC;YACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;gBACnC,UAAU;gBACV,OAAO;gBACP,SAAS;gBACT,QAAQ;gBACR,UAAU;gBACV,OAAO;gBACP,MAAM;gBACN,WAAW;gBACX,YAAY;gBACZ,KAAK;aACN,CAAC,CAAC;YACH,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,MAAM,YAAY,GAAa,EAAE,CAAC;YAElC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEpB,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBAC1B,IAAI,gBAAgB,GAAG,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAwC,EAAE,CAAC;gBAE5D,MAAM,QAAQ,GAAG,CAAC,CAAc,EAAE,EAAE;oBAClC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;wBAChC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;4BAAE,SAAS;wBACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBAE3B,IACE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;4BACrB,gBAAgB,GAAG,CAAC;4BACpB,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gCACvB,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;oCACvB,MAAM,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC,EAC3C,CAAC;4BACD,gBAAgB;gCACd,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;4BAChD,gBAAgB,GAAG,KAAK,CAAC;wBAC3B,CAAC;wBAED,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;4BACpC,IAAI,GAAW,CAAC;4BAChB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gCACpB,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;gCAChC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;4BAC5D,CAAC;iCAAM,IACL,MAAM,CAAC,IAAI,KAAK,QAAQ;gCACxB,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;oCACvB,MAAM,CAAC,IAAI,KAAK,qBAAqB,CAAC,EACxC,CAAC;gCACD,GAAG;oCACD,MAAM,CAAC,SAAS,KAAK,CAAC;wCACpB,CAAC,CAAC,KAAK;wCACP,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;4BACtC,CAAC;iCAAM,CAAC;gCACN,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;4BACpB,CAAC;4BACD,WAAW,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBAEF,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,2CAA2C;gBAC3C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC/B,IAAI,QAAQ;wBAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC5C,CAAC;gBAED,IACE,gBAAgB,IAAI,CAAC;oBACrB,CAAC,CAAC,YAAY,GAAG,gBAAgB,GAAG,CAAC;oBACrC,CAAC,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,EAC5B,CAAC;oBACD,cAAc,CAAC,IAAI,CACjB,SAAS,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,cAAc,yBAAyB,gBAAgB,cAAc,WAAW,CAAC,gBAAgB,CAAC,kCAAkC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,uHAAuH,CACjX,CAAC;gBACJ,CAAC;gBAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,SAAS,GAAG,WAAW;yBAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;yBAC/B,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,YAAY,CAAC,IAAI,CACf,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,cAAc,OAAO,SAAS,EAAE,CACvD,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CACR,EAAE,EACF,KAAK,EACL,EAAE,EACF,2BAA2B,EAC3B,EAAE,EACF,kGAAkG,EAClG,EAAE,CACH,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;gBAC9B,KAAK,CAAC,IAAI,CACR,EAAE,EACF,gLAAgL,CACjL,CAAC;YACJ,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC5C,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;wBAAE,SAAS;oBACnC,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,cAAc,sBAAsB,OAAO,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAChH,CAAC;oBACF,IAAI,eAAe,EAAE,CAAC;wBACpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;4BACxB,MAAM,UAAU,GACd,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE;gCACtB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;gCACnC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;4BACnB,MAAM,UAAU,GACd,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;gCACxB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;gCACrC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;4BACrB,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,MAAM,UAAU,EAAE,CAAC,CAAC;wBAClD,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;4BACxB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;wBACxD,CAAC;oBACH,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,8CAA8C;YAC9C,IAAI,wBAAwB,EAAE,CAAC;gBAC7B,MAAM,eAAe,GAAa,EAAE,CAAC;gBAErC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBACpC,IAAI,CAAC,CAAC,cAAc,KAAK,iBAAiB;wBAAE,SAAS;oBACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC5C,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,IAAI,CAAC,CAAC,cAAc,KAAK,KAAK,IAAI,CAAC,CAAC,cAAc,KAAK,KAAK;wBAC1D,SAAS;oBAEX,qDAAqD;oBACrD,MAAM,iBAAiB,GAIlB,EAAE,CAAC;oBAER,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACnC,IACE,IAAI,CAAC,aAAa,KAAK,OAAO;4BAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;4BAE5B,SAAS;wBAEX,MAAM,OAAO,GAAgB,EAAE,CAAC;wBAChC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;4BACxC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;wBAC1B,CAAC;wBAED,wCAAwC;wBACxC,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChD,MAAM,SAAS,GAAG,CAAC,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAErD,KACE,IAAI,CAAC,GAAG,SAAS,EACjB,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,MAAM,GAAG,EAAE,EACnD,CAAC,IAAI,IAAI,EACT,CAAC;4BACD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;4BACvB,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gCAAE,SAAS;4BACnD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;gCACrD,SAAS;4BAEX,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;4BACrB,IAAI,UAAU,GAAG,CAAC,CAAC;4BACnB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gCAChC,UAAU,EAAE,CAAC;gCACb,IACE,EAAE,CAAC,IAAI,KAAK,UAAU;oCACtB,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;oCAC1B,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAC3B,CAAC;oCACD,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;gCACrC,CAAC;4BACH,CAAC;4BAED,iBAAiB,CAAC,IAAI,CAAC;gCACrB,WAAW;gCACX,YAAY,EAAE,GAAG,CAAC,YAAY;gCAC9B,UAAU;6BACX,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM;oBACR,CAAC;oBAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC;wBAAE,SAAS;oBAE3C,4CAA4C;oBAC5C,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,cAAc,GAAG,CAAC,CAAC;oBACvB,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,gBAAgB;oBAE9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAClD,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;wBAChC,MAAM,WAAW,GACf,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC;wBAC/D,MAAM,aAAa,GACjB,EAAE,CAAC,WAAW,KAAK,GAAG,CAAC,WAAW;4BAClC,EAAE,CAAC,WAAW,GAAG,CAAC;4BAClB,EAAE,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,CAAC;wBAEnC,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;4BACjC,cAAc,EAAE,CAAC;wBACnB,CAAC;oBACH,CAAC;oBAED,IACE,cAAc,IAAI,CAAC;wBACnB,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC;4BAC5B,cAAc,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,EAClD,CAAC;wBACD,MAAM,cAAc,GAAG,cAAc,GAAG,CAAC,CAAC;wBAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC;wBAClC,eAAe,CAAC,IAAI,CAClB,SAAS,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,cAAc,SAAS,cAAc,4CAA4C,WAAW,CAAC,QAAQ,CAAC,uBAAuB,GAAG,CAAC,WAAW,KAAK;4BACxK,kEAAkE,WAAW,CAAC,QAAQ,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,GAAG,CACpH,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CACR,EAAE,EACF,KAAK,EACL,EAAE,EACF,qCAAqC,EACrC,EAAE,CACH,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;oBAC/B,KAAK,CAAC,IAAI,CACR,EAAE,EACF,iJAAiJ,CAClJ,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,GAAG,mBAAmB,EAAE,CAAC,CAAC;YACrC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall memory_lab
|
|
9
|
+
*/
|
|
10
|
+
import type { IHeapSnapshot } from '@memlab/core';
|
|
11
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
12
|
+
export type CensusKind = 'detached' | 'listeners';
|
|
13
|
+
export interface Census {
|
|
14
|
+
/** class / callback name -> count */
|
|
15
|
+
counts: Map<string, number>;
|
|
16
|
+
total: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Detached DOM, bucketed by element tag.
|
|
20
|
+
*
|
|
21
|
+
* Only PINNED nodes are counted, matching `memlab_detached_dom`. Detached nodes
|
|
22
|
+
* with no retainer path are GC-eligible rather than leaked, and their count
|
|
23
|
+
* swings with whatever the collector happened to have done before the capture —
|
|
24
|
+
* including them makes every diff look noisy and hides the rows that moved.
|
|
25
|
+
*/
|
|
26
|
+
export declare function censusDetached(snapshot: IHeapSnapshot): Census;
|
|
27
|
+
/**
|
|
28
|
+
* Listener records — objects carrying both a callback-ish and a context-ish
|
|
29
|
+
* property — bucketed by callback function name.
|
|
30
|
+
*
|
|
31
|
+
* Bucketing by CALLBACK rather than by host is deliberate. A listener leak shows
|
|
32
|
+
* up as the same handler registered N times; the host is usually a single
|
|
33
|
+
* long-lived emitter whose count never moves, so a host-keyed census reports
|
|
34
|
+
* "1 → 1" for exactly the leak it was run to find.
|
|
35
|
+
*/
|
|
36
|
+
export declare function censusListeners(snapshot: IHeapSnapshot): Census;
|
|
37
|
+
/**
|
|
38
|
+
* Keep a census row readable without losing which row it is.
|
|
39
|
+
*
|
|
40
|
+
* Blink's C++ template names (`blink::BasicHeapVector<...>`) run to hundreds of
|
|
41
|
+
* characters and a table of them costs more tokens than the counts it exists to
|
|
42
|
+
* show — one census eval blew the result cap on exactly this. Elide the type
|
|
43
|
+
* arguments first, since the head of the name is the identifying part, and only
|
|
44
|
+
* hard-truncate if it is still too long.
|
|
45
|
+
*/
|
|
46
|
+
export declare function clampKey(key: string): string;
|
|
47
|
+
export interface DiffRow {
|
|
48
|
+
key: string;
|
|
49
|
+
baseline: number;
|
|
50
|
+
target: number;
|
|
51
|
+
delta: number;
|
|
52
|
+
}
|
|
53
|
+
export declare function diffCensus(baseline: Census, target: Census): DiffRow[];
|
|
54
|
+
export declare function registerCensusDiff(server: McpServer): void;
|
|
55
|
+
//# sourceMappingURL=census-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"census-diff.d.ts","sourceRoot":"","sources":["../../src/tools/census-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAY,aAAa,EAAC,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAqCvE,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAElD,MAAM,WAAW,MAAM;IACrB,qCAAqC;IACrC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAWD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAO9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAoB/D;AAID;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAetE;AA6DD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwG1D"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall memory_lab
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { armScanBudgetFor, resolveRungs, scaledTimeoutMs, withSnapshotAt, } from '../snapshot-borrow.js';
|
|
12
|
+
import { abbreviateBlinkTypeName, errorResult, formatNumber, markdownTable, pathsHeader, toolResult, } from '../utils.js';
|
|
13
|
+
import { extractElementTag, isDetachedDOMNode, isPinned, } from './detached-dom.js';
|
|
14
|
+
/**
|
|
15
|
+
* A census is a per-CLASS population at one point in the ladder; a census DIFF
|
|
16
|
+
* is the same census taken at two points and compared row by row.
|
|
17
|
+
*
|
|
18
|
+
* This exists because the diff, not the totals, is the evidence. Two totals that
|
|
19
|
+
* match ("777 detached at both ends") are consistent with a leak that swapped
|
|
20
|
+
* one population for another of equal size, which is a real and observed shape.
|
|
21
|
+
* The per-class rows are what turn "no leak" from a guess into a finding — and
|
|
22
|
+
* the negative result is the common case, so the cheap version of it has to be
|
|
23
|
+
* one call rather than a hand-written thirty-line eval per round.
|
|
24
|
+
*/
|
|
25
|
+
const CALLBACK_PROPS = new Set(['callback', 'fn', 'handler', 'listener']);
|
|
26
|
+
const CONTEXT_PROPS = new Set(['context', 'ctx', 'this', 'target']);
|
|
27
|
+
function emptyCensus() {
|
|
28
|
+
return { counts: new Map(), total: 0 };
|
|
29
|
+
}
|
|
30
|
+
function bump(census, key) {
|
|
31
|
+
census.counts.set(key, (census.counts.get(key) ?? 0) + 1);
|
|
32
|
+
census.total += 1;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Detached DOM, bucketed by element tag.
|
|
36
|
+
*
|
|
37
|
+
* Only PINNED nodes are counted, matching `memlab_detached_dom`. Detached nodes
|
|
38
|
+
* with no retainer path are GC-eligible rather than leaked, and their count
|
|
39
|
+
* swings with whatever the collector happened to have done before the capture —
|
|
40
|
+
* including them makes every diff look noisy and hides the rows that moved.
|
|
41
|
+
*/
|
|
42
|
+
export function censusDetached(snapshot) {
|
|
43
|
+
const census = emptyCensus();
|
|
44
|
+
snapshot.nodes.forEach((node) => {
|
|
45
|
+
if (!isDetachedDOMNode(node) || !isPinned(node))
|
|
46
|
+
return;
|
|
47
|
+
bump(census, extractElementTag(node.name));
|
|
48
|
+
});
|
|
49
|
+
return census;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Listener records — objects carrying both a callback-ish and a context-ish
|
|
53
|
+
* property — bucketed by callback function name.
|
|
54
|
+
*
|
|
55
|
+
* Bucketing by CALLBACK rather than by host is deliberate. A listener leak shows
|
|
56
|
+
* up as the same handler registered N times; the host is usually a single
|
|
57
|
+
* long-lived emitter whose count never moves, so a host-keyed census reports
|
|
58
|
+
* "1 → 1" for exactly the leak it was run to find.
|
|
59
|
+
*/
|
|
60
|
+
export function censusListeners(snapshot) {
|
|
61
|
+
const census = emptyCensus();
|
|
62
|
+
snapshot.nodes.forEach((node) => {
|
|
63
|
+
if (node.type !== 'object' || node.id <= 3)
|
|
64
|
+
return;
|
|
65
|
+
let callbackName = null;
|
|
66
|
+
let hasContext = false;
|
|
67
|
+
for (const edge of node.references) {
|
|
68
|
+
const name = String(edge.name_or_index);
|
|
69
|
+
if (CALLBACK_PROPS.has(name) && edge.toNode.type === 'closure') {
|
|
70
|
+
callbackName =
|
|
71
|
+
edge.toNode.name.length > 0 ? edge.toNode.name : '(anonymous)';
|
|
72
|
+
}
|
|
73
|
+
else if (CONTEXT_PROPS.has(name)) {
|
|
74
|
+
hasContext = true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (callbackName != null && hasContext) {
|
|
78
|
+
bump(census, callbackName);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return census;
|
|
82
|
+
}
|
|
83
|
+
const MAX_KEY_LEN = 60;
|
|
84
|
+
/**
|
|
85
|
+
* Keep a census row readable without losing which row it is.
|
|
86
|
+
*
|
|
87
|
+
* Blink's C++ template names (`blink::BasicHeapVector<...>`) run to hundreds of
|
|
88
|
+
* characters and a table of them costs more tokens than the counts it exists to
|
|
89
|
+
* show — one census eval blew the result cap on exactly this. Elide the type
|
|
90
|
+
* arguments first, since the head of the name is the identifying part, and only
|
|
91
|
+
* hard-truncate if it is still too long.
|
|
92
|
+
*/
|
|
93
|
+
export function clampKey(key) {
|
|
94
|
+
const abbreviated = abbreviateBlinkTypeName(key);
|
|
95
|
+
return abbreviated.length > MAX_KEY_LEN
|
|
96
|
+
? `${abbreviated.slice(0, MAX_KEY_LEN - 1)}\u2026`
|
|
97
|
+
: abbreviated;
|
|
98
|
+
}
|
|
99
|
+
export function diffCensus(baseline, target) {
|
|
100
|
+
const keys = new Set([...baseline.counts.keys(), ...target.counts.keys()]);
|
|
101
|
+
const rows = [];
|
|
102
|
+
for (const key of keys) {
|
|
103
|
+
const b = baseline.counts.get(key) ?? 0;
|
|
104
|
+
const t = target.counts.get(key) ?? 0;
|
|
105
|
+
rows.push({ key, baseline: b, target: t, delta: t - b });
|
|
106
|
+
}
|
|
107
|
+
// Largest movers first in both directions: a class that SHRANK by 200 is as
|
|
108
|
+
// informative as one that grew by 200, and sorting on the signed delta would
|
|
109
|
+
// bury it at the bottom.
|
|
110
|
+
rows.sort((a, b) => Math.abs(b.delta) - Math.abs(a.delta) || b.target - a.target);
|
|
111
|
+
return rows;
|
|
112
|
+
}
|
|
113
|
+
function renderKind(kind, baseline, target, topN) {
|
|
114
|
+
const rows = diffCensus(baseline, target);
|
|
115
|
+
const moved = rows.filter(r => r.delta !== 0);
|
|
116
|
+
const label = kind === 'detached' ? 'Detached DOM (pinned)' : 'Listener records';
|
|
117
|
+
const keyHeader = kind === 'detached' ? 'Element' : 'Callback';
|
|
118
|
+
const lines = [];
|
|
119
|
+
lines.push(`### ${label}`);
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push(`Totals: **${formatNumber(baseline.total)} → ${formatNumber(target.total)}** ` +
|
|
122
|
+
`(Δ ${target.total - baseline.total >= 0 ? '+' : ''}${formatNumber(target.total - baseline.total)}) ` +
|
|
123
|
+
`across ${formatNumber(rows.length)} distinct ${kind === 'detached' ? 'element type(s)' : 'callback(s)'}.`);
|
|
124
|
+
lines.push('');
|
|
125
|
+
if (moved.length === 0) {
|
|
126
|
+
lines.push(`**IDENTICAL** — every one of the ${formatNumber(rows.length)} rows is unchanged. ` +
|
|
127
|
+
'This is the strong form of a negative result: not merely equal totals, but no ' +
|
|
128
|
+
'population swapped for another of the same size.');
|
|
129
|
+
return lines;
|
|
130
|
+
}
|
|
131
|
+
lines.push(markdownTable([keyHeader, 'Baseline', 'Target', 'Δ'], moved
|
|
132
|
+
.slice(0, topN)
|
|
133
|
+
.map(r => [
|
|
134
|
+
clampKey(r.key),
|
|
135
|
+
formatNumber(r.baseline),
|
|
136
|
+
formatNumber(r.target),
|
|
137
|
+
`${r.delta >= 0 ? '+' : ''}${formatNumber(r.delta)}`,
|
|
138
|
+
]), new Set([1, 2, 3])));
|
|
139
|
+
if (moved.length > topN) {
|
|
140
|
+
lines.push('');
|
|
141
|
+
lines.push(`_… ${formatNumber(moved.length - topN)} further changed row(s) omitted; raise \`top_n\` to see them._`);
|
|
142
|
+
}
|
|
143
|
+
lines.push('');
|
|
144
|
+
lines.push(`${formatNumber(moved.length)} of ${formatNumber(rows.length)} rows changed; ` +
|
|
145
|
+
`${formatNumber(rows.length - moved.length)} identical.`);
|
|
146
|
+
return lines;
|
|
147
|
+
}
|
|
148
|
+
export function registerCensusDiff(server) {
|
|
149
|
+
server.tool('memlab_census_diff', 'Take the detached-DOM and listener-record census at TWO rungs and diff them per class / per callback in one call. ' +
|
|
150
|
+
'This is the mandated baseline-vs-final comparison: run the census on BOTH ends and compare the per-class distribution, not just the two totals.\n\n' +
|
|
151
|
+
'Two totals that match are NOT a negative result — they are also consistent with one population being swapped for another of the same size, which is a real observed shape. ' +
|
|
152
|
+
'The per-row diff is what makes the negative claim: "777 nodes across 66 classes, zero change on every one" is a finding; "777 at both ends" is a guess.\n\n' +
|
|
153
|
+
'Replaces the ~30-line eval that otherwise gets rewritten every round (build {class -> count} on each rung, diff the maps by hand), and loads one graph at a time so it works on a ladder of 250-540 MB captures.', {
|
|
154
|
+
baseline: z
|
|
155
|
+
.string()
|
|
156
|
+
.describe('Path to the EARLY rung. Local path, manifold:// URL, or bare filename.'),
|
|
157
|
+
target: z
|
|
158
|
+
.string()
|
|
159
|
+
.describe('Path to the LATE rung, compared against the baseline.'),
|
|
160
|
+
kinds: z
|
|
161
|
+
.array(z.enum(['detached', 'listeners']))
|
|
162
|
+
.optional()
|
|
163
|
+
.default(['detached', 'listeners'])
|
|
164
|
+
.describe('Which censuses to take. Both by default, which is what the protocol asks for.'),
|
|
165
|
+
top_n: z
|
|
166
|
+
.number()
|
|
167
|
+
.int()
|
|
168
|
+
.min(1)
|
|
169
|
+
.optional()
|
|
170
|
+
.default(25)
|
|
171
|
+
.describe('Maximum CHANGED rows to print per kind. Unchanged rows are counted, never listed.'),
|
|
172
|
+
max_file_size_mb: z
|
|
173
|
+
.number()
|
|
174
|
+
.optional()
|
|
175
|
+
.describe('Per-file size ceiling, matching memlab_load_snapshot.'),
|
|
176
|
+
}, async ({ baseline, target, kinds, top_n, max_file_size_mb }) => {
|
|
177
|
+
try {
|
|
178
|
+
const { rungs, largestMB } = resolveRungs([baseline, target], max_file_size_mb);
|
|
179
|
+
const [baseRung, targetRung] = rungs;
|
|
180
|
+
// Both censuses are full-heap walks, so they run against the same 90s
|
|
181
|
+
// scan guardrail every other tool does. Scale it from the largest
|
|
182
|
+
// capture or a big ladder loses a rung to the guardrail rather than to
|
|
183
|
+
// anything about the heap.
|
|
184
|
+
const scanBudgetMs = scaledTimeoutMs(largestMB);
|
|
185
|
+
const take = (snapshot) => {
|
|
186
|
+
const out = {
|
|
187
|
+
detached: emptyCensus(),
|
|
188
|
+
listeners: emptyCensus(),
|
|
189
|
+
};
|
|
190
|
+
// One pass per kind, but only for the kinds asked for: the listener
|
|
191
|
+
// walk visits every object's edges and is the expensive half.
|
|
192
|
+
if (kinds.includes('detached'))
|
|
193
|
+
out.detached = censusDetached(snapshot);
|
|
194
|
+
if (kinds.includes('listeners'))
|
|
195
|
+
out.listeners = censusListeners(snapshot);
|
|
196
|
+
return out;
|
|
197
|
+
};
|
|
198
|
+
armScanBudgetFor(scanBudgetMs);
|
|
199
|
+
const baseCensus = await withSnapshotAt(baseRung.localPath, take);
|
|
200
|
+
armScanBudgetFor(scanBudgetMs);
|
|
201
|
+
const targetCensus = await withSnapshotAt(targetRung.localPath, take);
|
|
202
|
+
const lines = [];
|
|
203
|
+
lines.push('## Census diff');
|
|
204
|
+
lines.push('');
|
|
205
|
+
lines.push(`- baseline: \`${baseRung.label}\``);
|
|
206
|
+
lines.push(`- target: \`${targetRung.label}\``);
|
|
207
|
+
lines.push('');
|
|
208
|
+
let anyMoved = false;
|
|
209
|
+
for (const kind of kinds) {
|
|
210
|
+
const rows = diffCensus(baseCensus[kind], targetCensus[kind]);
|
|
211
|
+
if (rows.some(r => r.delta !== 0))
|
|
212
|
+
anyMoved = true;
|
|
213
|
+
lines.push(...renderKind(kind, baseCensus[kind], targetCensus[kind], top_n));
|
|
214
|
+
lines.push('');
|
|
215
|
+
}
|
|
216
|
+
lines.push(anyMoved
|
|
217
|
+
? '_A changed row is a population, not yet a leak. Trace a sample with `memlab_retainer_trace` and check ' +
|
|
218
|
+
'`memlab_dev_artifacts` before attributing it — React DEV and Fast Refresh populations grow across a ladder too._'
|
|
219
|
+
: '_Nothing moved in either census. Record this: an unchanged per-class distribution across the ladder is the ' +
|
|
220
|
+
'strongest cheap evidence that a suspected leak is not in the DOM or listener population at all._');
|
|
221
|
+
return toolResult(lines.join('\n'), pathsHeader(rungs.map(r => r.label)));
|
|
222
|
+
}
|
|
223
|
+
catch (e) {
|
|
224
|
+
return errorResult(e instanceof Error ? e : new Error(String(e)));
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=census-diff.js.map
|