@yuaone/core 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 (235) hide show
  1. package/LICENSE +663 -0
  2. package/README.md +15 -0
  3. package/dist/__tests__/context-manager.test.d.ts +6 -0
  4. package/dist/__tests__/context-manager.test.d.ts.map +1 -0
  5. package/dist/__tests__/context-manager.test.js +220 -0
  6. package/dist/__tests__/context-manager.test.js.map +1 -0
  7. package/dist/__tests__/governor.test.d.ts +6 -0
  8. package/dist/__tests__/governor.test.d.ts.map +1 -0
  9. package/dist/__tests__/governor.test.js +210 -0
  10. package/dist/__tests__/governor.test.js.map +1 -0
  11. package/dist/__tests__/model-router.test.d.ts +6 -0
  12. package/dist/__tests__/model-router.test.d.ts.map +1 -0
  13. package/dist/__tests__/model-router.test.js +329 -0
  14. package/dist/__tests__/model-router.test.js.map +1 -0
  15. package/dist/agent-logger.d.ts +384 -0
  16. package/dist/agent-logger.d.ts.map +1 -0
  17. package/dist/agent-logger.js +820 -0
  18. package/dist/agent-logger.js.map +1 -0
  19. package/dist/agent-loop.d.ts +163 -0
  20. package/dist/agent-loop.d.ts.map +1 -0
  21. package/dist/agent-loop.js +609 -0
  22. package/dist/agent-loop.js.map +1 -0
  23. package/dist/agent-modes.d.ts +85 -0
  24. package/dist/agent-modes.d.ts.map +1 -0
  25. package/dist/agent-modes.js +418 -0
  26. package/dist/agent-modes.js.map +1 -0
  27. package/dist/approval.d.ts +137 -0
  28. package/dist/approval.d.ts.map +1 -0
  29. package/dist/approval.js +299 -0
  30. package/dist/approval.js.map +1 -0
  31. package/dist/async-completion-queue.d.ts +56 -0
  32. package/dist/async-completion-queue.d.ts.map +1 -0
  33. package/dist/async-completion-queue.js +77 -0
  34. package/dist/async-completion-queue.js.map +1 -0
  35. package/dist/auto-fix.d.ts +174 -0
  36. package/dist/auto-fix.d.ts.map +1 -0
  37. package/dist/auto-fix.js +319 -0
  38. package/dist/auto-fix.js.map +1 -0
  39. package/dist/codebase-context.d.ts +396 -0
  40. package/dist/codebase-context.d.ts.map +1 -0
  41. package/dist/codebase-context.js +1260 -0
  42. package/dist/codebase-context.js.map +1 -0
  43. package/dist/conflict-resolver.d.ts +191 -0
  44. package/dist/conflict-resolver.d.ts.map +1 -0
  45. package/dist/conflict-resolver.js +524 -0
  46. package/dist/conflict-resolver.js.map +1 -0
  47. package/dist/constants.d.ts +52 -0
  48. package/dist/constants.d.ts.map +1 -0
  49. package/dist/constants.js +141 -0
  50. package/dist/constants.js.map +1 -0
  51. package/dist/context-budget.d.ts +435 -0
  52. package/dist/context-budget.d.ts.map +1 -0
  53. package/dist/context-budget.js +903 -0
  54. package/dist/context-budget.js.map +1 -0
  55. package/dist/context-compressor.d.ts +143 -0
  56. package/dist/context-compressor.d.ts.map +1 -0
  57. package/dist/context-compressor.js +511 -0
  58. package/dist/context-compressor.js.map +1 -0
  59. package/dist/context-manager.d.ts +112 -0
  60. package/dist/context-manager.d.ts.map +1 -0
  61. package/dist/context-manager.js +247 -0
  62. package/dist/context-manager.js.map +1 -0
  63. package/dist/continuous-reflection.d.ts +267 -0
  64. package/dist/continuous-reflection.d.ts.map +1 -0
  65. package/dist/continuous-reflection.js +338 -0
  66. package/dist/continuous-reflection.js.map +1 -0
  67. package/dist/cross-file-refactor.d.ts +352 -0
  68. package/dist/cross-file-refactor.d.ts.map +1 -0
  69. package/dist/cross-file-refactor.js +1544 -0
  70. package/dist/cross-file-refactor.js.map +1 -0
  71. package/dist/dag-orchestrator.d.ts +138 -0
  72. package/dist/dag-orchestrator.d.ts.map +1 -0
  73. package/dist/dag-orchestrator.js +379 -0
  74. package/dist/dag-orchestrator.js.map +1 -0
  75. package/dist/debate-orchestrator.d.ts +301 -0
  76. package/dist/debate-orchestrator.d.ts.map +1 -0
  77. package/dist/debate-orchestrator.js +719 -0
  78. package/dist/debate-orchestrator.js.map +1 -0
  79. package/dist/dependency-analyzer.d.ts +113 -0
  80. package/dist/dependency-analyzer.d.ts.map +1 -0
  81. package/dist/dependency-analyzer.js +444 -0
  82. package/dist/dependency-analyzer.js.map +1 -0
  83. package/dist/design-loop.d.ts +59 -0
  84. package/dist/design-loop.d.ts.map +1 -0
  85. package/dist/design-loop.js +344 -0
  86. package/dist/design-loop.js.map +1 -0
  87. package/dist/doc-intelligence.d.ts +383 -0
  88. package/dist/doc-intelligence.d.ts.map +1 -0
  89. package/dist/doc-intelligence.js +1307 -0
  90. package/dist/doc-intelligence.js.map +1 -0
  91. package/dist/dynamic-role-generator.d.ts +76 -0
  92. package/dist/dynamic-role-generator.d.ts.map +1 -0
  93. package/dist/dynamic-role-generator.js +194 -0
  94. package/dist/dynamic-role-generator.js.map +1 -0
  95. package/dist/errors.d.ts +69 -0
  96. package/dist/errors.d.ts.map +1 -0
  97. package/dist/errors.js +102 -0
  98. package/dist/errors.js.map +1 -0
  99. package/dist/event-bus.d.ts +159 -0
  100. package/dist/event-bus.d.ts.map +1 -0
  101. package/dist/event-bus.js +305 -0
  102. package/dist/event-bus.js.map +1 -0
  103. package/dist/execution-engine.d.ts +425 -0
  104. package/dist/execution-engine.d.ts.map +1 -0
  105. package/dist/execution-engine.js +1555 -0
  106. package/dist/execution-engine.js.map +1 -0
  107. package/dist/git-intelligence.d.ts +306 -0
  108. package/dist/git-intelligence.d.ts.map +1 -0
  109. package/dist/git-intelligence.js +1099 -0
  110. package/dist/git-intelligence.js.map +1 -0
  111. package/dist/governor.d.ts +77 -0
  112. package/dist/governor.d.ts.map +1 -0
  113. package/dist/governor.js +161 -0
  114. package/dist/governor.js.map +1 -0
  115. package/dist/hierarchical-planner.d.ts +313 -0
  116. package/dist/hierarchical-planner.d.ts.map +1 -0
  117. package/dist/hierarchical-planner.js +981 -0
  118. package/dist/hierarchical-planner.js.map +1 -0
  119. package/dist/index.d.ts +121 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +123 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/intent-inference.d.ts +103 -0
  124. package/dist/intent-inference.d.ts.map +1 -0
  125. package/dist/intent-inference.js +605 -0
  126. package/dist/intent-inference.js.map +1 -0
  127. package/dist/interrupt-manager.d.ts +143 -0
  128. package/dist/interrupt-manager.d.ts.map +1 -0
  129. package/dist/interrupt-manager.js +196 -0
  130. package/dist/interrupt-manager.js.map +1 -0
  131. package/dist/kernel.d.ts +564 -0
  132. package/dist/kernel.d.ts.map +1 -0
  133. package/dist/kernel.js +1419 -0
  134. package/dist/kernel.js.map +1 -0
  135. package/dist/language-support.d.ts +232 -0
  136. package/dist/language-support.d.ts.map +1 -0
  137. package/dist/language-support.js +1134 -0
  138. package/dist/language-support.js.map +1 -0
  139. package/dist/llm-client.d.ts +82 -0
  140. package/dist/llm-client.d.ts.map +1 -0
  141. package/dist/llm-client.js +475 -0
  142. package/dist/llm-client.js.map +1 -0
  143. package/dist/mcp-client.d.ts +232 -0
  144. package/dist/mcp-client.d.ts.map +1 -0
  145. package/dist/mcp-client.js +718 -0
  146. package/dist/mcp-client.js.map +1 -0
  147. package/dist/memory-manager.d.ts +200 -0
  148. package/dist/memory-manager.d.ts.map +1 -0
  149. package/dist/memory-manager.js +568 -0
  150. package/dist/memory-manager.js.map +1 -0
  151. package/dist/memory.d.ts +87 -0
  152. package/dist/memory.d.ts.map +1 -0
  153. package/dist/memory.js +341 -0
  154. package/dist/memory.js.map +1 -0
  155. package/dist/model-router.d.ts +245 -0
  156. package/dist/model-router.d.ts.map +1 -0
  157. package/dist/model-router.js +632 -0
  158. package/dist/model-router.js.map +1 -0
  159. package/dist/parallel-executor.d.ts +125 -0
  160. package/dist/parallel-executor.d.ts.map +1 -0
  161. package/dist/parallel-executor.js +201 -0
  162. package/dist/parallel-executor.js.map +1 -0
  163. package/dist/perf-optimizer.d.ts +212 -0
  164. package/dist/perf-optimizer.d.ts.map +1 -0
  165. package/dist/perf-optimizer.js +721 -0
  166. package/dist/perf-optimizer.js.map +1 -0
  167. package/dist/persona.d.ts +305 -0
  168. package/dist/persona.d.ts.map +1 -0
  169. package/dist/persona.js +887 -0
  170. package/dist/persona.js.map +1 -0
  171. package/dist/planner.d.ts +70 -0
  172. package/dist/planner.d.ts.map +1 -0
  173. package/dist/planner.js +264 -0
  174. package/dist/planner.js.map +1 -0
  175. package/dist/qa-pipeline.d.ts +365 -0
  176. package/dist/qa-pipeline.d.ts.map +1 -0
  177. package/dist/qa-pipeline.js +1352 -0
  178. package/dist/qa-pipeline.js.map +1 -0
  179. package/dist/reasoning-adapter.d.ts +116 -0
  180. package/dist/reasoning-adapter.d.ts.map +1 -0
  181. package/dist/reasoning-adapter.js +187 -0
  182. package/dist/reasoning-adapter.js.map +1 -0
  183. package/dist/role-registry.d.ts +55 -0
  184. package/dist/role-registry.d.ts.map +1 -0
  185. package/dist/role-registry.js +192 -0
  186. package/dist/role-registry.js.map +1 -0
  187. package/dist/sandbox-tiers.d.ts +327 -0
  188. package/dist/sandbox-tiers.d.ts.map +1 -0
  189. package/dist/sandbox-tiers.js +928 -0
  190. package/dist/sandbox-tiers.js.map +1 -0
  191. package/dist/security-scanner.d.ts +222 -0
  192. package/dist/security-scanner.d.ts.map +1 -0
  193. package/dist/security-scanner.js +1129 -0
  194. package/dist/security-scanner.js.map +1 -0
  195. package/dist/security.d.ts +93 -0
  196. package/dist/security.d.ts.map +1 -0
  197. package/dist/security.js +393 -0
  198. package/dist/security.js.map +1 -0
  199. package/dist/self-reflection.d.ts +397 -0
  200. package/dist/self-reflection.d.ts.map +1 -0
  201. package/dist/self-reflection.js +908 -0
  202. package/dist/self-reflection.js.map +1 -0
  203. package/dist/session-persistence.d.ts +191 -0
  204. package/dist/session-persistence.d.ts.map +1 -0
  205. package/dist/session-persistence.js +395 -0
  206. package/dist/session-persistence.js.map +1 -0
  207. package/dist/speculative-executor.d.ts +210 -0
  208. package/dist/speculative-executor.d.ts.map +1 -0
  209. package/dist/speculative-executor.js +618 -0
  210. package/dist/speculative-executor.js.map +1 -0
  211. package/dist/state-machine.d.ts +289 -0
  212. package/dist/state-machine.d.ts.map +1 -0
  213. package/dist/state-machine.js +695 -0
  214. package/dist/state-machine.js.map +1 -0
  215. package/dist/sub-agent.d.ts +177 -0
  216. package/dist/sub-agent.d.ts.map +1 -0
  217. package/dist/sub-agent.js +303 -0
  218. package/dist/sub-agent.js.map +1 -0
  219. package/dist/system-prompt.d.ts +26 -0
  220. package/dist/system-prompt.d.ts.map +1 -0
  221. package/dist/system-prompt.js +84 -0
  222. package/dist/system-prompt.js.map +1 -0
  223. package/dist/test-intelligence.d.ts +439 -0
  224. package/dist/test-intelligence.d.ts.map +1 -0
  225. package/dist/test-intelligence.js +1165 -0
  226. package/dist/test-intelligence.js.map +1 -0
  227. package/dist/types.d.ts +632 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +6 -0
  230. package/dist/types.js.map +1 -0
  231. package/dist/vector-index.d.ts +314 -0
  232. package/dist/vector-index.d.ts.map +1 -0
  233. package/dist/vector-index.js +618 -0
  234. package/dist/vector-index.js.map +1 -0
  235. package/package.json +41 -0
@@ -0,0 +1,605 @@
1
+ /**
2
+ * @module intent-inference
3
+ * @description Intent Inference Engine — 모호한 사용자 입력을 구체적 태스크 명세로 변환.
4
+ *
5
+ * 프로젝트 컨텍스트(git 상태, 디렉토리 구조, 최근 에러 등)를 분석하여
6
+ * 모호/간결한 입력도 실행 가능한 목표로 정제한다.
7
+ * 한국어 슬랭/축약어도 이해한다.
8
+ */
9
+ import { execSync, execFileSync } from "node:child_process";
10
+ import { readFile, readdir } from "node:fs/promises";
11
+ import { join, basename } from "node:path";
12
+ import { BYOKClient } from "./llm-client.js";
13
+ const KOREAN_PATTERNS = {
14
+ bug_fix: { intent: "bug_fix", keywords: ["고쳐", "수정", "에러", "버그", "오류", "안됨", "안돼", "깨짐", "터짐", "뻑남"] },
15
+ feature: { intent: "feature", keywords: ["추가", "만들어", "넣어", "구현", "기능"] },
16
+ refactor: { intent: "refactor", keywords: ["리팩토링", "개선", "정리", "깔끔", "클린"] },
17
+ optimize: { intent: "optimize", keywords: ["느려", "빠르게", "최적화", "성능", "속도"] },
18
+ test: { intent: "test", keywords: ["테스트", "검증", "확인"] },
19
+ docs: { intent: "docs", keywords: ["문서", "주석", "설명"] },
20
+ };
21
+ const JAPANESE_PATTERNS = {
22
+ bug_fix: { intent: "bug_fix", keywords: ["直して", "修正", "エラー", "バグ", "壊れ", "動かない", "落ちる", "クラッシュ"] },
23
+ feature: { intent: "feature", keywords: ["追加", "作って", "実装", "機能", "新しい"] },
24
+ refactor: { intent: "refactor", keywords: ["リファクタ", "改善", "整理", "きれい", "クリーン"] },
25
+ optimize: { intent: "optimize", keywords: ["遅い", "速く", "最適化", "パフォーマンス", "高速"] },
26
+ test: { intent: "test", keywords: ["テスト", "検証", "確認"] },
27
+ docs: { intent: "docs", keywords: ["ドキュメント", "コメント", "説明", "文書"] },
28
+ };
29
+ const CHINESE_PATTERNS = {
30
+ bug_fix: { intent: "bug_fix", keywords: ["修复", "修改", "错误", "bug", "报错", "崩溃", "不行", "坏了"] },
31
+ feature: { intent: "feature", keywords: ["添加", "新增", "实现", "功能", "创建"] },
32
+ refactor: { intent: "refactor", keywords: ["重构", "改进", "整理", "优化代码", "清理"] },
33
+ optimize: { intent: "optimize", keywords: ["慢", "快", "优化", "性能", "速度"] },
34
+ test: { intent: "test", keywords: ["测试", "验证", "检查"] },
35
+ docs: { intent: "docs", keywords: ["文档", "注释", "说明"] },
36
+ };
37
+ const ENGLISH_PATTERNS = {
38
+ bug_fix: { intent: "bug_fix", keywords: ["fix", "bug", "error", "broken", "crash", "failing", "doesn't work", "not working"] },
39
+ feature: { intent: "feature", keywords: ["add", "create", "implement", "build", "new feature", "make"] },
40
+ refactor: { intent: "refactor", keywords: ["refactor", "improve", "clean up", "reorganize", "simplify"] },
41
+ optimize: { intent: "optimize", keywords: ["slow", "fast", "optimize", "performance", "speed up"] },
42
+ test: { intent: "test", keywords: ["test", "verify", "check", "coverage"] },
43
+ docs: { intent: "docs", keywords: ["document", "comment", "readme", "explain"] },
44
+ };
45
+ /** All language patterns merged for multi-language matching */
46
+ const ALL_LANG_PATTERNS = [
47
+ KOREAN_PATTERNS, JAPANESE_PATTERNS, CHINESE_PATTERNS, ENGLISH_PATTERNS,
48
+ ];
49
+ /** 한국어 슬랭/축약어 → 의미 매핑 */
50
+ const KOREAN_SLANG = {
51
+ "ㅇㅇ": "yes/확인",
52
+ "ㄱㄱ": "go/진행",
53
+ "ㄴㄴ": "no/아니오",
54
+ "ㅎㅇ": "hi/인사",
55
+ "ㅂㅂ": "bye/종료",
56
+ "ㄱㅅ": "감사/thanks",
57
+ "ㅈㅅ": "죄송/sorry",
58
+ };
59
+ /** 다국어 지시 대명사 (모호성 증가 신호) */
60
+ const DEMONSTRATIVES = [
61
+ // Korean
62
+ "이거", "저거", "그거", "여기", "거기", "저기",
63
+ // Japanese
64
+ "これ", "それ", "あれ", "ここ", "そこ", "あそこ",
65
+ // Chinese
66
+ "这个", "那个", "这里", "那里",
67
+ // English
68
+ "this thing", "that thing", "this one", "that one",
69
+ ];
70
+ // ─── Engine ───
71
+ /**
72
+ * Intent Inference Engine.
73
+ *
74
+ * 모호한 사용자 입력을 분석하고, 프로젝트 컨텍스트 신호를 수집하여
75
+ * 구체적이고 실행 가능한 태스크 명세로 변환한다.
76
+ */
77
+ export class IntentInferenceEngine {
78
+ config;
79
+ llm;
80
+ constructor(config) {
81
+ this.config = config;
82
+ this.llm = new BYOKClient(config.byokConfig);
83
+ }
84
+ /**
85
+ * 리소스 정리. 내부 LLM 클라이언트를 해제한다.
86
+ */
87
+ destroy() {
88
+ this.llm.destroy();
89
+ }
90
+ /**
91
+ * 사용자 입력을 분석하여 구체적 의도를 추론한다.
92
+ * @param userInput 사용자가 입력한 원본 텍스트
93
+ * @returns 추론된 의도 결과
94
+ */
95
+ async infer(userInput) {
96
+ const trimmed = userInput.trim();
97
+ // 1. Quick heuristic classification
98
+ const classification = this.classifyInput(trimmed);
99
+ // 2. Gather context signals in parallel
100
+ const signals = await this.gatherSignals(trimmed);
101
+ // 3. Identify target files
102
+ const targetFiles = await this.identifyTargetFiles(trimmed, signals);
103
+ // 4. Refine goal via LLM (if ambiguous or low confidence)
104
+ const refinedGoal = await this.refineGoal(trimmed, signals, classification.category);
105
+ // 5. Generate suggested approach
106
+ const suggestedApproach = this.buildApproach(classification.category, targetFiles, signals);
107
+ return {
108
+ originalInput: trimmed,
109
+ isAmbiguous: classification.isAmbiguous,
110
+ category: classification.category,
111
+ confidence: classification.confidence,
112
+ refinedGoal,
113
+ targetFiles,
114
+ suggestedApproach,
115
+ signals,
116
+ };
117
+ }
118
+ // ─── Classification ───
119
+ /**
120
+ * 입력 텍스트를 휴리스틱으로 빠르게 분류한다.
121
+ * LLM 호출 없이 패턴 매칭으로 1차 분류.
122
+ */
123
+ classifyInput(input) {
124
+ const isAmbiguous = this.detectAmbiguity(input);
125
+ // Try Korean pattern matching first
126
+ const koreanMatch = this.matchKoreanPatterns(input);
127
+ if (koreanMatch) {
128
+ return {
129
+ isAmbiguous,
130
+ category: koreanMatch.category,
131
+ confidence: isAmbiguous ? koreanMatch.confidence * 0.7 : koreanMatch.confidence,
132
+ };
133
+ }
134
+ // English pattern matching
135
+ const englishMatch = this.matchEnglishPatterns(input);
136
+ if (englishMatch) {
137
+ return {
138
+ isAmbiguous,
139
+ category: englishMatch.category,
140
+ confidence: isAmbiguous ? englishMatch.confidence * 0.7 : englishMatch.confidence,
141
+ };
142
+ }
143
+ return {
144
+ isAmbiguous,
145
+ category: "unknown",
146
+ confidence: 0.1,
147
+ };
148
+ }
149
+ /** 입력의 모호성을 판정한다. */
150
+ detectAmbiguity(input) {
151
+ // Very short input → likely ambiguous
152
+ if (input.length < 20)
153
+ return true;
154
+ // Only Korean slang (ㅇㅇ, ㄱㄱ) → definitely ambiguous
155
+ const slangOnly = input
156
+ .replace(/\s+/g, "")
157
+ .split("")
158
+ .every((ch) => /[ㄱ-ㅎㅏ-ㅣ]/.test(ch));
159
+ if (slangOnly && input.length < 10)
160
+ return true;
161
+ // Contains demonstratives without specifics
162
+ const hasDemo = DEMONSTRATIVES.some((d) => input.includes(d));
163
+ const hasFilePath = /[./\\][\w-]+\.\w+/.test(input) || /\/[\w-/]+/.test(input);
164
+ if (hasDemo && !hasFilePath)
165
+ return true;
166
+ // Has specific signals → NOT ambiguous
167
+ const hasFunctionName = /\b[a-zA-Z_]\w*\(/.test(input);
168
+ const hasErrorMessage = /error|Error|exception|Exception|failed|Failed|Cannot|cannot/.test(input);
169
+ if (hasFilePath || hasFunctionName || hasErrorMessage)
170
+ return false;
171
+ // No file paths mentioned → might be ambiguous
172
+ if (!hasFilePath)
173
+ return true;
174
+ return false;
175
+ }
176
+ /** 한국어 키워드 패턴 매칭 */
177
+ matchKoreanPatterns(input) {
178
+ // Match across all languages (Korean, Japanese, Chinese, English)
179
+ let bestMatch = null;
180
+ let bestCount = 0;
181
+ for (const langPatterns of ALL_LANG_PATTERNS) {
182
+ for (const [, pattern] of Object.entries(langPatterns)) {
183
+ const matchCount = pattern.keywords.filter((kw) => input.toLowerCase().includes(kw.toLowerCase())).length;
184
+ if (matchCount > bestCount) {
185
+ bestCount = matchCount;
186
+ bestMatch = {
187
+ category: pattern.intent,
188
+ confidence: Math.min(0.5 + matchCount * 0.15, 0.9),
189
+ };
190
+ }
191
+ }
192
+ }
193
+ return bestMatch;
194
+ }
195
+ /** 영어 키워드 패턴 매칭 */
196
+ matchEnglishPatterns(input) {
197
+ const lower = input.toLowerCase();
198
+ const patterns = [
199
+ { category: "bug_fix", keywords: ["fix", "bug", "error", "broken", "crash", "issue", "wrong", "fail"], weight: 0.15 },
200
+ { category: "feature", keywords: ["add", "create", "implement", "new", "build", "feature"], weight: 0.15 },
201
+ { category: "refactor", keywords: ["refactor", "clean", "reorganize", "restructure", "simplify", "extract"], weight: 0.15 },
202
+ { category: "test", keywords: ["test", "spec", "coverage", "assert", "mock", "jest", "vitest"], weight: 0.15 },
203
+ { category: "docs", keywords: ["doc", "document", "readme", "comment", "jsdoc", "explain"], weight: 0.15 },
204
+ { category: "optimize", keywords: ["optimize", "performance", "slow", "fast", "speed", "cache", "memory"], weight: 0.15 },
205
+ { category: "upgrade", keywords: ["upgrade", "update", "migrate", "version", "dependency", "bump"], weight: 0.15 },
206
+ { category: "explore", keywords: ["explain", "understand", "how", "what", "where", "find", "show", "list"], weight: 0.1 },
207
+ ];
208
+ let bestMatch = null;
209
+ let bestScore = 0;
210
+ for (const pattern of patterns) {
211
+ const matchCount = pattern.keywords.filter((kw) => lower.includes(kw)).length;
212
+ const score = matchCount * pattern.weight;
213
+ if (score > bestScore) {
214
+ bestScore = score;
215
+ bestMatch = {
216
+ category: pattern.category,
217
+ confidence: Math.min(0.4 + score, 0.9),
218
+ };
219
+ }
220
+ }
221
+ return bestMatch;
222
+ }
223
+ // ─── Signal Gathering ───
224
+ /**
225
+ * 프로젝트 컨텍스트에서 의도 추론에 도움이 되는 신호를 수집한다.
226
+ * git 상태, 프로젝트 구조, 최근 에러 등을 병렬로 수집.
227
+ */
228
+ async gatherSignals(input) {
229
+ const signals = [];
230
+ // Gather in parallel
231
+ const [gitSignals, structureSignals, errorSignals, koreanSignals] = await Promise.allSettled([
232
+ this.gatherGitSignals(),
233
+ this.gatherStructureSignals(),
234
+ this.gatherErrorSignals(),
235
+ Promise.resolve(this.gatherKoreanNLPSignals(input)),
236
+ ]);
237
+ if (gitSignals.status === "fulfilled")
238
+ signals.push(...gitSignals.value);
239
+ if (structureSignals.status === "fulfilled")
240
+ signals.push(...structureSignals.value);
241
+ if (errorSignals.status === "fulfilled")
242
+ signals.push(...errorSignals.value);
243
+ if (koreanSignals.status === "fulfilled")
244
+ signals.push(...koreanSignals.value);
245
+ // Sort by relevance
246
+ signals.sort((a, b) => b.relevance - a.relevance);
247
+ return signals;
248
+ }
249
+ /** Git 상태에서 신호 수집 */
250
+ async gatherGitSignals() {
251
+ const signals = [];
252
+ const cwd = this.config.projectPath;
253
+ try {
254
+ // Uncommitted changes
255
+ const status = execSync("git status --porcelain", {
256
+ cwd,
257
+ encoding: "utf-8",
258
+ timeout: 5_000,
259
+ }).trim();
260
+ if (status) {
261
+ const changedFiles = status
262
+ .split("\n")
263
+ .map((line) => line.slice(3).trim())
264
+ .filter(Boolean);
265
+ signals.push({
266
+ source: "git_status",
267
+ description: `Uncommitted changes in ${changedFiles.length} file(s): ${changedFiles.slice(0, 5).join(", ")}`,
268
+ relevance: 0.8,
269
+ });
270
+ }
271
+ // Recent commits
272
+ const log = execSync("git log --oneline -5", {
273
+ cwd,
274
+ encoding: "utf-8",
275
+ timeout: 5_000,
276
+ }).trim();
277
+ if (log) {
278
+ signals.push({
279
+ source: "git_status",
280
+ description: `Recent commits:\n${log}`,
281
+ relevance: 0.5,
282
+ });
283
+ }
284
+ }
285
+ catch {
286
+ // Not a git repo or git unavailable — skip
287
+ }
288
+ return signals;
289
+ }
290
+ /** 프로젝트 구조에서 신호 수집 */
291
+ async gatherStructureSignals() {
292
+ const signals = [];
293
+ const root = this.config.projectPath;
294
+ try {
295
+ // package.json
296
+ const pkgPath = join(root, "package.json");
297
+ const pkgRaw = await readFile(pkgPath, "utf-8");
298
+ const pkg = JSON.parse(pkgRaw);
299
+ const projectType = pkg.type === "module" ? "ESM" : "CommonJS";
300
+ const deps = Object.keys((pkg.dependencies ?? {}));
301
+ const devDeps = Object.keys((pkg.devDependencies ?? {}));
302
+ signals.push({
303
+ source: "project_structure",
304
+ description: `Project: ${pkg.name ?? basename(root)} (${projectType}). Dependencies: ${deps.slice(0, 10).join(", ")}. DevDeps: ${devDeps.slice(0, 5).join(", ")}`,
305
+ relevance: 0.6,
306
+ });
307
+ }
308
+ catch {
309
+ // No package.json — try other signals
310
+ }
311
+ try {
312
+ // tsconfig check
313
+ const tsconfigPath = join(root, "tsconfig.json");
314
+ await readFile(tsconfigPath, "utf-8");
315
+ signals.push({
316
+ source: "project_structure",
317
+ description: "TypeScript project (tsconfig.json found)",
318
+ relevance: 0.4,
319
+ });
320
+ }
321
+ catch {
322
+ // Not TypeScript
323
+ }
324
+ try {
325
+ // Top-level directory listing
326
+ const entries = await readdir(root, { withFileTypes: true });
327
+ const dirs = entries
328
+ .filter((e) => e.isDirectory() && !e.name.startsWith(".") && e.name !== "node_modules")
329
+ .map((e) => e.name);
330
+ const files = entries
331
+ .filter((e) => e.isFile())
332
+ .map((e) => e.name)
333
+ .slice(0, 10);
334
+ signals.push({
335
+ source: "project_structure",
336
+ description: `Top-level dirs: ${dirs.join(", ")}. Files: ${files.join(", ")}`,
337
+ relevance: 0.3,
338
+ });
339
+ }
340
+ catch {
341
+ // Can't read directory
342
+ }
343
+ return signals;
344
+ }
345
+ /** 최근 에러/빌드 실패 신호 수집 */
346
+ async gatherErrorSignals() {
347
+ const signals = [];
348
+ const cwd = this.config.projectPath;
349
+ try {
350
+ // Check recent git diff for error-related changes
351
+ const diff = execSync("git diff HEAD --stat", {
352
+ cwd,
353
+ encoding: "utf-8",
354
+ timeout: 5_000,
355
+ }).trim();
356
+ if (diff) {
357
+ signals.push({
358
+ source: "recent_errors",
359
+ description: `Recent diff stats:\n${diff}`,
360
+ relevance: 0.4,
361
+ });
362
+ }
363
+ }
364
+ catch {
365
+ // No diff or git unavailable
366
+ }
367
+ // Check for common error log files
368
+ const errorLogPaths = [
369
+ "npm-debug.log",
370
+ "yarn-error.log",
371
+ ".next/error.log",
372
+ ];
373
+ for (const logPath of errorLogPaths) {
374
+ try {
375
+ const content = await readFile(join(cwd, logPath), "utf-8");
376
+ // Only take last 500 chars to avoid context bloat
377
+ const tail = content.slice(-500);
378
+ signals.push({
379
+ source: "recent_errors",
380
+ description: `Error log found (${logPath}): ...${tail}`,
381
+ relevance: 0.9,
382
+ });
383
+ }
384
+ catch {
385
+ // Log file doesn't exist — normal
386
+ }
387
+ }
388
+ return signals;
389
+ }
390
+ /** 한국어 NLP 신호 수집 (슬랭, 축약어, 패턴) */
391
+ gatherKoreanNLPSignals(input) {
392
+ const signals = [];
393
+ // Detect Korean slang
394
+ for (const [slang, meaning] of Object.entries(KOREAN_SLANG)) {
395
+ if (input.includes(slang)) {
396
+ signals.push({
397
+ source: "korean_nlp",
398
+ description: `Korean slang detected: "${slang}" → ${meaning}`,
399
+ relevance: 0.3,
400
+ });
401
+ }
402
+ }
403
+ // Detect demonstratives (context-dependent words)
404
+ const foundDemos = DEMONSTRATIVES.filter((d) => input.includes(d));
405
+ if (foundDemos.length > 0) {
406
+ signals.push({
407
+ source: "korean_nlp",
408
+ description: `Demonstratives found: ${foundDemos.join(", ")} — needs contextual resolution`,
409
+ relevance: 0.6,
410
+ });
411
+ }
412
+ // Detect Korean intent keywords
413
+ for (const [category, pattern] of Object.entries(KOREAN_PATTERNS)) {
414
+ const matched = pattern.keywords.filter((kw) => input.includes(kw));
415
+ if (matched.length > 0) {
416
+ signals.push({
417
+ source: "korean_nlp",
418
+ description: `Korean intent keywords (${category}): ${matched.join(", ")}`,
419
+ relevance: 0.7,
420
+ });
421
+ }
422
+ }
423
+ return signals;
424
+ }
425
+ // ─── Goal Refinement ───
426
+ /**
427
+ * LLM을 사용하여 모호한 입력을 구체적 태스크 명세로 변환한다.
428
+ */
429
+ async refineGoal(input, signals, category) {
430
+ const signalsSummary = signals
431
+ .filter((s) => s.relevance >= 0.3)
432
+ .map((s) => `- [${s.source}] ${s.description}`)
433
+ .join("\n");
434
+ const prompt = [
435
+ `User said: "${input}"`,
436
+ "",
437
+ "Context signals:",
438
+ signalsSummary || "(no signals available)",
439
+ "",
440
+ `This appears to be a ${category} request.`,
441
+ "",
442
+ "Convert this into a specific, actionable task description.",
443
+ "Include: what exactly to do, which files to modify, expected outcome.",
444
+ "Be concrete and technical.",
445
+ "If the input is in Korean, respond in Korean.",
446
+ "Keep the response under 200 words.",
447
+ ].join("\n");
448
+ try {
449
+ const response = await this.llm.chat([
450
+ {
451
+ role: "system",
452
+ content: "You are a coding task specification engine. Convert vague user requests into precise, actionable task descriptions. Be technical and specific. Output ONLY the task description, no preamble.",
453
+ },
454
+ { role: "user", content: prompt },
455
+ ]);
456
+ return response.content?.trim() ?? input;
457
+ }
458
+ catch {
459
+ // LLM call failed — fall back to original input with category prefix
460
+ return `[${category}] ${input}`;
461
+ }
462
+ }
463
+ // ─── Target File Identification ───
464
+ /**
465
+ * 입력 텍스트와 컨텍스트 신호에서 관련 파일을 추론한다.
466
+ */
467
+ async identifyTargetFiles(input, signals) {
468
+ const files = new Set();
469
+ // 1. Extract explicit file paths from input
470
+ const filePathRegex = /(?:^|\s)((?:\.\/|\/)?[\w./-]+\.(?:ts|tsx|js|jsx|json|css|scss|md|yaml|yml|toml|py|go|rs|java|c|h|cpp))\b/g;
471
+ let match;
472
+ while ((match = filePathRegex.exec(input)) !== null) {
473
+ files.add(match[1]);
474
+ }
475
+ // 2. Extract files from git status signals
476
+ for (const signal of signals) {
477
+ if (signal.source === "git_status" && signal.description.includes("Uncommitted changes")) {
478
+ const fileList = signal.description
479
+ .split(": ")
480
+ .slice(1)
481
+ .join(": ")
482
+ .split(", ");
483
+ for (const f of fileList) {
484
+ if (f && !f.includes("..."))
485
+ files.add(f.trim());
486
+ }
487
+ }
488
+ }
489
+ // 3. Try to find files matching keywords in input
490
+ if (files.size === 0) {
491
+ const identifiers = input.match(/\b[a-zA-Z][\w-]*(?:\.(?:ts|tsx|js|jsx))?/g) ?? [];
492
+ const cwd = this.config.projectPath;
493
+ for (const id of identifiers.slice(0, 5)) {
494
+ // Only look for identifiers that look like file names
495
+ if (id.length < 3 || /^(the|and|for|but|not|fix|add|get|set|new|old|use|can|has|was|are|did)$/i.test(id)) {
496
+ continue;
497
+ }
498
+ // Sanitize: strip any characters that are not alphanumeric, dash, underscore, or dot
499
+ const safeId = id.replace(/[^a-zA-Z0-9._-]/g, "");
500
+ if (safeId.length < 3)
501
+ continue;
502
+ try {
503
+ const found = execFileSync("find", [
504
+ ".", "-name", `*${safeId}*`, "-type", "f",
505
+ "-not", "-path", "*/node_modules/*",
506
+ "-not", "-path", "*/.git/*",
507
+ ], {
508
+ cwd,
509
+ encoding: "utf-8",
510
+ timeout: 3_000,
511
+ maxBuffer: 4096,
512
+ }).trim();
513
+ // Take only first 3 results
514
+ const lines = found.split("\n").filter(Boolean).slice(0, 3);
515
+ for (const f of lines) {
516
+ files.add(f.replace(/^\.\//, ""));
517
+ }
518
+ }
519
+ catch {
520
+ // find failed — skip
521
+ }
522
+ }
523
+ }
524
+ return Array.from(files).slice(0, 20);
525
+ }
526
+ // ─── Approach Building ───
527
+ /**
528
+ * 카테고리와 대상 파일에 기반한 접근 방법 제안을 생성한다.
529
+ */
530
+ buildApproach(category, targetFiles, signals) {
531
+ const fileList = targetFiles.length > 0
532
+ ? `Target files: ${targetFiles.slice(0, 5).join(", ")}`
533
+ : "No specific files identified yet — will scan project structure";
534
+ const hasGitChanges = signals.some((s) => s.source === "git_status" && s.description.includes("Uncommitted"));
535
+ const approaches = {
536
+ bug_fix: [
537
+ "1. Reproduce the issue by examining error context",
538
+ "2. Identify root cause in the relevant source files",
539
+ "3. Apply minimal fix to resolve the issue",
540
+ "4. Verify fix doesn't introduce regressions",
541
+ fileList,
542
+ ].join("\n"),
543
+ feature: [
544
+ "1. Understand the feature requirements",
545
+ "2. Identify insertion points in existing code",
546
+ "3. Implement the feature with proper types",
547
+ "4. Add necessary exports and integrations",
548
+ fileList,
549
+ ].join("\n"),
550
+ refactor: [
551
+ "1. Analyze current code structure and dependencies",
552
+ "2. Plan refactoring steps to minimize breakage",
553
+ "3. Apply refactoring incrementally",
554
+ "4. Verify all imports and references are updated",
555
+ fileList,
556
+ ].join("\n"),
557
+ test: [
558
+ "1. Identify testable units and coverage gaps",
559
+ "2. Write test cases covering happy path and edge cases",
560
+ "3. Ensure test infrastructure is set up",
561
+ "4. Verify all tests pass",
562
+ fileList,
563
+ ].join("\n"),
564
+ docs: [
565
+ "1. Identify undocumented or poorly documented areas",
566
+ "2. Write clear JSDoc/inline comments",
567
+ "3. Update README or related docs if needed",
568
+ fileList,
569
+ ].join("\n"),
570
+ optimize: [
571
+ "1. Profile and identify performance bottlenecks",
572
+ "2. Analyze algorithmic complexity",
573
+ "3. Apply targeted optimizations",
574
+ "4. Benchmark before and after",
575
+ fileList,
576
+ ].join("\n"),
577
+ upgrade: [
578
+ "1. Check current dependency versions",
579
+ "2. Review changelogs for breaking changes",
580
+ "3. Update dependencies incrementally",
581
+ "4. Fix any breaking API changes",
582
+ "5. Verify build and tests pass",
583
+ fileList,
584
+ ].join("\n"),
585
+ explore: [
586
+ "1. Scan project structure and entry points",
587
+ "2. Trace the relevant code flow",
588
+ "3. Summarize findings with code references",
589
+ fileList,
590
+ ].join("\n"),
591
+ unknown: [
592
+ "1. Clarify the user's intent from context",
593
+ "2. Scan project for relevant patterns",
594
+ "3. Propose a concrete action plan",
595
+ fileList,
596
+ ].join("\n"),
597
+ };
598
+ let approach = approaches[category];
599
+ if (hasGitChanges) {
600
+ approach += "\n\nNote: There are uncommitted git changes — consider reviewing them for context.";
601
+ }
602
+ return approach;
603
+ }
604
+ }
605
+ //# sourceMappingURL=intent-inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-inference.js","sourceRoot":"","sources":["../src/intent-inference.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiE7C,MAAM,eAAe,GAAiB;IACpC,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IACtG,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IACzE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IAC5E,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IAC5E,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IACvD,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;CACvD,CAAC;AAEF,MAAM,iBAAiB,GAAiB;IACtC,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;IAClG,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;IAC1E,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;IAChF,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;IAChF,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IACvD,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;CACnE,CAAC;AAEF,MAAM,gBAAgB,GAAiB;IACrC,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IAC3F,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IACxE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAC5E,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IACxE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IACtD,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;CACvD,CAAC;AAEF,MAAM,gBAAgB,GAAiB;IACrC,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE;IAC9H,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE;IACxG,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE;IACzG,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE;IACnG,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE;IAC3E,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE;CACjF,CAAC;AAEF,+DAA+D;AAC/D,MAAM,iBAAiB,GAAmB;IACxC,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB;CACvE,CAAC;AAEF,yBAAyB;AACzB,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF,6BAA6B;AAC7B,MAAM,cAAc,GAAG;IACrB,SAAS;IACT,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClC,WAAW;IACX,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;IACnC,UAAU;IACV,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IACtB,UAAU;IACV,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU;CACnD,CAAC;AAEF,iBAAiB;AAEjB;;;;;GAKG;AACH,MAAM,OAAO,qBAAqB;IACf,MAAM,CAAe;IACrB,GAAG,CAAa;IAEjC,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,SAAiB;QAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAEjC,oCAAoC;QACpC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEnD,wCAAwC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAElD,2BAA2B;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAErE,0DAA0D;QAC1D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CACvC,OAAO,EACP,OAAO,EACP,cAAc,CAAC,QAAQ,CACxB,CAAC;QAEF,iCAAiC;QACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAC1C,cAAc,CAAC,QAAQ,EACvB,WAAW,EACX,OAAO,CACR,CAAC;QAEF,OAAO;YACL,aAAa,EAAE,OAAO;YACtB,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,WAAW;YACX,WAAW;YACX,iBAAiB;YACjB,OAAO;SACR,CAAC;IACJ,CAAC;IAED,yBAAyB;IAEzB;;;OAGG;IACK,aAAa,CAAC,KAAa;QAKjC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEhD,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;gBACL,WAAW;gBACX,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU;aAChF,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,WAAW;gBACX,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU;aAClF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,WAAW;YACX,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,qBAAqB;IACb,eAAe,CAAC,KAAa;QACnC,sCAAsC;QACtC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QAEnC,oDAAoD;QACpD,MAAM,SAAS,GAAG,KAAK;aACpB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;aACnB,KAAK,CAAC,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QAEhD,4CAA4C;QAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/E,IAAI,OAAO,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAEzC,uCAAuC;QACvC,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,6DAA6D,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClG,IAAI,WAAW,IAAI,eAAe,IAAI,eAAe;YAAE,OAAO,KAAK,CAAC;QAEpE,+CAA+C;QAC/C,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAE9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oBAAoB;IACZ,mBAAmB,CACzB,KAAa;QAEb,kEAAkE;QAClE,IAAI,SAAS,GAA4D,IAAI,CAAC;QAC9E,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,YAAY,IAAI,iBAAiB,EAAE,CAAC;YAC7C,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAChD,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAC/C,CAAC,MAAM,CAAC;gBACT,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;oBAC3B,SAAS,GAAG,UAAU,CAAC;oBACvB,SAAS,GAAG;wBACV,QAAQ,EAAE,OAAO,CAAC,MAAM;wBACxB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,IAAI,EAAE,GAAG,CAAC;qBACnD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mBAAmB;IACX,oBAAoB,CAC1B,KAAa;QAEb,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAElC,MAAM,QAAQ,GAA4E;YACxF,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;YACrH,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;YAC1G,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;YAC3H,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9G,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;YAC1G,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;YACzH,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;YAClH,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;SAC1H,CAAC;QAEF,IAAI,SAAS,GAA4D,IAAI,CAAC;QAC9E,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9E,MAAM,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1C,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,SAAS,GAAG;oBACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC;iBACvC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,2BAA2B;IAE3B;;;OAGG;IACK,KAAK,CAAC,aAAa,CAAC,KAAa;QACvC,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,qBAAqB;QACrB,MAAM,CAAC,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YAC3F,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,kBAAkB,EAAE;YACzB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;SACpD,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrF,IAAI,YAAY,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7E,IAAI,aAAa,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAE/E,oBAAoB;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAElD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qBAAqB;IACb,KAAK,CAAC,gBAAgB;QAC5B,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAEpC,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,EAAE;gBAChD,GAAG;gBACH,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC,IAAI,EAAE,CAAC;YAEV,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,YAAY,GAAG,MAAM;qBACxB,KAAK,CAAC,IAAI,CAAC;qBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBACnC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,YAAY;oBACpB,WAAW,EAAE,0BAA0B,YAAY,CAAC,MAAM,aAAa,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC5G,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;YACL,CAAC;YAED,iBAAiB;YACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,sBAAsB,EAAE;gBAC3C,GAAG;gBACH,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC,IAAI,EAAE,CAAC;YAEV,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,YAAY;oBACpB,WAAW,EAAE,oBAAoB,GAAG,EAAE;oBACtC,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sBAAsB;IACd,KAAK,CAAC,sBAAsB;QAClC,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAErC,IAAI,CAAC;YACH,eAAe;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;YAE1D,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;YAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAA2B,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAA2B,CAAC,CAAC;YAEnF,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,mBAAmB;gBAC3B,WAAW,EAAE,YAAY,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,WAAW,oBAAoB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACjK,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QAED,IAAI,CAAC;YACH,iBAAiB;YACjB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACjD,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,mBAAmB;gBAC3B,WAAW,EAAE,0CAA0C;gBACvD,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QAED,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,OAAO;iBACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;iBACtF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,OAAO;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAEhB,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,mBAAmB;gBAC3B,WAAW,EAAE,mBAAmB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC7E,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,wBAAwB;IAChB,KAAK,CAAC,kBAAkB;QAC9B,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAEpC,IAAI,CAAC;YACH,kDAAkD;YAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE;gBAC5C,GAAG;gBACH,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC,IAAI,EAAE,CAAC;YAEV,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,eAAe;oBACvB,WAAW,EAAE,uBAAuB,IAAI,EAAE;oBAC1C,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;QAED,mCAAmC;QACnC,MAAM,aAAa,GAAG;YACpB,eAAe;YACf,gBAAgB;YAChB,iBAAiB;SAClB,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC5D,kDAAkD;gBAClD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,eAAe;oBACvB,WAAW,EAAE,oBAAoB,OAAO,SAAS,IAAI,EAAE;oBACvD,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kCAAkC;IAC1B,sBAAsB,CAAC,KAAa;QAC1C,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,sBAAsB;QACtB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5D,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,YAAY;oBACpB,WAAW,EAAE,2BAA2B,KAAK,OAAO,OAAO,EAAE;oBAC7D,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,YAAY;gBACpB,WAAW,EAAE,yBAAyB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC;gBAC3F,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,gCAAgC;QAChC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,YAAY;oBACpB,WAAW,EAAE,2BAA2B,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC1E,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0BAA0B;IAE1B;;OAEG;IACK,KAAK,CAAC,UAAU,CACtB,KAAa,EACb,OAAuB,EACvB,QAAwB;QAExB,MAAM,cAAc,GAAG,OAAO;aAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,MAAM,GAAG;YACb,eAAe,KAAK,GAAG;YACvB,EAAE;YACF,kBAAkB;YAClB,cAAc,IAAI,wBAAwB;YAC1C,EAAE;YACF,wBAAwB,QAAQ,WAAW;YAC3C,EAAE;YACF,4DAA4D;YAC5D,uEAAuE;YACvE,4BAA4B;YAC5B,+CAA+C;YAC/C,oCAAoC;SACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnC;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EACL,+LAA+L;iBAClM;gBACD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,OAAO,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,qCAAqC;IAErC;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,KAAa,EACb,OAAuB;QAEvB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAEhC,4CAA4C;QAC5C,MAAM,aAAa,GAAG,2GAA2G,CAAC;QAClI,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QACvB,CAAC;QAED,2CAA2C;QAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBACzF,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW;qBAChC,KAAK,CAAC,IAAI,CAAC;qBACX,KAAK,CAAC,CAAC,CAAC;qBACR,IAAI,CAAC,IAAI,CAAC;qBACV,KAAK,CAAC,IAAI,CAAC,CAAC;gBACf,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;wBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,2CAA2C,CAAC,IAAI,EAAE,CAAC;YACnF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAEpC,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzC,sDAAsD;gBACtD,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,0EAA0E,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACzG,SAAS;gBACX,CAAC;gBACD,qFAAqF;gBACrF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;gBAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;oBAAE,SAAS;gBAChC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE;wBACjC,GAAG,EAAE,OAAO,EAAE,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,GAAG;wBACzC,MAAM,EAAE,OAAO,EAAE,kBAAkB;wBACnC,MAAM,EAAE,OAAO,EAAE,UAAU;qBAC5B,EAAE;wBACD,GAAG;wBACH,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC,IAAI,EAAE,CAAC;oBAEV,4BAA4B;oBAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACtB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,qBAAqB;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,4BAA4B;IAE5B;;OAEG;IACK,aAAa,CACnB,QAAwB,EACxB,WAAqB,EACrB,OAAuB;QAEvB,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,iBAAiB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvD,CAAC,CAAC,gEAAgE,CAAC;QAErE,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC1E,CAAC;QAEF,MAAM,UAAU,GAAmC;YACjD,OAAO,EAAE;gBACP,mDAAmD;gBACnD,qDAAqD;gBACrD,2CAA2C;gBAC3C,6CAA6C;gBAC7C,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;YAEZ,OAAO,EAAE;gBACP,wCAAwC;gBACxC,+CAA+C;gBAC/C,4CAA4C;gBAC5C,2CAA2C;gBAC3C,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;YAEZ,QAAQ,EAAE;gBACR,oDAAoD;gBACpD,gDAAgD;gBAChD,oCAAoC;gBACpC,kDAAkD;gBAClD,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;YAEZ,IAAI,EAAE;gBACJ,8CAA8C;gBAC9C,wDAAwD;gBACxD,yCAAyC;gBACzC,0BAA0B;gBAC1B,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;YAEZ,IAAI,EAAE;gBACJ,qDAAqD;gBACrD,sCAAsC;gBACtC,4CAA4C;gBAC5C,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;YAEZ,QAAQ,EAAE;gBACR,iDAAiD;gBACjD,mCAAmC;gBACnC,iCAAiC;gBACjC,+BAA+B;gBAC/B,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;YAEZ,OAAO,EAAE;gBACP,sCAAsC;gBACtC,2CAA2C;gBAC3C,sCAAsC;gBACtC,iCAAiC;gBACjC,gCAAgC;gBAChC,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;YAEZ,OAAO,EAAE;gBACP,4CAA4C;gBAC5C,iCAAiC;gBACjC,4CAA4C;gBAC5C,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;YAEZ,OAAO,EAAE;gBACP,2CAA2C;gBAC3C,uCAAuC;gBACvC,mCAAmC;gBACnC,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAC;QAEF,IAAI,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,aAAa,EAAE,CAAC;YAClB,QAAQ,IAAI,oFAAoF,CAAC;QACnG,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}