@azumag/opencode-rate-limit-fallback 1.19.2 → 1.21.1
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 +132 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +59 -968
- package/dist/logger.d.ts +0 -1
- package/dist/logger.js +0 -1
- package/dist/src/fallback/FallbackHandler.d.ts +73 -0
- package/dist/src/fallback/FallbackHandler.js +341 -0
- package/dist/src/fallback/ModelSelector.d.ts +37 -0
- package/dist/src/fallback/ModelSelector.js +134 -0
- package/dist/src/metrics/MetricsManager.d.ts +81 -0
- package/dist/src/metrics/MetricsManager.js +377 -0
- package/dist/src/metrics/types.d.ts +11 -0
- package/dist/src/metrics/types.js +11 -0
- package/dist/src/session/SubagentTracker.d.ts +36 -0
- package/dist/src/session/SubagentTracker.js +114 -0
- package/dist/src/types/index.d.ts +262 -0
- package/dist/src/types/index.js +46 -0
- package/dist/src/utils/config.d.ts +16 -0
- package/dist/src/utils/config.js +78 -0
- package/dist/src/utils/errorDetection.d.ts +7 -0
- package/dist/src/utils/errorDetection.js +34 -0
- package/dist/src/utils/helpers.d.ts +34 -0
- package/dist/src/utils/helpers.js +95 -0
- package/package.json +3 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js.map +0 -1
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for Rate Limit Fallback Plugin
|
|
3
|
+
*/
|
|
4
|
+
import type { LogConfig } from '../../logger.js';
|
|
5
|
+
import type { TextPartInput, FilePartInput } from "@opencode-ai/sdk";
|
|
6
|
+
/**
|
|
7
|
+
* Represents a fallback model configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface FallbackModel {
|
|
10
|
+
providerID: string;
|
|
11
|
+
modelID: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Fallback mode when all models are exhausted:
|
|
15
|
+
* - "cycle": Reset and retry from the first model (default)
|
|
16
|
+
* - "stop": Stop and show error message
|
|
17
|
+
* - "retry-last": Try the last model once, then reset to first on next prompt
|
|
18
|
+
*/
|
|
19
|
+
export type FallbackMode = "cycle" | "stop" | "retry-last";
|
|
20
|
+
/**
|
|
21
|
+
* Metrics output configuration
|
|
22
|
+
*/
|
|
23
|
+
export interface MetricsOutputConfig {
|
|
24
|
+
console: boolean;
|
|
25
|
+
file?: string;
|
|
26
|
+
format: "pretty" | "json" | "csv";
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Metrics configuration
|
|
30
|
+
*/
|
|
31
|
+
export interface MetricsConfig {
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
output: MetricsOutputConfig;
|
|
34
|
+
resetInterval: "hourly" | "daily" | "weekly";
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Plugin configuration
|
|
38
|
+
*/
|
|
39
|
+
export interface PluginConfig {
|
|
40
|
+
fallbackModels: FallbackModel[];
|
|
41
|
+
cooldownMs: number;
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
fallbackMode: FallbackMode;
|
|
44
|
+
maxSubagentDepth?: number;
|
|
45
|
+
enableSubagentFallback?: boolean;
|
|
46
|
+
log?: LogConfig;
|
|
47
|
+
metrics?: MetricsConfig;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Fallback state for tracking progress
|
|
51
|
+
*/
|
|
52
|
+
export type FallbackState = "none" | "in_progress" | "completed";
|
|
53
|
+
/**
|
|
54
|
+
* Subagent session information
|
|
55
|
+
*/
|
|
56
|
+
export interface SubagentSession {
|
|
57
|
+
sessionID: string;
|
|
58
|
+
parentSessionID: string;
|
|
59
|
+
depth: number;
|
|
60
|
+
fallbackState: FallbackState;
|
|
61
|
+
createdAt: number;
|
|
62
|
+
lastActivity: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Session hierarchy for managing subagents
|
|
66
|
+
*/
|
|
67
|
+
export interface SessionHierarchy {
|
|
68
|
+
rootSessionID: string;
|
|
69
|
+
subagents: Map<string, SubagentSession>;
|
|
70
|
+
sharedFallbackState: FallbackState;
|
|
71
|
+
sharedConfig: PluginConfig;
|
|
72
|
+
createdAt: number;
|
|
73
|
+
lastActivity: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Session error event properties
|
|
77
|
+
*/
|
|
78
|
+
export interface SessionErrorEventProperties {
|
|
79
|
+
sessionID: string;
|
|
80
|
+
error: unknown;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Message updated event info
|
|
84
|
+
*/
|
|
85
|
+
export interface MessageUpdatedEventInfo {
|
|
86
|
+
sessionID: string;
|
|
87
|
+
providerID?: string;
|
|
88
|
+
modelID?: string;
|
|
89
|
+
error?: unknown;
|
|
90
|
+
id?: string;
|
|
91
|
+
status?: string;
|
|
92
|
+
role?: string;
|
|
93
|
+
[key: string]: unknown;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Message updated event properties
|
|
97
|
+
*/
|
|
98
|
+
export interface MessageUpdatedEventProperties {
|
|
99
|
+
info: MessageUpdatedEventInfo;
|
|
100
|
+
[key: string]: unknown;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Session retry status
|
|
104
|
+
*/
|
|
105
|
+
export interface SessionRetryStatus {
|
|
106
|
+
type: string;
|
|
107
|
+
message: string;
|
|
108
|
+
[key: string]: unknown;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Session status event properties
|
|
112
|
+
*/
|
|
113
|
+
export interface SessionStatusEventProperties {
|
|
114
|
+
sessionID: string;
|
|
115
|
+
status?: SessionRetryStatus;
|
|
116
|
+
[key: string]: unknown;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Rate limit metrics for a model
|
|
120
|
+
*/
|
|
121
|
+
export interface RateLimitMetrics {
|
|
122
|
+
count: number;
|
|
123
|
+
lastOccurrence: number;
|
|
124
|
+
firstOccurrence: number;
|
|
125
|
+
averageInterval?: number;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Fallback target metrics
|
|
129
|
+
*/
|
|
130
|
+
export interface FallbackTargetMetrics {
|
|
131
|
+
usedAsFallback: number;
|
|
132
|
+
successful: number;
|
|
133
|
+
failed: number;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Model performance metrics
|
|
137
|
+
*/
|
|
138
|
+
export interface ModelPerformanceMetrics {
|
|
139
|
+
requests: number;
|
|
140
|
+
successes: number;
|
|
141
|
+
failures: number;
|
|
142
|
+
averageResponseTime?: number;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Complete metrics data
|
|
146
|
+
*/
|
|
147
|
+
export interface MetricsData {
|
|
148
|
+
rateLimits: Map<string, RateLimitMetrics>;
|
|
149
|
+
fallbacks: {
|
|
150
|
+
total: number;
|
|
151
|
+
successful: number;
|
|
152
|
+
failed: number;
|
|
153
|
+
averageDuration: number;
|
|
154
|
+
byTargetModel: Map<string, FallbackTargetMetrics>;
|
|
155
|
+
};
|
|
156
|
+
modelPerformance: Map<string, ModelPerformanceMetrics>;
|
|
157
|
+
startedAt: number;
|
|
158
|
+
generatedAt: number;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Text message part
|
|
162
|
+
*/
|
|
163
|
+
export type TextPart = {
|
|
164
|
+
type: "text";
|
|
165
|
+
text: string;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* File message part
|
|
169
|
+
*/
|
|
170
|
+
export type FilePart = {
|
|
171
|
+
type: "file";
|
|
172
|
+
path: string;
|
|
173
|
+
mediaType: string;
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Message part (text or file)
|
|
177
|
+
*/
|
|
178
|
+
export type MessagePart = TextPart | FilePart;
|
|
179
|
+
/**
|
|
180
|
+
* SDK-compatible message part input
|
|
181
|
+
*/
|
|
182
|
+
export type SDKMessagePartInput = TextPartInput | FilePartInput;
|
|
183
|
+
/**
|
|
184
|
+
* OpenCode client interface
|
|
185
|
+
*/
|
|
186
|
+
export type OpenCodeClient = {
|
|
187
|
+
session: {
|
|
188
|
+
abort: (args: {
|
|
189
|
+
path: {
|
|
190
|
+
id: string;
|
|
191
|
+
};
|
|
192
|
+
}) => Promise<unknown>;
|
|
193
|
+
messages: (args: {
|
|
194
|
+
path: {
|
|
195
|
+
id: string;
|
|
196
|
+
};
|
|
197
|
+
}) => Promise<{
|
|
198
|
+
data?: Array<{
|
|
199
|
+
info: {
|
|
200
|
+
id: string;
|
|
201
|
+
role: string;
|
|
202
|
+
};
|
|
203
|
+
parts: unknown[];
|
|
204
|
+
}>;
|
|
205
|
+
}>;
|
|
206
|
+
prompt: (args: {
|
|
207
|
+
path: {
|
|
208
|
+
id: string;
|
|
209
|
+
};
|
|
210
|
+
body: {
|
|
211
|
+
parts: SDKMessagePartInput[];
|
|
212
|
+
model: {
|
|
213
|
+
providerID: string;
|
|
214
|
+
modelID: string;
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
}) => Promise<unknown>;
|
|
218
|
+
};
|
|
219
|
+
tui?: {
|
|
220
|
+
showToast: (toast: any) => Promise<any>;
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* Plugin context
|
|
225
|
+
*/
|
|
226
|
+
export type PluginContext = {
|
|
227
|
+
client: OpenCodeClient;
|
|
228
|
+
directory: string;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Default fallback models
|
|
232
|
+
*/
|
|
233
|
+
export declare const DEFAULT_FALLBACK_MODELS: FallbackModel[];
|
|
234
|
+
/**
|
|
235
|
+
* Valid fallback modes
|
|
236
|
+
*/
|
|
237
|
+
export declare const VALID_FALLBACK_MODES: FallbackMode[];
|
|
238
|
+
/**
|
|
239
|
+
* Valid reset intervals
|
|
240
|
+
*/
|
|
241
|
+
export declare const VALID_RESET_INTERVALS: readonly ["hourly", "daily", "weekly"];
|
|
242
|
+
export type ResetInterval = typeof VALID_RESET_INTERVALS[number];
|
|
243
|
+
/**
|
|
244
|
+
* Reset interval values in milliseconds
|
|
245
|
+
*/
|
|
246
|
+
export declare const RESET_INTERVAL_MS: Record<ResetInterval, number>;
|
|
247
|
+
/**
|
|
248
|
+
* Deduplication window for fallback processing
|
|
249
|
+
*/
|
|
250
|
+
export declare const DEDUP_WINDOW_MS = 5000;
|
|
251
|
+
/**
|
|
252
|
+
* State timeout for retry state
|
|
253
|
+
*/
|
|
254
|
+
export declare const STATE_TIMEOUT_MS = 30000;
|
|
255
|
+
/**
|
|
256
|
+
* Cleanup interval for stale entries
|
|
257
|
+
*/
|
|
258
|
+
export declare const CLEANUP_INTERVAL_MS = 300000;
|
|
259
|
+
/**
|
|
260
|
+
* TTL for session entries
|
|
261
|
+
*/
|
|
262
|
+
export declare const SESSION_ENTRY_TTL_MS = 3600000;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for Rate Limit Fallback Plugin
|
|
3
|
+
*/
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Constants
|
|
6
|
+
// ============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Default fallback models
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_FALLBACK_MODELS = [
|
|
11
|
+
{ providerID: "anthropic", modelID: "claude-3-5-sonnet-20250514" },
|
|
12
|
+
{ providerID: "google", modelID: "gemini-2.5-pro" },
|
|
13
|
+
{ providerID: "google", modelID: "gemini-2.5-flash" },
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Valid fallback modes
|
|
17
|
+
*/
|
|
18
|
+
export const VALID_FALLBACK_MODES = ["cycle", "stop", "retry-last"];
|
|
19
|
+
/**
|
|
20
|
+
* Valid reset intervals
|
|
21
|
+
*/
|
|
22
|
+
export const VALID_RESET_INTERVALS = ["hourly", "daily", "weekly"];
|
|
23
|
+
/**
|
|
24
|
+
* Reset interval values in milliseconds
|
|
25
|
+
*/
|
|
26
|
+
export const RESET_INTERVAL_MS = {
|
|
27
|
+
hourly: 60 * 60 * 1000,
|
|
28
|
+
daily: 24 * 60 * 60 * 1000,
|
|
29
|
+
weekly: 7 * 24 * 60 * 60 * 1000,
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Deduplication window for fallback processing
|
|
33
|
+
*/
|
|
34
|
+
export const DEDUP_WINDOW_MS = 5000;
|
|
35
|
+
/**
|
|
36
|
+
* State timeout for retry state
|
|
37
|
+
*/
|
|
38
|
+
export const STATE_TIMEOUT_MS = 30000;
|
|
39
|
+
/**
|
|
40
|
+
* Cleanup interval for stale entries
|
|
41
|
+
*/
|
|
42
|
+
export const CLEANUP_INTERVAL_MS = 300000; // 5 minutes
|
|
43
|
+
/**
|
|
44
|
+
* TTL for session entries
|
|
45
|
+
*/
|
|
46
|
+
export const SESSION_ENTRY_TTL_MS = 3600000; // 1 hour
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loading and validation
|
|
3
|
+
*/
|
|
4
|
+
import type { PluginConfig } from '../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Default plugin configuration
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_CONFIG: PluginConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Validate configuration values
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateConfig(config: any): PluginConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Load and validate config from file paths
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadConfig(directory: string): PluginConfig;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loading and validation
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, readFileSync } from "fs";
|
|
5
|
+
import { join } from "path";
|
|
6
|
+
import { DEFAULT_FALLBACK_MODELS, VALID_FALLBACK_MODES, VALID_RESET_INTERVALS, } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Default plugin configuration
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_CONFIG = {
|
|
11
|
+
fallbackModels: DEFAULT_FALLBACK_MODELS,
|
|
12
|
+
cooldownMs: 60 * 1000,
|
|
13
|
+
enabled: true,
|
|
14
|
+
fallbackMode: "cycle",
|
|
15
|
+
log: {
|
|
16
|
+
level: "warn",
|
|
17
|
+
format: "simple",
|
|
18
|
+
enableTimestamp: true,
|
|
19
|
+
},
|
|
20
|
+
metrics: {
|
|
21
|
+
enabled: false,
|
|
22
|
+
output: {
|
|
23
|
+
console: true,
|
|
24
|
+
format: "pretty",
|
|
25
|
+
},
|
|
26
|
+
resetInterval: "daily",
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Validate configuration values
|
|
31
|
+
*/
|
|
32
|
+
export function validateConfig(config) {
|
|
33
|
+
const mode = config.fallbackMode;
|
|
34
|
+
const resetInterval = config.metrics?.resetInterval;
|
|
35
|
+
return {
|
|
36
|
+
...DEFAULT_CONFIG,
|
|
37
|
+
...config,
|
|
38
|
+
fallbackModels: config.fallbackModels || DEFAULT_CONFIG.fallbackModels,
|
|
39
|
+
fallbackMode: VALID_FALLBACK_MODES.includes(mode) ? mode : DEFAULT_CONFIG.fallbackMode,
|
|
40
|
+
log: config.log ? { ...DEFAULT_CONFIG.log, ...config.log } : DEFAULT_CONFIG.log,
|
|
41
|
+
metrics: config.metrics ? {
|
|
42
|
+
...DEFAULT_CONFIG.metrics,
|
|
43
|
+
...config.metrics,
|
|
44
|
+
output: config.metrics.output ? {
|
|
45
|
+
...DEFAULT_CONFIG.metrics.output,
|
|
46
|
+
...config.metrics.output,
|
|
47
|
+
} : DEFAULT_CONFIG.metrics.output,
|
|
48
|
+
resetInterval: VALID_RESET_INTERVALS.includes(resetInterval) ? resetInterval : DEFAULT_CONFIG.metrics.resetInterval,
|
|
49
|
+
} : DEFAULT_CONFIG.metrics,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Load and validate config from file paths
|
|
54
|
+
*/
|
|
55
|
+
export function loadConfig(directory) {
|
|
56
|
+
const homedir = process.env.HOME || "";
|
|
57
|
+
const configPaths = [
|
|
58
|
+
join(directory, ".opencode", "rate-limit-fallback.json"),
|
|
59
|
+
join(directory, "rate-limit-fallback.json"),
|
|
60
|
+
join(homedir, ".opencode", "rate-limit-fallback.json"),
|
|
61
|
+
join(homedir, ".config", "opencode", "rate-limit-fallback.json"),
|
|
62
|
+
];
|
|
63
|
+
for (const configPath of configPaths) {
|
|
64
|
+
if (existsSync(configPath)) {
|
|
65
|
+
try {
|
|
66
|
+
const content = readFileSync(configPath, "utf-8");
|
|
67
|
+
const userConfig = JSON.parse(content);
|
|
68
|
+
return validateConfig(userConfig);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
// Log config errors to console immediately before logger is initialized
|
|
72
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
73
|
+
console.error(`[RateLimitFallback] Failed to load config from ${configPath}:`, errorMessage);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return DEFAULT_CONFIG;
|
|
78
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate limit error detection
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check if error is rate limit related
|
|
6
|
+
*/
|
|
7
|
+
export function isRateLimitError(error) {
|
|
8
|
+
if (!error || typeof error !== "object")
|
|
9
|
+
return false;
|
|
10
|
+
// More type-safe error object structure
|
|
11
|
+
const err = error;
|
|
12
|
+
// Check for 429 status code in APIError (strict check)
|
|
13
|
+
if (err.name === "APIError" && err.data?.statusCode === 429) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
// Type-safe access to error fields
|
|
17
|
+
const responseBody = String(err.data?.responseBody || "").toLowerCase();
|
|
18
|
+
const message = String(err.data?.message || err.message || "").toLowerCase();
|
|
19
|
+
// Strict rate limit indicators only - avoid false positives
|
|
20
|
+
const strictRateLimitIndicators = [
|
|
21
|
+
"rate limit",
|
|
22
|
+
"rate_limit",
|
|
23
|
+
"ratelimit",
|
|
24
|
+
"too many requests",
|
|
25
|
+
"quota exceeded",
|
|
26
|
+
];
|
|
27
|
+
// Check for 429 in text (explicit HTTP status code)
|
|
28
|
+
if (responseBody.includes("429") || message.includes("429")) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
// Check for strict rate limit keywords
|
|
32
|
+
return strictRateLimitIndicators.some((indicator) => responseBody.includes(indicator) ||
|
|
33
|
+
message.includes(indicator));
|
|
34
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General utility functions
|
|
3
|
+
*/
|
|
4
|
+
import type { MessagePart, SDKMessagePartInput } from '../types/index.js';
|
|
5
|
+
export declare const DEDUP_WINDOW_MS = 5000;
|
|
6
|
+
export declare const STATE_TIMEOUT_MS = 30000;
|
|
7
|
+
/**
|
|
8
|
+
* Generate a model identifier key
|
|
9
|
+
*/
|
|
10
|
+
export declare function getModelKey(providerID: string, modelID: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Generate a state identifier
|
|
13
|
+
*/
|
|
14
|
+
export declare function getStateKey(sessionID: string, messageID: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Extract and validate message parts from a user message
|
|
17
|
+
*/
|
|
18
|
+
export declare function extractMessageParts(message: unknown): MessagePart[];
|
|
19
|
+
/**
|
|
20
|
+
* Convert internal MessagePart to SDK-compatible format
|
|
21
|
+
*/
|
|
22
|
+
export declare function convertPartsToSDKFormat(parts: MessagePart[]): SDKMessagePartInput[];
|
|
23
|
+
/**
|
|
24
|
+
* Extract toast message properties with fallback values
|
|
25
|
+
*/
|
|
26
|
+
export declare function getToastMessage(toast: any): {
|
|
27
|
+
title: string;
|
|
28
|
+
message: string;
|
|
29
|
+
variant: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Safely show toast, falling back to console logging if TUI is missing or fails
|
|
33
|
+
*/
|
|
34
|
+
export declare const safeShowToast: (client: any, toast: any) => Promise<void>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General utility functions
|
|
3
|
+
*/
|
|
4
|
+
import { DEDUP_WINDOW_MS as DEDUP_WINDOW_MS_TYPE, STATE_TIMEOUT_MS as STATE_TIMEOUT_MS_TYPE, } from '../types/index.js';
|
|
5
|
+
// Re-export as constants
|
|
6
|
+
export const DEDUP_WINDOW_MS = DEDUP_WINDOW_MS_TYPE;
|
|
7
|
+
export const STATE_TIMEOUT_MS = STATE_TIMEOUT_MS_TYPE;
|
|
8
|
+
/**
|
|
9
|
+
* Generate a model identifier key
|
|
10
|
+
*/
|
|
11
|
+
export function getModelKey(providerID, modelID) {
|
|
12
|
+
return `${providerID}/${modelID}`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generate a state identifier
|
|
16
|
+
*/
|
|
17
|
+
export function getStateKey(sessionID, messageID) {
|
|
18
|
+
return `${sessionID}:${messageID}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extract and validate message parts from a user message
|
|
22
|
+
*/
|
|
23
|
+
export function extractMessageParts(message) {
|
|
24
|
+
const msg = message;
|
|
25
|
+
return msg.parts
|
|
26
|
+
.filter((p) => {
|
|
27
|
+
const part = p;
|
|
28
|
+
return part.type === "text" || part.type === "file";
|
|
29
|
+
})
|
|
30
|
+
.map((p) => {
|
|
31
|
+
const part = p;
|
|
32
|
+
if (part.type === "text")
|
|
33
|
+
return { type: "text", text: String(part.text) };
|
|
34
|
+
if (part.type === "file")
|
|
35
|
+
return { type: "file", path: String(part.path), mediaType: String(part.mediaType) };
|
|
36
|
+
return null;
|
|
37
|
+
})
|
|
38
|
+
.filter((p) => p !== null);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert internal MessagePart to SDK-compatible format
|
|
42
|
+
*/
|
|
43
|
+
export function convertPartsToSDKFormat(parts) {
|
|
44
|
+
return parts.map((part) => {
|
|
45
|
+
if (part.type === "text") {
|
|
46
|
+
return { type: "text", text: part.text };
|
|
47
|
+
}
|
|
48
|
+
// For file parts, we need to match the FilePartInput format
|
|
49
|
+
// Using path as url since we're dealing with local files
|
|
50
|
+
return {
|
|
51
|
+
type: "file",
|
|
52
|
+
url: part.path,
|
|
53
|
+
mime: part.mediaType || "application/octet-stream",
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Extract toast message properties with fallback values
|
|
59
|
+
*/
|
|
60
|
+
export function getToastMessage(toast) {
|
|
61
|
+
const title = toast?.body?.title || toast?.title || "Toast";
|
|
62
|
+
const message = toast?.body?.message || toast?.message || "";
|
|
63
|
+
const variant = toast?.body?.variant || toast?.variant || "info";
|
|
64
|
+
return { title, message, variant };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Safely show toast, falling back to console logging if TUI is missing or fails
|
|
68
|
+
*/
|
|
69
|
+
export const safeShowToast = async (client, toast) => {
|
|
70
|
+
const { title, message, variant } = getToastMessage(toast);
|
|
71
|
+
const logToConsole = () => {
|
|
72
|
+
if (variant === "error") {
|
|
73
|
+
console.error(`[RateLimitFallback] ${title}: ${message}`);
|
|
74
|
+
}
|
|
75
|
+
else if (variant === "warning") {
|
|
76
|
+
console.warn(`[RateLimitFallback] ${title}: ${message}`);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.log(`[RateLimitFallback] ${title}: ${message}`);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
try {
|
|
83
|
+
if (client.tui) {
|
|
84
|
+
await client.tui.showToast(toast);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// TUI doesn't exist - log to console
|
|
88
|
+
logToConsole();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// TUI exists but failed to show toast - log to console
|
|
93
|
+
logToConsole();
|
|
94
|
+
}
|
|
95
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azumag/opencode-rate-limit-fallback",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.1",
|
|
4
4
|
"description": "OpenCode plugin that automatically switches to fallback models when rate limited",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"test:coverage": "vitest run --coverage"
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
|
-
"dist",
|
|
35
|
+
"dist/**/*.js",
|
|
36
|
+
"dist/**/*.d.ts",
|
|
36
37
|
"README.md",
|
|
37
38
|
"LICENSE"
|
|
38
39
|
],
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA8rBlD,eAAO,MAAM,iBAAiB,EAAE,MA0pB/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAC;AAkInE,oBAAoB;AACpB,SAAS,mBAAmB,CAAC,KAA4C;IACvE,OAAO,KAAK,CAAC,IAAI,KAAK,eAAe;QACnC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,KAAK,CAAC,UAAU,KAAK,IAAI;QACzB,WAAW,IAAI,KAAK,CAAC,UAAU;QAC/B,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA4C;IACzE,OAAO,KAAK,CAAC,IAAI,KAAK,iBAAiB;QACrC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,KAAK,CAAC,UAAU,KAAK,IAAI;QACzB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;AAC/B,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA4C;IACxE,OAAO,KAAK,CAAC,IAAI,KAAK,gBAAgB;QACpC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;AAC9B,CAAC;AAED,6BAA6B;AAC7B,SAAS,6BAA6B,CAAC,KAA6C;IAClF,OAAO,KAAK,CAAC,IAAI,KAAK,0BAA0B;QAC9C,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,KAAK,CAAC,UAAU,KAAK,IAAI;QACzB,WAAW,IAAI,KAAK,CAAC,UAAU;QAC/B,iBAAiB,IAAI,KAAK,CAAC,UAAU,CAAC;AAC1C,CAAC;AAED,MAAM,uBAAuB,GAAoB;IAC/C,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,4BAA4B,EAAE;IAClE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;IACnD,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE;CACtD,CAAC;AAEF,MAAM,oBAAoB,GAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAE7E,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAGrE,MAAM,iBAAiB,GAAkC;IACvD,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IACtB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAC1B,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;CAChC,CAAC;AAEF,qBAAqB;AACrB,MAAM,cAAc;IACV,OAAO,CAAc;IACrB,MAAM,CAAgB;IACtB,MAAM,CAAS;IACf,UAAU,GAA0B,IAAI,CAAC;IAEjD,YAAY,MAAqB,EAAE,MAAc;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG;YACb,UAAU,EAAE,IAAI,GAAG,EAAE;YACrB,SAAS,EAAE;gBACT,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,CAAC;gBACT,eAAe,EAAE,CAAC;gBAClB,aAAa,EAAE,IAAI,GAAG,EAAE;aACzB;YACD,gBAAgB,EAAE,IAAI,GAAG,EAAE;YAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG;YACb,UAAU,EAAE,IAAI,GAAG,EAAE;YACrB,SAAS,EAAE;gBACT,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,CAAC;gBACT,eAAe,EAAE,CAAC;gBAClB,aAAa,EAAE,IAAI,GAAG,EAAE;aACzB;YACD,gBAAgB,EAAE,IAAI,GAAG,EAAE;YAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC;IAED,eAAe,CAAC,UAAkB,EAAE,OAAe;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEjC,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC;YACjD,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC;YAC9B,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe;gBACjD,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC;gBAC7C,CAAC,CAAC,UAAU,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC/B,KAAK,EAAE,CAAC;gBACR,eAAe,EAAE,GAAG;gBACpB,cAAc,EAAE,GAAG;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,qBAAqB,CAAC,gBAAwB,EAAE,aAAqB,EAAE,SAAiB;QACtF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,GAAG,GAAG,WAAW,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAEpC,0BAA0B;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;QAExG,8BAA8B;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YACrE,cAAc,EAAE,CAAC;YACjB,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,CAAC;SACV,CAAC;QACF,aAAa,CAAC,cAAc,EAAE,CAAC;QAC/B,aAAa,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC/D,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEjC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,kBAAkB,CAAC,UAAkB,EAAE,OAAe;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEjC,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YACzD,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,CAAC;SACZ,CAAC;QACF,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB,CAAC,UAAkB,EAAE,OAAe,EAAE,YAAoB;QAC1E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEjC,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YACzD,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,CAAC;SACZ,CAAC;QACF,QAAQ,CAAC,SAAS,EAAE,CAAC;QAErB,+BAA+B;QAC/B,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACjF,QAAQ,CAAC,mBAAmB,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/E,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB,CAAC,UAAkB,EAAE,OAAe;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEjC,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YACzD,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,CAAC;SACZ,CAAC;QACF,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,UAAU;QACR,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,SAAoC,MAAM;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACpC,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACjC,KAAK,MAAM,CAAC;YACZ;gBACE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,OAAoB;QACxC,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACjE;YACD,SAAS,EAAE;gBACT,GAAG,OAAO,CAAC,SAAS;gBACpB,aAAa,EAAE,MAAM,CAAC,WAAW,CAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAC9E;aACF;YACD,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAClC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACvE;YACD,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,OAAoB;QACvC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,cAAc;QACd,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBACzE,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBACvE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,SAAS,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gBACjD,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,oBAAoB;QACpB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC7C,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnF,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACtB,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACxE,KAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,GAAG,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,SAAS,CAAC,OAAoB;QACpC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,kBAAkB;QAClB,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL,IAAI,CAAC,KAAK;gBACV,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,cAAc;gBACnB,IAAI,CAAC,eAAe,IAAI,CAAC;aAC1B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACf,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,wBAAwB;QACxB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC;YACT,OAAO,CAAC,SAAS,CAAC,KAAK;YACvB,OAAO,CAAC,SAAS,CAAC,UAAU;YAC5B,OAAO,CAAC,SAAS,CAAC,MAAM;YACxB,OAAO,CAAC,SAAS,CAAC,eAAe,IAAI,CAAC;SACvC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,yBAAyB;QACzB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACvD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL,IAAI,CAAC,cAAc;gBACnB,IAAI,CAAC,UAAU;gBACf,IAAI,CAAC,MAAM;aACZ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACf,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,wBAAwB;QACxB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QAClF,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,mBAAmB,IAAI,CAAC;gBAC7B,WAAW;aACZ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACf,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEtD,iBAAiB;QACjB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAED,cAAc;QACd,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAED,MAAM,cAAc,GAAiB;IACnC,cAAc,EAAE,uBAAuB;IACvC,UAAU,EAAE,EAAE,GAAG,IAAI;IACrB,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,OAAO;IACrB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,QAAQ;QAChB,eAAe,EAAE,IAAI;KACtB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,QAAQ;SACjB;QACD,aAAa,EAAE,OAAO;KACvB;CACF,CAAC;AAEF,SAAS,UAAU,CAAC,SAAiB;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,0BAA0B,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,0BAA0B,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,0BAA0B,CAAC;KACjE,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC;gBACrC,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC;gBAExD,OAAO;oBACL,GAAG,cAAc;oBACjB,GAAG,UAAU;oBACb,cAAc,EAAE,UAAU,CAAC,cAAc,IAAI,cAAc,CAAC,cAAc;oBAC1E,YAAY,EAAE,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY;oBACtF,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG;oBACvF,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;wBAC5B,GAAG,cAAc,CAAC,OAAQ;wBAC1B,GAAG,UAAU,CAAC,OAAO;wBACrB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;4BAClC,GAAG,cAAc,CAAC,OAAQ,CAAC,MAAM;4BACjC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM;yBAC7B,CAAC,CAAC,CAAC,cAAc,CAAC,OAAQ,CAAC,MAAM;wBAClC,aAAa,EAAE,qBAAqB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,OAAQ,CAAC,aAAa;qBACrH,CAAC,CAAC,CAAC,cAAc,CAAC,OAAQ;iBAC5B,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,kFAAkF;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,OAAe;IACtD,OAAO,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB,EAAE,SAAiB;IACvD,OAAO,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEtD,wCAAwC;IACxC,MAAM,GAAG,GAAG,KAQX,CAAC;IAEF,uDAAuD;IACvD,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAE7E,4DAA4D;IAC5D,MAAM,yBAAyB,GAAG;QAChC,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,gBAAgB;KACjB,CAAC;IAEF,oDAAoD;IACpD,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,OAAO,yBAAyB,CAAC,IAAI,CACnC,CAAC,SAAS,EAAE,EAAE,CACZ,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;QAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC9B,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,YAAY;AAChD,MAAM,oBAAoB,GAAG,OAAO,CAAC,CAAC,SAAS;AAE/C;;GAEG;AACH,SAAS,eAAe,CAAC,KAAU;IACjC,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC;IAC5D,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;IAC7D,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,aAAa,GAAG,KAAK,EAAE,MAAW,EAAE,KAAU,EAAE,EAAE;IACtD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,uBAAuB,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,uBAAuB,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;QACvD,YAAY,EAAE,CAAC;IACjB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAW,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAErC,gCAAgC;IAChC,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;IAE/B,+DAA+D;IAC/D,MAAM,SAAS,GAAG;QAChB,GAAG,MAAM,CAAC,GAAG;QACb,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC;KAC3D,CAAC;IAEF,yBAAyB;IACzB,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAE5D,8DAA8D;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,0BAA0B,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,0BAA0B,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,0BAA0B,CAAC;KACjE,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqE,CAAC;IAChG,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAwE,CAAC;IAC5G,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,mDAAmD;IACzG,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuE,CAAC,CAAC,mDAAmD;IAE5J,4BAA4B;IAC5B,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA4B,CAAC,CAAC,oCAAoC;IACpG,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,6BAA6B;IACjF,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;IAEvD,qBAAqB;IACrB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,GAAG,cAAc,CAAC,OAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IAEpG,+CAA+C;IAC/C,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,wBAAwB;IAElF,oDAAoD;IACpD,SAAS,oBAAoB,CAAC,aAAqB;QACjD,IAAI,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG;gBACV,aAAa;gBACb,SAAS,EAAE,IAAI,GAAG,EAAE;gBACpB,mBAAmB,EAAE,MAAM;gBAC3B,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB,CAAC;YACF,kBAAkB,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACjD,gBAAgB,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,eAAuB;QAClE,iCAAiC;QACjC,wFAAwF;QACxF,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAElE,2EAA2E;QAC3E,MAAM,aAAa,GAAG,mBAAmB,IAAI,eAAe,CAAC;QAE7D,yFAAyF;QACzF,+EAA+E;QAC/E,MAAM,SAAS,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5D,oBAAoB;QACpB,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAoB;YAChC,SAAS;YACT,eAAe;YACf,KAAK;YACL,aAAa,EAAE,MAAM;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;SACzB,CAAC;QAEF,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7C,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC/C,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,cAAc,CAAC,SAAiB;QACvC,OAAO,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACjD,CAAC;IAED,SAAS,YAAY,CAAC,SAAiB;QACrC,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,CAAC;IAED,wDAAwD;IACxD,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/D,mCAAmC;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,GAAG,oBAAoB,EAAE,CAAC;gBACnD,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,KAAK,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;YACtE,IAAI,GAAG,GAAG,SAAS,CAAC,YAAY,GAAG,oBAAoB,EAAE,CAAC;gBACxD,2CAA2C;gBAC3C,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;oBACpD,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACtC,CAAC;gBACD,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACzC,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,GAAG,GAAG,KAAK,CAAC,eAAe,GAAG,gBAAgB,EAAE,CAAC;gBACnD,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,KAAK,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YACrE,IAAI,GAAG,GAAG,YAAY,CAAC,SAAS,GAAG,oBAAoB,EAAE,CAAC;gBACxD,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACvC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAExB,SAAS,kBAAkB,CAAC,UAAkB,EAAE,OAAe;QAC7D,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/C,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,oBAAoB,CAAC,UAAkB,EAAE,OAAe;QAC/D,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,sBAAsB,CAAC,iBAAyB,EAAE,cAAsB,EAAE,eAA4B;QAC7G,MAAM,UAAU,GAAG,WAAW,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC;QAE7G,gFAAgF;QAChF,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,gBAAgB,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtF,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtF,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,SAAS,8BAA8B,CAAC,SAAiB,EAAE,SAAiB;QAC1E,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,eAAe,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC,CAAC,4BAA4B;QAC5C,CAAC;QACD,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,CAAC,sBAAsB;IACrC,CAAC;IAED;;;;;OAKG;IACH,SAAS,6BAA6B,CAAC,SAAiB,EAAE,SAAiB;QACzE,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;YAC/B,yCAAyC;YACzC,IAAI,CAAC,8BAA8B,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC9D,OAAO,IAAI,CAAC,CAAC,4BAA4B;YAC3C,CAAC;YAED,mCAAmC;YACnC,SAAS,CAAC,mBAAmB,GAAG,aAAa,CAAC;YAC9C,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEpC,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;gBACvC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC;YAED,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,qFAAqF;YACrF,IAAI,CAAC,8BAA8B,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC1D,OAAO,IAAI,CAAC,CAAC,4BAA4B;YAC3C,CAAC;YAED,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,qBAAqB,CAAC,SAAiB,EAAE,SAAiB;QACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,eAAe,GAAG,gBAAgB,EAAE,CAAC;YACpE,KAAK,GAAG,EAAE,eAAe,EAAE,IAAI,GAAG,EAAU,EAAE,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5E,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,KAAK,UAAU,mBAAmB,CAChC,iBAAyB,EACzB,cAAsB,EACtB,KAAgE;QAEhE,0DAA0D;QAC1D,IAAI,iBAAiB,IAAI,cAAc,EAAE,CAAC;YACxC,oBAAoB,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;YACxD,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,SAAS,GAAG,sBAAsB,CAAC,iBAAiB,IAAI,EAAE,EAAE,cAAc,IAAI,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7G,sDAAsD;QACtD,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACjD,IAAI,MAAM,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;gBACpC,uCAAuC;gBACvC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,iBAAiB,IAAI,cAAc,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;gBAC5E,CAAC;gBACD,SAAS,GAAG,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;YACpE,CAAC;iBAAM,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBAChD,iEAAiE;gBACjE,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC1E,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,kBAAkB,GAAG,iBAAiB,KAAK,SAAS,CAAC,UAAU,IAAI,cAAc,KAAK,SAAS,CAAC,OAAO,CAAC;oBAE9G,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;wBACxF,sCAAsC;wBACtC,SAAS,GAAG,SAAS,CAAC;wBACtB,MAAM,aAAa,CAAC,MAAM,EAAE;4BAC1B,IAAI,EAAE;gCACJ,KAAK,EAAE,aAAa;gCACpB,OAAO,EAAE,UAAU,SAAS,CAAC,OAAO,mBAAmB;gCACvD,OAAO,EAAE,SAAS;gCAClB,QAAQ,EAAE,IAAI;6BACf;yBACF,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,gDAAgD;wBAChD,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;wBAC9B,IAAI,iBAAiB,IAAI,cAAc,EAAE,CAAC;4BACxC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;wBAC5E,CAAC;wBACD,SAAS,GAAG,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;YACH,CAAC;YACD,6DAA6D;QAC/D,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS,mBAAmB,CAAC,OAAgB;QAC3C,MAAM,GAAG,GAAG,OAAmE,CAAC;QAChF,OAAO,GAAG,CAAC,KAAK;aACb,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE;YACrB,MAAM,IAAI,GAAG,CAA4B,CAAC;YAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;QACtD,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,CAAU,EAAsB,EAAE;YACtC,MAAM,IAAI,GAAG,CAA4B,CAAC;YAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpF,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACvH,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,SAAS,uBAAuB,CAAC,KAAoB;QACnD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAiC,EAAE;YACvD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC;YACD,4DAA4D;YAC5D,yDAAyD;YACzD,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,IAAI,CAAC,IAAI;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,0BAA0B;aACnD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,yBAAyB,CAChC,SAA2B,EAC3B,eAAuB,EACvB,UAAkB,EAClB,OAAe;QAEf,IAAI,SAAS,CAAC,aAAa,KAAK,eAAe,EAAE,CAAC;YAChD,SAAS,CAAC,mBAAmB,GAAG,WAAW,CAAC;YAC5C,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEpC,0CAA0C;YAC1C,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE;oBAClC,UAAU;oBACV,OAAO;oBACP,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;iBACxB,CAAC,CAAC;gBACH,QAAQ,CAAC,aAAa,GAAG,WAAW,CAAC;gBACrC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,cAAc,CAC3B,eAAuB,EACvB,KAAoB,EACpB,KAAoB,EACpB,SAAkC;QAElC,uCAAuC;QACvC,mBAAmB,CAAC,GAAG,CAAC,eAAe,EAAE;YACvC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QAEH,iFAAiF;QACjF,IAAI,SAAS,EAAE,CAAC;YACd,yBAAyB,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACzF,CAAC;QAED,mCAAmC;QACnC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9D,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEjD,wDAAwD;QACxD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAEhD,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE;YAC7B,IAAI,EAAE;gBACJ,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;aAChE;SACF,CAAC,CAAC;QAEH,MAAM,aAAa,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE;gBACJ,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,aAAa,KAAK,CAAC,OAAO,EAAE;gBACrC,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,IAAI;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,uBAAuB,CAAC,SAAiB,EAAE,iBAAyB,EAAE,cAAsB;QACzG,IAAI,CAAC;YACH,mEAAmE;YACnE,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,eAAe,GAAG,aAAa,IAAI,SAAS,CAAC;YAEnD,IAAI,CAAC,iBAAiB,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACzD,IAAI,OAAO,EAAE,CAAC;oBACZ,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;oBACvC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,iBAAiB,IAAI,cAAc,EAAE,CAAC;gBACxC,cAAc,CAAC,eAAe,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;YACpE,CAAC;YAED,4CAA4C;YAC5C,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,0DAA0D;gBAC1D,MAAM,CAAC,KAAK,CAAC,2BAA2B,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YACpF,CAAC;YAED,MAAM,aAAa,CAAC,MAAM,EAAE;gBAC1B,IAAI,EAAE;oBACJ,KAAK,EAAE,qBAAqB;oBAC5B,OAAO,EAAE,kBAAkB,cAAc,IAAI,eAAe,KAAK;oBACjE,OAAO,EAAE,SAAS;oBAClB,QAAQ,EAAE,IAAI;iBACf;aACF,CAAC,CAAC;YAEH,gCAAgC;YAChC,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;YACxF,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC;YACrC,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAClF,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,wEAAwE;YACxE,MAAM,UAAU,GAAG,6BAA6B,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,+BAA+B;YACzC,CAAC;YAED,6CAA6C;YAC7C,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAErF,iCAAiC;YACjC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,iBAAiB,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;YAEtF,sCAAsC;YACtC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,aAAa,CAAC,MAAM,EAAE;oBAC1B,IAAI,EAAE;wBACJ,KAAK,EAAE,uBAAuB;wBAC9B,OAAO,EAAE,MAAM,CAAC,YAAY,KAAK,MAAM;4BACrC,CAAC,CAAC,+BAA+B;4BACjC,CAAC,CAAC,6BAA6B;wBACjC,OAAO,EAAE,OAAO;wBAChB,QAAQ,EAAE,IAAI;qBACf;iBACF,CAAC,CAAC;gBACH,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5B,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAChF,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEnC,wBAAwB;YACxB,MAAM,KAAK,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,MAAM,aAAa,CAAC,MAAM,EAAE;gBAC1B,IAAI,EAAE;oBACJ,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,SAAS,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,OAAO,EAAE;oBAC7D,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,IAAI;iBACf;aACF,CAAC,CAAC;YAEH,6BAA6B;YAC7B,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAErC,oEAAoE;YACpE,+FAA+F;YAC/F,mDAAmD;YACnD,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE;gBAChC,SAAS,EAAE,UAAU,CAAC,eAAe;gBACrC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE;gBAClC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YAEH,gCAAgC;YAChC,MAAM,cAAc,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;YAEzF,iBAAiB;YACjB,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gEAAgE;YAChE,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,8BAA8B,SAAS,EAAE,EAAE;gBACtD,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACzB,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC9C,IAAI,SAAS,IAAI,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClD,MAAM,uBAAuB,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnC,IAAI,IAAI,EAAE,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChD,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBAC3F,CAAC;qBAAM,IAAI,IAAI,EAAE,MAAM,KAAK,WAAW,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;oBACxD,8EAA8E;oBAC9E,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;oBACzD,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACvD,IAAI,YAAY,EAAE,CAAC;wBACjB,8CAA8C;wBAC9C,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBACvC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBACrC,MAAM,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;wBAEzF,iCAAiC;wBACjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACxD,IAAI,OAAO,EAAE,CAAC;4BACZ,cAAc,CAAC,qBAAqB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;4BAElG,kCAAkC;4BAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;4BAClE,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACvD,IAAI,SAAS,EAAE,CAAC;gCACd,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gCAC5C,cAAc,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gCACrF,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;4BAC1C,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxD,qDAAqD;oBACrD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACxD,IAAI,OAAO,EAAE,CAAC;wBACZ,cAAc,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;wBAEvE,0DAA0D;wBAC1D,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;wBACzD,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;wBACvD,IAAI,YAAY,EAAE,CAAC;4BACjB,cAAc,CAAC,qBAAqB,EAAE,CAAC;4BACvC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;4BACvC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC/B,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC;gBAE7B,IAAI,MAAM,EAAE,IAAI,KAAK,OAAO,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC7C,MAAM,gBAAgB,GACpB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;wBAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;wBAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;wBACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;oBAEzC,IAAI,gBAAgB,EAAE,CAAC;wBACrB,yEAAyE;wBACzE,MAAM,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,uGAAuG;YACvG,MAAM,QAAQ,GAAG,KAA+C,CAAC;YACjE,IAAI,6BAA6B,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5C,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC;gBAC3D,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,EAAE,CAAC;oBAC5C,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QACD,2CAA2C;QAC3C,OAAO,EAAE,GAAG,EAAE;YACZ,aAAa,CAAC,eAAe,CAAC,CAAC;YAE/B,mCAAmC;YACnC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAEzB,6BAA6B;YAC7B,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAEzB,2BAA2B;YAC3B,cAAc,CAAC,OAAO,EAAE,CAAC;YAEzB,qCAAqC;YACrC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|