@tuanhung303/opencode-acp 2.2.0 → 2.2.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/README.md +131 -71
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/commands/budget.d.ts +15 -0
- package/dist/lib/commands/budget.d.ts.map +1 -0
- package/dist/lib/commands/budget.js +120 -0
- package/dist/lib/commands/budget.js.map +1 -0
- package/dist/lib/commands/context.d.ts +1 -1
- package/dist/lib/commands/context.js +4 -4
- package/dist/lib/commands/context.js.map +1 -1
- package/dist/lib/commands/help.d.ts.map +1 -1
- package/dist/lib/commands/help.js +2 -0
- package/dist/lib/commands/help.js.map +1 -1
- package/dist/lib/commands/protected.d.ts +17 -0
- package/dist/lib/commands/protected.d.ts.map +1 -0
- package/dist/lib/commands/protected.js +50 -0
- package/dist/lib/commands/protected.js.map +1 -0
- package/dist/lib/commands/stats.d.ts +1 -1
- package/dist/lib/commands/stats.d.ts.map +1 -1
- package/dist/lib/commands/stats.js +24 -4
- package/dist/lib/commands/stats.js.map +1 -1
- package/dist/lib/commands/sweep.d.ts.map +1 -1
- package/dist/lib/commands/sweep.js +5 -2
- package/dist/lib/commands/sweep.js.map +1 -1
- package/dist/lib/config-schema.d.ts +119 -0
- package/dist/lib/config-schema.d.ts.map +1 -0
- package/dist/lib/config-schema.js +97 -0
- package/dist/lib/config-schema.js.map +1 -0
- package/dist/lib/config.d.ts +7 -30
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +45 -483
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts +14 -0
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +120 -13
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/logger.d.ts +25 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +45 -4
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/messages/index.d.ts +1 -1
- package/dist/lib/messages/index.d.ts.map +1 -1
- package/dist/lib/messages/index.js +1 -1
- package/dist/lib/messages/index.js.map +1 -1
- package/dist/lib/messages/inject.d.ts +6 -1
- package/dist/lib/messages/inject.d.ts.map +1 -1
- package/dist/lib/messages/inject.js +8 -125
- package/dist/lib/messages/inject.js.map +1 -1
- package/dist/lib/messages/prune.d.ts +8 -0
- package/dist/lib/messages/prune.d.ts.map +1 -1
- package/dist/lib/messages/prune.js +89 -2
- package/dist/lib/messages/prune.js.map +1 -1
- package/dist/lib/messages/utils.d.ts +12 -0
- package/dist/lib/messages/utils.d.ts.map +1 -1
- package/dist/lib/messages/utils.js +34 -0
- package/dist/lib/messages/utils.js.map +1 -1
- package/dist/lib/prompts/discard-tool-spec.d.ts +1 -1
- package/dist/lib/prompts/discard-tool-spec.d.ts.map +1 -1
- package/dist/lib/prompts/discard-tool-spec.js +30 -17
- package/dist/lib/prompts/discard-tool-spec.js.map +1 -1
- package/dist/lib/prompts/extract-tool-spec.d.ts +1 -1
- package/dist/lib/prompts/extract-tool-spec.d.ts.map +1 -1
- package/dist/lib/prompts/extract-tool-spec.js +19 -11
- package/dist/lib/prompts/extract-tool-spec.js.map +1 -1
- package/dist/lib/prompts/index.d.ts.map +1 -1
- package/dist/lib/prompts/index.js +2 -7
- package/dist/lib/prompts/index.js.map +1 -1
- package/dist/lib/prompts/restore-tool-spec.d.ts +2 -0
- package/dist/lib/prompts/restore-tool-spec.d.ts.map +1 -0
- package/dist/lib/prompts/restore-tool-spec.js +37 -0
- package/dist/lib/prompts/restore-tool-spec.js.map +1 -0
- package/dist/lib/prompts/system/both.d.ts +1 -1
- package/dist/lib/prompts/system/both.d.ts.map +1 -1
- package/dist/lib/prompts/system/both.js +20 -16
- package/dist/lib/prompts/system/both.js.map +1 -1
- package/dist/lib/prompts/system/discard.d.ts +1 -1
- package/dist/lib/prompts/system/discard.d.ts.map +1 -1
- package/dist/lib/prompts/system/discard.js +19 -16
- package/dist/lib/prompts/system/discard.js.map +1 -1
- package/dist/lib/prompts/system/extract.d.ts +1 -1
- package/dist/lib/prompts/system/extract.d.ts.map +1 -1
- package/dist/lib/prompts/system/extract.js +19 -16
- package/dist/lib/prompts/system/extract.js.map +1 -1
- package/dist/lib/protected-file-patterns.js +1 -1
- package/dist/lib/protected-file-patterns.js.map +1 -1
- package/dist/lib/safe-execute.d.ts +20 -0
- package/dist/lib/safe-execute.d.ts.map +1 -0
- package/dist/lib/safe-execute.js +38 -0
- package/dist/lib/safe-execute.js.map +1 -0
- package/dist/lib/shared-utils.js +1 -1
- package/dist/lib/shared-utils.js.map +1 -1
- package/dist/lib/state/persistence.d.ts +6 -1
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/persistence.js +59 -1
- package/dist/lib/state/persistence.js.map +1 -1
- package/dist/lib/state/state.d.ts.map +1 -1
- package/dist/lib/state/state.js +54 -3
- package/dist/lib/state/state.js.map +1 -1
- package/dist/lib/state/tool-cache.d.ts +2 -0
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +34 -12
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/state/types.d.ts +50 -5
- package/dist/lib/state/types.d.ts.map +1 -1
- package/dist/lib/strategies/deduplication.d.ts +1 -0
- package/dist/lib/strategies/deduplication.d.ts.map +1 -1
- package/dist/lib/strategies/deduplication.js +87 -3
- package/dist/lib/strategies/deduplication.js.map +1 -1
- package/dist/lib/strategies/index.d.ts +1 -5
- package/dist/lib/strategies/index.d.ts.map +1 -1
- package/dist/lib/strategies/index.js +1 -5
- package/dist/lib/strategies/index.js.map +1 -1
- package/dist/lib/strategies/purge-errors.d.ts.map +1 -1
- package/dist/lib/strategies/purge-errors.js +4 -1
- package/dist/lib/strategies/purge-errors.js.map +1 -1
- package/dist/lib/strategies/supersede-writes.d.ts.map +1 -1
- package/dist/lib/strategies/supersede-writes.js +7 -1
- package/dist/lib/strategies/supersede-writes.js.map +1 -1
- package/dist/lib/strategies/tools.d.ts +1 -0
- package/dist/lib/strategies/tools.d.ts.map +1 -1
- package/dist/lib/strategies/tools.js +215 -62
- package/dist/lib/strategies/tools.js.map +1 -1
- package/dist/lib/ui/notification.d.ts +5 -2
- package/dist/lib/ui/notification.d.ts.map +1 -1
- package/dist/lib/ui/notification.js +10 -6
- package/dist/lib/ui/notification.js.map +1 -1
- package/dist/lib/ui/utils.d.ts +3 -3
- package/dist/lib/ui/utils.d.ts.map +1 -1
- package/dist/lib/ui/utils.js +38 -12
- package/dist/lib/ui/utils.js.map +1 -1
- package/package.json +7 -12
- package/dist/lib/prompts/nudge/both.d.ts +0 -2
- package/dist/lib/prompts/nudge/both.d.ts.map +0 -1
- package/dist/lib/prompts/nudge/both.js +0 -11
- package/dist/lib/prompts/nudge/both.js.map +0 -1
- package/dist/lib/prompts/nudge/discard.d.ts +0 -2
- package/dist/lib/prompts/nudge/discard.d.ts.map +0 -1
- package/dist/lib/prompts/nudge/discard.js +0 -10
- package/dist/lib/prompts/nudge/discard.js.map +0 -1
- package/dist/lib/prompts/nudge/extract.d.ts +0 -2
- package/dist/lib/prompts/nudge/extract.d.ts.map +0 -1
- package/dist/lib/prompts/nudge/extract.js +0 -10
- package/dist/lib/prompts/nudge/extract.js.map +0 -1
- package/dist/lib/strategies/head-tail-truncation.d.ts +0 -15
- package/dist/lib/strategies/head-tail-truncation.d.ts.map +0 -1
- package/dist/lib/strategies/head-tail-truncation.js +0 -144
- package/dist/lib/strategies/head-tail-truncation.js.map +0 -1
- package/dist/lib/strategies/placeholder-compression.d.ts +0 -5
- package/dist/lib/strategies/placeholder-compression.d.ts.map +0 -1
- package/dist/lib/strategies/placeholder-compression.js +0 -148
- package/dist/lib/strategies/placeholder-compression.js.map +0 -1
- package/dist/lib/strategies/prune-thinking.d.ts +0 -15
- package/dist/lib/strategies/prune-thinking.d.ts.map +0 -1
- package/dist/lib/strategies/prune-thinking.js +0 -79
- package/dist/lib/strategies/prune-thinking.js.map +0 -1
- package/dist/lib/strategies/read-consolidation.d.ts +0 -21
- package/dist/lib/strategies/read-consolidation.d.ts.map +0 -1
- package/dist/lib/strategies/read-consolidation.js +0 -155
- package/dist/lib/strategies/read-consolidation.js.map +0 -1
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { isMessageCompacted } from "../shared-utils";
|
|
2
|
-
import { countTokens } from "./utils";
|
|
3
|
-
/**
|
|
4
|
-
* Primary parameter to use as key for each trackable tool
|
|
5
|
-
*/
|
|
6
|
-
const PRIMARY_PARAMS = {
|
|
7
|
-
read: "filePath",
|
|
8
|
-
glob: "pattern",
|
|
9
|
-
grep: "pattern",
|
|
10
|
-
webfetch: "url",
|
|
11
|
-
bash: "command",
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Read Consolidation Strategy
|
|
15
|
-
*
|
|
16
|
-
* When the same tool+parameter is called multiple times, older outputs
|
|
17
|
-
* are replaced with pointers to the newer output (which has current state).
|
|
18
|
-
*
|
|
19
|
-
* This is different from deduplication:
|
|
20
|
-
* - Deduplication removes exact duplicate calls entirely
|
|
21
|
-
* - Consolidation keeps both calls visible as breadcrumbs, but only the
|
|
22
|
-
* newest one has the full output
|
|
23
|
-
*
|
|
24
|
-
* Rationale:
|
|
25
|
-
* - When same file is read multiple times, older reads become stale
|
|
26
|
-
* - Newer read has current file state (may have been modified)
|
|
27
|
-
* - Keep full output on newer read, pointer on older read
|
|
28
|
-
*/
|
|
29
|
-
export function readConsolidation(state, logger, config, messages) {
|
|
30
|
-
const strategyConfig = config.strategies.readConsolidation;
|
|
31
|
-
if (!strategyConfig?.enabled) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const trackableTools = new Set(strategyConfig.tools ?? ["read", "glob", "grep", "webfetch", "bash"]);
|
|
35
|
-
// Initialize consolidation tracker if not present
|
|
36
|
-
if (!state.consolidationTracker) {
|
|
37
|
-
state.consolidationTracker = new Map();
|
|
38
|
-
}
|
|
39
|
-
// Track: key -> { messageIndex, callId } for the NEWEST occurrence
|
|
40
|
-
const newestOccurrences = new Map();
|
|
41
|
-
// First pass: Find all tool calls and track the newest occurrence per key
|
|
42
|
-
for (let i = 0; i < messages.length; i++) {
|
|
43
|
-
const msg = messages[i];
|
|
44
|
-
// Skip compacted messages
|
|
45
|
-
if (isMessageCompacted(state, msg)) {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
const parts = Array.isArray(msg.parts) ? msg.parts : [];
|
|
49
|
-
for (const part of parts) {
|
|
50
|
-
if (part.type !== "tool") {
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
const toolName = part.tool;
|
|
54
|
-
const toolState = part.state;
|
|
55
|
-
if (!toolName || !toolState)
|
|
56
|
-
continue;
|
|
57
|
-
// Only track configured tools
|
|
58
|
-
if (!trackableTools.has(toolName)) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
// Skip if not completed
|
|
62
|
-
if (toolState.status !== "completed") {
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
// Get the primary parameter for this tool
|
|
66
|
-
const primaryParam = PRIMARY_PARAMS[toolName];
|
|
67
|
-
if (!primaryParam)
|
|
68
|
-
continue;
|
|
69
|
-
const input = toolState.input;
|
|
70
|
-
if (!input || typeof input !== "object")
|
|
71
|
-
continue;
|
|
72
|
-
const paramValue = input[primaryParam];
|
|
73
|
-
if (!paramValue)
|
|
74
|
-
continue;
|
|
75
|
-
// Create tracker key
|
|
76
|
-
const trackerKey = `${toolName}:${paramValue}`;
|
|
77
|
-
// Always update to the latest (higher index = newer)
|
|
78
|
-
newestOccurrences.set(trackerKey, {
|
|
79
|
-
messageIndex: i,
|
|
80
|
-
callId: part.callID || part.id,
|
|
81
|
-
toolName,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Second pass: Replace older occurrences with pointers
|
|
86
|
-
let totalTokensSaved = 0;
|
|
87
|
-
let consolidatedCount = 0;
|
|
88
|
-
for (let i = 0; i < messages.length; i++) {
|
|
89
|
-
const msg = messages[i];
|
|
90
|
-
// Skip compacted messages
|
|
91
|
-
if (isMessageCompacted(state, msg)) {
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
const parts = Array.isArray(msg.parts) ? msg.parts : [];
|
|
95
|
-
for (const part of parts) {
|
|
96
|
-
if (part.type !== "tool") {
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
const toolName = part.tool;
|
|
100
|
-
const toolState = part.state;
|
|
101
|
-
if (!toolName || !toolState)
|
|
102
|
-
continue;
|
|
103
|
-
// Only track configured tools
|
|
104
|
-
if (!trackableTools.has(toolName)) {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
// Skip if not completed
|
|
108
|
-
if (toolState.status !== "completed") {
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
// Get the primary parameter for this tool
|
|
112
|
-
const primaryParam = PRIMARY_PARAMS[toolName];
|
|
113
|
-
if (!primaryParam)
|
|
114
|
-
continue;
|
|
115
|
-
const input = toolState.input;
|
|
116
|
-
if (!input || typeof input !== "object")
|
|
117
|
-
continue;
|
|
118
|
-
const paramValue = input[primaryParam];
|
|
119
|
-
if (!paramValue)
|
|
120
|
-
continue;
|
|
121
|
-
// Create tracker key
|
|
122
|
-
const trackerKey = `${toolName}:${paramValue}`;
|
|
123
|
-
const newest = newestOccurrences.get(trackerKey);
|
|
124
|
-
if (!newest)
|
|
125
|
-
continue;
|
|
126
|
-
// If this is NOT the newest occurrence, replace with pointer
|
|
127
|
-
const currentCallId = part.callID || part.id;
|
|
128
|
-
if (newest.messageIndex !== i || newest.callId !== currentCallId) {
|
|
129
|
-
// This is an older occurrence
|
|
130
|
-
const output = toolState.output;
|
|
131
|
-
if (output === undefined || output === null)
|
|
132
|
-
continue;
|
|
133
|
-
const outputStr = typeof output === "string" ? output : JSON.stringify(output);
|
|
134
|
-
// Skip if already consolidated
|
|
135
|
-
if (outputStr.includes("[📍 See later")) {
|
|
136
|
-
continue;
|
|
137
|
-
}
|
|
138
|
-
const outputTokens = countTokens(outputStr);
|
|
139
|
-
// Create pointer to newer occurrence
|
|
140
|
-
const pointer = `[📍 See later ${toolName} at message #${newest.messageIndex + 1}. This output is stale.]`;
|
|
141
|
-
toolState.output = pointer;
|
|
142
|
-
const saved = outputTokens - countTokens(pointer);
|
|
143
|
-
if (saved > 0) {
|
|
144
|
-
totalTokensSaved += saved;
|
|
145
|
-
consolidatedCount++;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (consolidatedCount > 0) {
|
|
151
|
-
state.stats.totalPruneTokens += totalTokensSaved;
|
|
152
|
-
logger.debug(`Read consolidation: consolidated ${consolidatedCount} older tool outputs (estimated ${totalTokensSaved} tokens saved)`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=read-consolidation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-consolidation.js","sourceRoot":"","sources":["../../../lib/strategies/read-consolidation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC;;GAEG;AACH,MAAM,cAAc,GAA2B;IAC3C,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,SAAS;CAClB,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC7B,KAAmB,EACnB,MAAc,EACd,MAAoB,EACpB,QAAqB;IAErB,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAA;IAC1D,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAC3B,OAAM;IACV,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAC1B,cAAc,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CACvE,CAAA;IAED,kDAAkD;IAClD,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC9B,KAAK,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAA8B,CAAA;IACtE,CAAC;IAED,mEAAmE;IACnE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAG9B,CAAA;IAEH,0EAA0E;IAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEvB,0BAA0B;QAC1B,IAAI,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACjC,SAAQ;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAEvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvB,SAAQ;YACZ,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAA;YAE5B,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS;gBAAE,SAAQ;YAErC,8BAA8B;YAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,SAAQ;YACZ,CAAC;YAED,wBAAwB;YACxB,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACnC,SAAQ;YACZ,CAAC;YAED,0CAA0C;YAC1C,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;YAC7C,IAAI,CAAC,YAAY;gBAAE,SAAQ;YAE3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAA;YAC7B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAQ;YAEjD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAA;YACtC,IAAI,CAAC,UAAU;gBAAE,SAAQ;YAEzB,qBAAqB;YACrB,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAA;YAE9C,qDAAqD;YACrD,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC9B,YAAY,EAAE,CAAC;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE;gBAC9B,QAAQ;aACX,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,IAAI,gBAAgB,GAAG,CAAC,CAAA;IACxB,IAAI,iBAAiB,GAAG,CAAC,CAAA;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEvB,0BAA0B;QAC1B,IAAI,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACjC,SAAQ;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAEvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvB,SAAQ;YACZ,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAA;YAE5B,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS;gBAAE,SAAQ;YAErC,8BAA8B;YAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,SAAQ;YACZ,CAAC;YAED,wBAAwB;YACxB,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACnC,SAAQ;YACZ,CAAC;YAED,0CAA0C;YAC1C,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;YAC7C,IAAI,CAAC,YAAY;gBAAE,SAAQ;YAE3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAA;YAC7B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAQ;YAEjD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAA;YACtC,IAAI,CAAC,UAAU;gBAAE,SAAQ;YAEzB,qBAAqB;YACrB,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAA;YAE9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YAChD,IAAI,CAAC,MAAM;gBAAE,SAAQ;YAErB,6DAA6D;YAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAA;YAC5C,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBAC/D,8BAA8B;gBAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;gBAC/B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;oBAAE,SAAQ;gBAErD,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;gBAE9E,+BAA+B;gBAC/B,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;oBACtC,SAAQ;gBACZ,CAAC;gBAED,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;gBAE3C,qCAAqC;gBACrC,MAAM,OAAO,GAAG,iBAAiB,QAAQ,gBAAgB,MAAM,CAAC,YAAY,GAAG,CAAC,0BAA0B,CAAA;gBAE1G,SAAS,CAAC,MAAM,GAAG,OAAO,CAAA;gBAE1B,MAAM,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;gBACjD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACZ,gBAAgB,IAAI,KAAK,CAAA;oBACzB,iBAAiB,EAAE,CAAA;gBACvB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,gBAAgB,CAAA;QAChD,MAAM,CAAC,KAAK,CACR,oCAAoC,iBAAiB,kCAAkC,gBAAgB,gBAAgB,CAC1H,CAAA;IACL,CAAC;AACL,CAAC"}
|