easyoref 1.18.4 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/agent/extract.d.ts +5 -5
  2. package/dist/agent/extract.d.ts.map +1 -1
  3. package/dist/agent/extract.js +86 -110
  4. package/dist/agent/extract.js.map +1 -1
  5. package/dist/agent/types.d.ts.map +1 -1
  6. package/dist/agent/types.js +21 -30
  7. package/dist/agent/types.js.map +1 -1
  8. package/dist/bot.js +17 -19
  9. package/dist/bot.js.map +1 -1
  10. package/dist/gif-state.js +1 -1
  11. package/dist/gif-state.js.map +1 -1
  12. package/dist/init.js +1 -1
  13. package/dist/init.js.map +1 -1
  14. package/package.json +5 -9
  15. package/dist/agent/auth.d.ts +0 -11
  16. package/dist/agent/auth.d.ts.map +0 -1
  17. package/dist/agent/auth.js +0 -54
  18. package/dist/agent/auth.js.map +0 -1
  19. package/dist/agent/clarify.d.ts +0 -44
  20. package/dist/agent/clarify.d.ts.map +0 -1
  21. package/dist/agent/clarify.js +0 -284
  22. package/dist/agent/clarify.js.map +0 -1
  23. package/dist/agent/dry-run.d.ts +0 -12
  24. package/dist/agent/dry-run.d.ts.map +0 -1
  25. package/dist/agent/dry-run.js +0 -236
  26. package/dist/agent/dry-run.js.map +0 -1
  27. package/dist/agent/filters.d.ts +0 -48
  28. package/dist/agent/filters.d.ts.map +0 -1
  29. package/dist/agent/filters.js +0 -124
  30. package/dist/agent/filters.js.map +0 -1
  31. package/dist/agent/gramjs-monitor.d.ts +0 -26
  32. package/dist/agent/gramjs-monitor.d.ts.map +0 -1
  33. package/dist/agent/gramjs-monitor.js +0 -324
  34. package/dist/agent/gramjs-monitor.js.map +0 -1
  35. package/dist/agent/graph.d.ts +0 -30
  36. package/dist/agent/graph.d.ts.map +0 -1
  37. package/dist/agent/graph.js +0 -240
  38. package/dist/agent/graph.js.map +0 -1
  39. package/dist/agent/helpers.d.ts +0 -6
  40. package/dist/agent/helpers.d.ts.map +0 -1
  41. package/dist/agent/helpers.js +0 -15
  42. package/dist/agent/helpers.js.map +0 -1
  43. package/dist/agent/message.d.ts +0 -69
  44. package/dist/agent/message.d.ts.map +0 -1
  45. package/dist/agent/message.js +0 -464
  46. package/dist/agent/message.js.map +0 -1
  47. package/dist/agent/queue.d.ts +0 -15
  48. package/dist/agent/queue.d.ts.map +0 -1
  49. package/dist/agent/queue.js +0 -41
  50. package/dist/agent/queue.js.map +0 -1
  51. package/dist/agent/redis.d.ts +0 -8
  52. package/dist/agent/redis.d.ts.map +0 -1
  53. package/dist/agent/redis.js +0 -33
  54. package/dist/agent/redis.js.map +0 -1
  55. package/dist/agent/store.d.ts +0 -93
  56. package/dist/agent/store.d.ts.map +0 -1
  57. package/dist/agent/store.js +0 -145
  58. package/dist/agent/store.js.map +0 -1
  59. package/dist/agent/tools.d.ts +0 -159
  60. package/dist/agent/tools.d.ts.map +0 -1
  61. package/dist/agent/tools.js +0 -439
  62. package/dist/agent/tools.js.map +0 -1
  63. package/dist/agent/types.d.ts +0 -213
  64. package/dist/agent/vote.d.ts +0 -13
  65. package/dist/agent/vote.d.ts.map +0 -1
  66. package/dist/agent/vote.js +0 -226
  67. package/dist/agent/vote.js.map +0 -1
  68. package/dist/agent/worker.d.ts +0 -14
  69. package/dist/agent/worker.d.ts.map +0 -1
  70. package/dist/agent/worker.js +0 -137
  71. package/dist/agent/worker.js.map +0 -1
  72. package/dist/bin.d.ts +0 -17
  73. package/dist/bot.d.ts +0 -16
  74. package/dist/config.d.ts +0 -129
  75. package/dist/config.d.ts.map +0 -1
  76. package/dist/config.js +0 -157
  77. package/dist/config.js.map +0 -1
  78. package/dist/gif-state.d.ts +0 -17
  79. package/dist/i18n.d.ts +0 -49
  80. package/dist/i18n.d.ts.map +0 -1
  81. package/dist/i18n.js +0 -229
  82. package/dist/i18n.js.map +0 -1
  83. package/dist/init.d.ts +0 -7
  84. package/dist/logger.d.ts +0 -14
  85. package/dist/logger.d.ts.map +0 -1
  86. package/dist/logger.js +0 -45
  87. package/dist/logger.js.map +0 -1
  88. package/dist/service.d.ts +0 -19
  89. package/dist/service.d.ts.map +0 -1
  90. package/dist/service.js +0 -165
  91. package/dist/service.js.map +0 -1
@@ -1,240 +0,0 @@
1
- /**
2
- * LangGraph.js enrichment pipeline — phase-aware, time-validated.
3
- *
4
- * Lean orchestrator: connects filter → extract → vote → edit.
5
- * All logic lives in dedicated modules:
6
- * - filters.ts: deterministic noise filter, channel tracking
7
- * - extract.ts: cheap LLM pre-filter, expensive extraction, post-filter
8
- * - vote.ts: consensus voting (deterministic)
9
- * - message.ts: message building, Telegram editing
10
- * - helpers.ts: toIsraelTime, textHash
11
- *
12
- * Pipeline:
13
- * collectAndFilter → extract → vote → [clarify → revote] → editMessage
14
- */
15
- import { Annotation, MemorySaver, StateGraph } from "@langchain/langgraph";
16
- import { config } from "../config.js";
17
- import * as logger from "../logger.js";
18
- import { runClarify } from "./clarify.js";
19
- import { extractPosts, filterChannelsCheap, postFilter, } from "./extract.js";
20
- import { buildChannelTracking } from "./filters.js";
21
- import { editMessage } from "./message.js";
22
- import { getActiveSession, getChannelPosts, getEnrichmentData, getLastUpdateTs, setLastUpdateTs, } from "./store.js";
23
- import { emptyEnrichmentData } from "./types.js";
24
- import { vote } from "./vote.js";
25
- // ── State ──────────────────────────────────────────────
26
- const AgentState = Annotation.Root({
27
- alertId: Annotation({ reducer: (_, b) => b }),
28
- alertTs: Annotation({ reducer: (_, b) => b }),
29
- alertType: Annotation({ reducer: (_, b) => b }),
30
- alertAreas: Annotation({ reducer: (_, b) => b }),
31
- chatId: Annotation({ reducer: (_, b) => b }),
32
- messageId: Annotation({ reducer: (_, b) => b }),
33
- isCaption: Annotation({ reducer: (_, b) => b }),
34
- currentText: Annotation({ reducer: (_, b) => b }),
35
- tracking: Annotation({ reducer: (_, b) => b }),
36
- extractions: Annotation({ reducer: (_, b) => b }),
37
- votedResult: Annotation({ reducer: (_, b) => b }),
38
- clarifyAttempted: Annotation({ reducer: (_, b) => b }),
39
- previousEnrichment: Annotation({ reducer: (_, b) => b }),
40
- monitoringLabel: Annotation({ reducer: (_, b) => b }),
41
- chatMessages: Annotation({
42
- reducer: (_, b) => b,
43
- }),
44
- });
45
- // ── Node: collect posts + deterministic noise filter ───
46
- async function collectAndFilter(state) {
47
- const posts = await getChannelPosts(state.alertId);
48
- const prevEnrichment = await getEnrichmentData();
49
- const session = await getActiveSession();
50
- const sessionStartTs = session?.sessionStartTs ?? state.alertTs;
51
- const lastUpdateTs = await getLastUpdateTs();
52
- if (posts.length === 0) {
53
- logger.info("Agent: no posts", { alertId: state.alertId });
54
- return { tracking: null, previousEnrichment: prevEnrichment };
55
- }
56
- const tracking = buildChannelTracking(posts, sessionStartTs, lastUpdateTs);
57
- logger.info("Agent: channel tracking", {
58
- alertId: state.alertId,
59
- total_posts: posts.length,
60
- channels_with_updates: tracking.channels_with_updates.length,
61
- total_new_posts: tracking.channels_with_updates.reduce((s, c) => s + c.last_tracked_messages.length, 0),
62
- });
63
- return { tracking, previousEnrichment: prevEnrichment };
64
- }
65
- // ── Node: cheap LLM channel filter + expensive extraction ──
66
- async function extractNode(state) {
67
- if (!state.tracking || state.tracking.channels_with_updates.length === 0) {
68
- logger.info("Agent: no channels with updates", {
69
- alertId: state.alertId,
70
- });
71
- return { extractions: [] };
72
- }
73
- // Step 1: cheap LLM — which channels have important military intel?
74
- const relevantChannels = await filterChannelsCheap(state.tracking, state.alertAreas, state.alertTs, state.alertType);
75
- if (relevantChannels.length === 0) {
76
- logger.info("Agent: no relevant channels after cheap filter", {
77
- alertId: state.alertId,
78
- });
79
- return { extractions: [] };
80
- }
81
- // Step 2: collect posts from relevant channels only
82
- const postsToExtract = [];
83
- for (const ch of state.tracking.channels_with_updates) {
84
- const match = relevantChannels.some((rc) => rc === ch.channel || rc === `@${ch.channel}` || `@${rc}` === ch.channel);
85
- if (match) {
86
- postsToExtract.push(...ch.last_tracked_messages);
87
- }
88
- }
89
- if (postsToExtract.length === 0) {
90
- logger.info("Agent: no posts from relevant channels", {
91
- alertId: state.alertId,
92
- });
93
- return { extractions: [] };
94
- }
95
- // Step 3: expensive extraction with post-level dedup
96
- const ctx = {
97
- alertTs: state.alertTs,
98
- alertType: state.alertType,
99
- alertAreas: state.alertAreas,
100
- alertId: state.alertId,
101
- language: config.language,
102
- existingEnrichment: state.previousEnrichment,
103
- };
104
- const raw = await extractPosts(postsToExtract, ctx);
105
- // Step 4: deterministic post-filter
106
- const filtered = postFilter(raw, state.alertId);
107
- // Update timestamp for next job's dedup split
108
- await setLastUpdateTs(Date.now());
109
- return { extractions: filtered };
110
- }
111
- // ── Node: vote ─────────────────────────────────────────
112
- function voteNode(state) {
113
- return { votedResult: vote(state.extractions, state.alertId) };
114
- }
115
- // ── Node: clarify (MCP tool calling) ───────────────────
116
- async function clarifyNode(state) {
117
- if (!state.votedResult) {
118
- logger.info("Agent: clarify skipped — no voted result", {
119
- alertId: state.alertId,
120
- });
121
- return { clarifyAttempted: true };
122
- }
123
- logger.info("Agent: clarify triggered", {
124
- alertId: state.alertId,
125
- confidence: state.votedResult.confidence,
126
- });
127
- try {
128
- const result = await runClarify({
129
- alertId: state.alertId,
130
- alertAreas: state.alertAreas,
131
- alertType: state.alertType,
132
- alertTs: state.alertTs,
133
- messageId: state.messageId,
134
- currentText: state.currentText,
135
- extractions: state.extractions,
136
- votedResult: state.votedResult,
137
- });
138
- return {
139
- extractions: [...state.extractions, ...result.newExtractions],
140
- votedResult: null,
141
- clarifyAttempted: true,
142
- };
143
- }
144
- catch (err) {
145
- logger.error("Agent: clarify failed", {
146
- alertId: state.alertId,
147
- error: String(err),
148
- });
149
- return { clarifyAttempted: true };
150
- }
151
- }
152
- // ── Node: edit Telegram message ────────────────────────
153
- async function editNode(state) {
154
- await editMessage({
155
- alertId: state.alertId,
156
- alertTs: state.alertTs,
157
- alertType: state.alertType,
158
- chatId: state.chatId,
159
- messageId: state.messageId,
160
- isCaption: state.isCaption,
161
- chatMessages: state.chatMessages,
162
- currentText: state.currentText,
163
- votedResult: state.votedResult,
164
- previousEnrichment: state.previousEnrichment ?? emptyEnrichmentData(),
165
- monitoringLabel: state.monitoringLabel,
166
- });
167
- return {};
168
- }
169
- // ── Conditional routing after vote ─────────────────────
170
- function shouldClarify(state) {
171
- if (state.clarifyAttempted)
172
- return "editMessage";
173
- if (!config.agent.mcpTools)
174
- return "editMessage";
175
- if (!state.votedResult)
176
- return "editMessage";
177
- if (state.votedResult.confidence < config.agent.confidenceThreshold) {
178
- logger.info("Agent: routing to clarify (low confidence)", {
179
- confidence: state.votedResult.confidence,
180
- });
181
- return "clarify";
182
- }
183
- // Suspicious single-source: Lebanon for central Israel → verify
184
- const origins = state.votedResult.country_origins;
185
- if (origins &&
186
- origins.length === 1 &&
187
- state.votedResult.sources_count === 1) {
188
- if (origins[0].name === "Lebanon" &&
189
- state.alertAreas.some((a) => a.includes("תל אביב") ||
190
- a.includes("גוש דן") ||
191
- a.includes("שרון") ||
192
- a.includes("מרכז"))) {
193
- logger.info("Agent: routing to clarify (suspicious Lebanon origin)", {});
194
- return "clarify";
195
- }
196
- }
197
- return "editMessage";
198
- }
199
- // ── Build graph ────────────────────────────────────────
200
- const checkpointer = new MemorySaver();
201
- function buildGraph() {
202
- return new StateGraph(AgentState)
203
- .addNode("collectAndFilter", collectAndFilter)
204
- .addNode("extract", extractNode)
205
- .addNode("vote", voteNode)
206
- .addNode("clarify", clarifyNode)
207
- .addNode("revote", voteNode)
208
- .addNode("editMessage", editNode)
209
- .addEdge("__start__", "collectAndFilter")
210
- .addEdge("collectAndFilter", "extract")
211
- .addEdge("extract", "vote")
212
- .addConditionalEdges("vote", shouldClarify, {
213
- clarify: "clarify",
214
- editMessage: "editMessage",
215
- })
216
- .addEdge("clarify", "revote")
217
- .addEdge("revote", "editMessage")
218
- .addEdge("editMessage", "__end__")
219
- .compile({ checkpointer });
220
- }
221
- export async function runEnrichment(input) {
222
- await buildGraph().invoke({
223
- alertId: input.alertId,
224
- alertTs: input.alertTs,
225
- alertType: input.alertType,
226
- alertAreas: input.alertAreas,
227
- chatId: input.chatId,
228
- messageId: input.messageId,
229
- isCaption: input.isCaption,
230
- chatMessages: input.chatMessages,
231
- currentText: input.currentText,
232
- tracking: null,
233
- extractions: [],
234
- votedResult: null,
235
- clarifyAttempted: false,
236
- previousEnrichment: emptyEnrichmentData(),
237
- monitoringLabel: input.monitoringLabel,
238
- }, { configurable: { thread_id: input.alertId } });
239
- }
240
- //# sourceMappingURL=graph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/agent/graph.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /** Shared utility functions for the agent subsystem. */
2
- /** Format timestamp as HH:MM Israel time */
3
- export declare function toIsraelTime(ts: number): string;
4
- /** MD5 hash for dedup */
5
- export declare function textHash(text: string): string;
6
- //# sourceMappingURL=helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/agent/helpers.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAIxD,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,yBAAyB;AACzB,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C"}
@@ -1,15 +0,0 @@
1
- /** Shared utility functions for the agent subsystem. */
2
- import { createHash } from "node:crypto";
3
- /** Format timestamp as HH:MM Israel time */
4
- export function toIsraelTime(ts) {
5
- return new Date(ts).toLocaleTimeString("he-IL", {
6
- hour: "2-digit",
7
- minute: "2-digit",
8
- timeZone: "Asia/Jerusalem",
9
- });
10
- }
11
- /** MD5 hash for dedup */
12
- export function textHash(text) {
13
- return createHash("md5").update(text).digest("hex");
14
- }
15
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/agent/helpers.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,4CAA4C;AAC5C,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC"}
@@ -1,69 +0,0 @@
1
- /**
2
- * Message building and Telegram editing.
3
- *
4
- * Builds enriched message text from voted consensus + carry-forward data.
5
- * Uses inline [[1]](url) citations. No superscripts. No footer sources.
6
- */
7
- import type { AlertType, CitedSource, EnrichmentData, InlineCite, VotedResult } from "./types.js";
8
- /** EN country name → Russian */
9
- export declare const COUNTRY_RU: Record<string, string>;
10
- /** Format inline citations: [[1]](url), [[2]](url) */
11
- export declare function inlineCites(indices: number[], citedSources: CitedSource[]): string;
12
- /** Get InlineCite[] from citation indices */
13
- export declare function extractCites(indices: number[], citedSources: CitedSource[]): InlineCite[];
14
- /** Format inline citations from InlineCite[] (carry-forward data) */
15
- export declare function inlineCitesFromData(cites: InlineCite[]): string;
16
- /**
17
- * Build a global URL→index map across ALL enrichment fields.
18
- * Deduplicates by URL so the same source gets the same [N] everywhere.
19
- */
20
- export declare function buildGlobalCiteMap(enrichment: EnrichmentData): Map<string, number>;
21
- /** Format inline citations using global numbering */
22
- export declare function renderCitesGlobal(cites: InlineCite[], globalMap: Map<string, number>): string;
23
- export declare const SKIP = 0.6;
24
- export declare const UNCERTAIN = 0.75;
25
- export declare const CERTAIN = 0.95;
26
- /** Strip custom-emoji monitoring line from message text */
27
- export declare const MONITORING_RE: RegExp;
28
- export declare function stripMonitoring(text: string): string;
29
- export declare function appendMonitoring(text: string, label: string): string;
30
- /**
31
- * Build enrichment data from current vote + previous enrichment (carry-forward).
32
- * Returns updated EnrichmentData for Redis persistence.
33
- */
34
- export declare function buildEnrichmentFromVote(r: VotedResult, prev: EnrichmentData, alertType: AlertType, alertTs: number): EnrichmentData;
35
- /**
36
- * Build the enriched message text from current message + enrichment data.
37
- * Uses inline [[1]](url) citations.
38
- */
39
- export declare function buildEnrichedMessage(currentText: string, alertType: AlertType, alertTs: number, enrichment: EnrichmentData, monitoringLabel?: string): string;
40
- /**
41
- * Insert a line before </blockquote> (or legacy time line as fallback).
42
- */
43
- export declare function insertBeforeBlockEnd(text: string, line: string): string;
44
- /** @deprecated Use insertBeforeBlockEnd */
45
- export declare const insertBeforeTimeLine: typeof insertBeforeBlockEnd;
46
- export interface ChatMessageTarget {
47
- chatId: string;
48
- messageId: number;
49
- isCaption: boolean;
50
- }
51
- export interface EditMessageInput {
52
- alertId: string;
53
- alertTs: number;
54
- alertType: AlertType;
55
- chatId: string;
56
- messageId: number;
57
- isCaption: boolean;
58
- /** All chat targets for multi-chat broadcasting */
59
- chatMessages?: ChatMessageTarget[];
60
- currentText: string;
61
- votedResult: VotedResult | null;
62
- previousEnrichment: EnrichmentData;
63
- monitoringLabel?: string;
64
- }
65
- /**
66
- * Edit the Telegram message with enriched data.
67
- */
68
- export declare function editMessage(input: EditMessageInput): Promise<void>;
69
- //# sourceMappingURL=message.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/agent/message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,UAAU,EAEV,WAAW,EACZ,MAAM,YAAY,CAAC;AAKpB,gCAAgC;AAChC,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ7C,CAAC;AAIF,sDAAsD;AACtD,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,WAAW,EAAE,GAC1B,MAAM,CASR;AAED,6CAA6C;AAC7C,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,WAAW,EAAE,GAC1B,UAAU,EAAE,CASd;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAK/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,cAAc,GACzB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBrB;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EAAE,EACnB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAUR;AAID,eAAO,MAAM,IAAI,MAAM,CAAC;AACxB,eAAO,MAAM,SAAS,OAAO,CAAC;AAC9B,eAAO,MAAM,OAAO,OAAO,CAAC;AAI5B,2DAA2D;AAC3D,eAAO,MAAM,aAAa,QAC6B,CAAC;AAExD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE;AA0BD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,WAAW,EACd,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,GACd,cAAc,CAqIhB;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CA+GR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAevE;AAED,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,6BAAuB,CAAC;AAIzD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,cAAc,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJxE"}