grok-cli-hurry-mode 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.grok/settings.json +3 -0
- package/LICENSE +21 -0
- package/README.md +452 -0
- package/dist/agent/grok-agent.d.ts +54 -0
- package/dist/agent/grok-agent.js +674 -0
- package/dist/agent/grok-agent.js.map +1 -0
- package/dist/agent/index.d.ts +14 -0
- package/dist/agent/index.js +137 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.js +245 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/grok/client.d.ts +49 -0
- package/dist/grok/client.js +85 -0
- package/dist/grok/client.js.map +1 -0
- package/dist/grok/tools.d.ts +8 -0
- package/dist/grok/tools.js +357 -0
- package/dist/grok/tools.js.map +1 -0
- package/dist/hooks/use-enhanced-input.d.ts +37 -0
- package/dist/hooks/use-enhanced-input.js +217 -0
- package/dist/hooks/use-enhanced-input.js.map +1 -0
- package/dist/hooks/use-input-handler.d.ts +34 -0
- package/dist/hooks/use-input-handler.js +611 -0
- package/dist/hooks/use-input-handler.js.map +1 -0
- package/dist/hooks/use-input-history.d.ts +9 -0
- package/dist/hooks/use-input-history.js +64 -0
- package/dist/hooks/use-input-history.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +151949 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +29 -0
- package/dist/mcp/client.js +167 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +13 -0
- package/dist/mcp/config.js +51 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/transports.d.ts +51 -0
- package/dist/mcp/transports.js +229 -0
- package/dist/mcp/transports.js.map +1 -0
- package/dist/node_modules/react/index.js +1841 -0
- package/dist/tools/bash.d.ts +10 -0
- package/dist/tools/bash.js +81 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/confirmation-tool.d.ts +16 -0
- package/dist/tools/confirmation-tool.js +75 -0
- package/dist/tools/confirmation-tool.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/morph-editor.d.ts +36 -0
- package/dist/tools/morph-editor.js +347 -0
- package/dist/tools/morph-editor.js.map +1 -0
- package/dist/tools/search.d.ts +69 -0
- package/dist/tools/search.js +341 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/text-editor.d.ts +16 -0
- package/dist/tools/text-editor.js +565 -0
- package/dist/tools/text-editor.js.map +1 -0
- package/dist/tools/todo-tool.d.ts +20 -0
- package/dist/tools/todo-tool.js +135 -0
- package/dist/tools/todo-tool.js.map +1 -0
- package/dist/types/index.d.ts +30 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/app.d.ts +7 -0
- package/dist/ui/app.js +160 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/components/api-key-input.d.ts +7 -0
- package/dist/ui/components/api-key-input.js +124 -0
- package/dist/ui/components/api-key-input.js.map +1 -0
- package/dist/ui/components/chat-history.d.ts +8 -0
- package/dist/ui/components/chat-history.js +177 -0
- package/dist/ui/components/chat-history.js.map +1 -0
- package/dist/ui/components/chat-input.d.ts +9 -0
- package/dist/ui/components/chat-input.js +87 -0
- package/dist/ui/components/chat-input.js.map +1 -0
- package/dist/ui/components/chat-interface.d.ts +8 -0
- package/dist/ui/components/chat-interface.js +344 -0
- package/dist/ui/components/chat-interface.js.map +1 -0
- package/dist/ui/components/command-suggestions.d.ts +17 -0
- package/dist/ui/components/command-suggestions.js +68 -0
- package/dist/ui/components/command-suggestions.js.map +1 -0
- package/dist/ui/components/confirmation-dialog.d.ts +11 -0
- package/dist/ui/components/confirmation-dialog.js +167 -0
- package/dist/ui/components/confirmation-dialog.js.map +1 -0
- package/dist/ui/components/diff-renderer.d.ts +13 -0
- package/dist/ui/components/diff-renderer.js +217 -0
- package/dist/ui/components/diff-renderer.js.map +1 -0
- package/dist/ui/components/loading-spinner.d.ts +8 -0
- package/dist/ui/components/loading-spinner.js +92 -0
- package/dist/ui/components/loading-spinner.js.map +1 -0
- package/dist/ui/components/mcp-status.d.ts +5 -0
- package/dist/ui/components/mcp-status.js +74 -0
- package/dist/ui/components/mcp-status.js.map +1 -0
- package/dist/ui/components/model-selection.d.ts +12 -0
- package/dist/ui/components/model-selection.js +28 -0
- package/dist/ui/components/model-selection.js.map +1 -0
- package/dist/ui/shared/max-sized-box.d.ts +8 -0
- package/dist/ui/shared/max-sized-box.js +15 -0
- package/dist/ui/shared/max-sized-box.js.map +1 -0
- package/dist/ui/utils/code-colorizer.d.ts +2 -0
- package/dist/ui/utils/code-colorizer.js +18 -0
- package/dist/ui/utils/code-colorizer.js.map +1 -0
- package/dist/ui/utils/colors.d.ts +14 -0
- package/dist/ui/utils/colors.js +18 -0
- package/dist/ui/utils/colors.js.map +1 -0
- package/dist/ui/utils/markdown-renderer.d.ts +4 -0
- package/dist/ui/utils/markdown-renderer.js +29 -0
- package/dist/ui/utils/markdown-renderer.js.map +1 -0
- package/dist/utils/confirmation-service.d.ts +33 -0
- package/dist/utils/confirmation-service.js +113 -0
- package/dist/utils/confirmation-service.js.map +1 -0
- package/dist/utils/custom-instructions.d.ts +1 -0
- package/dist/utils/custom-instructions.js +53 -0
- package/dist/utils/custom-instructions.js.map +1 -0
- package/dist/utils/model-config.d.ts +28 -0
- package/dist/utils/model-config.js +49 -0
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +94 -0
- package/dist/utils/settings-manager.js +275 -0
- package/dist/utils/settings-manager.js.map +1 -0
- package/dist/utils/settings.d.ts +1 -0
- package/dist/utils/settings.js +8 -0
- package/dist/utils/settings.js.map +1 -0
- package/dist/utils/text-utils.d.ts +80 -0
- package/dist/utils/text-utils.js +197 -0
- package/dist/utils/text-utils.js.map +1 -0
- package/dist/utils/token-counter.d.ts +33 -0
- package/dist/utils/token-counter.js +83 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/dist/yoga.wasm +0 -0
- package/eslint.config.mjs +28 -0
- package/fix.awk +41 -0
- package/grok-logo-screenshot.png +0 -0
- package/package.json +68 -0
- package/sed_cmd.sh +35 -0
- package/temp.txt +29 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
import { GrokAgent, ChatEntry } from "../agent/grok-agent.js";
|
2
|
+
interface UseInputHandlerProps {
|
3
|
+
agent: GrokAgent;
|
4
|
+
chatHistory: ChatEntry[];
|
5
|
+
setChatHistory: React.Dispatch<React.SetStateAction<ChatEntry[]>>;
|
6
|
+
setIsProcessing: (processing: boolean) => void;
|
7
|
+
setIsStreaming: (streaming: boolean) => void;
|
8
|
+
setTokenCount: (count: number) => void;
|
9
|
+
setProcessingTime: (time: number) => void;
|
10
|
+
processingStartTime: React.MutableRefObject<number>;
|
11
|
+
isProcessing: boolean;
|
12
|
+
isStreaming: boolean;
|
13
|
+
isConfirmationActive?: boolean;
|
14
|
+
}
|
15
|
+
interface CommandSuggestion {
|
16
|
+
command: string;
|
17
|
+
description: string;
|
18
|
+
}
|
19
|
+
interface ModelOption {
|
20
|
+
model: string;
|
21
|
+
}
|
22
|
+
export declare function useInputHandler({ agent, chatHistory, setChatHistory, setIsProcessing, setIsStreaming, setTokenCount, setProcessingTime, processingStartTime, isProcessing, isStreaming, isConfirmationActive, }: UseInputHandlerProps): {
|
23
|
+
input: string;
|
24
|
+
cursorPosition: number;
|
25
|
+
showCommandSuggestions: boolean;
|
26
|
+
selectedCommandIndex: number;
|
27
|
+
showModelSelection: boolean;
|
28
|
+
selectedModelIndex: number;
|
29
|
+
commandSuggestions: CommandSuggestion[];
|
30
|
+
availableModels: ModelOption[];
|
31
|
+
agent: GrokAgent;
|
32
|
+
autoEditEnabled: boolean;
|
33
|
+
};
|
34
|
+
export {};
|
@@ -0,0 +1,611 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useInputHandler = useInputHandler;
|
4
|
+
const react_1 = require("react");
|
5
|
+
const ink_1 = require("ink");
|
6
|
+
const confirmation_service_js_1 = require("../utils/confirmation-service.js");
|
7
|
+
const use_enhanced_input_js_1 = require("./use-enhanced-input.js");
|
8
|
+
const command_suggestions_js_1 = require("../ui/components/command-suggestions.js");
|
9
|
+
const model_config_js_1 = require("../utils/model-config.js");
|
10
|
+
function useInputHandler({ agent, chatHistory, setChatHistory, setIsProcessing, setIsStreaming, setTokenCount, setProcessingTime, processingStartTime, isProcessing, isStreaming, isConfirmationActive = false, }) {
|
11
|
+
const [showCommandSuggestions, setShowCommandSuggestions] = (0, react_1.useState)(false);
|
12
|
+
const [selectedCommandIndex, setSelectedCommandIndex] = (0, react_1.useState)(0);
|
13
|
+
const [showModelSelection, setShowModelSelection] = (0, react_1.useState)(false);
|
14
|
+
const [selectedModelIndex, setSelectedModelIndex] = (0, react_1.useState)(0);
|
15
|
+
const [autoEditEnabled, setAutoEditEnabled] = (0, react_1.useState)(() => {
|
16
|
+
const confirmationService = confirmation_service_js_1.ConfirmationService.getInstance();
|
17
|
+
const sessionFlags = confirmationService.getSessionFlags();
|
18
|
+
return sessionFlags.allOperations;
|
19
|
+
});
|
20
|
+
const handleSpecialKey = (key) => {
|
21
|
+
// Don't handle input if confirmation dialog is active
|
22
|
+
if (isConfirmationActive) {
|
23
|
+
return true; // Prevent default handling
|
24
|
+
}
|
25
|
+
// Handle shift+tab to toggle auto-edit mode
|
26
|
+
if (key.shift && key.tab) {
|
27
|
+
const newAutoEditState = !autoEditEnabled;
|
28
|
+
setAutoEditEnabled(newAutoEditState);
|
29
|
+
const confirmationService = confirmation_service_js_1.ConfirmationService.getInstance();
|
30
|
+
if (newAutoEditState) {
|
31
|
+
// Enable auto-edit: set all operations to be accepted
|
32
|
+
confirmationService.setSessionFlag("allOperations", true);
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
// Disable auto-edit: reset session flags
|
36
|
+
confirmationService.resetSession();
|
37
|
+
}
|
38
|
+
return true; // Handled
|
39
|
+
}
|
40
|
+
// Handle escape key for closing menus
|
41
|
+
if (key.escape) {
|
42
|
+
if (showCommandSuggestions) {
|
43
|
+
setShowCommandSuggestions(false);
|
44
|
+
setSelectedCommandIndex(0);
|
45
|
+
return true;
|
46
|
+
}
|
47
|
+
if (showModelSelection) {
|
48
|
+
setShowModelSelection(false);
|
49
|
+
setSelectedModelIndex(0);
|
50
|
+
return true;
|
51
|
+
}
|
52
|
+
if (isProcessing || isStreaming) {
|
53
|
+
agent.abortCurrentOperation();
|
54
|
+
setIsProcessing(false);
|
55
|
+
setIsStreaming(false);
|
56
|
+
setTokenCount(0);
|
57
|
+
setProcessingTime(0);
|
58
|
+
processingStartTime.current = 0;
|
59
|
+
return true;
|
60
|
+
}
|
61
|
+
return false; // Let default escape handling work
|
62
|
+
}
|
63
|
+
// Handle command suggestions navigation
|
64
|
+
if (showCommandSuggestions) {
|
65
|
+
const filteredSuggestions = (0, command_suggestions_js_1.filterCommandSuggestions)(commandSuggestions, input);
|
66
|
+
if (filteredSuggestions.length === 0) {
|
67
|
+
setShowCommandSuggestions(false);
|
68
|
+
setSelectedCommandIndex(0);
|
69
|
+
return false; // Continue processing
|
70
|
+
}
|
71
|
+
else {
|
72
|
+
if (key.upArrow) {
|
73
|
+
setSelectedCommandIndex((prev) => prev === 0 ? filteredSuggestions.length - 1 : prev - 1);
|
74
|
+
return true;
|
75
|
+
}
|
76
|
+
if (key.downArrow) {
|
77
|
+
setSelectedCommandIndex((prev) => (prev + 1) % filteredSuggestions.length);
|
78
|
+
return true;
|
79
|
+
}
|
80
|
+
if (key.tab || key.return) {
|
81
|
+
const safeIndex = Math.min(selectedCommandIndex, filteredSuggestions.length - 1);
|
82
|
+
const selectedCommand = filteredSuggestions[safeIndex];
|
83
|
+
const newInput = selectedCommand.command + " ";
|
84
|
+
setInput(newInput);
|
85
|
+
setCursorPosition(newInput.length);
|
86
|
+
setShowCommandSuggestions(false);
|
87
|
+
setSelectedCommandIndex(0);
|
88
|
+
return true;
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
// Handle model selection navigation
|
93
|
+
if (showModelSelection) {
|
94
|
+
if (key.upArrow) {
|
95
|
+
setSelectedModelIndex((prev) => prev === 0 ? availableModels.length - 1 : prev - 1);
|
96
|
+
return true;
|
97
|
+
}
|
98
|
+
if (key.downArrow) {
|
99
|
+
setSelectedModelIndex((prev) => (prev + 1) % availableModels.length);
|
100
|
+
return true;
|
101
|
+
}
|
102
|
+
if (key.tab || key.return) {
|
103
|
+
const selectedModel = availableModels[selectedModelIndex];
|
104
|
+
agent.setModel(selectedModel.model);
|
105
|
+
(0, model_config_js_1.updateCurrentModel)(selectedModel.model);
|
106
|
+
const confirmEntry = {
|
107
|
+
type: "assistant",
|
108
|
+
content: `✓ Switched to model: ${selectedModel.model}`,
|
109
|
+
timestamp: new Date(),
|
110
|
+
};
|
111
|
+
setChatHistory((prev) => [...prev, confirmEntry]);
|
112
|
+
setShowModelSelection(false);
|
113
|
+
setSelectedModelIndex(0);
|
114
|
+
return true;
|
115
|
+
}
|
116
|
+
}
|
117
|
+
return false; // Let default handling proceed
|
118
|
+
};
|
119
|
+
const handleInputSubmit = async (userInput) => {
|
120
|
+
if (userInput === "exit" || userInput === "quit") {
|
121
|
+
process.exit(0);
|
122
|
+
return;
|
123
|
+
}
|
124
|
+
if (userInput.trim()) {
|
125
|
+
const directCommandResult = await handleDirectCommand(userInput);
|
126
|
+
if (!directCommandResult) {
|
127
|
+
await processUserMessage(userInput);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
};
|
131
|
+
const handleInputChange = (newInput) => {
|
132
|
+
// Update command suggestions based on input
|
133
|
+
if (newInput.startsWith("/")) {
|
134
|
+
setShowCommandSuggestions(true);
|
135
|
+
setSelectedCommandIndex(0);
|
136
|
+
}
|
137
|
+
else {
|
138
|
+
setShowCommandSuggestions(false);
|
139
|
+
setSelectedCommandIndex(0);
|
140
|
+
}
|
141
|
+
};
|
142
|
+
const { input, cursorPosition, setInput, setCursorPosition, clearInput, resetHistory, handleInput, } = (0, use_enhanced_input_js_1.useEnhancedInput)({
|
143
|
+
onSubmit: handleInputSubmit,
|
144
|
+
onSpecialKey: handleSpecialKey,
|
145
|
+
disabled: isConfirmationActive,
|
146
|
+
});
|
147
|
+
// Hook up the actual input handling
|
148
|
+
(0, ink_1.useInput)((inputChar, key) => {
|
149
|
+
handleInput(inputChar, key);
|
150
|
+
});
|
151
|
+
// Update command suggestions when input changes
|
152
|
+
(0, react_1.useEffect)(() => {
|
153
|
+
handleInputChange(input);
|
154
|
+
}, [input]);
|
155
|
+
const commandSuggestions = [
|
156
|
+
{ command: "/help", description: "Show help information" },
|
157
|
+
{ command: "/clear", description: "Clear chat history" },
|
158
|
+
{ command: "/models", description: "Switch Grok Model" },
|
159
|
+
{ command: "/commit-and-push", description: "AI commit & push to remote" },
|
160
|
+
{ command: "/exit", description: "Exit the application" },
|
161
|
+
];
|
162
|
+
// Load models from configuration with fallback to defaults
|
163
|
+
const availableModels = (0, react_1.useMemo)(() => {
|
164
|
+
return (0, model_config_js_1.loadModelConfig)(); // Return directly, interface already matches
|
165
|
+
}, []);
|
166
|
+
const handleDirectCommand = async (input) => {
|
167
|
+
const trimmedInput = input.trim();
|
168
|
+
if (trimmedInput === "/clear") {
|
169
|
+
// Reset chat history
|
170
|
+
setChatHistory([]);
|
171
|
+
// Reset processing states
|
172
|
+
setIsProcessing(false);
|
173
|
+
setIsStreaming(false);
|
174
|
+
setTokenCount(0);
|
175
|
+
setProcessingTime(0);
|
176
|
+
processingStartTime.current = 0;
|
177
|
+
// Reset confirmation service session flags
|
178
|
+
const confirmationService = confirmation_service_js_1.ConfirmationService.getInstance();
|
179
|
+
confirmationService.resetSession();
|
180
|
+
clearInput();
|
181
|
+
resetHistory();
|
182
|
+
return true;
|
183
|
+
}
|
184
|
+
if (trimmedInput === "/help") {
|
185
|
+
const helpEntry = {
|
186
|
+
type: "assistant",
|
187
|
+
content: `Grok CLI Help:
|
188
|
+
|
189
|
+
Built-in Commands:
|
190
|
+
/clear - Clear chat history
|
191
|
+
/help - Show this help
|
192
|
+
/models - Switch between available models
|
193
|
+
/exit - Exit application
|
194
|
+
exit, quit - Exit application
|
195
|
+
|
196
|
+
Git Commands:
|
197
|
+
/commit-and-push - AI-generated commit + push to remote
|
198
|
+
|
199
|
+
Enhanced Input Features:
|
200
|
+
↑/↓ Arrow - Navigate command history
|
201
|
+
Ctrl+C - Clear input (press twice to exit)
|
202
|
+
Ctrl+←/→ - Move by word
|
203
|
+
Ctrl+A/E - Move to line start/end
|
204
|
+
Ctrl+W - Delete word before cursor
|
205
|
+
Ctrl+K - Delete to end of line
|
206
|
+
Ctrl+U - Delete to start of line
|
207
|
+
Shift+Tab - Toggle auto-edit mode (bypass confirmations)
|
208
|
+
|
209
|
+
Direct Commands (executed immediately):
|
210
|
+
ls [path] - List directory contents
|
211
|
+
pwd - Show current directory
|
212
|
+
cd <path> - Change directory
|
213
|
+
cat <file> - View file contents
|
214
|
+
mkdir <dir> - Create directory
|
215
|
+
touch <file>- Create empty file
|
216
|
+
|
217
|
+
Model Configuration:
|
218
|
+
Edit ~/.grok/models.json to add custom models (Claude, GPT, Gemini, etc.)
|
219
|
+
|
220
|
+
For complex operations, just describe what you want in natural language.
|
221
|
+
Examples:
|
222
|
+
"edit package.json and add a new script"
|
223
|
+
"create a new React component called Header"
|
224
|
+
"show me all TypeScript files in this project"`,
|
225
|
+
timestamp: new Date(),
|
226
|
+
};
|
227
|
+
setChatHistory((prev) => [...prev, helpEntry]);
|
228
|
+
clearInput();
|
229
|
+
return true;
|
230
|
+
}
|
231
|
+
if (trimmedInput === "/exit") {
|
232
|
+
process.exit(0);
|
233
|
+
return true;
|
234
|
+
}
|
235
|
+
if (trimmedInput === "/models") {
|
236
|
+
setShowModelSelection(true);
|
237
|
+
setSelectedModelIndex(0);
|
238
|
+
clearInput();
|
239
|
+
return true;
|
240
|
+
}
|
241
|
+
if (trimmedInput.startsWith("/models ")) {
|
242
|
+
const modelArg = trimmedInput.split(" ")[1];
|
243
|
+
const modelNames = availableModels.map((m) => m.model);
|
244
|
+
if (modelNames.includes(modelArg)) {
|
245
|
+
agent.setModel(modelArg);
|
246
|
+
(0, model_config_js_1.updateCurrentModel)(modelArg); // Update project current model
|
247
|
+
const confirmEntry = {
|
248
|
+
type: "assistant",
|
249
|
+
content: `✓ Switched to model: ${modelArg}`,
|
250
|
+
timestamp: new Date(),
|
251
|
+
};
|
252
|
+
setChatHistory((prev) => [...prev, confirmEntry]);
|
253
|
+
}
|
254
|
+
else {
|
255
|
+
const errorEntry = {
|
256
|
+
type: "assistant",
|
257
|
+
content: `Invalid model: ${modelArg}
|
258
|
+
|
259
|
+
Available models: ${modelNames.join(", ")}`,
|
260
|
+
timestamp: new Date(),
|
261
|
+
};
|
262
|
+
setChatHistory((prev) => [...prev, errorEntry]);
|
263
|
+
}
|
264
|
+
clearInput();
|
265
|
+
return true;
|
266
|
+
}
|
267
|
+
if (trimmedInput === "/commit-and-push") {
|
268
|
+
const userEntry = {
|
269
|
+
type: "user",
|
270
|
+
content: "/commit-and-push",
|
271
|
+
timestamp: new Date(),
|
272
|
+
};
|
273
|
+
setChatHistory((prev) => [...prev, userEntry]);
|
274
|
+
setIsProcessing(true);
|
275
|
+
setIsStreaming(true);
|
276
|
+
try {
|
277
|
+
// First check if there are any changes at all
|
278
|
+
const initialStatusResult = await agent.executeBashCommand("git status --porcelain");
|
279
|
+
if (!initialStatusResult.success ||
|
280
|
+
!initialStatusResult.output?.trim()) {
|
281
|
+
const noChangesEntry = {
|
282
|
+
type: "assistant",
|
283
|
+
content: "No changes to commit. Working directory is clean.",
|
284
|
+
timestamp: new Date(),
|
285
|
+
};
|
286
|
+
setChatHistory((prev) => [...prev, noChangesEntry]);
|
287
|
+
setIsProcessing(false);
|
288
|
+
setIsStreaming(false);
|
289
|
+
setInput("");
|
290
|
+
return true;
|
291
|
+
}
|
292
|
+
// Add all changes
|
293
|
+
const addResult = await agent.executeBashCommand("git add .");
|
294
|
+
if (!addResult.success) {
|
295
|
+
const addErrorEntry = {
|
296
|
+
type: "assistant",
|
297
|
+
content: `Failed to stage changes: ${addResult.error || "Unknown error"}`,
|
298
|
+
timestamp: new Date(),
|
299
|
+
};
|
300
|
+
setChatHistory((prev) => [...prev, addErrorEntry]);
|
301
|
+
setIsProcessing(false);
|
302
|
+
setIsStreaming(false);
|
303
|
+
setInput("");
|
304
|
+
return true;
|
305
|
+
}
|
306
|
+
// Show that changes were staged
|
307
|
+
const addEntry = {
|
308
|
+
type: "tool_result",
|
309
|
+
content: "Changes staged successfully",
|
310
|
+
timestamp: new Date(),
|
311
|
+
toolCall: {
|
312
|
+
id: `git_add_${Date.now()}`,
|
313
|
+
type: "function",
|
314
|
+
function: {
|
315
|
+
name: "bash",
|
316
|
+
arguments: JSON.stringify({ command: "git add ." }),
|
317
|
+
},
|
318
|
+
},
|
319
|
+
toolResult: addResult,
|
320
|
+
};
|
321
|
+
setChatHistory((prev) => [...prev, addEntry]);
|
322
|
+
// Get staged changes for commit message generation
|
323
|
+
const diffResult = await agent.executeBashCommand("git diff --cached");
|
324
|
+
// Generate commit message using AI
|
325
|
+
const commitPrompt = `Generate a concise, professional git commit message for these changes:
|
326
|
+
|
327
|
+
Git Status:
|
328
|
+
${initialStatusResult.output}
|
329
|
+
|
330
|
+
Git Diff (staged changes):
|
331
|
+
${diffResult.output || "No staged changes shown"}
|
332
|
+
|
333
|
+
Follow conventional commit format (feat:, fix:, docs:, etc.) and keep it under 72 characters.
|
334
|
+
Respond with ONLY the commit message, no additional text.`;
|
335
|
+
let commitMessage = "";
|
336
|
+
let streamingEntry = null;
|
337
|
+
for await (const chunk of agent.processUserMessageStream(commitPrompt)) {
|
338
|
+
if (chunk.type === "content" && chunk.content) {
|
339
|
+
if (!streamingEntry) {
|
340
|
+
const newEntry = {
|
341
|
+
type: "assistant",
|
342
|
+
content: `Generating commit message...\n\n${chunk.content}`,
|
343
|
+
timestamp: new Date(),
|
344
|
+
isStreaming: true,
|
345
|
+
};
|
346
|
+
setChatHistory((prev) => [...prev, newEntry]);
|
347
|
+
streamingEntry = newEntry;
|
348
|
+
commitMessage = chunk.content;
|
349
|
+
}
|
350
|
+
else {
|
351
|
+
commitMessage += chunk.content;
|
352
|
+
setChatHistory((prev) => prev.map((entry, idx) => idx === prev.length - 1 && entry.isStreaming
|
353
|
+
? {
|
354
|
+
...entry,
|
355
|
+
content: `Generating commit message...\n\n${commitMessage}`,
|
356
|
+
}
|
357
|
+
: entry));
|
358
|
+
}
|
359
|
+
}
|
360
|
+
else if (chunk.type === "done") {
|
361
|
+
if (streamingEntry) {
|
362
|
+
setChatHistory((prev) => prev.map((entry) => entry.isStreaming
|
363
|
+
? {
|
364
|
+
...entry,
|
365
|
+
content: `Generated commit message: "${commitMessage.trim()}"`,
|
366
|
+
isStreaming: false,
|
367
|
+
}
|
368
|
+
: entry));
|
369
|
+
}
|
370
|
+
break;
|
371
|
+
}
|
372
|
+
}
|
373
|
+
// Execute the commit
|
374
|
+
const cleanCommitMessage = commitMessage
|
375
|
+
.trim()
|
376
|
+
.replace(/^["']|["']$/g, "");
|
377
|
+
const commitCommand = `git commit -m "${cleanCommitMessage}"`;
|
378
|
+
const commitResult = await agent.executeBashCommand(commitCommand);
|
379
|
+
const commitEntry = {
|
380
|
+
type: "tool_result",
|
381
|
+
content: commitResult.success
|
382
|
+
? commitResult.output || "Commit successful"
|
383
|
+
: commitResult.error || "Commit failed",
|
384
|
+
timestamp: new Date(),
|
385
|
+
toolCall: {
|
386
|
+
id: `git_commit_${Date.now()}`,
|
387
|
+
type: "function",
|
388
|
+
function: {
|
389
|
+
name: "bash",
|
390
|
+
arguments: JSON.stringify({ command: commitCommand }),
|
391
|
+
},
|
392
|
+
},
|
393
|
+
toolResult: commitResult,
|
394
|
+
};
|
395
|
+
setChatHistory((prev) => [...prev, commitEntry]);
|
396
|
+
// If commit was successful, push to remote
|
397
|
+
if (commitResult.success) {
|
398
|
+
// First try regular push, if it fails try with upstream setup
|
399
|
+
let pushResult = await agent.executeBashCommand("git push");
|
400
|
+
let pushCommand = "git push";
|
401
|
+
if (!pushResult.success &&
|
402
|
+
pushResult.error?.includes("no upstream branch")) {
|
403
|
+
pushCommand = "git push -u origin HEAD";
|
404
|
+
pushResult = await agent.executeBashCommand(pushCommand);
|
405
|
+
}
|
406
|
+
const pushEntry = {
|
407
|
+
type: "tool_result",
|
408
|
+
content: pushResult.success
|
409
|
+
? pushResult.output || "Push successful"
|
410
|
+
: pushResult.error || "Push failed",
|
411
|
+
timestamp: new Date(),
|
412
|
+
toolCall: {
|
413
|
+
id: `git_push_${Date.now()}`,
|
414
|
+
type: "function",
|
415
|
+
function: {
|
416
|
+
name: "bash",
|
417
|
+
arguments: JSON.stringify({ command: pushCommand }),
|
418
|
+
},
|
419
|
+
},
|
420
|
+
toolResult: pushResult,
|
421
|
+
};
|
422
|
+
setChatHistory((prev) => [...prev, pushEntry]);
|
423
|
+
}
|
424
|
+
}
|
425
|
+
catch (error) {
|
426
|
+
const errorEntry = {
|
427
|
+
type: "assistant",
|
428
|
+
content: `Error during commit and push: ${error.message}`,
|
429
|
+
timestamp: new Date(),
|
430
|
+
};
|
431
|
+
setChatHistory((prev) => [...prev, errorEntry]);
|
432
|
+
}
|
433
|
+
setIsProcessing(false);
|
434
|
+
setIsStreaming(false);
|
435
|
+
clearInput();
|
436
|
+
return true;
|
437
|
+
}
|
438
|
+
const directBashCommands = [
|
439
|
+
"ls",
|
440
|
+
"pwd",
|
441
|
+
"cd",
|
442
|
+
"cat",
|
443
|
+
"mkdir",
|
444
|
+
"touch",
|
445
|
+
"echo",
|
446
|
+
"grep",
|
447
|
+
"find",
|
448
|
+
"cp",
|
449
|
+
"mv",
|
450
|
+
"rm",
|
451
|
+
];
|
452
|
+
const firstWord = trimmedInput.split(" ")[0];
|
453
|
+
if (directBashCommands.includes(firstWord)) {
|
454
|
+
const userEntry = {
|
455
|
+
type: "user",
|
456
|
+
content: trimmedInput,
|
457
|
+
timestamp: new Date(),
|
458
|
+
};
|
459
|
+
setChatHistory((prev) => [...prev, userEntry]);
|
460
|
+
try {
|
461
|
+
const result = await agent.executeBashCommand(trimmedInput);
|
462
|
+
const commandEntry = {
|
463
|
+
type: "tool_result",
|
464
|
+
content: result.success
|
465
|
+
? result.output || "Command completed"
|
466
|
+
: result.error || "Command failed",
|
467
|
+
timestamp: new Date(),
|
468
|
+
toolCall: {
|
469
|
+
id: `bash_${Date.now()}`,
|
470
|
+
type: "function",
|
471
|
+
function: {
|
472
|
+
name: "bash",
|
473
|
+
arguments: JSON.stringify({ command: trimmedInput }),
|
474
|
+
},
|
475
|
+
},
|
476
|
+
toolResult: result,
|
477
|
+
};
|
478
|
+
setChatHistory((prev) => [...prev, commandEntry]);
|
479
|
+
}
|
480
|
+
catch (error) {
|
481
|
+
const errorEntry = {
|
482
|
+
type: "assistant",
|
483
|
+
content: `Error executing command: ${error.message}`,
|
484
|
+
timestamp: new Date(),
|
485
|
+
};
|
486
|
+
setChatHistory((prev) => [...prev, errorEntry]);
|
487
|
+
}
|
488
|
+
clearInput();
|
489
|
+
return true;
|
490
|
+
}
|
491
|
+
return false;
|
492
|
+
};
|
493
|
+
const processUserMessage = async (userInput) => {
|
494
|
+
const userEntry = {
|
495
|
+
type: "user",
|
496
|
+
content: userInput,
|
497
|
+
timestamp: new Date(),
|
498
|
+
};
|
499
|
+
setChatHistory((prev) => [...prev, userEntry]);
|
500
|
+
setIsProcessing(true);
|
501
|
+
clearInput();
|
502
|
+
try {
|
503
|
+
setIsStreaming(true);
|
504
|
+
let streamingEntry = null;
|
505
|
+
for await (const chunk of agent.processUserMessageStream(userInput)) {
|
506
|
+
switch (chunk.type) {
|
507
|
+
case "content":
|
508
|
+
if (chunk.content) {
|
509
|
+
if (!streamingEntry) {
|
510
|
+
const newStreamingEntry = {
|
511
|
+
type: "assistant",
|
512
|
+
content: chunk.content,
|
513
|
+
timestamp: new Date(),
|
514
|
+
isStreaming: true,
|
515
|
+
};
|
516
|
+
setChatHistory((prev) => [...prev, newStreamingEntry]);
|
517
|
+
streamingEntry = newStreamingEntry;
|
518
|
+
}
|
519
|
+
else {
|
520
|
+
setChatHistory((prev) => prev.map((entry, idx) => idx === prev.length - 1 && entry.isStreaming
|
521
|
+
? { ...entry, content: entry.content + chunk.content }
|
522
|
+
: entry));
|
523
|
+
}
|
524
|
+
}
|
525
|
+
break;
|
526
|
+
case "token_count":
|
527
|
+
if (chunk.tokenCount !== undefined) {
|
528
|
+
setTokenCount(chunk.tokenCount);
|
529
|
+
}
|
530
|
+
break;
|
531
|
+
case "tool_calls":
|
532
|
+
if (chunk.toolCalls) {
|
533
|
+
// Stop streaming for the current assistant message
|
534
|
+
setChatHistory((prev) => prev.map((entry) => entry.isStreaming
|
535
|
+
? {
|
536
|
+
...entry,
|
537
|
+
isStreaming: false,
|
538
|
+
toolCalls: chunk.toolCalls,
|
539
|
+
}
|
540
|
+
: entry));
|
541
|
+
streamingEntry = null;
|
542
|
+
// Add individual tool call entries to show tools are being executed
|
543
|
+
chunk.toolCalls.forEach((toolCall) => {
|
544
|
+
const toolCallEntry = {
|
545
|
+
type: "tool_call",
|
546
|
+
content: "Executing...",
|
547
|
+
timestamp: new Date(),
|
548
|
+
toolCall: toolCall,
|
549
|
+
};
|
550
|
+
setChatHistory((prev) => [...prev, toolCallEntry]);
|
551
|
+
});
|
552
|
+
}
|
553
|
+
break;
|
554
|
+
case "tool_result":
|
555
|
+
if (chunk.toolCall && chunk.toolResult) {
|
556
|
+
setChatHistory((prev) => prev.map((entry) => {
|
557
|
+
if (entry.isStreaming) {
|
558
|
+
return { ...entry, isStreaming: false };
|
559
|
+
}
|
560
|
+
// Update the existing tool_call entry with the result
|
561
|
+
if (entry.type === "tool_call" &&
|
562
|
+
entry.toolCall?.id === chunk.toolCall?.id) {
|
563
|
+
return {
|
564
|
+
...entry,
|
565
|
+
type: "tool_result",
|
566
|
+
content: chunk.toolResult.success
|
567
|
+
? chunk.toolResult.output || "Success"
|
568
|
+
: chunk.toolResult.error || "Error occurred",
|
569
|
+
toolResult: chunk.toolResult,
|
570
|
+
};
|
571
|
+
}
|
572
|
+
return entry;
|
573
|
+
}));
|
574
|
+
streamingEntry = null;
|
575
|
+
}
|
576
|
+
break;
|
577
|
+
case "done":
|
578
|
+
if (streamingEntry) {
|
579
|
+
setChatHistory((prev) => prev.map((entry) => entry.isStreaming ? { ...entry, isStreaming: false } : entry));
|
580
|
+
}
|
581
|
+
setIsStreaming(false);
|
582
|
+
break;
|
583
|
+
}
|
584
|
+
}
|
585
|
+
}
|
586
|
+
catch (error) {
|
587
|
+
const errorEntry = {
|
588
|
+
type: "assistant",
|
589
|
+
content: `Error: ${error.message}`,
|
590
|
+
timestamp: new Date(),
|
591
|
+
};
|
592
|
+
setChatHistory((prev) => [...prev, errorEntry]);
|
593
|
+
setIsStreaming(false);
|
594
|
+
}
|
595
|
+
setIsProcessing(false);
|
596
|
+
processingStartTime.current = 0;
|
597
|
+
};
|
598
|
+
return {
|
599
|
+
input,
|
600
|
+
cursorPosition,
|
601
|
+
showCommandSuggestions,
|
602
|
+
selectedCommandIndex,
|
603
|
+
showModelSelection,
|
604
|
+
selectedModelIndex,
|
605
|
+
commandSuggestions,
|
606
|
+
availableModels,
|
607
|
+
agent,
|
608
|
+
autoEditEnabled,
|
609
|
+
};
|
610
|
+
}
|
611
|
+
//# sourceMappingURL=use-input-handler.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-input-handler.js","sourceRoot":"","sources":["../../src/hooks/use-input-handler.ts"],"names":[],"mappings":";;AAgCA,0CA+sBC;AA/uBD,iCAAqD;AACrD,6BAA+B;AAE/B,8EAAuE;AACvE,mEAAgE;AAEhE,oFAAmF;AACnF,8DAA+E;AAyB/E,SAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,oBAAoB,GAAG,KAAK,GACP;IACrB,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACpE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE;QAC1D,MAAM,mBAAmB,GAAG,6CAAmB,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,mBAAmB,CAAC,eAAe,EAAE,CAAC;QAC3D,OAAO,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAW,EAAE;QAC7C,sDAAsD;QACtD,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,CAAC,2BAA2B;QAC1C,CAAC;QAED,4CAA4C;QAC5C,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,gBAAgB,GAAG,CAAC,eAAe,CAAC;YAC1C,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;YAErC,MAAM,mBAAmB,GAAG,6CAAmB,CAAC,WAAW,EAAE,CAAC;YAC9D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,sDAAsD;gBACtD,mBAAmB,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,yCAAyC;gBACzC,mBAAmB,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,CAAC,CAAC,UAAU;QACzB,CAAC;QAED,sCAAsC;QACtC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACjC,uBAAuB,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,kBAAkB,EAAE,CAAC;gBACvB,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;gBAChC,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBAC9B,eAAe,CAAC,KAAK,CAAC,CAAC;gBACvB,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjB,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACrB,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,mCAAmC;QACnD,CAAC;QAED,wCAAwC;QACxC,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,mBAAmB,GAAG,IAAA,iDAAwB,EAClD,kBAAkB,EAClB,KAAK,CACN,CAAC;YAEF,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACjC,uBAAuB,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,KAAK,CAAC,CAAC,sBAAsB;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,uBAAuB,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CACvD,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBAClB,uBAAuB,CACrB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAClD,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,oBAAoB,EACpB,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAC/B,CAAC;oBACF,MAAM,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;oBACvD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,GAAG,GAAG,CAAC;oBAC/C,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACnB,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnC,yBAAyB,CAAC,KAAK,CAAC,CAAC;oBACjC,uBAAuB,CAAC,CAAC,CAAC,CAAC;oBAC3B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CACnD,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,aAAa,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;gBAC1D,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAA,oCAAkB,EAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACxC,MAAM,YAAY,GAAc;oBAC9B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,wBAAwB,aAAa,CAAC,KAAK,EAAE;oBACtD,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;gBAClD,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,+BAA+B;IAC/C,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;QACpD,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,MAAM,mBAAmB,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;YACjE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC7C,4CAA4C;QAC5C,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAChC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,yBAAyB,CAAC,KAAK,CAAC,CAAC;YACjC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,EACJ,KAAK,EACL,cAAc,EACd,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,GAAG,IAAA,wCAAgB,EAAC;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,YAAY,EAAE,gBAAgB;QAC9B,QAAQ,EAAE,oBAAoB;KAC/B,CAAC,CAAC;IAEH,oCAAoC;IACpC,IAAA,cAAQ,EAAC,CAAC,SAAiB,EAAE,GAAQ,EAAE,EAAE;QACvC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,gDAAgD;IAChD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,kBAAkB,GAAwB;QAC9C,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE;QAC1D,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACxD,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE;QACxD,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,4BAA4B,EAAE;QAC1E,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE;KAC1D,CAAC;IAEF,2DAA2D;IAC3D,MAAM,eAAe,GAAkB,IAAA,eAAO,EAAC,GAAG,EAAE;QAClD,OAAO,IAAA,iCAAe,GAAE,CAAC,CAAC,6CAA6C;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAAa,EAAoB,EAAE;QACpE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,qBAAqB;YACrB,cAAc,CAAC,EAAE,CAAC,CAAC;YAEnB,0BAA0B;YAC1B,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,aAAa,CAAC,CAAC,CAAC,CAAC;YACjB,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrB,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC;YAEhC,2CAA2C;YAC3C,MAAM,mBAAmB,GAAG,6CAAmB,CAAC,WAAW,EAAE,CAAC;YAC9D,mBAAmB,CAAC,YAAY,EAAE,CAAC;YAEnC,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAc;gBAC3B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAqCgC;gBACzC,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAC/C,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzB,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEvD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACzB,IAAA,oCAAkB,EAAC,QAAQ,CAAC,CAAC,CAAC,+BAA+B;gBAC7D,MAAM,YAAY,GAAc;oBAC9B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,wBAAwB,QAAQ,EAAE;oBAC3C,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAc;oBAC5B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,kBAAkB,QAAQ;;oBAEzB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACjC,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,YAAY,KAAK,kBAAkB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAc;gBAC3B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,kBAAkB;gBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAE/C,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,cAAc,CAAC,IAAI,CAAC,CAAC;YAErB,IAAI,CAAC;gBACH,8CAA8C;gBAC9C,MAAM,mBAAmB,GAAG,MAAM,KAAK,CAAC,kBAAkB,CACxD,wBAAwB,CACzB,CAAC;gBAEF,IACE,CAAC,mBAAmB,CAAC,OAAO;oBAC5B,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,EACnC,CAAC;oBACD,MAAM,cAAc,GAAc;wBAChC,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,mDAAmD;wBAC5D,SAAS,EAAE,IAAI,IAAI,EAAE;qBACtB,CAAC;oBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;oBACpD,eAAe,CAAC,KAAK,CAAC,CAAC;oBACvB,cAAc,CAAC,KAAK,CAAC,CAAC;oBACtB,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,kBAAkB;gBAClB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBAE9D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACvB,MAAM,aAAa,GAAc;wBAC/B,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,4BACP,SAAS,CAAC,KAAK,IAAI,eACrB,EAAE;wBACF,SAAS,EAAE,IAAI,IAAI,EAAE;qBACtB,CAAC;oBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;oBACnD,eAAe,CAAC,KAAK,CAAC,CAAC;oBACvB,cAAc,CAAC,KAAK,CAAC,CAAC;oBACtB,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,gCAAgC;gBAChC,MAAM,QAAQ,GAAc;oBAC1B,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,6BAA6B;oBACtC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,QAAQ,EAAE;wBACR,EAAE,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE;wBAC3B,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,MAAM;4BACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;yBACpD;qBACF;oBACD,UAAU,EAAE,SAAS;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAE9C,mDAAmD;gBACnD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;gBAEvE,mCAAmC;gBACnC,MAAM,YAAY,GAAG;;;EAG3B,mBAAmB,CAAC,MAAM;;;EAG1B,UAAU,CAAC,MAAM,IAAI,yBAAyB;;;0DAGU,CAAC;gBAEnD,IAAI,aAAa,GAAG,EAAE,CAAC;gBACvB,IAAI,cAAc,GAAqB,IAAI,CAAC;gBAE5C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,wBAAwB,CACtD,YAAY,CACb,EAAE,CAAC;oBACF,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;4BACpB,MAAM,QAAQ,GAAG;gCACf,IAAI,EAAE,WAAoB;gCAC1B,OAAO,EAAE,mCAAmC,KAAK,CAAC,OAAO,EAAE;gCAC3D,SAAS,EAAE,IAAI,IAAI,EAAE;gCACrB,WAAW,EAAE,IAAI;6BAClB,CAAC;4BACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;4BAC9C,cAAc,GAAG,QAAQ,CAAC;4BAC1B,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;wBAChC,CAAC;6BAAM,CAAC;4BACN,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;4BAC/B,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CACtB,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW;gCAC1C,CAAC,CAAC;oCACE,GAAG,KAAK;oCACR,OAAO,EAAE,mCAAmC,aAAa,EAAE;iCAC5D;gCACH,CAAC,CAAC,KAAK,CACV,CACF,CAAC;wBACJ,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACjC,IAAI,cAAc,EAAE,CAAC;4BACnB,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,WAAW;gCACf,CAAC,CAAC;oCACE,GAAG,KAAK;oCACR,OAAO,EAAE,8BAA8B,aAAa,CAAC,IAAI,EAAE,GAAG;oCAC9D,WAAW,EAAE,KAAK;iCACnB;gCACH,CAAC,CAAC,KAAK,CACV,CACF,CAAC;wBACJ,CAAC;wBACD,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,qBAAqB;gBACrB,MAAM,kBAAkB,GAAG,aAAa;qBACrC,IAAI,EAAE;qBACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBAC/B,MAAM,aAAa,GAAG,kBAAkB,kBAAkB,GAAG,CAAC;gBAC9D,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;gBAEnE,MAAM,WAAW,GAAc;oBAC7B,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,YAAY,CAAC,OAAO;wBAC3B,CAAC,CAAC,YAAY,CAAC,MAAM,IAAI,mBAAmB;wBAC5C,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,eAAe;oBACzC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,QAAQ,EAAE;wBACR,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE;wBAC9B,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,MAAM;4BACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;yBACtD;qBACF;oBACD,UAAU,EAAE,YAAY;iBACzB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;gBAEjD,2CAA2C;gBAC3C,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBACzB,8DAA8D;oBAC9D,IAAI,UAAU,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;oBAC5D,IAAI,WAAW,GAAG,UAAU,CAAC;oBAE7B,IACE,CAAC,UAAU,CAAC,OAAO;wBACnB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAChD,CAAC;wBACD,WAAW,GAAG,yBAAyB,CAAC;wBACxC,UAAU,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;oBAC3D,CAAC;oBAED,MAAM,SAAS,GAAc;wBAC3B,IAAI,EAAE,aAAa;wBACnB,OAAO,EAAE,UAAU,CAAC,OAAO;4BACzB,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,iBAAiB;4BACxC,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,aAAa;wBACrC,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,QAAQ,EAAE;4BACR,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE;4BAC5B,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE;gCACR,IAAI,EAAE,MAAM;gCACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;6BACpD;yBACF;wBACD,UAAU,EAAE,UAAU;qBACvB,CAAC;oBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAc;oBAC5B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,iCAAiC,KAAK,CAAC,OAAO,EAAE;oBACzD,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG;YACzB,IAAI;YACJ,KAAK;YACL,IAAI;YACJ,KAAK;YACL,OAAO;YACP,OAAO;YACP,MAAM;YACN,MAAM;YACN,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,IAAI;SACL,CAAC;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAc;gBAC3B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAE/C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBAE5D,MAAM,YAAY,GAAc;oBAC9B,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACrB,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,mBAAmB;wBACtC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,gBAAgB;oBACpC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,QAAQ,EAAE;wBACR,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;wBACxB,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,MAAM;4BACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;yBACrD;qBACF;oBACD,UAAU,EAAE,MAAM;iBACnB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAc;oBAC5B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,4BAA4B,KAAK,CAAC,OAAO,EAAE;oBACpD,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;QACrD,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAE/C,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,UAAU,EAAE,CAAC;QAEb,IAAI,CAAC;YACH,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,cAAc,GAAqB,IAAI,CAAC;YAE5C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,SAAS;wBACZ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BAClB,IAAI,CAAC,cAAc,EAAE,CAAC;gCACpB,MAAM,iBAAiB,GAAG;oCACxB,IAAI,EAAE,WAAoB;oCAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oCACtB,SAAS,EAAE,IAAI,IAAI,EAAE;oCACrB,WAAW,EAAE,IAAI;iCAClB,CAAC;gCACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;gCACvD,cAAc,GAAG,iBAAiB,CAAC;4BACrC,CAAC;iCAAM,CAAC;gCACN,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CACtB,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW;oCAC1C,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE;oCACtD,CAAC,CAAC,KAAK,CACV,CACF,CAAC;4BACJ,CAAC;wBACH,CAAC;wBACD,MAAM;oBAER,KAAK,aAAa;wBAChB,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;4BACnC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wBAClC,CAAC;wBACD,MAAM;oBAER,KAAK,YAAY;wBACf,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;4BACpB,mDAAmD;4BACnD,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,WAAW;gCACf,CAAC,CAAC;oCACE,GAAG,KAAK;oCACR,WAAW,EAAE,KAAK;oCAClB,SAAS,EAAE,KAAK,CAAC,SAAS;iCAC3B;gCACH,CAAC,CAAC,KAAK,CACV,CACF,CAAC;4BACF,cAAc,GAAG,IAAI,CAAC;4BAEtB,oEAAoE;4BACpE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gCACnC,MAAM,aAAa,GAAc;oCAC/B,IAAI,EAAE,WAAW;oCACjB,OAAO,EAAE,cAAc;oCACvB,SAAS,EAAE,IAAI,IAAI,EAAE;oCACrB,QAAQ,EAAE,QAAQ;iCACnB,CAAC;gCACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;4BACrD,CAAC,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM;oBAER,KAAK,aAAa;wBAChB,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;4BACvC,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gCACjB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oCACtB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;gCAC1C,CAAC;gCACD,sDAAsD;gCACtD,IACE,KAAK,CAAC,IAAI,KAAK,WAAW;oCAC1B,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,EACzC,CAAC;oCACD,OAAO;wCACL,GAAG,KAAK;wCACR,IAAI,EAAE,aAAa;wCACnB,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO;4CAC/B,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS;4CACtC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,gBAAgB;wCAC9C,UAAU,EAAE,KAAK,CAAC,UAAU;qCAC7B,CAAC;gCACJ,CAAC;gCACD,OAAO,KAAK,CAAC;4BACf,CAAC,CAAC,CACH,CAAC;4BACF,cAAc,GAAG,IAAI,CAAC;wBACxB,CAAC;wBACD,MAAM;oBAER,KAAK,MAAM;wBACT,IAAI,cAAc,EAAE,CAAC;4BACnB,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAC7D,CACF,CAAC;wBACJ,CAAC;wBACD,cAAc,CAAC,KAAK,CAAC,CAAC;wBACtB,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,UAAU,GAAc;gBAC5B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;gBAClC,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAChD,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC;IAGF,OAAO;QACL,KAAK;QACL,cAAc;QACd,sBAAsB;QACtB,oBAAoB;QACpB,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,eAAe;QACf,KAAK;QACL,eAAe;KAChB,CAAC;AACJ,CAAC"}
|