ai-spend-agent 0.1.0 → 0.1.3

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 ADDED
@@ -0,0 +1,40 @@
1
+ # ai-spend-agent
2
+
3
+ **Your AI spend in one view, in 90 seconds — local-first, no signup.**
4
+
5
+ ```bash
6
+ npx ai-spend-agent
7
+ ```
8
+
9
+ If you use **Claude Code or Codex**, that one command reads the session logs
10
+ already on your machine and shows your real usage: total dollars *estimated at
11
+ API-equivalent rates*, where the money goes, a ranked "where to cut" list, a
12
+ subscription-vs-API **plan check**, and the **dead context** you pay for but
13
+ never use (tools/skills/MCP servers loaded on every turn and never invoked).
14
+
15
+ No logs? You get an instant, clearly-labeled demo on sample data.
16
+
17
+ ## Connect real billing (optional, ~2 min)
18
+
19
+ ```bash
20
+ ai-spend-agent connect openai # org-owner Admin key
21
+ ai-spend-agent connect anthropic # Admin key
22
+ ```
23
+
24
+ Billing-API numbers from OpenAI/Anthropic are tagged `verified`; local-log
25
+ numbers are always `estimated`; the beta Cursor/Copilot connectors are
26
+ `estimated` until reconciled against a real invoice. Every figure carries its
27
+ confidence label — that's the product.
28
+
29
+ ## Privacy
30
+
31
+ Local-first: nothing is uploaded, there is no telemetry, secrets are
32
+ redacted from all output and persisted state, and provider keys are only ever
33
+ referenced as `env:NAME` — never stored.
34
+
35
+ ## Docs
36
+
37
+ Full README, MCP server, and connector guides:
38
+ **https://github.com/futurastudio/ai-spend-agent#readme**
39
+
40
+ MIT licensed.
package/dist/index.js CHANGED
@@ -1,10 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { realpathSync } from "node:fs";
3
- import { mkdir, readFile, writeFile } from "node:fs/promises";
4
- import { homedir } from "node:os";
5
- import { dirname, join, resolve } from "node:path";
6
- import { pathToFileURL } from "node:url";
7
- import { analyzeSpend, attributeUsageRecords, detectLocalCredentials, loadLocalAgentUsage, loadSampleUsageData, scanLocalUsageSignals, buildMissingSourcePrompts, confirmMapping, createProviderConnectorStub, createLocalFolderSourceRegistry, createScanAuditLog, fetchProviderUsageRecords, addApprovedSource, slugifySourceId } from "@agent-finops/core";
3
+ import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
4
+ import { dirname, extname, join, resolve } from "node:path";
5
+ import { fileURLToPath, pathToFileURL } from "node:url";
6
+ import { analyzeSpend, attributeUsageRecords, detectLocalCredentials, redactSecrets, unsafeScanRootReason, loadDeadContext, sampleDeadContext, loadLocalAgentUsage, loadSampleUsageData, scanLocalUsageSignals, buildMissingSourcePrompts, confirmMapping, createProviderConnectorStub, createLocalFolderSourceRegistry, createScanAuditLog, fetchProviderUsageRecords, addApprovedSource, slugifySourceId } from "@agent-finops/core";
8
7
  import { generateActionPlanMarkdown, generateApplyArtifactMarkdown, generateDemoPackageMarkdown, generateHtmlReport, generateMarkdownReport, generatePlainEnglishSummary, generatePolicyConfigDraftMarkdown, generateReportCardCaption, generateReportCardSvg, generateVerificationPlanMarkdown, groupByDimensions } from "@agent-finops/report";
9
8
  export async function runCli(argv = process.argv.slice(2)) {
10
9
  if (argv.includes("--help") || argv.includes("-h") || argv[0] === "help") {
@@ -21,6 +20,9 @@ export async function runCli(argv = process.argv.slice(2)) {
21
20
  if (args.command === "doctor") {
22
21
  return doctorCommand(args);
23
22
  }
23
+ if (args.command === "reset") {
24
+ return resetCommand(args);
25
+ }
24
26
  if (args.command === "init") {
25
27
  return initCommand(args);
26
28
  }
@@ -64,33 +66,7 @@ export async function runCli(argv = process.argv.slice(2)) {
64
66
  };
65
67
  }
66
68
  async function quickstartCommand(args) {
67
- // Real data beats sample data: (1) connected/synced state, then (2) usage
68
- // mined from this machine's agent logs (Claude Code / Codex — the spend no
69
- // billing API can see), then (3) the bundled sample so the wow ALWAYS lands.
70
- let records = [];
71
- let mode = "demo";
72
- const localSpend = await readOptionalLocalSpend(resolve(args.path));
73
- if (localSpend && localSpend.length > 0) {
74
- records = localSpend;
75
- mode = "connected";
76
- }
77
- else if (!args.sample) {
78
- const logs = await loadLocalAgentUsage({
79
- // Env overrides keep tests (and unusual installs) isolated from $HOME.
80
- claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
81
- codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
82
- }).catch(() => undefined);
83
- if (logs && logs.records.length > 0) {
84
- records = logs.records;
85
- mode = "local-logs";
86
- }
87
- }
88
- if (records.length === 0) {
89
- // loadSampleUsageData resolves the bundled CSVs relative to the installed
90
- // package, so this works from ANY directory (true zero-config).
91
- records = await loadSampleUsageData();
92
- mode = "demo";
93
- }
69
+ const { records, mode, warnings } = await loadInstantReadData(args);
94
70
  const summary = analyzeSpend(records);
95
71
  const groupBy = args.groupBy ?? "model";
96
72
  const color = args.noColor ? false : undefined;
@@ -98,14 +74,38 @@ async function quickstartCommand(args) {
98
74
  // without ever printing a raw secret.
99
75
  const detection = await detectLocalCredentials({ cwd: resolve(args.path) });
100
76
  const nextSteps = quickstartNextSteps(mode, detection.credentials);
77
+ // Dead-context cost, globalized across the user's whole Claude Code setup
78
+ // (all projects' MCP + user-scope skills/agents/commands, vs. every
79
+ // transcript) so it's populated from ANY directory on the first run.
80
+ // Never throws into the readout.
81
+ let deadContext = args.sample
82
+ ? undefined
83
+ : await loadDeadContext({
84
+ // Env overrides keep tests (and unusual installs) isolated from $HOME.
85
+ claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
86
+ claudeHomeDir: process.env.AI_SPEND_CLAUDE_HOME_DIR,
87
+ claudeConfigPath: process.env.AI_SPEND_CLAUDE_CONFIG,
88
+ projectDir: resolve(args.path),
89
+ includeAllProjectMcp: true,
90
+ sinceIso: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),
91
+ windowDays: 30
92
+ }).catch(() => undefined);
93
+ // Sample dead-context is shown ONLY on the demo readout. A real readout
94
+ // (local logs / connected billing) never gets fabricated waste injected —
95
+ // a genuinely clean setup earns its congratulation line instead.
96
+ if (mode === "demo" && (!deadContext || !deadContext.hasData)) {
97
+ deadContext = sampleDeadContext();
98
+ }
101
99
  const summaryText = generatePlainEnglishSummary(summary, {
102
100
  records,
103
101
  groupBy,
104
102
  color,
105
103
  mode,
106
- nextSteps
104
+ nextSteps,
105
+ deadContext
107
106
  });
108
- return ok(summaryText);
107
+ const header = [` ${dataModeBanner(mode)}`, ...warnings.map((warning) => ` ! ${warning}`)].join("\n");
108
+ return ok(`${header}\n${summaryText}`);
109
109
  }
110
110
  function quickstartNextSteps(mode, detected) {
111
111
  const steps = [];
@@ -125,26 +125,137 @@ function quickstartNextSteps(mode, detected) {
125
125
  steps.push("Want this watched while your laptop is off? Hosted beta waitlist: https://ai-spend-agent.vercel.app");
126
126
  return steps;
127
127
  }
128
- async function readOptionalLocalSpend(rootPath) {
128
+ async function readPersistedSpend(rootPath) {
129
129
  const stateDir = join(rootPath, ".ai-spend-agent");
130
130
  try {
131
131
  const spend = await readJson(join(stateDir, "spend.json"));
132
- return spend.records;
132
+ return { mode: spend.mode, records: spend.records ?? [] };
133
133
  }
134
134
  catch {
135
135
  return undefined;
136
136
  }
137
137
  }
138
+ async function loadInstantReadData(args) {
139
+ const warnings = [];
140
+ if (args.sample) {
141
+ return { records: await loadSampleUsageData(), mode: "demo", warnings };
142
+ }
143
+ const persisted = args.ignoreState ? undefined : await readPersistedSpend(resolve(args.path));
144
+ // Only real connected/synced provider state is authoritative enough to serve
145
+ // directly. Sample or legacy persisted state must NEVER mask real local logs.
146
+ if (persisted && persisted.records.length > 0 && persisted.mode === "connected_provider") {
147
+ return { records: persisted.records, mode: "connected", warnings };
148
+ }
149
+ // Real local agent logs (Claude Code / Codex) beat any sample/legacy state.
150
+ const logs = await loadLocalAgentUsage({
151
+ // Env overrides keep tests (and unusual installs) isolated from $HOME.
152
+ claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
153
+ codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
154
+ }).catch(() => undefined);
155
+ if (logs && logs.records.length > 0) {
156
+ if (persisted && persisted.records.length > 0 && persisted.mode !== "connected_provider") {
157
+ warnings.push("Ignored persisted sample/legacy state in .ai-spend-agent/spend.json — showing your real local agent logs. Run `ai-spend-agent reset` to clear it, or pass --ignore-state.");
158
+ }
159
+ return { records: logs.records, mode: "local-logs", warnings };
160
+ }
161
+ // No real logs. Persisted sample/legacy state may still be shown, but only as
162
+ // DEMO (never as connected), with a warning when its origin is unknown.
163
+ if (persisted && persisted.records.length > 0) {
164
+ if (persisted.mode === undefined) {
165
+ warnings.push("Persisted state in .ai-spend-agent/spend.json is from an older format with no data-mode tag — treating it as demo. Run `ai-spend-agent reset`, then re-scan to refresh.");
166
+ }
167
+ return { records: persisted.records, mode: "demo", warnings };
168
+ }
169
+ // loadSampleUsageData resolves the bundled CSVs relative to the installed
170
+ // package, so this works from ANY directory (true zero-config).
171
+ return { records: await loadSampleUsageData(), mode: "demo", warnings };
172
+ }
173
+ /** A one-line, unmissable banner telling the user which data they're seeing. */
174
+ function dataModeBanner(mode) {
175
+ if (mode === "local-logs")
176
+ return "DATA MODE: your local agent logs (estimated at API-equivalent rates)";
177
+ if (mode === "connected")
178
+ return "DATA MODE: connected provider billing";
179
+ return "DATA MODE: demo sample (illustrative — not your real spend)";
180
+ }
138
181
  async function doctorCommand(args) {
139
182
  const rootPath = resolve(args.path);
140
183
  const stateDir = join(rootPath, ".ai-spend-agent");
184
+ const persisted = await readPersistedSpend(rootPath);
185
+ const stateMode = persisted ? (persisted.mode ?? "unknown legacy") : "no state";
186
+ const logs = await loadLocalAgentUsage({
187
+ claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
188
+ codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
189
+ }).catch(() => undefined);
190
+ const detected = logs?.agentsDetected ?? [];
191
+ const claudeFound = detected.includes("claude-code");
192
+ const codexFound = detected.includes("codex");
193
+ const hasLogs = claudeFound || codexFound;
194
+ const detection = await detectLocalCredentials({ cwd: rootPath }).catch(() => ({ credentials: [] }));
195
+ const providerRefs = detection.credentials.map((credential) => `${credential.provider} (${credential.hint})`);
196
+ const warnings = [];
197
+ if (stateMode === "sample")
198
+ warnings.push("sample state present — it will be shown as DEMO and cannot mask real logs; run `ai-spend-agent reset` to clear it");
199
+ if (stateMode === "unknown legacy")
200
+ warnings.push("legacy state with no data-mode tag — run `ai-spend-agent reset`, then re-scan");
201
+ if (!hasLogs)
202
+ warnings.push("no real Claude Code / Codex logs found — a first run here will show DEMO sample data");
203
+ if (providerRefs.length === 0)
204
+ warnings.push("no provider admin keys detected — connect OpenAI/Anthropic for VERIFIED billing (local logs stay ESTIMATED)");
205
+ const predictedMode = stateMode === "connected_provider"
206
+ ? "connected provider billing"
207
+ : hasLogs
208
+ ? "your local agent logs (estimated at API-equivalent rates)"
209
+ : "demo sample (illustrative)";
210
+ const lines = [
211
+ "AI Spend Analyst doctor",
212
+ `node version: ${process.version}`,
213
+ `cli version: ${await cliVersion()}`,
214
+ "local-first mode: enabled (no cloud upload, no telemetry)",
215
+ `path: ${rootPath}`,
216
+ `state directory: ${stateDir}`,
217
+ `state mode: ${stateMode}`,
218
+ `Claude Code logs: ${claudeFound ? "found" : "not found"}`,
219
+ `Codex logs: ${codexFound ? "found" : "not found"}`,
220
+ `provider env references: ${providerRefs.length > 0 ? providerRefs.join(", ") : "none detected"}`,
221
+ "redaction policy: secrets are never printed or persisted",
222
+ "plan check: available (subscription vs API-rate math)",
223
+ `data mode you'll get now: ${predictedMode}`,
224
+ warnings.length > 0 ? `launch warnings:\n${warnings.map((warning) => ` - ${warning}`).join("\n")}` : "launch warnings: none"
225
+ ];
226
+ return ok(lines.join("\n"));
227
+ }
228
+ async function cliVersion() {
229
+ try {
230
+ const here = dirname(fileURLToPath(import.meta.url));
231
+ const pkg = JSON.parse(await readFile(join(here, "..", "package.json"), "utf8"));
232
+ return pkg.version ?? "unknown";
233
+ }
234
+ catch {
235
+ return process.env.npm_package_version ?? "unknown";
236
+ }
237
+ }
238
+ async function resetCommand(args) {
239
+ const rootPath = resolve(args.path);
240
+ const stateDir = join(rootPath, ".ai-spend-agent");
241
+ // Clear derived spend state so a prior `scan --sample` (or stale provider
242
+ // sync) can never mask the next real local-log read. Leaves sources/audit.
243
+ const targets = ["spend.json", "mappings.json", "provider-records.json", "watch-latest.json", "watch-history.json"];
244
+ const removed = [];
245
+ for (const file of targets) {
246
+ try {
247
+ await rm(join(stateDir, file));
248
+ removed.push(file);
249
+ }
250
+ catch {
251
+ // File not present — nothing to clear for this target.
252
+ }
253
+ }
141
254
  return ok([
142
- "AI Spend Analyst Agent doctor",
255
+ "AI Spend Analyst reset",
143
256
  `path: ${rootPath}`,
144
- "local-first mode: enabled",
145
- "subscription check: not wired in this slice",
146
- "redaction policy: secrets are never printed",
147
- `state directory: ${stateDir}`
257
+ removed.length > 0 ? `cleared: ${removed.join(", ")}` : "nothing to clear (no persisted spend state found)",
258
+ "next run will re-read your real local agent logs (or demo sample if none)."
148
259
  ].join("\n"));
149
260
  }
150
261
  async function initCommand(args) {
@@ -262,11 +373,14 @@ async function scanCommand(args) {
262
373
  `discovery signals: ${discovery.signals.length}`,
263
374
  `secrets detected: ${discovery.secretsDetected.length}`
264
375
  ];
376
+ if (discovery.unreadablePaths.length > 0) {
377
+ lines.push(`unreadable paths skipped: ${discovery.unreadablePaths.length} (permissions/broken links — scan continued)`);
378
+ }
265
379
  if (args.sample) {
266
380
  const records = await loadSampleUsageData();
267
381
  const summary = analyzeSpend(records);
268
382
  const mappings = attributeUsageRecords(records);
269
- await writeLocalSpendState(stateDir, records, summary, mappings);
383
+ await writeLocalSpendState(stateDir, records, summary, mappings, "sample");
270
384
  lines.push(`sample records: ${records.length}`);
271
385
  lines.push(`total spend: $${summary.totalUsd.toFixed(2)}`);
272
386
  lines.push(`attribution mappings: ${mappings.length}`);
@@ -311,15 +425,22 @@ async function watchCommand(args) {
311
425
  deltaHeadline,
312
426
  plainEnglish
313
427
  ].join("\n");
314
- collected.push(stamped);
315
428
  iteration += 1;
316
429
  const moreToGo = unbounded || iteration < cycles;
317
- if (moreToGo) {
430
+ const streaming = process.env.NODE_ENV !== "test";
431
+ if (moreToGo && streaming) {
432
+ // Stream interim cycles live, but do NOT also include them in the returned
433
+ // output — doing both double-printed the baseline before the no-change
434
+ // cycle. Streamed cycles are shown once here; the final cycle is returned.
318
435
  // eslint-disable-next-line no-console
319
- if (process.env.NODE_ENV !== "test") {
320
- console.log(stamped);
321
- console.log(`\n[watch] sleeping ${intervalSeconds}s until next cycle. Press Ctrl+C to stop.\n`);
322
- }
436
+ console.log(stamped);
437
+ // eslint-disable-next-line no-console
438
+ console.log(`\n[watch] sleeping ${intervalSeconds}s until next cycle. Press Ctrl+C to stop.\n`);
439
+ }
440
+ else {
441
+ collected.push(stamped);
442
+ }
443
+ if (moreToGo) {
323
444
  await sleep(intervalSeconds * 1000);
324
445
  }
325
446
  }
@@ -327,18 +448,24 @@ async function watchCommand(args) {
327
448
  }
328
449
  async function runWatchCycle(stateDir, args) {
329
450
  let records;
451
+ let mode;
330
452
  if (args.sample) {
331
453
  records = await loadSampleUsageData();
454
+ mode = "sample";
332
455
  }
333
456
  else {
334
457
  records = await loadLiveRecords(stateDir);
335
- if (records.length === 0) {
458
+ if (records.length > 0) {
459
+ mode = "connected_provider";
460
+ }
461
+ else {
336
462
  records = await loadSampleUsageData();
463
+ mode = "sample";
337
464
  }
338
465
  }
339
466
  const summary = analyzeSpend(records);
340
467
  const mappings = attributeUsageRecords(records);
341
- await writeLocalSpendState(stateDir, records, summary, mappings);
468
+ await writeLocalSpendState(stateDir, records, summary, mappings, mode);
342
469
  const snapshot = {
343
470
  capturedAt: new Date().toISOString(),
344
471
  totalUsd: summary.totalUsd,
@@ -577,7 +704,7 @@ async function syncProviderCommand(args) {
577
704
  records: result.records,
578
705
  qa: result.qa
579
706
  });
580
- await writeLocalSpendState(stateDir, result.records, summary, mappings);
707
+ await writeLocalSpendState(stateDir, result.records, summary, mappings, "connected_provider");
581
708
  await appendAuditEvent(stateDir, {
582
709
  timestamp: result.fetchedAt,
583
710
  action: "source_scanned",
@@ -671,23 +798,36 @@ async function reportCommand(args) {
671
798
  };
672
799
  }
673
800
  }
801
+ /**
802
+ * Resolve where the AI Receipt SVG is written so it is always shareable:
803
+ * no --out -> ai-receipt.svg in cwd; --out a directory -> ai-spend-receipt.svg
804
+ * inside it; --out with no extension -> append .svg; explicit .svg honored.
805
+ */
806
+ async function resolveReceiptPath(rootPath, out) {
807
+ if (!out)
808
+ return join(rootPath, "ai-receipt.svg");
809
+ const resolved = resolve(rootPath, out);
810
+ const isDir = await stat(resolved).then((entry) => entry.isDirectory()).catch(() => false);
811
+ if (isDir)
812
+ return join(resolved, "ai-spend-receipt.svg");
813
+ return extname(resolved) ? resolved : `${resolved}.svg`;
814
+ }
674
815
  async function reportCardCommand(args) {
675
816
  const rootPath = resolve(args.path);
676
- let records;
677
- if (args.sample) {
678
- records = await loadSampleUsageData();
679
- }
680
- else {
681
- const local = await readOptionalLocalSpend(rootPath);
682
- records = local && local.length > 0 ? local : await loadSampleUsageData();
683
- }
817
+ const { records, mode } = await loadInstantReadData(args);
684
818
  const summary = analyzeSpend(records);
685
- const outPath = args.out ? resolve(rootPath, args.out) : join(rootPath, "ai-spend-card.svg");
819
+ const outPath = await resolveReceiptPath(rootPath, args.out);
686
820
  await mkdir(dirname(outPath), { recursive: true });
687
821
  await writeFile(outPath, generateReportCardSvg({ summary, records }), "utf8");
822
+ const dataLine = mode === "demo"
823
+ ? "data: DEMO sample data — run without --sample on a machine with Claude Code/Codex logs for your own numbers."
824
+ : mode === "local-logs"
825
+ ? "data: local Claude Code/Codex logs priced at API-equivalent rates."
826
+ : "data: connected local spend state.";
688
827
  return ok([
689
- "Shareable AI spend report card written (redacted no client/project/user names).",
690
- `card: ${outPath}`,
828
+ "Your AI Receipt a shareable, redacted spend card (no client/project/user names).",
829
+ `receipt: ${outPath}`,
830
+ dataLine,
691
831
  "",
692
832
  "Caption to share:",
693
833
  generateReportCardCaption({ summary, records }),
@@ -732,6 +872,10 @@ async function buildReportInput(stateDir, rootPath) {
732
872
  ]);
733
873
  return {
734
874
  summary: spendState.summary,
875
+ // Evidence ledger is built from the SAME records as the confidence
876
+ // breakdown so the two sections can never contradict each other.
877
+ allRecords: spendState.records ?? [],
878
+ dataMode: spendState.mode,
735
879
  discovery,
736
880
  mappings,
737
881
  sourceRegistry,
@@ -782,6 +926,10 @@ function parseArgs(argv) {
782
926
  parsed.noColor = true;
783
927
  continue;
784
928
  }
929
+ if (arg === "--ignore-state") {
930
+ parsed.ignoreState = true;
931
+ continue;
932
+ }
785
933
  if (arg === "--group-by") {
786
934
  const next = rest[index + 1];
787
935
  if (isGroupByDimension(next)) {
@@ -897,7 +1045,11 @@ function parseArgs(argv) {
897
1045
  if (arg === "--confidence") {
898
1046
  const next = rest[index + 1];
899
1047
  if (next) {
900
- parsed.confidence = Number(next);
1048
+ const value = Number(next);
1049
+ // Reject NaN/out-of-range instead of rendering "NaN% confidence".
1050
+ if (Number.isFinite(value) && value >= 0 && value <= 1) {
1051
+ parsed.confidence = value;
1052
+ }
901
1053
  index += 1;
902
1054
  }
903
1055
  continue;
@@ -958,14 +1110,6 @@ function parseArgs(argv) {
958
1110
  }
959
1111
  continue;
960
1112
  }
961
- if (arg === "--group-by") {
962
- const next = rest[index + 1];
963
- if (isGroupByDimension(next)) {
964
- parsed.groupBy = next;
965
- index += 1;
966
- }
967
- continue;
968
- }
969
1113
  if (arg === "--interval") {
970
1114
  const next = rest[index + 1];
971
1115
  if (next) {
@@ -986,24 +1130,16 @@ function parseArgs(argv) {
986
1130
  return parsed;
987
1131
  }
988
1132
  function sanitizeSecretishError(message, authReference) {
989
- let sanitized = message.replace(/sk-[A-Za-z0-9_-]+/g, "[REDACTED]");
1133
+ // Core's redactSecrets covers sk-*/ghp_*/github_pat_*/JWT/AIza/xox/AKIA and
1134
+ // secret-suffixed env assignments; the sk- fallback keeps short keys covered.
1135
+ let sanitized = redactSecrets(message).replace(/sk-[A-Za-z0-9_-]+/g, "[REDACTED]");
990
1136
  if (authReference && !authReference.startsWith("env:")) {
991
1137
  sanitized = sanitized.split(authReference).join("[REDACTED]");
992
1138
  }
993
1139
  return sanitized;
994
1140
  }
995
- function unsafeScanRootReason(rootPath) {
996
- const homePath = resolve(homedir());
997
- if (rootPath === homePath) {
998
- return "the home directory is too broad for V0 approved-source scanning";
999
- }
1000
- if (rootPath === "/") {
1001
- return "the filesystem root is too broad for V0 approved-source scanning";
1002
- }
1003
- return undefined;
1004
- }
1005
- async function writeLocalSpendState(stateDir, records, summary, mappings) {
1006
- await writeJson(join(stateDir, "spend.json"), { records, summary });
1141
+ async function writeLocalSpendState(stateDir, records, summary, mappings, mode) {
1142
+ await writeJson(join(stateDir, "spend.json"), { mode, records, summary });
1007
1143
  await writeJson(join(stateDir, "mappings.json"), mappings);
1008
1144
  }
1009
1145
  async function readSourceRegistry(stateDir, rootPath) {
@@ -1042,7 +1178,9 @@ async function appendAuditEvent(stateDir, event) {
1042
1178
  catch {
1043
1179
  // Create a fresh local-only audit log if init has not run yet.
1044
1180
  }
1045
- await writeJson(join(stateDir, "audit-log.json"), createScanAuditLog([...auditLog.events, event]));
1181
+ // Cap like watch-history: an unbounded log under cron watch grows forever
1182
+ // and makes every append an ever-larger rewrite.
1183
+ await writeJson(join(stateDir, "audit-log.json"), createScanAuditLog([...auditLog.events, event].slice(-500)));
1046
1184
  }
1047
1185
  async function readJson(path) {
1048
1186
  return JSON.parse(await readFile(path, "utf8"));
@@ -1082,13 +1220,15 @@ function helpText() {
1082
1220
  "",
1083
1221
  "Other commands:",
1084
1222
  " init [--path <dir>] Initialize local state",
1085
- " doctor Check local runtime and safety posture",
1223
+ " doctor Launch-grade diagnostics: data mode, logs found, provider keys, warnings",
1224
+ " reset [--path <dir>] Clear persisted spend state (so sample state can't mask real logs)",
1225
+ " --ignore-state On the default/quickstart run, ignore persisted spend.json for this run",
1086
1226
  " scan [--path <dir>] Scan a local workspace for AI usage signals",
1087
1227
  " scan --sample Include deterministic sample spend analysis",
1088
1228
  " quickstart [--sample] Plain-English 90-second readout (alias of the default run)",
1089
1229
  " [--group-by source|model|client|project|agent|user|workspace|apiKey] Default: model",
1090
1230
  " report [--out <name>] Generate local Markdown and HTML reports",
1091
- " report-card [--out f.svg] Write a redacted, shareable SVG spend card + caption",
1231
+ " report-card [--out f.svg] Write your AI Receipt — a redacted, shareable SVG + caption",
1092
1232
  " apply-artifact Generate coding prompt, action plan, policy/config, verification, demo package",
1093
1233
  "",
1094
1234
  "Cron (production watch): add a crontab entry such as:",
@@ -1113,6 +1253,14 @@ const invokedAsMain = (() => {
1113
1253
  }
1114
1254
  })();
1115
1255
  if (invokedAsMain) {
1256
+ // Fail with a clear message on old Node instead of a cryptic module/syntax
1257
+ // error deep in a dependency. npm warns on engines but never blocks install.
1258
+ const major = Number(process.versions.node.split(".")[0]);
1259
+ if (Number.isFinite(major) && major < 22) {
1260
+ console.error(`ai-spend-agent needs Node 22 or newer (you have ${process.versions.node}).\n` +
1261
+ "Upgrade Node, then run: npx ai-spend-agent");
1262
+ process.exit(1);
1263
+ }
1116
1264
  const argv = process.argv.slice(2);
1117
1265
  const command = argv[0];
1118
1266
  const isInstantDemo = !command || command === "quickstart" || command === "demo";
@@ -1132,6 +1280,20 @@ if (invokedAsMain) {
1132
1280
  try {
1133
1281
  result = await runCli(argv);
1134
1282
  }
1283
+ catch (error) {
1284
+ // The product's error voice, never a raw stack trace — and never an
1285
+ // un-redacted secret from a provider payload or file path.
1286
+ const message = sanitizeSecretishError(error instanceof Error ? error.message : String(error));
1287
+ result = {
1288
+ exitCode: 1,
1289
+ stdout: "",
1290
+ stderr: [
1291
+ `ai-spend-agent hit an unexpected error: ${message}`,
1292
+ "Nothing was uploaded; local state is unchanged.",
1293
+ "Try `ai-spend-agent doctor` for diagnostics, or open an issue: https://github.com/futurastudio/ai-spend-agent/issues"
1294
+ ].join("\n")
1295
+ };
1296
+ }
1135
1297
  finally {
1136
1298
  spinner?.stop();
1137
1299
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ai-spend-agent",
3
- "version": "0.1.0",
4
- "description": "Your AI spend in one view, in 90 seconds \u2014 local-first CLI for OpenAI, Anthropic, Cursor, Copilot + Claude Code/Codex session logs, with a ranked savings cut list.",
3
+ "version": "0.1.3",
4
+ "description": "Your AI spend in one view, in 90 seconds local-first CLI for OpenAI, Anthropic, Cursor, Copilot + Claude Code/Codex session logs, with a ranked savings cut list, and flags the tools your agent loads but never uses (dead context).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -11,15 +11,16 @@
11
11
  "files": [
12
12
  "dist",
13
13
  "!dist/**/*.test.*",
14
- "!dist/**/*.map"
14
+ "!dist/**/*.map",
15
+ "!dist/**/*.tsbuildinfo"
15
16
  ],
16
17
  "license": "MIT",
17
18
  "repository": {
18
19
  "type": "git",
19
- "url": "git+https://github.com/futurastudio/agent-finops.git",
20
+ "url": "git+https://github.com/futurastudio/ai-spend-agent.git",
20
21
  "directory": "packages/cli"
21
22
  },
22
- "homepage": "https://github.com/futurastudio/agent-finops#readme",
23
+ "homepage": "https://github.com/futurastudio/ai-spend-agent#readme",
23
24
  "keywords": [
24
25
  "ai",
25
26
  "spend",
@@ -34,19 +35,22 @@
34
35
  "llm",
35
36
  "token",
36
37
  "billing",
37
- "cli"
38
+ "cli",
39
+ "mcp",
40
+ "claude-code-skills",
41
+ "dead-context"
38
42
  ],
39
43
  "engines": {
40
44
  "node": ">=22"
41
45
  },
42
46
  "scripts": {
43
47
  "build": "tsc -b",
44
- "typecheck": "tsc -b --pretty false"
48
+ "typecheck": "tsc -b --pretty false",
49
+ "prepack": "npm run build"
45
50
  },
46
51
  "dependencies": {
47
- "@agent-finops/core": "0.1.0",
48
- "@agent-finops/report": "0.1.0",
49
- "picocolors": "^1.1.1",
52
+ "@agent-finops/core": "0.1.3",
53
+ "@agent-finops/report": "0.1.3",
50
54
  "yocto-spinner": "^1.2.0"
51
55
  }
52
56
  }
@@ -1 +0,0 @@
1
- {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","../../../node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/@vitest/runner/dist/tasks.d-deyaimiu.d.ts","../../../node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/traces.d.d2t_r8rx.d.ts","../../../node_modules/vite/types/hmrpayload.d.ts","../../../node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","../../../node_modules/vite/types/customevent.d.ts","../../../node_modules/vite/types/hot.d.ts","../../../node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/@vitest/snapshot/dist/environment.d-dojxxzv9.d.ts","../../../node_modules/@vitest/snapshot/dist/rawsnapshot.d-d_x3-62x.d.ts","../../../node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/config.d.a1h_y6jt.d.ts","../../../node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","../../../node_modules/vitest/dist/chunks/rpc.d.b_8spu0w.d.ts","../../../node_modules/vitest/dist/chunks/worker.d.zphpo4yb.d.ts","../../../node_modules/vitest/dist/chunks/browser.d.bcoexmfg.d.ts","../../../node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/@types/deep-eql/index.d.ts","../../../node_modules/assertion-error/index.d.ts","../../../node_modules/@types/chai/index.d.ts","../../../node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/tinybench/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","../../../node_modules/vitest/dist/chunks/global.d.dvssrdq5.d.ts","../../../node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/@vitest/mocker/dist/types.d-bji5eawu.d.ts","../../../node_modules/@vitest/mocker/dist/index.d-b41z0auw.d.ts","../../../node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/suite.d.udjtyagw.d.ts","../../../node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","../../../node_modules/vitest/dist/runners.d.ts","../../../node_modules/expect-type/dist/utils.d.ts","../../../node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/expect-type/dist/branding.d.ts","../../../node_modules/expect-type/dist/messages.d.ts","../../../node_modules/expect-type/dist/index.d.ts","../../../node_modules/vitest/dist/index.d.ts","../../../node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/zod/v4/core/registries.d.cts","../../../node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/zod/v4/core/util.d.cts","../../../node_modules/zod/v4/core/versions.d.cts","../../../node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/zod/v4/core/checks.d.cts","../../../node_modules/zod/v4/core/errors.d.cts","../../../node_modules/zod/v4/core/core.d.cts","../../../node_modules/zod/v4/core/parse.d.cts","../../../node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/zod/v4/locales/az.d.cts","../../../node_modules/zod/v4/locales/be.d.cts","../../../node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/zod/v4/locales/da.d.cts","../../../node_modules/zod/v4/locales/de.d.cts","../../../node_modules/zod/v4/locales/el.d.cts","../../../node_modules/zod/v4/locales/en.d.cts","../../../node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/zod/v4/locales/es.d.cts","../../../node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/zod/v4/locales/fr-ca.d.cts","../../../node_modules/zod/v4/locales/he.d.cts","../../../node_modules/zod/v4/locales/hr.d.cts","../../../node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/zod/v4/locales/id.d.cts","../../../node_modules/zod/v4/locales/is.d.cts","../../../node_modules/zod/v4/locales/it.d.cts","../../../node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/zod/v4/locales/km.d.cts","../../../node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/zod/v4/locales/no.d.cts","../../../node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/zod/v4/locales/ro.d.cts","../../../node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/zod/v4/locales/th.d.cts","../../../node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/zod/v4/locales/zh-cn.d.cts","../../../node_modules/zod/v4/locales/zh-tw.d.cts","../../../node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/zod/v4/locales/index.d.cts","../../../node_modules/zod/v4/core/doc.d.cts","../../../node_modules/zod/v4/core/api.d.cts","../../../node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/zod/v4/core/index.d.cts","../../../node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/zod/v4/classic/external.d.cts","../../../node_modules/zod/index.d.cts","../../core/dist/schema.d.ts","../../core/dist/analyze.d.ts","../../core/dist/attribution.d.ts","../../core/dist/credentialdetection.d.ts","../../core/dist/cutlist.d.ts","../../core/dist/discovery.d.ts","../../core/dist/insights.d.ts","../../core/dist/modelpricing.d.ts","../../core/dist/localagentlogs.d.ts","../../core/dist/planmath.d.ts","../../core/dist/sampledata.d.ts","../../core/dist/sourceregistry.d.ts","../../core/dist/providerconnectors.d.ts","../../core/dist/index.d.ts","../../report/dist/terminal.d.ts","../../report/dist/reportcard.d.ts","../../report/dist/index.d.ts","../../../node_modules/yocto-spinner/index.d.ts","../src/index.ts","../src/index.test.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../../node_modules/@types/connect/index.d.ts","../../../../node_modules/@types/estree/index.d.ts","../../../../node_modules/@types/json-schema/index.d.ts","../../../../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../../../node_modules/@types/eslint/index.d.ts","../../../../node_modules/@types/eslint-scope/index.d.ts","../../../../node_modules/@types/mysql/index.d.ts","../../../../node_modules/pg-types/index.d.ts","../../../../node_modules/pg-protocol/dist/messages.d.ts","../../../../node_modules/pg-protocol/dist/serializer.d.ts","../../../../node_modules/pg-protocol/dist/parser.d.ts","../../../../node_modules/pg-protocol/dist/index.d.ts","../../../../node_modules/@types/pg/lib/type-overrides.d.ts","../../../../node_modules/@types/pg/index.d.ts","../../../../node_modules/@types/pg-pool/index.d.ts","../../../../node_modules/@types/phoenix/index.d.ts","../../../../node_modules/@types/tedious/index.d.ts","../../../../node_modules/@types/ws/index.d.ts"],"fileIdsList":[[213,261,278,279],[86,87,213,261,278,279],[213,258,259,261,278,279],[213,260,261,278,279],[261,278,279],[213,261,266,278,279,296],[213,261,262,267,272,278,279,281,293,304],[213,261,262,263,272,278,279,281],[208,209,210,213,261,278,279],[213,261,264,278,279,305],[213,261,265,266,273,278,279,282],[213,261,266,278,279,293,301],[213,261,267,269,272,278,279,281],[213,260,261,268,278,279],[213,261,269,270,278,279],[213,261,271,272,278,279],[213,260,261,272,278,279],[213,261,272,273,274,278,279,293,304],[213,261,272,273,274,278,279,288,293,296],[213,254,261,269,272,275,278,279,281,293,304],[213,261,272,273,275,276,278,279,281,293,301,304],[213,261,275,277,278,279,293,301,304],[211,212,213,214,215,216,217,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],[213,261,272,278,279],[213,261,278,279,280,304],[213,261,269,272,278,279,281,293],[213,261,278,279,282],[213,261,278,279,283],[213,260,261,278,279,284],[213,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],[213,261,278,279,286],[213,261,278,279,287],[213,261,272,278,279,288,289],[213,261,278,279,288,290,305,307],[213,261,273,278,279],[213,261,272,278,279,293,294,296],[213,261,278,279,295,296],[213,261,278,279,293,294],[213,261,278,279,296],[213,261,278,279,297],[213,258,261,278,279,293,298,304],[213,261,272,278,279,299,300],[213,261,278,279,299,300],[213,261,266,278,279,281,293,301],[213,261,278,279,302],[213,261,278,279,281,303],[213,261,275,278,279,287,304],[213,261,266,278,279,305],[213,261,278,279,293,306],[213,261,278,279,280,307],[213,261,278,279,308],[213,254,261,278,279],[213,254,261,272,274,278,279,284,293,296,304,306,307,309],[213,261,278,279,293,310],[59,65,83,84,85,88,213,261,278,279],[95,213,261,278,279],[95,96,213,261,278,279],[63,65,66,213,261,278,279],[63,65,213,261,278,279],[63,213,261,278,279],[58,63,74,75,213,261,278,279],[58,63,74,213,261,278,279],[82,213,261,278,279],[58,64,213,261,278,279],[58,213,261,278,279],[60,213,261,278,279],[58,59,60,61,62,213,261,278,279],[101,102,213,261,278,279],[101,102,103,104,213,261,278,279],[101,103,213,261,278,279],[101,213,261,278,279],[213,226,230,261,278,279,304],[213,226,261,278,279,293,304],[213,221,261,278,279],[213,223,226,261,278,279,301,304],[213,261,278,279,281,301],[213,261,278,279,311],[213,221,261,278,279,311],[213,223,226,261,278,279,281,304],[213,218,219,222,225,261,272,278,279,293,304],[213,226,233,261,278,279],[213,218,224,261,278,279],[213,226,247,248,261,278,279],[213,222,226,261,278,279,296,304,311],[213,247,261,278,279,311],[213,220,221,261,278,279,311],[213,226,261,278,279],[213,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,261,278,279],[213,226,241,261,278,279],[213,226,233,234,261,278,279],[213,224,226,234,235,261,278,279],[213,225,261,278,279],[213,218,221,226,261,278,279],[213,226,230,234,235,261,278,279],[213,230,261,278,279],[213,224,226,229,261,278,279,304],[213,218,223,226,233,261,278,279],[213,261,278,279,293],[213,221,226,247,261,278,279,309,311],[69,213,261,278,279],[69,70,71,72,213,261,278,279],[71,213,261,278,279],[67,90,91,93,213,261,278,279],[67,68,80,93,213,261,278,279],[58,65,67,68,76,93,213,261,278,279],[73,213,261,278,279],[58,67,68,76,89,92,93,213,261,278,279],[67,68,73,76,93,213,261,278,279],[67,90,91,92,93,213,261,278,279],[67,73,77,78,79,93,213,261,278,279],[58,63,65,67,68,73,76,77,78,79,80,81,83,89,90,91,92,93,94,97,98,99,100,105,213,261,278,279],[58,65,67,68,76,77,90,91,92,93,98,213,261,278,279],[185,213,261,278,279],[176,213,261,278,279],[176,179,213,261,278,279],[111,171,174,176,177,178,179,180,181,182,183,184,213,261,278,279],[107,109,179,213,261,278,279],[176,177,213,261,278,279],[108,176,178,213,261,278,279],[109,111,113,114,115,116,213,261,278,279],[111,113,115,116,213,261,278,279],[111,113,115,213,261,278,279],[108,111,113,114,116,213,261,278,279],[107,109,110,111,112,113,114,115,116,117,118,171,172,173,174,175,213,261,278,279],[107,109,110,113,213,261,278,279],[109,110,113,213,261,278,279],[113,116,213,261,278,279],[107,108,110,111,112,114,115,116,213,261,278,279],[107,108,109,113,176,213,261,278,279],[113,114,115,116,213,261,278,279],[115,213,261,278,279],[119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,213,261,278,279],[106,205,213,261,274,278,279,282,283],[200,203,204,213,261,273,274,278,279,282,283,304],[187,213,261,278,279],[187,188,189,190,191,192,193,194,195,196,197,198,199,213,261,278,279],[187,194,213,261,278,279],[187,198,213,261,278,279],[186,213,261,278,279],[192,213,261,278,279],[200,201,202,213,261,278,279],[200,213,261,278,279],[213,261,275,278,279,311],[213,261,278,279,313,316],[213,261,278,279,313,314,315],[213,261,278,279,316],[213,261,272,278,279,293,301,311],[213,261,278,279,325],[213,261,272,278,279,293,301,311,319,320,323,324,325],[213,261,272,278,279,301,311],[213,261,272,275,277,278,279,281,293,301,304,310,311],[213,261,278,279,311,320,321,322],[213,261,278,279,293,311,320]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"a5194013944aca9b1d1c87feb83e17842d1eb9302b5c0c2aa48b0d7bf3de977e","impliedFormat":99},{"version":"91c63d7ab35dda5e1fc0f108ba63685182797caf49d73518888866589b76e65d","impliedFormat":99},{"version":"b189ba3ac9b702e1c1440aab535ff9735a8c5e1e76ceff32b3be1f71aa3e24ea","impliedFormat":99},{"version":"6d2081dc088d63c090a4e72fa74e9464f8293c2b2e2e214b33122bcc83102da3","impliedFormat":99},{"version":"ab2bc9b59dca990dc56855cf6b02950c0629513c284805a08322fbf31cd0e9f0","impliedFormat":99},{"version":"5f5c1a6af7f8a0f6277eac8ed511a649d2977f93035399ff8340e39f720d8f98","impliedFormat":99},{"version":"6f3bcde90a7a82c91e2757c732efdc0066af8c2843270120088cbeeb75458a82","impliedFormat":99},{"version":"2ac2da1e33b6e75fcdd4d3083ccdc80d655afc773c23fd287bb3e4c21aadc8bd","impliedFormat":99},{"version":"a007112612b57b38fda50dca4294ede7c6004add875baf63a4e8c2fc39bf1c41","impliedFormat":99},{"version":"60b9f82505847a344680b80eb6614c3b154e5f855c4c01f2edbc8c2eaf7fa05f","impliedFormat":99},{"version":"c0f42dc93ed28853879744e831c883c41b4489b09da29b84e9c3265665ad1f26","impliedFormat":99},{"version":"7b72f835f11156a4916bc91da9e39d2a3fe52672abdea58b5f5fb5e260ef792c","impliedFormat":99},{"version":"80b719b1cfc00209ef957ef5e1f41694df2cf69db0b2b6142255bcb3ea946969","impliedFormat":99},{"version":"4e85de715f019f09d5100da791d833d2a96ecec0834a53ad8a7b253c1e979e1e","impliedFormat":99},{"version":"e8d11186804572d5170adee928c9fefca0fb1734f640f54fbb2434ede3a9fc55","impliedFormat":99},{"version":"fd1547111267e602eed65ad064e0bcf67c7da724f7e437b860247f27742cbae4","impliedFormat":99},{"version":"60d298b0d0f73fddd5c8f4a39cd2474dd10a8b5c7376337d500f6a35a1ce5afd","impliedFormat":99},{"version":"8c110b8f14d668f4c466dab0c35937efe81d5c896fac03eb08e7e084b8dfdccc","impliedFormat":99},{"version":"fb443e75ee28f8fc744dd726c00c584801c0103dfa9ff8d4e941fc5d06afadff","signature":"57374c3aab19ab03882ad61d985ef3bbc870060fd9be9ba229ac5a042bda8b44","impliedFormat":99},{"version":"947b8185e66f0db647d41fde11ee973ad22574c7dbe709df4f7e8717dab241b4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"73b5fa37db36eeac90c4d752e39586f1b57187400c4f5280fd05f16437287a45","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"4113fcb657953db88a125082f517a4b51083526a18765e90f2401a5dbb864d7e","impliedFormat":1},{"version":"f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"6ded4be4f8a693d0c1646dfa2f1b6582e34b73c66ce334cb5e86c7bf8c2e52b7","impliedFormat":1},{"version":"b3a24e1c22dd4fde2ce413fb8244e5fa8773ffca88e8173c780845c9856aef73","impliedFormat":1},{"version":"f4ae5546352701fd6932fdd86419438bb51253e4627a44808489742035bac644","impliedFormat":1},{"version":"c130f9616a960edc892aa0eb7a8a59f33e662c561474ed092c43a955cdb91dab","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1}],"root":[205,206],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"referencedMap":[[85,1],[88,2],[86,1],[207,1],[258,3],[259,3],[260,4],[213,5],[261,6],[262,7],[263,8],[208,1],[211,9],[209,1],[210,1],[264,10],[265,11],[266,12],[267,13],[268,14],[269,15],[270,15],[271,16],[272,17],[273,18],[274,19],[214,1],[212,1],[275,20],[276,21],[277,22],[311,23],[278,24],[279,1],[280,25],[281,26],[282,27],[283,28],[284,29],[285,30],[286,31],[287,32],[288,33],[289,33],[290,34],[291,1],[292,35],[293,36],[295,37],[294,38],[296,39],[297,40],[298,41],[299,42],[300,43],[301,44],[302,45],[303,46],[304,47],[305,48],[306,49],[307,50],[308,51],[215,1],[216,1],[217,1],[255,52],[256,1],[257,1],[309,53],[310,54],[89,55],[96,56],[97,57],[95,1],[58,1],[67,58],[66,59],[90,58],[74,60],[76,61],[75,62],[83,63],[82,1],[65,64],[59,65],[61,66],[63,67],[62,1],[64,65],[60,1],[87,1],[103,68],[105,69],[104,70],[102,71],[101,1],[91,1],[84,1],[56,1],[57,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[55,1],[54,1],[1,1],[233,72],[243,73],[232,72],[253,74],[224,75],[223,76],[252,77],[246,78],[251,79],[226,80],[240,81],[225,82],[249,83],[221,84],[220,77],[250,85],[222,86],[227,87],[228,1],[231,87],[218,1],[254,88],[244,89],[235,90],[236,91],[238,92],[234,93],[237,94],[247,77],[229,95],[230,96],[239,97],[219,98],[242,89],[241,87],[245,1],[248,99],[70,100],[73,101],[71,100],[69,1],[72,102],[92,103],[81,104],[77,105],[78,60],[99,106],[93,107],[79,108],[98,109],[68,1],[80,110],[106,111],[100,112],[94,1],[204,98],[186,113],[180,114],[184,115],[181,115],[177,114],[185,116],[182,117],[183,115],[178,118],[179,119],[173,120],[114,121],[116,122],[172,1],[115,123],[176,124],[175,125],[174,126],[107,1],[117,121],[118,1],[109,127],[113,128],[108,1],[110,129],[111,130],[112,1],[119,131],[120,131],[121,131],[122,131],[123,131],[124,131],[125,131],[126,131],[127,131],[128,131],[129,131],[130,131],[131,131],[132,131],[134,131],[133,131],[135,131],[136,131],[137,131],[138,131],[139,131],[171,132],[140,131],[141,131],[142,131],[143,131],[144,131],[145,131],[146,131],[147,131],[148,131],[149,131],[150,131],[151,131],[152,131],[154,131],[153,131],[155,131],[156,131],[157,131],[158,131],[159,131],[160,131],[161,131],[162,131],[163,131],[164,131],[165,131],[166,131],[167,131],[170,131],[168,131],[169,131],[206,133],[205,134],[188,135],[189,135],[190,1],[191,135],[192,1],[200,136],[193,135],[195,137],[194,1],[196,135],[199,138],[197,135],[187,139],[198,140],[203,141],[202,142],[201,142],[312,143],[317,144],[316,145],[315,146],[313,1],[314,1],[318,147],[326,148],[325,149],[324,148],[327,1],[328,150],[329,151],[323,152],[320,77],[322,153],[321,1],[319,1]],"latestChangedDtsFile":"./index.test.d.ts","version":"5.9.3"}