@inferevents/mcp 0.3.0 → 0.3.2
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/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +51 -9
- package/dist/config.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -7
- package/dist/server.js.map +1 -1
- package/dist/tools/switch-project.d.ts.map +1 -1
- package/dist/tools/switch-project.js +5 -2
- package/dist/tools/switch-project.js.map +1 -1
- package/package.json +1 -1
package/dist/config.d.ts
CHANGED
|
@@ -14,6 +14,11 @@ export interface InferConfigFile {
|
|
|
14
14
|
}>;
|
|
15
15
|
}
|
|
16
16
|
export declare function loadConfig(): Promise<InferConfig>;
|
|
17
|
+
/**
|
|
18
|
+
* Write a local .infer.json to the given directory (or cwd).
|
|
19
|
+
* This pins the directory to a specific project in the global config.
|
|
20
|
+
*/
|
|
21
|
+
export declare function writeLocalConfig(projectName: string, dir?: string): Promise<string>;
|
|
17
22
|
export declare function readConfigFile(): Promise<InferConfigFile>;
|
|
18
23
|
export declare function writeConfigFile(config: InferConfigFile): Promise<void>;
|
|
19
24
|
export declare function addProject(name: string, apiKey: string, projectId: string, writeKey?: string, setActive?: boolean, session?: string): Promise<void>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAgDD,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAuFvD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIzF;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAyB/D;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,UAAO,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAWtE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAOzG;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG9D;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/config.js
CHANGED
|
@@ -3,6 +3,7 @@ import { join } from "node:path";
|
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
const CONFIG_DIR = join(homedir(), ".infer");
|
|
5
5
|
const CONFIG_PATH = join(CONFIG_DIR, "config.json");
|
|
6
|
+
const LOCAL_CONFIG_NAME = ".infer.json";
|
|
6
7
|
const SETUP_INSTRUCTIONS = `
|
|
7
8
|
Infer MCP server is not configured.
|
|
8
9
|
|
|
@@ -19,8 +20,33 @@ Run /infer-setup in Claude Code, or create ~/.infer/config.json:
|
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
`.trim();
|
|
23
|
+
/**
|
|
24
|
+
* Find local .infer.json by walking up from cwd.
|
|
25
|
+
* Returns the parsed config or null if not found.
|
|
26
|
+
*/
|
|
27
|
+
async function findLocalConfig() {
|
|
28
|
+
let dir = process.cwd();
|
|
29
|
+
const root = (process.platform === "win32") ? dir.split("\\")[0] + "\\" : "/";
|
|
30
|
+
for (let i = 0; i < 10; i++) {
|
|
31
|
+
try {
|
|
32
|
+
const raw = await readFile(join(dir, LOCAL_CONFIG_NAME), "utf-8");
|
|
33
|
+
const parsed = JSON.parse(raw);
|
|
34
|
+
if (typeof parsed.project === "string") {
|
|
35
|
+
return { projectName: parsed.project };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// not found, walk up
|
|
40
|
+
}
|
|
41
|
+
const parent = join(dir, "..");
|
|
42
|
+
if (parent === dir || dir === root)
|
|
43
|
+
break;
|
|
44
|
+
dir = parent;
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
22
48
|
export async function loadConfig() {
|
|
23
|
-
// Env overrides (highest priority)
|
|
49
|
+
// 1. Env overrides (highest priority)
|
|
24
50
|
const envKey = process.env.INFER_API_KEY;
|
|
25
51
|
const envProject = process.env.INFER_PROJECT_ID;
|
|
26
52
|
if (envKey) {
|
|
@@ -30,6 +56,7 @@ export async function loadConfig() {
|
|
|
30
56
|
projectId: envProject,
|
|
31
57
|
};
|
|
32
58
|
}
|
|
59
|
+
// 2. Read global config
|
|
33
60
|
let raw;
|
|
34
61
|
try {
|
|
35
62
|
raw = await readFile(CONFIG_PATH, "utf-8");
|
|
@@ -45,7 +72,7 @@ export async function loadConfig() {
|
|
|
45
72
|
throw new ConfigError(`Invalid JSON in ${CONFIG_PATH}. Please check the file syntax.`);
|
|
46
73
|
}
|
|
47
74
|
const config = parsed;
|
|
48
|
-
// Backwards compat: old flat format { apiKey, endpoint, projectId }
|
|
75
|
+
// 3. Backwards compat: old flat format { apiKey, endpoint, projectId }
|
|
49
76
|
if ("apiKey" in config && typeof config.apiKey === "string") {
|
|
50
77
|
const apiKey = config.apiKey;
|
|
51
78
|
if (!apiKey.startsWith("pk_read_")) {
|
|
@@ -59,20 +86,26 @@ export async function loadConfig() {
|
|
|
59
86
|
projectId: typeof config.projectId === "string" ? config.projectId : undefined,
|
|
60
87
|
};
|
|
61
88
|
}
|
|
62
|
-
// New profiles format
|
|
89
|
+
// 4. New profiles format — determine active project
|
|
63
90
|
if ("projects" in config && typeof config.projects === "object" && config.projects !== null) {
|
|
64
91
|
const projects = config.projects;
|
|
65
92
|
const names = Object.keys(projects);
|
|
66
93
|
if (names.length === 0) {
|
|
67
94
|
throw new ConfigError(`No projects in ${CONFIG_PATH}. Run /infer-setup to add one.`);
|
|
68
95
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
throw new ConfigError(`Active project "${activeName}" not found in config. Available: ${names.join(", ")}`);
|
|
96
|
+
// Priority: local .infer.json > global activeProject > first project
|
|
97
|
+
const localConfig = await findLocalConfig();
|
|
98
|
+
let activeName;
|
|
99
|
+
if (localConfig && projects[localConfig.projectName]) {
|
|
100
|
+
activeName = localConfig.projectName;
|
|
75
101
|
}
|
|
102
|
+
else if (typeof config.activeProject === "string" && projects[config.activeProject]) {
|
|
103
|
+
activeName = config.activeProject;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
activeName = names[0];
|
|
107
|
+
}
|
|
108
|
+
const project = projects[activeName];
|
|
76
109
|
const apiKey = project.apiKey;
|
|
77
110
|
if (!apiKey || !apiKey.startsWith("pk_read_")) {
|
|
78
111
|
throw new ConfigError(`Invalid read key for project "${activeName}" in ${CONFIG_PATH}.`);
|
|
@@ -87,6 +120,15 @@ export async function loadConfig() {
|
|
|
87
120
|
}
|
|
88
121
|
throw new ConfigError(SETUP_INSTRUCTIONS);
|
|
89
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Write a local .infer.json to the given directory (or cwd).
|
|
125
|
+
* This pins the directory to a specific project in the global config.
|
|
126
|
+
*/
|
|
127
|
+
export async function writeLocalConfig(projectName, dir) {
|
|
128
|
+
const target = join(dir ?? process.cwd(), LOCAL_CONFIG_NAME);
|
|
129
|
+
await writeFile(target, JSON.stringify({ project: projectName }, null, 2) + "\n", "utf-8");
|
|
130
|
+
return target;
|
|
131
|
+
}
|
|
90
132
|
export async function readConfigFile() {
|
|
91
133
|
try {
|
|
92
134
|
const raw = await readFile(CONFIG_PATH, "utf-8");
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAmBlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type InferConfig } from "./config.js";
|
|
3
3
|
export declare function createServer(config: InferConfig): McpServer;
|
|
4
4
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AA8B3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAiK3D"}
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
// Skills are separate (@inferevents/skills). MCP server = tools only.
|
|
3
3
|
import { ApiClient, ApiError } from "./api-client.js";
|
|
4
|
+
import { loadConfig } from "./config.js";
|
|
4
5
|
import { getEventCountsSchema, handleGetEventCounts, } from "./tools/get-event-counts.js";
|
|
5
6
|
import { getRetentionSchema, handleGetRetention, } from "./tools/get-retention.js";
|
|
6
7
|
import { getUserJourneySchema, handleGetUserJourney, } from "./tools/get-user-journey.js";
|
|
@@ -9,7 +10,16 @@ import { getInsightsSchema, handleGetInsights, } from "./tools/get-insights.js";
|
|
|
9
10
|
import { switchProjectSchema, handleSwitchProject, } from "./tools/switch-project.js";
|
|
10
11
|
import { createProjectSchema, handleCreateProject, } from "./tools/create-project.js";
|
|
11
12
|
export function createServer(config) {
|
|
12
|
-
|
|
13
|
+
// Re-reads config from disk on each call so switch_project takes effect immediately
|
|
14
|
+
async function getClient() {
|
|
15
|
+
try {
|
|
16
|
+
const freshConfig = await loadConfig();
|
|
17
|
+
return new ApiClient(freshConfig);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return new ApiClient(config);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
13
23
|
const server = new McpServer({
|
|
14
24
|
name: "infer-analytics",
|
|
15
25
|
version: "0.1.0",
|
|
@@ -22,7 +32,7 @@ export function createServer(config) {
|
|
|
22
32
|
"Use this for questions like 'how many signups this week', " +
|
|
23
33
|
"'page views by country last 30 days', or 'purchase count trend'.", getEventCountsSchema, async (params) => {
|
|
24
34
|
try {
|
|
25
|
-
const text = await handleGetEventCounts(
|
|
35
|
+
const text = await handleGetEventCounts(await getClient(), params);
|
|
26
36
|
return { content: [{ type: "text", text }] };
|
|
27
37
|
}
|
|
28
38
|
catch (error) {
|
|
@@ -37,7 +47,7 @@ export function createServer(config) {
|
|
|
37
47
|
"Use for questions like 'what is our week-over-week retention', " +
|
|
38
48
|
"'do users come back after signing up', or 'retention by monthly cohort'.", getRetentionSchema, async (params) => {
|
|
39
49
|
try {
|
|
40
|
-
const text = await handleGetRetention(
|
|
50
|
+
const text = await handleGetRetention(await getClient(), params);
|
|
41
51
|
return { content: [{ type: "text", text }] };
|
|
42
52
|
}
|
|
43
53
|
catch (error) {
|
|
@@ -53,7 +63,7 @@ export function createServer(config) {
|
|
|
53
63
|
"To find user IDs: first call get_event_counts with group_by='anonymous_id' " +
|
|
54
64
|
"to list anonymous user IDs, then pass one to this tool as user_id.", getUserJourneySchema, async (params) => {
|
|
55
65
|
try {
|
|
56
|
-
const text = await handleGetUserJourney(
|
|
66
|
+
const text = await handleGetUserJourney(await getClient(), params);
|
|
57
67
|
return { content: [{ type: "text", text }] };
|
|
58
68
|
}
|
|
59
69
|
catch (error) {
|
|
@@ -67,7 +77,7 @@ export function createServer(config) {
|
|
|
67
77
|
"Use for questions like 'what events are being tracked', 'what are users doing', " +
|
|
68
78
|
"'show me all event types', or 'what's the most common action'.", getTopEventsSchema, async (params) => {
|
|
69
79
|
try {
|
|
70
|
-
const text = await handleGetTopEvents(
|
|
80
|
+
const text = await handleGetTopEvents(await getClient(), params);
|
|
71
81
|
return { content: [{ type: "text", text }] };
|
|
72
82
|
}
|
|
73
83
|
catch (error) {
|
|
@@ -82,7 +92,7 @@ export function createServer(config) {
|
|
|
82
92
|
"Returns pre-computed insights like volume drops, error spikes, milestones, " +
|
|
83
93
|
"and new events. Insights are auto-detected hourly — no query needed.", getInsightsSchema, async (params) => {
|
|
84
94
|
try {
|
|
85
|
-
const text = await handleGetInsights(
|
|
95
|
+
const text = await handleGetInsights(await getClient(), params);
|
|
86
96
|
return { content: [{ type: "text", text }] };
|
|
87
97
|
}
|
|
88
98
|
catch (error) {
|
|
@@ -110,7 +120,8 @@ export function createServer(config) {
|
|
|
110
120
|
"Use when the user wants to add analytics to a new codebase. " +
|
|
111
121
|
"Requires an active session from prior signup.", createProjectSchema, async (params) => {
|
|
112
122
|
try {
|
|
113
|
-
const
|
|
123
|
+
const freshConfig = await loadConfig().catch(() => config);
|
|
124
|
+
const text = await handleCreateProject(params, freshConfig.endpoint);
|
|
114
125
|
return { content: [{ type: "text", text }] };
|
|
115
126
|
}
|
|
116
127
|
catch (error) {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,sEAAsE;AACtE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch-project.d.ts","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;CAK/B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"switch-project.d.ts","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;CAK/B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { listProjects, switchProject } from "../config.js";
|
|
2
|
+
import { listProjects, switchProject, writeLocalConfig } from "../config.js";
|
|
3
3
|
export const switchProjectSchema = {
|
|
4
4
|
project_name: z
|
|
5
5
|
.string()
|
|
@@ -21,6 +21,9 @@ export async function handleSwitchProject(params) {
|
|
|
21
21
|
return lines.join("\n");
|
|
22
22
|
}
|
|
23
23
|
const config = await switchProject(params.project_name);
|
|
24
|
-
|
|
24
|
+
// Also write .infer.json in current directory so this project auto-selects here
|
|
25
|
+
const localPath = await writeLocalConfig(params.project_name).catch(() => null);
|
|
26
|
+
const localMsg = localPath ? ` Wrote .infer.json so this directory always uses "${params.project_name}".` : "";
|
|
27
|
+
return `Switched to project "${params.project_name}" (${config.projectId}).${localMsg} MCP tools now query this project.`;
|
|
25
28
|
}
|
|
26
29
|
//# sourceMappingURL=switch-project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch-project.js","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"switch-project.js","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;CAC5E,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiC;IAEjC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAEtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,yDAAyD,CAAC;QACnE,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uDAAuD,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxD,gFAAgF;IAChF,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,qDAAqD,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/G,OAAO,wBAAwB,MAAM,CAAC,YAAY,MAAM,MAAM,CAAC,SAAS,KAAK,QAAQ,oCAAoC,CAAC;AAC5H,CAAC"}
|