bravecode-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +387 -0
  3. package/dist/autoModel.d.ts +39 -0
  4. package/dist/autoModel.d.ts.map +1 -0
  5. package/dist/autoModel.js +127 -0
  6. package/dist/autoModel.js.map +1 -0
  7. package/dist/cli.cjs +41727 -0
  8. package/dist/cli.cjs.map +7 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +459 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/cli.mjs +41000 -0
  14. package/dist/cli.mjs.map +7 -0
  15. package/dist/core/agent/index.d.ts +31 -0
  16. package/dist/core/agent/index.d.ts.map +1 -0
  17. package/dist/core/agent/index.js +339 -0
  18. package/dist/core/agent/index.js.map +1 -0
  19. package/dist/core/config/index.d.ts +54 -0
  20. package/dist/core/config/index.d.ts.map +1 -0
  21. package/dist/core/config/index.js +138 -0
  22. package/dist/core/config/index.js.map +1 -0
  23. package/dist/core/context/index.d.ts +20 -0
  24. package/dist/core/context/index.d.ts.map +1 -0
  25. package/dist/core/context/index.js +70 -0
  26. package/dist/core/context/index.js.map +1 -0
  27. package/dist/core/mcp/index.d.ts +32 -0
  28. package/dist/core/mcp/index.d.ts.map +1 -0
  29. package/dist/core/mcp/index.js +160 -0
  30. package/dist/core/mcp/index.js.map +1 -0
  31. package/dist/core/permission/index.d.ts +24 -0
  32. package/dist/core/permission/index.d.ts.map +1 -0
  33. package/dist/core/permission/index.js +96 -0
  34. package/dist/core/permission/index.js.map +1 -0
  35. package/dist/core/plugin/index.d.ts +44 -0
  36. package/dist/core/plugin/index.d.ts.map +1 -0
  37. package/dist/core/plugin/index.js +139 -0
  38. package/dist/core/plugin/index.js.map +1 -0
  39. package/dist/core/session/index.d.ts +23 -0
  40. package/dist/core/session/index.d.ts.map +1 -0
  41. package/dist/core/session/index.js +51 -0
  42. package/dist/core/session/index.js.map +1 -0
  43. package/dist/core/share/index.d.ts +28 -0
  44. package/dist/core/share/index.d.ts.map +1 -0
  45. package/dist/core/share/index.js +100 -0
  46. package/dist/core/share/index.js.map +1 -0
  47. package/dist/core/snapshot/index.d.ts +30 -0
  48. package/dist/core/snapshot/index.d.ts.map +1 -0
  49. package/dist/core/snapshot/index.js +141 -0
  50. package/dist/core/snapshot/index.js.map +1 -0
  51. package/dist/core/tool/bash.d.ts +8 -0
  52. package/dist/core/tool/bash.d.ts.map +1 -0
  53. package/dist/core/tool/bash.js +29 -0
  54. package/dist/core/tool/bash.js.map +1 -0
  55. package/dist/core/tool/browser.d.ts +5 -0
  56. package/dist/core/tool/browser.d.ts.map +1 -0
  57. package/dist/core/tool/browser.js +119 -0
  58. package/dist/core/tool/browser.js.map +1 -0
  59. package/dist/core/tool/file.d.ts +5 -0
  60. package/dist/core/tool/file.d.ts.map +1 -0
  61. package/dist/core/tool/file.js +79 -0
  62. package/dist/core/tool/file.js.map +1 -0
  63. package/dist/core/tool/index.d.ts +21 -0
  64. package/dist/core/tool/index.d.ts.map +1 -0
  65. package/dist/core/tool/index.js +90 -0
  66. package/dist/core/tool/index.js.map +1 -0
  67. package/dist/core/tool/search.d.ts +4 -0
  68. package/dist/core/tool/search.d.ts.map +1 -0
  69. package/dist/core/tool/search.js +107 -0
  70. package/dist/core/tool/search.js.map +1 -0
  71. package/dist/core/tool/task.d.ts +9 -0
  72. package/dist/core/tool/task.d.ts.map +1 -0
  73. package/dist/core/tool/task.js +54 -0
  74. package/dist/core/tool/task.js.map +1 -0
  75. package/dist/core/tool/todowrite.d.ts +3 -0
  76. package/dist/core/tool/todowrite.d.ts.map +1 -0
  77. package/dist/core/tool/todowrite.js +75 -0
  78. package/dist/core/tool/todowrite.js.map +1 -0
  79. package/dist/core/tool/websearch.d.ts +3 -0
  80. package/dist/core/tool/websearch.d.ts.map +1 -0
  81. package/dist/core/tool/websearch.js +46 -0
  82. package/dist/core/tool/websearch.js.map +1 -0
  83. package/dist/core/tui/ChatTUI.d.ts +17 -0
  84. package/dist/core/tui/ChatTUI.d.ts.map +1 -0
  85. package/dist/core/tui/ChatTUI.js +64 -0
  86. package/dist/core/tui/ChatTUI.js.map +1 -0
  87. package/dist/core/tui/index.d.ts +15 -0
  88. package/dist/core/tui/index.d.ts.map +1 -0
  89. package/dist/core/tui/index.js +41 -0
  90. package/dist/core/tui/index.js.map +1 -0
  91. package/dist/core/update/index.d.ts +23 -0
  92. package/dist/core/update/index.d.ts.map +1 -0
  93. package/dist/core/update/index.js +115 -0
  94. package/dist/core/update/index.js.map +1 -0
  95. package/dist/index.d.ts +18 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +11 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/models.json +545 -0
  100. package/dist/provider.d.ts +43 -0
  101. package/dist/provider.d.ts.map +1 -0
  102. package/dist/provider.js +294 -0
  103. package/dist/provider.js.map +1 -0
  104. package/package.json +88 -0
@@ -0,0 +1,545 @@
1
+ {
2
+ "models": [
3
+ {
4
+ "id": "codestral-latest",
5
+ "name": "Codestral (Latest)",
6
+ "provider": "bravecode",
7
+ "contextWindow": 256000,
8
+ "maxOutputTokens": 32000,
9
+ "capabilities": {
10
+ "code": true,
11
+ "reasoning": true,
12
+ "vision": false,
13
+ "audio": false,
14
+ "functionCalling": true
15
+ },
16
+ "pricing": {
17
+ "input": 0,
18
+ "output": 0
19
+ },
20
+ "tags": ["code", "free", "recommended"]
21
+ },
22
+ {
23
+ "id": "mistral-large-2512",
24
+ "name": "Mistral Large 2512",
25
+ "provider": "bravecode",
26
+ "contextWindow": 128000,
27
+ "maxOutputTokens": 32000,
28
+ "capabilities": {
29
+ "code": true,
30
+ "reasoning": true,
31
+ "vision": false,
32
+ "audio": false,
33
+ "functionCalling": true
34
+ },
35
+ "pricing": {
36
+ "input": 0,
37
+ "output": 0
38
+ },
39
+ "tags": ["general", "free"]
40
+ },
41
+ {
42
+ "id": "DeepSeek-V1",
43
+ "name": "DeepSeek V1",
44
+ "provider": "bravecode",
45
+ "contextWindow": 128000,
46
+ "maxOutputTokens": 32000,
47
+ "capabilities": {
48
+ "code": true,
49
+ "reasoning": true,
50
+ "vision": false,
51
+ "audio": false,
52
+ "functionCalling": false
53
+ },
54
+ "pricing": {
55
+ "input": 0,
56
+ "output": 0
57
+ },
58
+ "tags": ["general", "free"]
59
+ },
60
+ {
61
+ "id": "DeepSeek-V2",
62
+ "name": "DeepSeek V2",
63
+ "provider": "bravecode",
64
+ "contextWindow": 128000,
65
+ "maxOutputTokens": 32000,
66
+ "capabilities": {
67
+ "code": true,
68
+ "reasoning": true,
69
+ "vision": false,
70
+ "audio": false,
71
+ "functionCalling": false
72
+ },
73
+ "pricing": {
74
+ "input": 0,
75
+ "output": 0
76
+ },
77
+ "tags": ["general", "free"]
78
+ },
79
+ {
80
+ "id": "DeepSeek-V3",
81
+ "name": "DeepSeek V3",
82
+ "provider": "bravecode",
83
+ "contextWindow": 128000,
84
+ "maxOutputTokens": 32000,
85
+ "capabilities": {
86
+ "code": true,
87
+ "reasoning": true,
88
+ "vision": false,
89
+ "audio": false,
90
+ "functionCalling": false
91
+ },
92
+ "pricing": {
93
+ "input": 0,
94
+ "output": 0
95
+ },
96
+ "tags": ["general", "free", "recommended"]
97
+ },
98
+ {
99
+ "id": "DeepSeek-V2.5",
100
+ "name": "DeepSeek V2.5",
101
+ "provider": "bravecode",
102
+ "contextWindow": 128000,
103
+ "maxOutputTokens": 32000,
104
+ "capabilities": {
105
+ "code": true,
106
+ "reasoning": true,
107
+ "vision": false,
108
+ "audio": false,
109
+ "functionCalling": false
110
+ },
111
+ "pricing": {
112
+ "input": 0,
113
+ "output": 0
114
+ },
115
+ "tags": ["general", "free"]
116
+ },
117
+ {
118
+ "id": "DeepSeek-V3-0324",
119
+ "name": "DeepSeek V3 0324",
120
+ "provider": "bravecode",
121
+ "contextWindow": 128000,
122
+ "maxOutputTokens": 32000,
123
+ "capabilities": {
124
+ "code": true,
125
+ "reasoning": true,
126
+ "vision": false,
127
+ "audio": false,
128
+ "functionCalling": false
129
+ },
130
+ "pricing": {
131
+ "input": 0,
132
+ "output": 0
133
+ },
134
+ "tags": ["general", "free"]
135
+ },
136
+ {
137
+ "id": "DeepSeek-V3.1",
138
+ "name": "DeepSeek V3.1",
139
+ "provider": "bravecode",
140
+ "contextWindow": 128000,
141
+ "maxOutputTokens": 32000,
142
+ "capabilities": {
143
+ "code": true,
144
+ "reasoning": true,
145
+ "vision": false,
146
+ "audio": false,
147
+ "functionCalling": false
148
+ },
149
+ "pricing": {
150
+ "input": 0,
151
+ "output": 0
152
+ },
153
+ "tags": ["general", "free"]
154
+ },
155
+ {
156
+ "id": "DeepSeek-V3.2",
157
+ "name": "DeepSeek V3.2",
158
+ "provider": "bravecode",
159
+ "contextWindow": 128000,
160
+ "maxOutputTokens": 32000,
161
+ "capabilities": {
162
+ "code": true,
163
+ "reasoning": true,
164
+ "vision": false,
165
+ "audio": false,
166
+ "functionCalling": false
167
+ },
168
+ "pricing": {
169
+ "input": 0,
170
+ "output": 0
171
+ },
172
+ "tags": ["general", "free"]
173
+ },
174
+ {
175
+ "id": "DeepSeek-R1",
176
+ "name": "DeepSeek R1",
177
+ "provider": "bravecode",
178
+ "contextWindow": 128000,
179
+ "maxOutputTokens": 32000,
180
+ "capabilities": {
181
+ "code": true,
182
+ "reasoning": true,
183
+ "vision": false,
184
+ "audio": false,
185
+ "functionCalling": false
186
+ },
187
+ "pricing": {
188
+ "input": 0,
189
+ "output": 0
190
+ },
191
+ "tags": ["reasoning", "free", "recommended"]
192
+ },
193
+ {
194
+ "id": "DeepSeek-R1-0528",
195
+ "name": "DeepSeek R1 0528",
196
+ "provider": "bravecode",
197
+ "contextWindow": 128000,
198
+ "maxOutputTokens": 32000,
199
+ "capabilities": {
200
+ "code": true,
201
+ "reasoning": true,
202
+ "vision": false,
203
+ "audio": false,
204
+ "functionCalling": false
205
+ },
206
+ "pricing": {
207
+ "input": 0,
208
+ "output": 0
209
+ },
210
+ "tags": ["reasoning", "free"]
211
+ },
212
+ {
213
+ "id": "DeepSeek-VL",
214
+ "name": "DeepSeek VL",
215
+ "provider": "bravecode",
216
+ "contextWindow": 128000,
217
+ "maxOutputTokens": 32000,
218
+ "capabilities": {
219
+ "code": true,
220
+ "reasoning": true,
221
+ "vision": true,
222
+ "audio": false,
223
+ "functionCalling": false
224
+ },
225
+ "pricing": {
226
+ "input": 0,
227
+ "output": 0
228
+ },
229
+ "tags": ["vision", "free"]
230
+ },
231
+ {
232
+ "id": "DeepSeek-Coder",
233
+ "name": "DeepSeek Coder",
234
+ "provider": "bravecode",
235
+ "contextWindow": 128000,
236
+ "maxOutputTokens": 32000,
237
+ "capabilities": {
238
+ "code": true,
239
+ "reasoning": true,
240
+ "vision": false,
241
+ "audio": false,
242
+ "functionCalling": false
243
+ },
244
+ "pricing": {
245
+ "input": 0,
246
+ "output": 0
247
+ },
248
+ "tags": ["code", "free"]
249
+ },
250
+ {
251
+ "id": "DeepSeek-Coder-V2",
252
+ "name": "DeepSeek Coder V2",
253
+ "provider": "bravecode",
254
+ "contextWindow": 128000,
255
+ "maxOutputTokens": 32000,
256
+ "capabilities": {
257
+ "code": true,
258
+ "reasoning": true,
259
+ "vision": false,
260
+ "audio": false,
261
+ "functionCalling": false
262
+ },
263
+ "pricing": {
264
+ "input": 0,
265
+ "output": 0
266
+ },
267
+ "tags": ["code", "free", "recommended"]
268
+ },
269
+ {
270
+ "id": "DeepSeek-Coder-6.7B-instruct",
271
+ "name": "DeepSeek Coder 6.7B Instruct",
272
+ "provider": "bravecode",
273
+ "contextWindow": 128000,
274
+ "maxOutputTokens": 32000,
275
+ "capabilities": {
276
+ "code": true,
277
+ "reasoning": true,
278
+ "vision": false,
279
+ "audio": false,
280
+ "functionCalling": false
281
+ },
282
+ "pricing": {
283
+ "input": 0,
284
+ "output": 0
285
+ },
286
+ "tags": ["code", "free"]
287
+ },
288
+ {
289
+ "id": "voxtral-small-2507",
290
+ "name": "Voxtral Small 2507",
291
+ "provider": "bravecode",
292
+ "contextWindow": 32000,
293
+ "maxOutputTokens": 32000,
294
+ "capabilities": {
295
+ "code": false,
296
+ "reasoning": false,
297
+ "vision": false,
298
+ "audio": true,
299
+ "functionCalling": false
300
+ },
301
+ "pricing": {
302
+ "input": 0,
303
+ "output": 0
304
+ },
305
+ "tags": ["audio", "free"]
306
+ },
307
+ {
308
+ "id": "ministral-14b-2512",
309
+ "name": "Ministral 14B 2512",
310
+ "provider": "bravecode",
311
+ "contextWindow": 128000,
312
+ "maxOutputTokens": 32000,
313
+ "capabilities": {
314
+ "code": true,
315
+ "reasoning": true,
316
+ "vision": false,
317
+ "audio": false,
318
+ "functionCalling": false
319
+ },
320
+ "pricing": {
321
+ "input": 0,
322
+ "output": 0
323
+ },
324
+ "tags": ["general", "free"]
325
+ },
326
+ {
327
+ "id": "deepseek/deepseek-chat:free",
328
+ "name": "DeepSeek Chat (OpenRouter Free)",
329
+ "provider": "openrouter",
330
+ "contextWindow": 128000,
331
+ "maxOutputTokens": 32000,
332
+ "capabilities": {
333
+ "code": true,
334
+ "reasoning": true,
335
+ "vision": false,
336
+ "audio": false,
337
+ "functionCalling": true
338
+ },
339
+ "pricing": {
340
+ "input": 0,
341
+ "output": 0
342
+ },
343
+ "tags": ["general", "free"]
344
+ },
345
+ {
346
+ "id": "deepseek/deepseek-coder:free",
347
+ "name": "DeepSeek Coder (OpenRouter Free)",
348
+ "provider": "openrouter",
349
+ "contextWindow": 128000,
350
+ "maxOutputTokens": 32000,
351
+ "capabilities": {
352
+ "code": true,
353
+ "reasoning": true,
354
+ "vision": false,
355
+ "audio": false,
356
+ "functionCalling": true
357
+ },
358
+ "pricing": {
359
+ "input": 0,
360
+ "output": 0
361
+ },
362
+ "tags": ["code", "free"]
363
+ },
364
+ {
365
+ "id": "deepseek/deepseek-r1:free",
366
+ "name": "DeepSeek R1 (OpenRouter Free)",
367
+ "provider": "openrouter",
368
+ "contextWindow": 128000,
369
+ "maxOutputTokens": 32000,
370
+ "capabilities": {
371
+ "code": true,
372
+ "reasoning": true,
373
+ "vision": false,
374
+ "audio": false,
375
+ "functionCalling": true
376
+ },
377
+ "pricing": {
378
+ "input": 0,
379
+ "output": 0
380
+ },
381
+ "tags": ["reasoning", "free"]
382
+ },
383
+ {
384
+ "id": "mistralai/mistral-7b-instruct:free",
385
+ "name": "Mistral 7B Instruct (OpenRouter Free)",
386
+ "provider": "openrouter",
387
+ "contextWindow": 32000,
388
+ "maxOutputTokens": 32000,
389
+ "capabilities": {
390
+ "code": true,
391
+ "reasoning": true,
392
+ "vision": false,
393
+ "audio": false,
394
+ "functionCalling": true
395
+ },
396
+ "pricing": {
397
+ "input": 0,
398
+ "output": 0
399
+ },
400
+ "tags": ["general", "free"]
401
+ },
402
+ {
403
+ "id": "meta-llama/llama-3-8b-instruct:free",
404
+ "name": "Llama 3 8B Instruct (OpenRouter Free)",
405
+ "provider": "openrouter",
406
+ "contextWindow": 8192,
407
+ "maxOutputTokens": 8192,
408
+ "capabilities": {
409
+ "code": true,
410
+ "reasoning": true,
411
+ "vision": false,
412
+ "audio": false,
413
+ "functionCalling": true
414
+ },
415
+ "pricing": {
416
+ "input": 0,
417
+ "output": 0
418
+ },
419
+ "tags": ["general", "free"]
420
+ },
421
+ {
422
+ "id": "deepseek/deepseek-chat",
423
+ "name": "DeepSeek Chat (9Router)",
424
+ "provider": "9router",
425
+ "contextWindow": 128000,
426
+ "maxOutputTokens": 32000,
427
+ "capabilities": {
428
+ "code": true,
429
+ "reasoning": true,
430
+ "vision": false,
431
+ "audio": false,
432
+ "functionCalling": true
433
+ },
434
+ "pricing": {
435
+ "input": 0.14,
436
+ "output": 0.28
437
+ },
438
+ "tags": ["general", "paid"]
439
+ },
440
+ {
441
+ "id": "deepseek/deepseek-coder",
442
+ "name": "DeepSeek Coder (9Router)",
443
+ "provider": "9router",
444
+ "contextWindow": 128000,
445
+ "maxOutputTokens": 32000,
446
+ "capabilities": {
447
+ "code": true,
448
+ "reasoning": true,
449
+ "vision": false,
450
+ "audio": false,
451
+ "functionCalling": true
452
+ },
453
+ "pricing": {
454
+ "input": 0.14,
455
+ "output": 0.28
456
+ },
457
+ "tags": ["code", "paid"]
458
+ },
459
+ {
460
+ "id": "deepseek/deepseek-r1",
461
+ "name": "DeepSeek R1 (9Router)",
462
+ "provider": "9router",
463
+ "contextWindow": 128000,
464
+ "maxOutputTokens": 32000,
465
+ "capabilities": {
466
+ "code": true,
467
+ "reasoning": true,
468
+ "vision": false,
469
+ "audio": false,
470
+ "functionCalling": true
471
+ },
472
+ "pricing": {
473
+ "input": 0.55,
474
+ "output": 2.19
475
+ },
476
+ "tags": ["reasoning", "paid"]
477
+ },
478
+ {
479
+ "id": "mistralai/mistral-large-latest",
480
+ "name": "Mistral Large (9Router)",
481
+ "provider": "9router",
482
+ "contextWindow": 128000,
483
+ "maxOutputTokens": 32000,
484
+ "capabilities": {
485
+ "code": true,
486
+ "reasoning": true,
487
+ "vision": false,
488
+ "audio": false,
489
+ "functionCalling": true
490
+ },
491
+ "pricing": {
492
+ "input": 2,
493
+ "output": 6
494
+ },
495
+ "tags": ["general", "paid"]
496
+ },
497
+ {
498
+ "id": "mistralai/codestral-latest",
499
+ "name": "Codestral (9Router)",
500
+ "provider": "9router",
501
+ "contextWindow": 256000,
502
+ "maxOutputTokens": 32000,
503
+ "capabilities": {
504
+ "code": true,
505
+ "reasoning": true,
506
+ "vision": false,
507
+ "audio": false,
508
+ "functionCalling": true
509
+ },
510
+ "pricing": {
511
+ "input": 0.3,
512
+ "output": 0.9
513
+ },
514
+ "tags": ["code", "paid"]
515
+ }
516
+ ],
517
+ "providers": {
518
+ "bravecode": {
519
+ "name": "BraveCode AI",
520
+ "baseURL": "https://codero.sohailsyed.com/api",
521
+ "envKey": "BRAVECODE_API_KEY",
522
+ "chatEndpoint": "/chat"
523
+ },
524
+ "mistral": {
525
+ "name": "Mistral AI",
526
+ "baseURL": "https://api.mistral.ai/v1",
527
+ "envKey": "MISTRAL_API_KEY"
528
+ },
529
+ "deepseek": {
530
+ "name": "DeepSeek",
531
+ "baseURL": "https://api.deepseek.com",
532
+ "envKey": "DEEPSEEK_API_KEY"
533
+ },
534
+ "openrouter": {
535
+ "name": "OpenRouter",
536
+ "baseURL": "https://openrouter.ai/api/v1",
537
+ "envKey": "OPENROUTER_API_KEY"
538
+ },
539
+ "9router": {
540
+ "name": "9Router",
541
+ "baseURL": "https://9router.com/v1",
542
+ "envKey": "NINEROUTER_API_KEY"
543
+ }
544
+ }
545
+ }
@@ -0,0 +1,43 @@
1
+ import type { ModelConfig } from "./autoModel";
2
+ export interface Message {
3
+ role: "system" | "user" | "assistant" | "tool";
4
+ content: string;
5
+ toolCallId?: string;
6
+ }
7
+ export interface ChatParams {
8
+ model: string;
9
+ messages: Message[];
10
+ temperature?: number;
11
+ maxTokens?: number;
12
+ }
13
+ export interface ChatResponse {
14
+ text?: string;
15
+ toolCalls?: any[];
16
+ finishReason: "stop" | "tool_calls" | "length";
17
+ usage: {
18
+ input: number;
19
+ output: number;
20
+ };
21
+ }
22
+ export interface StreamChunk {
23
+ type: "text" | "tool_call" | "finish";
24
+ text?: string;
25
+ toolCall?: any;
26
+ finishReason?: string;
27
+ }
28
+ export declare class LLMProviderManager {
29
+ private providers;
30
+ private coderoApiKey;
31
+ constructor();
32
+ private initializeProviders;
33
+ private getModelProvider;
34
+ private mapMessages;
35
+ chat(params: ChatParams, modelConfig?: ModelConfig): Promise<ChatResponse>;
36
+ chatStream(params: ChatParams, modelConfig?: ModelConfig): AsyncIterable<StreamChunk>;
37
+ private coderoChat;
38
+ private coderoChatStream;
39
+ private getModelConfigById;
40
+ getAvailableProviders(): string[];
41
+ isProviderConfigured(providerId: string): boolean;
42
+ }
43
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC/C,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAWD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,YAAY,CAAc;;IAMlC,OAAO,CAAC,mBAAmB;IAoC3B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,WAAW;IAgBb,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCzE,UAAU,CACf,MAAM,EAAE,UAAU,EAClB,WAAW,CAAC,EAAE,WAAW,GACxB,aAAa,CAAC,WAAW,CAAC;YAoCf,UAAU;YA+FT,gBAAgB;IAkF/B,OAAO,CAAC,kBAAkB;IAI1B,qBAAqB,IAAI,MAAM,EAAE;IAIjC,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAQlD"}