lemma-mcp 0.7.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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +474 -0
  3. package/README.tr.md +384 -0
  4. package/dist/guides/core.d.ts +33 -0
  5. package/dist/guides/core.d.ts.map +1 -0
  6. package/dist/guides/core.js +424 -0
  7. package/dist/guides/core.js.map +1 -0
  8. package/dist/guides/index.d.ts +2 -0
  9. package/dist/guides/index.d.ts.map +1 -0
  10. package/dist/guides/index.js +2 -0
  11. package/dist/guides/index.js.map +1 -0
  12. package/dist/guides/task-map.d.ts +3 -0
  13. package/dist/guides/task-map.d.ts.map +1 -0
  14. package/dist/guides/task-map.js +107 -0
  15. package/dist/guides/task-map.js.map +1 -0
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +7 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/memory/config.d.ts +6 -0
  21. package/dist/memory/config.d.ts.map +1 -0
  22. package/dist/memory/config.js +69 -0
  23. package/dist/memory/config.js.map +1 -0
  24. package/dist/memory/core.d.ts +27 -0
  25. package/dist/memory/core.d.ts.map +1 -0
  26. package/dist/memory/core.js +415 -0
  27. package/dist/memory/core.js.map +1 -0
  28. package/dist/memory/index.d.ts +2 -0
  29. package/dist/memory/index.d.ts.map +1 -0
  30. package/dist/memory/index.js +2 -0
  31. package/dist/memory/index.js.map +1 -0
  32. package/dist/server/handlers.d.ts +131 -0
  33. package/dist/server/handlers.d.ts.map +1 -0
  34. package/dist/server/handlers.js +694 -0
  35. package/dist/server/handlers.js.map +1 -0
  36. package/dist/server/hooks.d.ts +16 -0
  37. package/dist/server/hooks.d.ts.map +1 -0
  38. package/dist/server/hooks.js +77 -0
  39. package/dist/server/hooks.js.map +1 -0
  40. package/dist/server/index.d.ts +5 -0
  41. package/dist/server/index.d.ts.map +1 -0
  42. package/dist/server/index.js +322 -0
  43. package/dist/server/index.js.map +1 -0
  44. package/dist/server/system-prompt.d.ts +5 -0
  45. package/dist/server/system-prompt.d.ts.map +1 -0
  46. package/dist/server/system-prompt.js +143 -0
  47. package/dist/server/system-prompt.js.map +1 -0
  48. package/dist/server/tools.d.ts +22 -0
  49. package/dist/server/tools.d.ts.map +1 -0
  50. package/dist/server/tools.js +443 -0
  51. package/dist/server/tools.js.map +1 -0
  52. package/dist/sessions/core.d.ts +17 -0
  53. package/dist/sessions/core.d.ts.map +1 -0
  54. package/dist/sessions/core.js +162 -0
  55. package/dist/sessions/core.js.map +1 -0
  56. package/dist/sessions/index.d.ts +2 -0
  57. package/dist/sessions/index.d.ts.map +1 -0
  58. package/dist/sessions/index.js +2 -0
  59. package/dist/sessions/index.js.map +1 -0
  60. package/dist/sessions/virtual.d.ts +23 -0
  61. package/dist/sessions/virtual.d.ts.map +1 -0
  62. package/dist/sessions/virtual.js +157 -0
  63. package/dist/sessions/virtual.js.map +1 -0
  64. package/dist/types.d.ts +143 -0
  65. package/dist/types.d.ts.map +1 -0
  66. package/dist/types.js +2 -0
  67. package/dist/types.js.map +1 -0
  68. package/package.json +62 -0
package/README.tr.md ADDED
@@ -0,0 +1,384 @@
1
+ <p align="center">
2
+ <img src="assets/logo.png" width="200" alt="Lemma Logo">
3
+ </p>
4
+
5
+ # Lemma - LLM'ler için Kalıcı Bellek (MCP)
6
+
7
+ [English](README.md) | [Türkçe](README.tr.md)
8
+
9
+ Lemma, Büyük Dil Modelleri (LLM) için kalıcı bir bellek katmanı sağlayan bir Model Bağlam Protokolü (MCP) sunucusudur. LLM'lerin oturumlar arasında gerçekleri, tercihleri ve bağlamı hatırlamasını sağlar; otomatik bellek çürümesi ve öğrenme ile şık bir arayüz sunar.
10
+
11
+ ## Lemma Nedir?
12
+
13
+ Lemma, AI asistanları için harici bir hipokampüs görevi görür. İnsan beyni her şeyi kaydetmez — sentezler, damıtır ve fragmanlar bırakır. Sık erişilen bilgiler güçlenir; kullanılmayan bilgiler solar ve unutulur.
14
+
15
+ Lemma aynı prensiple çalışır:
16
+
17
+ - **Ham konuşmalar asla saklanmaz** — sadece sentezlenmiş fragmanlar
18
+ - **Fragmanlar zamanla çürür** — sık erişilenler güçlenir
19
+ - **Kullanılan bilgi bağlam kazanır** — etiketler ve ilişkiler otomatik oluşturulur
20
+ - **LLM her oturumda fragmanları okur** ve kim olduğunu hatırlar
21
+
22
+ ## Nasıl Çalışır?
23
+
24
+ ### Dinamik Sistem İstemi
25
+
26
+ Lemma, ilgili bağlamı LLM'nin sistem istemine çalışma zamanında otomatik enjekte eder:
27
+
28
+ - **Küresel Bağlam**: Projeler arası öğrenimler ve tercihler (maksimum 10 fragman)
29
+ - **Proje Bağlamı**: Projeye özel fragmanlar, güven görselleştirmesi ile (maksimum 20 fragman)
30
+ - **Görsel Formatlama**: Güven çubukları (`███░░`) ve kaynak ikonları (🤖/👤)
31
+ - **İstem Değiştiricileri**: Özel istem dönüşümleri için genişletilebilir sistem
32
+
33
+ ### Bellek Yapısı
34
+
35
+ Her bellek fragmanı şu alanlara sahiptir:
36
+
37
+ | Alan | Tip | Açıklama |
38
+ |-------|------|-------------|
39
+ | `id` | string | Benzersiz kimlik (format: `m` + 6 hex karakter) |
40
+ | `title` | string | Hızlı tarama için kısa başlık |
41
+ | `fragment` | string | Sentezlenmiş bellek metni |
42
+ | `project` | string | Proje kapsamı (küresel için `null`) |
43
+ | `confidence` | float | Güvenilirlik 0.0-1.0 (zamanla çürür ve güçlenir) |
44
+ | `source` | string | `"user"` veya `"ai"` |
45
+ | `created` | string | Oluşturulma tarihi (YYYY-MM-DD) |
46
+ | `lastAccessed` | string | Son okuma zamanı (ISO timestamp) |
47
+ | `accessed` | int | Mevcut çürüme döngüsündeki erişim sayısı |
48
+ | `tags` | string[] | Kullanımdan elde edilen bağlam etiketleri (örn. "debugging", "refactoring") |
49
+ | `associatedWith` | string[] | Aynı oturumda erişilen fragman ID'leri |
50
+ | `negativeHits` | int | Bu belleğin yardımcı olmadığı işaretlenme sayısı (oturum başına sıfırlanır) |
51
+
52
+ ### Öğrenme Sistemi
53
+
54
+ Statik belleğin aksine, Lemma bilginin kullanım yoluyla evrildiği biyolojik bir model kullanır:
55
+
56
+ **Güçlendirme (erişimde):**
57
+ ```
58
+ confidence = min(1.0, confidence + 0.1)
59
+ tags += context_tag (örn. "debugging")
60
+ associatedWith += co_accessed_fragment_ids
61
+ ```
62
+
63
+ **Çürüme (oturum başına):**
64
+ ```
65
+ decay = max(0.005, 0.05 - (accessed * 0.005))
66
+ confidence = confidence - decay
67
+ ```
68
+
69
+ - **Sıklık**: Sık erişilen öğeler daha yavaş çürür (minimum oturum başına 0.005)
70
+ - **Kullanılmayan öğeler** temel oran olan oturum başına 0.05 çürür
71
+ - **İlişkiler**: Birlikte kullanılan fragmanlar gelecekteki hatırlama için çapraz referanslar oluşturur
72
+
73
+ ### Bellek Dosyası Konumu
74
+
75
+ Bellekler JSONL formatında şu konumda saklanır:
76
+
77
+ | İşletim Sistemi | Yol |
78
+ |---|---|
79
+ | **Windows** | `C:\Users\{kullanıcı}\.lemma\memory.jsonl` |
80
+ | **macOS** | `/Users/{kullanıcı}/.lemma/memory.jsonl` |
81
+ | **Linux** | `/home/{kullanıcı}/.lemma/memory.jsonl` |
82
+
83
+ ## Hızlı Başlangıç
84
+
85
+ Lemma'yı kullanmanın önerilen yolu **JSR** üzerindendir. MCP istemci konfigürasyonunuza ekleyin:
86
+
87
+ **Claude Desktop (Windows):** `%APPDATA%\Claude\claude_desktop_config.json`
88
+ **Claude Desktop (macOS):** `~/Library/Application Support/Claude/claude_desktop_config.json`
89
+
90
+ ```json
91
+ {
92
+ "mcpServers": {
93
+ "lemma": {
94
+ "command": "npx",
95
+ "args": ["-y", "jsr", "@lemma/lemma"]
96
+ }
97
+ }
98
+ }
99
+ ```
100
+
101
+ ### Alternatif: Doğrudan GitHub'dan çalıştır
102
+
103
+ ```json
104
+ {
105
+ "mcpServers": {
106
+ "lemma": {
107
+ "command": "npx",
108
+ "args": ["-y", "github:xenitV1/lemma"]
109
+ }
110
+ }
111
+ }
112
+ ```
113
+
114
+ ---
115
+
116
+ ## Hook Sistemi
117
+
118
+ Lemma, sunucu davranışını genişletmek için eklenti tabanlı bir hook sistemi sağlar:
119
+
120
+ ### Yaşam Döngüsü Hook'ları
121
+
122
+ ```javascript
123
+ import { registerHook, HookTypes } from "@lemma/lemma/server";
124
+
125
+ // Sunucu başlangıcında callback kaydet
126
+ registerHook(HookTypes.ON_START, async (context) => {
127
+ console.log("Sunucu başladı!", context);
128
+ });
129
+
130
+ // Proje bağlamı değişikliğinde callback kaydet
131
+ registerHook(HookTypes.ON_PROJECT_CHANGE, async (context) => {
132
+ console.log(`Proje değişti: ${context.project}`);
133
+ });
134
+ ```
135
+
136
+ ### İstem Değiştiricileri
137
+
138
+ Sistem istemi oluşturmayı özel dönüşümlerle genişletin:
139
+
140
+ ```javascript
141
+ import { registerPromptModifier } from "@lemma/lemma/server";
142
+
143
+ registerPromptModifier(async (prompt, context) => {
144
+ // İsteme özel bağlam ekle
145
+ if (context.project === "uygulamam") {
146
+ return prompt + "\n\n<custom>Not: Deneysel özellikler kullanılıyor.</custom>";
147
+ }
148
+ return prompt;
149
+ });
150
+ ```
151
+
152
+ ---
153
+
154
+ ## Manuel Kurulum (Geliştiriciler İçin)
155
+
156
+ ```bash
157
+ git clone https://github.com/xenitV1/lemma
158
+ cd Lemma
159
+ npm install
160
+ ```
161
+
162
+ **Gereksinimler:** Node.js 18.0.0 veya üzeri
163
+
164
+ ### Yerel Konfigürasyon
165
+
166
+ ```json
167
+ {
168
+ "mcpServers": {
169
+ "lemma": {
170
+ "command": "node",
171
+ "args": ["C:\\yol\\to\\Lemma\\src\\index.js"]
172
+ }
173
+ }
174
+ }
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Mevcut Araçlar
180
+
181
+ ### Bellek Araçları
182
+
183
+ #### `memory_read`
184
+
185
+ Bellek fragmanlarını okur. ÖZET MODU sadece başlık + açıklama gösterir; tam detay için `id` kullanın.
186
+
187
+ **Parametreler:**
188
+ - `project` (string, opsiyonel): Filtrelenecek proje adı
189
+ - `query` (string, opsiyonel): Semantik arama anahtar kelimesi
190
+ - `id` (string, opsiyonel): Belirli bir fragmanın tam detayını al
191
+ - `context` (string, opsiyonel): Bu erişimi bir bağlamla etiketle (örn. "debugging") — güveni artırır
192
+ - `all` (boolean, opsiyonel): Tüm projelerden fragmanları göster (varsayılan: false)
193
+
194
+ **Dönüş:** Güven çubuklarıyla formatlanmış string:
195
+
196
+ ```
197
+ === LEMMA BELLEK FRAGMANLARI (project: myapp) ===
198
+ [m1a2b3] ████░ (🤖) [myapp] React Hooks
199
+ useState ve useEffect pattern'leri
200
+ ==============================
201
+ ```
202
+
203
+ #### `memory_add`
204
+
205
+ **ZORUNLU:** Analizi tamamladıktan SONRA bulguları kaydetmek için çağır.
206
+
207
+ **Parametreler:**
208
+ - `fragment` (string, zorunlu): Saklanacak bellek metni
209
+ - `title` (string, opsiyonel): Kısa başlık
210
+ - `description` (string, opsiyonel): Kısa özet
211
+ - `project` (string, opsiyonel): Proje kapsamı (null = küresel)
212
+ - `source` (string, opsiyonel): "user" veya "ai", varsayılan "ai"
213
+
214
+ #### `memory_update`
215
+
216
+ Mevcut bir fragmanı ID ile güncelle.
217
+
218
+ **Parametreler:**
219
+ - `id` (string, zorunlu): Fragman ID'si
220
+ - `title` (string, opsiyonel): Yeni başlık
221
+ - `fragment` (string, opsiyonel): Yeni metin
222
+ - `confidence` (number, opsiyonel): Yeni güven değeri 0-1
223
+
224
+ #### `memory_feedback`
225
+
226
+ Kullanımdan sonra bir bellek fragmanı hakkında geri bildirim ver. Pozitif geri bildirim güveni artırır; negatif geri bildirim doğrudan düşürür (-0.1).
227
+
228
+ **Parametreler:**
229
+ - `id` (string, zorunlu): Fragman ID'si
230
+ - `useful` (boolean, zorunlu): Yardımcı olduysa `true`, olmadıysa `false`
231
+
232
+ #### `memory_forget`
233
+
234
+ Bir bellek fragmanını ID ile sil.
235
+
236
+ **Parametreler:**
237
+ - `id` (string, zorunlu): Fragman ID'si
238
+
239
+ #### `memory_merge`
240
+
241
+ Birden fazla fragmanı birleştir. Yeni ID oluşturur, orijinalleri siler.
242
+
243
+ **Parametreler:**
244
+ - `ids` (string[], zorunlu): Birleştirilecek fragman ID'leri
245
+ - `title` (string, zorunlu): Birleştirilmiş fragmanın başlığı
246
+ - `fragment` (string, zorunlu): Birleştirilmiş içerik
247
+ - `project` (string, opsiyonel): Proje kapsamı
248
+
249
+ ### Rehber Araçları
250
+
251
+ #### `guide_get`
252
+
253
+ Kullanım istatistikleriyle takip edilen rehberleri getir. Kullanım sayısına göre sıralı (en çok kullanılan önce).
254
+
255
+ **Parametreler:**
256
+ - `category` (string, opsiyonel): Kategoriye göre filtrele
257
+ - `guide` (string, opsiyonel): Belirli rehber detayı al
258
+ - `task` (string, opsiyonel): İlgili rehber önerileri almak için görev açıklaması
259
+
260
+ #### `guide_practice`
261
+
262
+ **ZORUNLU:** Çalışma sırasında bir rehber kullandığınızda kullanımını kaydedin.
263
+
264
+ **Parametreler:**
265
+ - `guide` (string, zorunlu): Rehber adı
266
+ - `category` (string, zorunlu): Kategori
267
+ - `description` (string, opsiyonel): Detaylı kılavuz/protokoller
268
+ - `contexts` (string[], zorunlu): Kullanıldığı bağlamlar
269
+ - `learnings` (string[], zorunlu): Keşfedilen yeni öğrenimler
270
+
271
+ #### `guide_create`
272
+
273
+ Detaylı bir kılavuzla rehber oluştur.
274
+
275
+ **Parametreler:**
276
+ - `guide` (string, zorunlu): Rehber adı
277
+ - `category` (string, zorunlu): Kategori
278
+ - `description` (string, zorunlu): Tam kılavuz/protokoller
279
+ - `contexts` (string[], opsiyonel): İlk bağlamlar
280
+ - `learnings` (string[], opsiyonel): İlk öğrenimler
281
+
282
+ #### `guide_distill`
283
+
284
+ Bir bellek fragmanını rehber öğrenimine dönüştür.
285
+
286
+ **Parametreler:**
287
+ - `memory_id` (string, zorunlu): Bellek fragmanı ID'si
288
+ - `guide` (string, zorunlu): Hedef rehber adı
289
+ - `category` (string, opsiyonel): Kategori (yeni rehber oluşturuluyorsa gerekli)
290
+
291
+ #### `guide_update`
292
+
293
+ Mevcut bir rehberin özelliklerini güncelle.
294
+
295
+ **Parametreler:**
296
+ - `guide` (string, zorunlu): Mevcut rehber adı
297
+ - `new_name` (string, opsiyonel): Yeni ad
298
+ - `category` (string, opsiyonel): Yeni kategori
299
+ - `description` (string, opsiyonel): Yeni açıklama/kılavuz
300
+
301
+ #### `guide_forget`
302
+
303
+ Bir rehberi sil.
304
+
305
+ **Parametreler:**
306
+ - `guide` (string, zorunlu): Rehber adı
307
+
308
+ #### `guide_merge`
309
+
310
+ Birden fazla rehberi birleştir. Kullanım sayıları toplanır.
311
+
312
+ **Parametreler:**
313
+ - `guides` (string[], zorunlu): Birleştirilecek rehber adları
314
+ - `guide` (string, zorunlu): Birleştirilmiş rehberin adı
315
+ - `category` (string, zorunlu): Kategori
316
+ - `description` (string, opsiyonel): Birleştirilmiş açıklama
317
+ - `contexts` (string[], opsiyonel): Birleştirilmiş bağlamlar
318
+ - `learnings` (string[], opsiyonel): Birleştirilmiş öğrenimler
319
+
320
+ ## Felsefe
321
+
322
+ ### Saklanması Gerekenler
323
+
324
+ **Kullanıcı Katmanı:**
325
+ - Kullanıcı tercihleri (iletişim tarzı, format, dil)
326
+ - Proje bağlamı (teknoloji yığını, klasör yapısı, konvansiyonlar)
327
+ - Açıkça istenen anılar
328
+
329
+ **Yetenek Katmanı:**
330
+ - Kullanılan başarılı çözümler ve yaklaşımlar
331
+ - Tekrar eden görevler için keşfedilen kısayollar
332
+ - Denenen ve başarısız olan yaklaşımlar
333
+
334
+ ### Saklanmaması Gerekenler
335
+
336
+ - Ham konuşma içeriği
337
+ - Tekrar etmeyecek tek seferlik sorular
338
+ - Geçici veya yüksek bağlama özgü bilgiler
339
+ - Kişisel veya hassas veriler
340
+
341
+ ## Geliştirme
342
+
343
+ ### Testleri Çalıştırma
344
+
345
+ ```bash
346
+ npm test
347
+ ```
348
+
349
+ Kapsamlı test paketi: bellek çekirdeği, rehber çekirdeği, işleyiciler, öğrenme yaşam döngüsü, hook sistemi ve dinamik istem oluşturma. Tüm I/O geçici dizinlere izole edilir — gerçek verilere dokunulmaz.
350
+
351
+ ### Proje Yapısı
352
+
353
+ ```
354
+ Lemma/
355
+ ├── src/
356
+ │ ├── index.js # MCP sunucu giriş noktası
357
+ │ ├── memory/
358
+ │ │ ├── index.js # Bellek modülü yeniden dışa aktarmalar
359
+ │ │ └── core.js # Temel bellek mantığı
360
+ │ ├── guides/
361
+ │ │ ├── index.js # Rehber modülü yeniden dışa aktarmalar
362
+ │ │ ├── core.js # Temel rehber mantığı
363
+ │ │ └── task-map.js # Görev-rehber eşlemesi
364
+ │ └── server/
365
+ │ ├── index.js # Sunucu kurulumu
366
+ │ ├── handlers.js # Araç işleyicileri
367
+ │ ├── tools.js # Araç tanımları
368
+ │ ├── hooks.js # Hook sistemi ve istem değiştiriciler
369
+ │ └── system-prompt.js
370
+ ├── tests/
371
+ │ └── test.js # Test paketi
372
+ ├── package.json
373
+ ├── jsr.json
374
+ ├── CHANGELOG.md
375
+ └── README.md
376
+ ```
377
+
378
+ ## Güvenlik
379
+
380
+ `memory.jsonl` ve `guides.jsonl` yerel dosyalardır ve asla hiçbir yere gönderilmez. Kullanıcılar içeriklerini inceleyebilir veya MCP araçları üzerinden istedikleri zaman temizleyebilirler.
381
+
382
+ ## Lisans
383
+
384
+ MIT License
@@ -0,0 +1,33 @@
1
+ import { TASK_GUIDE_MAP } from "./task-map.js";
2
+ import type { Guide, SuggestResult } from "../types.js";
3
+ interface GuideUpdates {
4
+ guide?: string;
5
+ category?: string;
6
+ description?: string;
7
+ add_anti_patterns?: string[];
8
+ add_pitfalls?: string[];
9
+ superseded_by?: string;
10
+ deprecated?: boolean;
11
+ }
12
+ export declare function setGuidesDir(dir: string): void;
13
+ export declare function generateGuideId(): string;
14
+ export declare function getToday(): string;
15
+ export declare function createGuide(guide: string, category: string, description?: string, contexts?: string[], learnings?: string[]): Guide;
16
+ export declare function loadGuides(): Guide[];
17
+ export declare function saveGuides(guides: Guide[], options?: {
18
+ force?: boolean;
19
+ }): void;
20
+ export declare function promoteToGuide(guides: Guide[], guideName: string, category: string, knowledge: string, context?: string): Guide;
21
+ export declare function findGuide(guides: Guide[], guideName: string): Guide | null;
22
+ export declare function findSimilarGuide(guides: Guide[], guideName: string): Guide | null;
23
+ export declare function updateGuide(guides: Guide[], guideName: string, updates: GuideUpdates): Guide | null;
24
+ export declare function deleteGuide(guides: Guide[], guideName: string): boolean;
25
+ export declare function practiceGuide(guides: Guide[], guideName: string, category: string, description?: string, newContexts?: string[], newLearnings?: string[], outcome?: string | null): Guide;
26
+ export declare function getTopGuides(guides: Guide[], limit?: number): Guide[];
27
+ export declare function getGuidesByCategory(guides: Guide[], category: string): Guide[];
28
+ export declare function formatGuidesForLLM(guides: Guide[]): string;
29
+ export declare function suggestGuides(taskDescription: string, existingGuides?: Guide[]): SuggestResult;
30
+ export declare function formatSuggestions(result: SuggestResult): string;
31
+ export declare function formatGuideDetail(guide: Guide | null): string;
32
+ export { TASK_GUIDE_MAP };
33
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/guides/core.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEzE,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAW,EACxB,QAAQ,GAAE,MAAM,EAAO,EACvB,SAAS,GAAE,MAAM,EAAO,GACvB,KAAK,CAoBP;AAED,wBAAgB,UAAU,IAAI,KAAK,EAAE,CAiBpC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAqCnF;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAW,GACnB,KAAK,CAkBP;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAG1E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAsBjF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAqBnG;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAUvE;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAW,EACxB,WAAW,GAAE,MAAM,EAAO,EAC1B,YAAY,GAAE,MAAM,EAAO,EAC3B,OAAO,GAAE,MAAM,GAAG,IAAW,GAC5B,KAAK,CAyCP;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,GAAE,MAAW,GAAG,KAAK,EAAE,CAIzE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,CAG9E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAY1D;AA8BD,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,GAAE,KAAK,EAAO,GAAG,aAAa,CAoGlG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAsC/D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,CAuD7D;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}