@jterrats/smart-deployment 1.0.3 → 1.0.4

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 (257) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +6 -0
  3. package/lib/ai/wave-validation-service.d.ts +21 -0
  4. package/lib/ai/wave-validation-service.js +189 -114
  5. package/lib/ai/wave-validation-service.js.map +1 -1
  6. package/lib/analysis/analysis-reporter.d.ts +12 -0
  7. package/lib/analysis/analysis-reporter.js +61 -0
  8. package/lib/analysis/analysis-reporter.js.map +1 -1
  9. package/lib/analysis/analyze-artifact-service.d.ts +25 -0
  10. package/lib/analysis/analyze-artifact-service.js +50 -0
  11. package/lib/analysis/analyze-artifact-service.js.map +1 -0
  12. package/lib/analysis/analyze-context-service.d.ts +25 -0
  13. package/lib/analysis/analyze-context-service.js +28 -0
  14. package/lib/analysis/analyze-context-service.js.map +1 -0
  15. package/lib/analysis/project-analysis-service.d.ts +48 -0
  16. package/lib/analysis/project-analysis-service.js +134 -0
  17. package/lib/analysis/project-analysis-service.js.map +1 -0
  18. package/lib/commands/analyze.d.ts +0 -2
  19. package/lib/commands/analyze.js +31 -162
  20. package/lib/commands/analyze.js.map +1 -1
  21. package/lib/commands/config.d.ts +0 -4
  22. package/lib/commands/config.js +25 -95
  23. package/lib/commands/config.js.map +1 -1
  24. package/lib/commands/resume.js +6 -16
  25. package/lib/commands/resume.js.map +1 -1
  26. package/lib/commands/start.d.ts +0 -11
  27. package/lib/commands/start.js +38 -550
  28. package/lib/commands/start.js.map +1 -1
  29. package/lib/commands/status.js +36 -12
  30. package/lib/commands/status.js.map +1 -1
  31. package/lib/commands/validate.d.ts +3 -0
  32. package/lib/commands/validate.js +5 -7
  33. package/lib/commands/validate.js.map +1 -1
  34. package/lib/config/config-mutation-service.d.ts +21 -0
  35. package/lib/config/config-mutation-service.js +61 -0
  36. package/lib/config/config-mutation-service.js.map +1 -0
  37. package/lib/dependencies/circular-dependency-detector.d.ts +5 -0
  38. package/lib/dependencies/circular-dependency-detector.js +67 -72
  39. package/lib/dependencies/circular-dependency-detector.js.map +1 -1
  40. package/lib/dependencies/dependency-depth-calculator.d.ts +28 -0
  41. package/lib/dependencies/dependency-depth-calculator.js +86 -39
  42. package/lib/dependencies/dependency-depth-calculator.js.map +1 -1
  43. package/lib/dependencies/dependency-graph-builder.d.ts +45 -13
  44. package/lib/dependencies/dependency-graph-builder.js +228 -123
  45. package/lib/dependencies/dependency-graph-builder.js.map +1 -1
  46. package/lib/dependencies/dependency-impact-analyzer.d.ts +13 -0
  47. package/lib/dependencies/dependency-impact-analyzer.js +146 -102
  48. package/lib/dependencies/dependency-impact-analyzer.js.map +1 -1
  49. package/lib/dependencies/dependency-merger.d.ts +10 -0
  50. package/lib/dependencies/dependency-merger.js +123 -61
  51. package/lib/dependencies/dependency-merger.js.map +1 -1
  52. package/lib/dependencies/dependency-resolver.d.ts +34 -9
  53. package/lib/dependencies/dependency-resolver.js +181 -112
  54. package/lib/dependencies/dependency-resolver.js.map +1 -1
  55. package/lib/dependencies/dependency-semantics.d.ts +20 -0
  56. package/lib/dependencies/dependency-semantics.js +55 -0
  57. package/lib/dependencies/dependency-semantics.js.map +1 -0
  58. package/lib/dependencies/graph-visualizer.d.ts +6 -1
  59. package/lib/dependencies/graph-visualizer.js +38 -4
  60. package/lib/dependencies/graph-visualizer.js.map +1 -1
  61. package/lib/dependencies/heuristic-inference.d.ts +2 -53
  62. package/lib/dependencies/heuristic-inference.js +8 -317
  63. package/lib/dependencies/heuristic-inference.js.map +1 -1
  64. package/lib/dependencies/heuristic-patterns.d.ts +14 -0
  65. package/lib/dependencies/heuristic-patterns.js +247 -0
  66. package/lib/dependencies/heuristic-patterns.js.map +1 -0
  67. package/lib/deployment/cycle-remediation-runner.d.ts +36 -0
  68. package/lib/deployment/cycle-remediation-runner.js +262 -0
  69. package/lib/deployment/cycle-remediation-runner.js.map +1 -0
  70. package/lib/deployment/deployment-context-service.d.ts +24 -0
  71. package/lib/deployment/deployment-context-service.js +17 -0
  72. package/lib/deployment/deployment-context-service.js.map +1 -0
  73. package/lib/deployment/deployment-runner.d.ts +37 -0
  74. package/lib/deployment/deployment-runner.js +94 -0
  75. package/lib/deployment/deployment-runner.js.map +1 -0
  76. package/lib/deployment/deployment-status-service.d.ts +5 -0
  77. package/lib/deployment/deployment-status-service.js +39 -18
  78. package/lib/deployment/deployment-status-service.js.map +1 -1
  79. package/lib/deployment/deployment-validation-service.d.ts +5 -2
  80. package/lib/deployment/deployment-validation-service.js +48 -45
  81. package/lib/deployment/deployment-validation-service.js.map +1 -1
  82. package/lib/deployment/resume-deployment-service.d.ts +14 -0
  83. package/lib/deployment/resume-deployment-service.js +25 -0
  84. package/lib/deployment/resume-deployment-service.js.map +1 -0
  85. package/lib/deployment/start-execution-service.d.ts +44 -0
  86. package/lib/deployment/start-execution-service.js +94 -0
  87. package/lib/deployment/start-execution-service.js.map +1 -0
  88. package/lib/deployment/test-executor.d.ts +60 -1
  89. package/lib/deployment/test-executor.js +180 -12
  90. package/lib/deployment/test-executor.js.map +1 -1
  91. package/lib/deployment/test-plan-service.d.ts +8 -0
  92. package/lib/deployment/test-plan-service.js +26 -0
  93. package/lib/deployment/test-plan-service.js.map +1 -0
  94. package/lib/deployment/wave-manifest-service.d.ts +11 -0
  95. package/lib/deployment/wave-manifest-service.js +41 -0
  96. package/lib/deployment/wave-manifest-service.js.map +1 -0
  97. package/lib/parsers/apex-class-parser.js +180 -98
  98. package/lib/parsers/apex-class-parser.js.map +1 -1
  99. package/lib/parsers/apex-trigger-parser.js +56 -7
  100. package/lib/parsers/apex-trigger-parser.js.map +1 -1
  101. package/lib/parsers/aura-parser.js +2 -2
  102. package/lib/parsers/aura-parser.js.map +1 -1
  103. package/lib/parsers/bot-parser.js +31 -4
  104. package/lib/parsers/bot-parser.js.map +1 -1
  105. package/lib/parsers/custom-metadata-parser.js +37 -3
  106. package/lib/parsers/custom-metadata-parser.js.map +1 -1
  107. package/lib/parsers/custom-object-parser.js +284 -150
  108. package/lib/parsers/custom-object-parser.js.map +1 -1
  109. package/lib/parsers/email-template-parser.js +115 -58
  110. package/lib/parsers/email-template-parser.js.map +1 -1
  111. package/lib/parsers/flexipage-parser.js +41 -16
  112. package/lib/parsers/flexipage-parser.js.map +1 -1
  113. package/lib/parsers/flow-parser.js +73 -63
  114. package/lib/parsers/flow-parser.js.map +1 -1
  115. package/lib/parsers/genai-prompt-parser.js +16 -4
  116. package/lib/parsers/genai-prompt-parser.js.map +1 -1
  117. package/lib/parsers/layout-parser.d.ts +11 -0
  118. package/lib/parsers/layout-parser.js +143 -68
  119. package/lib/parsers/layout-parser.js.map +1 -1
  120. package/lib/parsers/lwc-parser.d.ts +0 -9
  121. package/lib/parsers/lwc-parser.js +245 -100
  122. package/lib/parsers/lwc-parser.js.map +1 -1
  123. package/lib/parsers/parser-utils.d.ts +3 -0
  124. package/lib/parsers/parser-utils.js +16 -0
  125. package/lib/parsers/parser-utils.js.map +1 -0
  126. package/lib/parsers/permission-set-parser.d.ts +6 -0
  127. package/lib/parsers/permission-set-parser.js +31 -40
  128. package/lib/parsers/permission-set-parser.js.map +1 -1
  129. package/lib/parsers/profile-parser.d.ts +13 -0
  130. package/lib/parsers/profile-parser.js +39 -34
  131. package/lib/parsers/profile-parser.js.map +1 -1
  132. package/lib/parsers/visualforce-parser.js +2 -1
  133. package/lib/parsers/visualforce-parser.js.map +1 -1
  134. package/lib/presentation/analyze-command-presenter.d.ts +10 -0
  135. package/lib/presentation/analyze-command-presenter.js +30 -0
  136. package/lib/presentation/analyze-command-presenter.js.map +1 -0
  137. package/lib/presentation/config-command-presenter.d.ts +15 -0
  138. package/lib/presentation/config-command-presenter.js +50 -0
  139. package/lib/presentation/config-command-presenter.js.map +1 -0
  140. package/lib/presentation/project-analysis-presenter.d.ts +9 -0
  141. package/lib/presentation/project-analysis-presenter.js +9 -0
  142. package/lib/presentation/project-analysis-presenter.js.map +1 -0
  143. package/lib/presentation/resume-command-presenter.d.ts +7 -0
  144. package/lib/presentation/resume-command-presenter.js +12 -0
  145. package/lib/presentation/resume-command-presenter.js.map +1 -0
  146. package/lib/presentation/start-command-presenter.d.ts +15 -0
  147. package/lib/presentation/start-command-presenter.js +29 -0
  148. package/lib/presentation/start-command-presenter.js.map +1 -0
  149. package/lib/presentation/status-command-presenter.d.ts +7 -0
  150. package/lib/presentation/status-command-presenter.js +16 -0
  151. package/lib/presentation/status-command-presenter.js.map +1 -0
  152. package/lib/presentation/validate-command-presenter.d.ts +9 -0
  153. package/lib/presentation/validate-command-presenter.js +50 -0
  154. package/lib/presentation/validate-command-presenter.js.map +1 -0
  155. package/lib/services/metadata-scanner-service.d.ts +8 -12
  156. package/lib/services/metadata-scanner-service.js +55 -533
  157. package/lib/services/metadata-scanner-service.js.map +1 -1
  158. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +4 -0
  159. package/lib/services/scanners/automation-ai-metadata-scanner.js +61 -0
  160. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -0
  161. package/lib/services/scanners/code-metadata-scanner.d.ts +23 -0
  162. package/lib/services/scanners/code-metadata-scanner.js +149 -0
  163. package/lib/services/scanners/code-metadata-scanner.js.map +1 -0
  164. package/lib/services/scanners/data-metadata-scanner.d.ts +3 -0
  165. package/lib/services/scanners/data-metadata-scanner.js +82 -0
  166. package/lib/services/scanners/data-metadata-scanner.js.map +1 -0
  167. package/lib/services/scanners/experience-metadata-scanner.d.ts +5 -0
  168. package/lib/services/scanners/experience-metadata-scanner.js +123 -0
  169. package/lib/services/scanners/experience-metadata-scanner.js.map +1 -0
  170. package/lib/services/scanners/scanner-runtime.d.ts +11 -0
  171. package/lib/services/scanners/scanner-runtime.js +115 -0
  172. package/lib/services/scanners/scanner-runtime.js.map +1 -0
  173. package/lib/services/scanners/security-metadata-scanner.d.ts +3 -0
  174. package/lib/services/scanners/security-metadata-scanner.js +71 -0
  175. package/lib/services/scanners/security-metadata-scanner.js.map +1 -0
  176. package/lib/types/dependency.d.ts +11 -1
  177. package/lib/types/metadata.d.ts +17 -0
  178. package/lib/types/salesforce/flow/actions.d.ts +108 -0
  179. package/lib/types/salesforce/flow/actions.js +2 -0
  180. package/lib/types/salesforce/flow/actions.js.map +1 -0
  181. package/lib/types/salesforce/flow/common.d.ts +36 -0
  182. package/lib/types/salesforce/flow/common.js +5 -0
  183. package/lib/types/salesforce/flow/common.js.map +1 -0
  184. package/lib/types/salesforce/flow/metadata.d.ts +37 -0
  185. package/lib/types/salesforce/flow/metadata.js +2 -0
  186. package/lib/types/salesforce/flow/metadata.js.map +1 -0
  187. package/lib/types/salesforce/flow/records.d.ts +38 -0
  188. package/lib/types/salesforce/flow/records.js +2 -0
  189. package/lib/types/salesforce/flow/records.js.map +1 -0
  190. package/lib/types/salesforce/flow/resources.d.ts +44 -0
  191. package/lib/types/salesforce/flow/resources.js +2 -0
  192. package/lib/types/salesforce/flow/resources.js.map +1 -0
  193. package/lib/types/salesforce/flow/screens.d.ts +56 -0
  194. package/lib/types/salesforce/flow/screens.js +2 -0
  195. package/lib/types/salesforce/flow/screens.js.map +1 -0
  196. package/lib/types/salesforce/flow/start.d.ts +24 -0
  197. package/lib/types/salesforce/flow/start.js +2 -0
  198. package/lib/types/salesforce/flow/start.js.map +1 -0
  199. package/lib/types/salesforce/flow.d.ts +9 -514
  200. package/lib/types/salesforce/flow.js +1 -1
  201. package/lib/types/salesforce/object/core.d.ts +68 -0
  202. package/lib/types/salesforce/object/core.js +5 -0
  203. package/lib/types/salesforce/object/core.js.map +1 -0
  204. package/lib/types/salesforce/object/field.d.ts +155 -0
  205. package/lib/types/salesforce/object/field.js +5 -0
  206. package/lib/types/salesforce/object/field.js.map +1 -0
  207. package/lib/types/salesforce/object/filter.d.ts +16 -0
  208. package/lib/types/salesforce/object/filter.js +5 -0
  209. package/lib/types/salesforce/object/filter.js.map +1 -0
  210. package/lib/types/salesforce/object/policy.d.ts +27 -0
  211. package/lib/types/salesforce/object/policy.js +5 -0
  212. package/lib/types/salesforce/object/policy.js.map +1 -0
  213. package/lib/types/salesforce/object/record.d.ts +44 -0
  214. package/lib/types/salesforce/object/record.js +5 -0
  215. package/lib/types/salesforce/object/record.js.map +1 -0
  216. package/lib/types/salesforce/object/view.d.ts +71 -0
  217. package/lib/types/salesforce/object/view.js +5 -0
  218. package/lib/types/salesforce/object/view.js.map +1 -0
  219. package/lib/types/salesforce/object/weblink.d.ts +70 -0
  220. package/lib/types/salesforce/object/weblink.js +5 -0
  221. package/lib/types/salesforce/object/weblink.js.map +1 -0
  222. package/lib/types/salesforce/object.d.ts +7 -423
  223. package/lib/types/salesforce/object.js +7 -1
  224. package/lib/types/salesforce/object.js.map +1 -1
  225. package/lib/utils/cache-manager.d.ts +16 -15
  226. package/lib/utils/cache-manager.js +290 -188
  227. package/lib/utils/cache-manager.js.map +1 -1
  228. package/lib/utils/logger.d.ts +8 -0
  229. package/lib/utils/logger.js +82 -69
  230. package/lib/utils/logger.js.map +1 -1
  231. package/lib/validators/xml/xml-reference-rules.d.ts +3 -0
  232. package/lib/validators/xml/xml-reference-rules.js +173 -0
  233. package/lib/validators/xml/xml-reference-rules.js.map +1 -0
  234. package/lib/validators/xml/xml-report-formatter.d.ts +2 -0
  235. package/lib/validators/xml/xml-report-formatter.js +47 -0
  236. package/lib/validators/xml/xml-report-formatter.js.map +1 -0
  237. package/lib/validators/xml/xml-schema-rules.d.ts +3 -0
  238. package/lib/validators/xml/xml-schema-rules.js +75 -0
  239. package/lib/validators/xml/xml-schema-rules.js.map +1 -0
  240. package/lib/validators/xml/xml-validation-types.d.ts +25 -0
  241. package/lib/validators/xml/xml-validation-types.js +2 -0
  242. package/lib/validators/xml/xml-validation-types.js.map +1 -0
  243. package/lib/validators/xml-metadata-validator.d.ts +2 -63
  244. package/lib/validators/xml-metadata-validator.js +7 -338
  245. package/lib/validators/xml-metadata-validator.js.map +1 -1
  246. package/lib/waves/test-optimizer.d.ts +13 -0
  247. package/lib/waves/test-optimizer.js +124 -63
  248. package/lib/waves/test-optimizer.js.map +1 -1
  249. package/lib/waves/wave-builder.d.ts +17 -21
  250. package/lib/waves/wave-builder.js +199 -135
  251. package/lib/waves/wave-builder.js.map +1 -1
  252. package/lib/waves/wave-splitter.d.ts +12 -8
  253. package/lib/waves/wave-splitter.js +156 -115
  254. package/lib/waves/wave-splitter.js.map +1 -1
  255. package/npm-shrinkwrap.json +2 -2
  256. package/oclif.manifest.json +1 -1
  257. package/package.json +1 -1
@@ -19,13 +19,6 @@ const logger = {
19
19
  console.error(`[${timestamp}] [ERROR] [CacheManager] ${message}${contextStr}`);
20
20
  },
21
21
  };
22
- /**
23
- * Generate safe filename from cache key
24
- */
25
- function getCacheFileName(key) {
26
- const hash = Buffer.from(key).toString('base64').replaceAll(/[/+=]/g, '_');
27
- return `cache_${hash}.json`;
28
- }
29
22
  /**
30
23
  * Default cache configuration
31
24
  */
@@ -35,6 +28,237 @@ const DEFAULT_CONFIG = {
35
28
  enablePersistence: false,
36
29
  enableLocking: true,
37
30
  };
31
+ class CacheKeyDerivation {
32
+ static CACHE_FILE_PREFIX = 'cache_';
33
+ static CACHE_FILE_SUFFIX = '.json';
34
+ static LOCK_DIRECTORY_NAME = 'sf-smart-deployment-locks';
35
+ toPersistedFileName(key) {
36
+ const hash = Buffer.from(key).toString('base64').replaceAll(/[/+=]/g, '_');
37
+ return `${CacheKeyDerivation.CACHE_FILE_PREFIX}${hash}${CacheKeyDerivation.CACHE_FILE_SUFFIX}`;
38
+ }
39
+ isPersistedCacheFile(fileName) {
40
+ return (fileName.startsWith(CacheKeyDerivation.CACHE_FILE_PREFIX) &&
41
+ fileName.endsWith(CacheKeyDerivation.CACHE_FILE_SUFFIX));
42
+ }
43
+ toPersistedKey(fileName) {
44
+ return fileName.replace(CacheKeyDerivation.CACHE_FILE_PREFIX, '').replace(CacheKeyDerivation.CACHE_FILE_SUFFIX, '');
45
+ }
46
+ sanitizeLockTarget(orgAlias) {
47
+ return orgAlias.replaceAll(/[^\w-]/g, '_');
48
+ }
49
+ resolveLockDirectory() {
50
+ return path.join(os.tmpdir(), CacheKeyDerivation.LOCK_DIRECTORY_NAME);
51
+ }
52
+ resolveLockFilePath(orgAlias) {
53
+ return path.join(this.resolveLockDirectory(), `${this.sanitizeLockTarget(orgAlias)}.lock`);
54
+ }
55
+ }
56
+ class CacheEntrySerializer {
57
+ serialize(entry) {
58
+ return JSON.stringify(entry);
59
+ }
60
+ deserialize(content) {
61
+ return JSON.parse(content);
62
+ }
63
+ serializeLock(lockInfo) {
64
+ return JSON.stringify(lockInfo, null, 2);
65
+ }
66
+ deserializeLock(content) {
67
+ return JSON.parse(content);
68
+ }
69
+ }
70
+ class CacheExpiryPolicy {
71
+ createEntry(value, ttlMs, now = Date.now()) {
72
+ return {
73
+ value,
74
+ expiresAt: now + ttlMs,
75
+ createdAt: now,
76
+ hits: 0,
77
+ };
78
+ }
79
+ isExpired(entry, now = Date.now()) {
80
+ return now > entry.expiresAt;
81
+ }
82
+ collectExpiredKeys(cache, now = Date.now()) {
83
+ const expiredKeys = [];
84
+ for (const [key, entry] of cache.entries()) {
85
+ if (this.isExpired(entry, now)) {
86
+ expiredKeys.push(key);
87
+ }
88
+ }
89
+ return expiredKeys;
90
+ }
91
+ selectOldestKey(cache) {
92
+ let oldestKey = null;
93
+ let oldestTime = Infinity;
94
+ for (const [key, entry] of cache.entries()) {
95
+ if (entry.createdAt < oldestTime) {
96
+ oldestTime = entry.createdAt;
97
+ oldestKey = key;
98
+ }
99
+ }
100
+ return oldestKey;
101
+ }
102
+ }
103
+ class CacheStorage {
104
+ getConfig;
105
+ keyDerivation;
106
+ serializer;
107
+ constructor(getConfig, keyDerivation, serializer) {
108
+ this.getConfig = getConfig;
109
+ this.keyDerivation = keyDerivation;
110
+ this.serializer = serializer;
111
+ }
112
+ async persistEntry(key, entry) {
113
+ const config = this.getConfig();
114
+ if (!config.cacheDirectory) {
115
+ return;
116
+ }
117
+ try {
118
+ await fs.mkdir(config.cacheDirectory, { recursive: true });
119
+ const fileName = this.keyDerivation.toPersistedFileName(key);
120
+ const filePath = path.join(config.cacheDirectory, fileName);
121
+ await fs.writeFile(filePath, this.serializer.serialize(entry), 'utf-8');
122
+ }
123
+ catch (error) {
124
+ logger.warn('Failed to persist cache entry', { error, key, cacheDirectory: config.cacheDirectory });
125
+ }
126
+ }
127
+ async deletePersistedEntry(key) {
128
+ const config = this.getConfig();
129
+ if (!config.cacheDirectory) {
130
+ return;
131
+ }
132
+ try {
133
+ const fileName = this.keyDerivation.toPersistedFileName(key);
134
+ const filePath = path.join(config.cacheDirectory, fileName);
135
+ await fs.unlink(filePath);
136
+ }
137
+ catch {
138
+ // Ignore if file doesn't exist
139
+ }
140
+ }
141
+ async clearPersistedCache() {
142
+ const config = this.getConfig();
143
+ if (!config.cacheDirectory) {
144
+ return;
145
+ }
146
+ try {
147
+ await fs.rm(config.cacheDirectory, { recursive: true, force: true });
148
+ }
149
+ catch (error) {
150
+ logger.warn('Failed to clear cache directory', { error, cacheDirectory: config.cacheDirectory });
151
+ }
152
+ }
153
+ async loadEntriesFromDisk(expiryPolicy) {
154
+ const config = this.getConfig();
155
+ if (!config.cacheDirectory) {
156
+ return [];
157
+ }
158
+ const files = await fs.readdir(config.cacheDirectory);
159
+ const cacheFiles = files.filter((file) => this.keyDerivation.isPersistedCacheFile(file));
160
+ const results = await Promise.all(cacheFiles.map(async (file) => this.loadPersistedEntry(file, expiryPolicy)));
161
+ return results.filter((result) => result !== null);
162
+ }
163
+ async loadPersistedEntry(file, expiryPolicy) {
164
+ const config = this.getConfig();
165
+ try {
166
+ const filePath = path.join(config.cacheDirectory, file);
167
+ const content = await fs.readFile(filePath, 'utf-8');
168
+ const entry = this.serializer.deserialize(content);
169
+ if (expiryPolicy.isExpired(entry)) {
170
+ await fs.unlink(filePath);
171
+ return null;
172
+ }
173
+ const key = this.keyDerivation.toPersistedKey(file);
174
+ return { key, entry };
175
+ }
176
+ catch (error) {
177
+ logger.warn('Skipping invalid cache file', { error, file });
178
+ return null;
179
+ }
180
+ }
181
+ }
182
+ class CacheLockLifecycle {
183
+ getConfig;
184
+ keyDerivation;
185
+ serializer;
186
+ lockFilePath = null;
187
+ lockFileHandle = null;
188
+ constructor(getConfig, keyDerivation, serializer) {
189
+ this.getConfig = getConfig;
190
+ this.keyDerivation = keyDerivation;
191
+ this.serializer = serializer;
192
+ }
193
+ hasActiveLock() {
194
+ return this.lockFileHandle !== null;
195
+ }
196
+ async acquireLock(orgAlias) {
197
+ if (!this.getConfig().enableLocking) {
198
+ return true;
199
+ }
200
+ try {
201
+ const lockDir = this.keyDerivation.resolveLockDirectory();
202
+ await fs.mkdir(lockDir, { recursive: true });
203
+ this.lockFilePath = this.keyDerivation.resolveLockFilePath(orgAlias);
204
+ this.lockFileHandle = await fs.open(this.lockFilePath, 'wx');
205
+ const lockInfo = {
206
+ pid: process.pid,
207
+ timestamp: new Date().toISOString(),
208
+ hostname: os.hostname(),
209
+ };
210
+ await this.lockFileHandle.writeFile(this.serializer.serializeLock(lockInfo));
211
+ return true;
212
+ }
213
+ catch (error) {
214
+ if (error.code === 'EEXIST') {
215
+ return false;
216
+ }
217
+ logger.warn('Failed to acquire lock, continuing without locking', { error, orgAlias });
218
+ return true;
219
+ }
220
+ }
221
+ async releaseLock() {
222
+ if (!this.lockFileHandle || !this.lockFilePath) {
223
+ return;
224
+ }
225
+ const lockFilePath = this.lockFilePath;
226
+ try {
227
+ await this.lockFileHandle.close();
228
+ await fs.unlink(lockFilePath);
229
+ }
230
+ catch (error) {
231
+ if (error.code !== 'ENOENT') {
232
+ logger.warn('Failed to release lock', { error, lockFilePath });
233
+ }
234
+ }
235
+ finally {
236
+ this.lockFileHandle = null;
237
+ this.lockFilePath = null;
238
+ }
239
+ }
240
+ async isLocked(orgAlias) {
241
+ if (!this.getConfig().enableLocking) {
242
+ return false;
243
+ }
244
+ try {
245
+ const lockFilePath = this.keyDerivation.resolveLockFilePath(orgAlias);
246
+ const lockContent = await fs.readFile(lockFilePath, 'utf-8');
247
+ const lockInfo = this.serializer.deserializeLock(lockContent);
248
+ try {
249
+ process.kill(lockInfo.pid, 0);
250
+ return lockInfo;
251
+ }
252
+ catch {
253
+ await fs.unlink(lockFilePath);
254
+ return false;
255
+ }
256
+ }
257
+ catch {
258
+ return false;
259
+ }
260
+ }
261
+ }
38
262
  /**
39
263
  * Singleton Cache Manager with TTL, persistence, and locking
40
264
  *
@@ -51,11 +275,14 @@ const DEFAULT_CONFIG = {
51
275
  */
52
276
  export class CacheManager {
53
277
  static instance = null;
54
- static lockFilePath = null;
55
278
  cache;
56
279
  config;
57
280
  stats;
58
- lockFileHandle = null;
281
+ storage;
282
+ expiryPolicy;
283
+ lockLifecycle;
284
+ keyDerivation;
285
+ serializer;
59
286
  /**
60
287
  * Private constructor - use getInstance() instead
61
288
  * Singleton pattern prevents multiple instances
@@ -63,6 +290,11 @@ export class CacheManager {
63
290
  constructor(config) {
64
291
  this.config = { ...DEFAULT_CONFIG, ...config };
65
292
  this.cache = new Map();
293
+ this.keyDerivation = new CacheKeyDerivation();
294
+ this.serializer = new CacheEntrySerializer();
295
+ this.expiryPolicy = new CacheExpiryPolicy();
296
+ this.storage = new CacheStorage(() => this.config, this.keyDerivation, this.serializer);
297
+ this.lockLifecycle = new CacheLockLifecycle(() => this.config, this.keyDerivation, this.serializer);
66
298
  this.stats = {
67
299
  hits: 0,
68
300
  misses: 0,
@@ -86,11 +318,7 @@ export class CacheManager {
86
318
  * Reset singleton (for testing only)
87
319
  */
88
320
  static resetInstance() {
89
- if (CacheManager.instance?.lockFileHandle) {
90
- void CacheManager.instance.releaseLock();
91
- }
92
321
  CacheManager.instance = null;
93
- CacheManager.lockFilePath = null;
94
322
  }
95
323
  /**
96
324
  * Acquire file lock to prevent concurrent access across processes
@@ -99,81 +327,19 @@ export class CacheManager {
99
327
  * @returns True if lock acquired, false if already locked
100
328
  */
101
329
  async acquireLock(orgAlias) {
102
- if (!this.config.enableLocking) {
103
- return true;
104
- }
105
- try {
106
- const lockDir = path.join(os.tmpdir(), 'sf-smart-deployment-locks');
107
- await fs.mkdir(lockDir, { recursive: true });
108
- const lockFileName = `${orgAlias.replaceAll(/[^\w-]/g, '_')}.lock`;
109
- CacheManager.lockFilePath = path.join(lockDir, lockFileName);
110
- // Try to open lock file exclusively (fails if already locked)
111
- this.lockFileHandle = await fs.open(CacheManager.lockFilePath, 'wx');
112
- // Write process info to lock file
113
- const lockInfo = {
114
- pid: process.pid,
115
- orgAlias,
116
- timestamp: new Date().toISOString(),
117
- hostname: os.hostname(),
118
- };
119
- await this.lockFileHandle.writeFile(JSON.stringify(lockInfo, null, 2));
120
- return true;
121
- }
122
- catch (error) {
123
- // Lock file already exists - another process is running
124
- if (error.code === 'EEXIST') {
125
- return false;
126
- }
127
- // Other errors - log but don't block deployments
128
- logger.warn('Failed to acquire lock, continuing without locking', { error, orgAlias });
129
- return true;
130
- }
330
+ return this.lockLifecycle.acquireLock(orgAlias);
131
331
  }
132
332
  /**
133
333
  * Release file lock
134
334
  */
135
335
  async releaseLock() {
136
- if (!this.lockFileHandle || !CacheManager.lockFilePath) {
137
- return;
138
- }
139
- try {
140
- await this.lockFileHandle.close();
141
- await fs.unlink(CacheManager.lockFilePath);
142
- this.lockFileHandle = null;
143
- CacheManager.lockFilePath = null;
144
- }
145
- catch (error) {
146
- logger.warn('Failed to release lock', { error, lockFilePath: CacheManager.lockFilePath });
147
- }
336
+ await this.lockLifecycle.releaseLock();
148
337
  }
149
338
  /**
150
339
  * Check if another instance is running for the same org
151
340
  */
152
341
  async isLocked(orgAlias) {
153
- if (!this.config.enableLocking) {
154
- return false;
155
- }
156
- try {
157
- const lockDir = path.join(os.tmpdir(), 'sf-smart-deployment-locks');
158
- const lockFileName = `${orgAlias.replaceAll(/[^\w-]/g, '_')}.lock`;
159
- const lockFilePath = path.join(lockDir, lockFileName);
160
- const lockContent = await fs.readFile(lockFilePath, 'utf-8');
161
- const lockInfo = JSON.parse(lockContent);
162
- // Check if process is still running
163
- try {
164
- process.kill(lockInfo.pid, 0); // Signal 0 = check existence
165
- return lockInfo; // Process exists
166
- }
167
- catch {
168
- // Process doesn't exist - stale lock, remove it
169
- await fs.unlink(lockFilePath);
170
- return false;
171
- }
172
- }
173
- catch {
174
- // Lock file doesn't exist
175
- return false;
176
- }
342
+ return this.lockLifecycle.isLocked(orgAlias);
177
343
  }
178
344
  /**
179
345
  * Get value from cache
@@ -181,21 +347,16 @@ export class CacheManager {
181
347
  get(key) {
182
348
  const entry = this.cache.get(key);
183
349
  if (!entry) {
184
- this.stats.misses++;
185
- this.updateHitRate();
350
+ this.recordMiss();
186
351
  return null;
187
352
  }
188
- // Check if expired
189
- if (Date.now() > entry.expiresAt) {
353
+ if (this.expiryPolicy.isExpired(entry)) {
190
354
  this.cache.delete(key);
191
- this.stats.misses++;
192
- this.updateHitRate();
355
+ this.recordMiss();
193
356
  return null;
194
357
  }
195
- // Update hit count
196
358
  entry.hits++;
197
- this.stats.hits++;
198
- this.updateHitRate();
359
+ this.recordHit();
199
360
  return entry.value;
200
361
  }
201
362
  /**
@@ -203,22 +364,14 @@ export class CacheManager {
203
364
  */
204
365
  async set(key, value, ttlMs) {
205
366
  const ttl = ttlMs ?? this.config.ttlMs;
206
- const now = Date.now();
207
- // Evict if at capacity
208
367
  if (this.cache.size >= this.config.maxSize) {
209
368
  this.evictOldest();
210
369
  }
211
- const entry = {
212
- value,
213
- expiresAt: now + ttl,
214
- createdAt: now,
215
- hits: 0,
216
- };
370
+ const entry = this.expiryPolicy.createEntry(value, ttl);
217
371
  this.cache.set(key, entry);
218
372
  this.stats.size = this.cache.size;
219
- // Persist to disk if enabled
220
373
  if (this.config.enablePersistence) {
221
- await this.persistEntry(key, entry);
374
+ await this.storage.persistEntry(key, entry);
222
375
  }
223
376
  }
224
377
  /**
@@ -232,10 +385,10 @@ export class CacheManager {
232
385
  * Delete specific key
233
386
  */
234
387
  async delete(key) {
235
- const deleted = this.cache.delete(key);
388
+ const deleted = this.deleteFromMemory(key).changed;
236
389
  this.stats.size = this.cache.size;
237
390
  if (deleted && this.config.enablePersistence) {
238
- await this.deletePersistedEntry(key);
391
+ await this.storage.deletePersistedEntry(key);
239
392
  }
240
393
  return deleted;
241
394
  }
@@ -247,12 +400,7 @@ export class CacheManager {
247
400
  this.stats.size = 0;
248
401
  this.stats.evictions = 0;
249
402
  if (this.config.enablePersistence && this.config.cacheDirectory) {
250
- try {
251
- await fs.rm(this.config.cacheDirectory, { recursive: true, force: true });
252
- }
253
- catch (error) {
254
- logger.warn('Failed to clear cache directory', { error, cacheDirectory: this.config.cacheDirectory });
255
- }
403
+ await this.storage.clearPersistedCache();
256
404
  }
257
405
  }
258
406
  /**
@@ -270,35 +418,11 @@ export class CacheManager {
270
418
  return 0;
271
419
  }
272
420
  try {
273
- const files = await fs.readdir(this.config.cacheDirectory);
274
- const cacheFiles = files.filter((file) => file.startsWith('cache_'));
275
- // Load all files in parallel
276
- const results = await Promise.all(cacheFiles.map(async (file) => {
277
- try {
278
- const filePath = path.join(this.config.cacheDirectory, file);
279
- const content = await fs.readFile(filePath, 'utf-8');
280
- const entry = JSON.parse(content);
281
- // Skip expired entries
282
- if (Date.now() > entry.expiresAt) {
283
- await fs.unlink(filePath);
284
- return null;
285
- }
286
- // Reconstruct key from filename
287
- const hash = file.replace('cache_', '').replace('.json', '');
288
- return { hash, entry };
289
- }
290
- catch (error) {
291
- logger.warn('Skipping invalid cache file', { error, file });
292
- return null;
293
- }
294
- }));
295
- // Load valid entries into cache
421
+ const results = await this.storage.loadEntriesFromDisk(this.expiryPolicy);
296
422
  let loaded = 0;
297
423
  for (const result of results) {
298
- if (result) {
299
- this.cache.set(result.hash, result.entry);
300
- loaded++;
301
- }
424
+ this.cache.set(result.key, result.entry);
425
+ loaded++;
302
426
  }
303
427
  this.stats.size = this.cache.size;
304
428
  return loaded;
@@ -312,21 +436,10 @@ export class CacheManager {
312
436
  * Clean expired entries (garbage collection)
313
437
  */
314
438
  async cleanExpired() {
315
- const now = Date.now();
316
- const expiredKeys = [];
317
- // Collect expired keys
318
- for (const [key, entry] of this.cache.entries()) {
319
- if (now > entry.expiresAt) {
320
- expiredKeys.push(key);
321
- }
322
- }
323
- // Delete from cache (synchronous)
324
- for (const key of expiredKeys) {
325
- this.cache.delete(key);
326
- }
327
- // Delete persisted entries in parallel
439
+ const expiredKeys = this.expiryPolicy.collectExpiredKeys(this.cache);
440
+ this.deleteManyFromMemory(expiredKeys);
328
441
  if (this.config.enablePersistence && expiredKeys.length > 0) {
329
- await Promise.all(expiredKeys.map((key) => this.deletePersistedEntry(key)));
442
+ await Promise.all(expiredKeys.map(async (key) => this.storage.deletePersistedEntry(key)));
330
443
  }
331
444
  this.stats.size = this.cache.size;
332
445
  return expiredKeys.length;
@@ -353,19 +466,41 @@ export class CacheManager {
353
466
  * Evict oldest entry (LRU-like)
354
467
  */
355
468
  evictOldest() {
356
- let oldestKey = null;
357
- let oldestTime = Infinity;
358
- for (const [key, entry] of this.cache.entries()) {
359
- if (entry.createdAt < oldestTime) {
360
- oldestTime = entry.createdAt;
361
- oldestKey = key;
362
- }
363
- }
469
+ const oldestKey = this.expiryPolicy.selectOldestKey(this.cache);
364
470
  if (oldestKey) {
365
- this.cache.delete(oldestKey);
471
+ this.deleteFromMemory(oldestKey);
366
472
  this.stats.evictions++;
367
473
  }
368
474
  }
475
+ deleteFromMemory(key) {
476
+ const changed = this.cache.delete(key);
477
+ return {
478
+ changed,
479
+ deletedKeys: changed ? [key] : [],
480
+ };
481
+ }
482
+ deleteManyFromMemory(keys) {
483
+ let changed = false;
484
+ const deletedKeys = [];
485
+ for (const key of keys) {
486
+ if (this.cache.delete(key)) {
487
+ changed = true;
488
+ deletedKeys.push(key);
489
+ }
490
+ }
491
+ return {
492
+ changed,
493
+ deletedKeys,
494
+ };
495
+ }
496
+ recordHit() {
497
+ this.stats.hits++;
498
+ this.updateHitRate();
499
+ }
500
+ recordMiss() {
501
+ this.stats.misses++;
502
+ this.updateHitRate();
503
+ }
369
504
  /**
370
505
  * Update hit rate calculation
371
506
  */
@@ -386,39 +521,6 @@ export class CacheManager {
386
521
  }
387
522
  this.stats.memorySizeBytes = totalSize;
388
523
  }
389
- /**
390
- * Persist entry to disk
391
- */
392
- async persistEntry(key, entry) {
393
- if (!this.config.cacheDirectory) {
394
- return;
395
- }
396
- try {
397
- await fs.mkdir(this.config.cacheDirectory, { recursive: true });
398
- const fileName = getCacheFileName(key);
399
- const filePath = path.join(this.config.cacheDirectory, fileName);
400
- await fs.writeFile(filePath, JSON.stringify(entry), 'utf-8');
401
- }
402
- catch (error) {
403
- logger.warn('Failed to persist cache entry', { error, key, cacheDirectory: this.config.cacheDirectory });
404
- }
405
- }
406
- /**
407
- * Delete persisted entry
408
- */
409
- async deletePersistedEntry(key) {
410
- if (!this.config.cacheDirectory) {
411
- return;
412
- }
413
- try {
414
- const fileName = getCacheFileName(key);
415
- const filePath = path.join(this.config.cacheDirectory, fileName);
416
- await fs.unlink(filePath);
417
- }
418
- catch {
419
- // Ignore if file doesn't exist
420
- }
421
- }
422
524
  }
423
525
  /**
424
526
  * Get default cache instance (singleton)
@@ -1 +1 @@
1
- {"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../src/utils/cache-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../src/utils/cache-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB;;;GAGG;AACH,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,CAAC,OAAe,EAAE,OAAiC,EAAQ,EAAE;QACjE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,2BAA2B,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,KAAK,EAAE,CAAC,OAAe,EAAE,OAAiC,EAAQ,EAAE;QAClE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,4BAA4B,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;IACjF,CAAC;CACF,CAAC;AAwCF;;GAEG;AACH,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,SAAS,EAAE,SAAS;IAC3B,iBAAiB,EAAE,KAAK;IACxB,aAAa,EAAE,IAAI;CACpB,CAAC;AAkBF,MAAM,kBAAkB;IACd,MAAM,CAAU,iBAAiB,GAAG,QAAQ,CAAC;IAC7C,MAAM,CAAU,iBAAiB,GAAG,OAAO,CAAC;IAC5C,MAAM,CAAU,mBAAmB,GAAG,2BAA2B,CAAC;IAEnE,mBAAmB,CAAC,GAAW;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3E,OAAO,GAAG,kBAAkB,CAAC,iBAAiB,GAAG,IAAI,GAAG,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;IACjG,CAAC;IAEM,oBAAoB,CAAC,QAAgB;QAC1C,OAAO,CACL,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;YACzD,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CACxD,CAAC;IACJ,CAAC;IAEM,cAAc,CAAC,QAAgB;QACpC,OAAO,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACtH,CAAC;IAEM,kBAAkB,CAAC,QAAgB;QACxC,OAAO,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAEM,oBAAoB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IACxE,CAAC;IAEM,mBAAmB,CAAC,QAAgB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7F,CAAC;;AAGH,MAAM,oBAAoB;IACjB,SAAS,CAAI,KAAoB;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEM,WAAW,CAAC,OAAe;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwB,CAAC;IACpD,CAAC;IAEM,aAAa,CAAC,QAAkB;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEM,eAAe,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;IACzC,CAAC;CACF;AAED,MAAM,iBAAiB;IACd,WAAW,CAAI,KAAQ,EAAE,KAAa,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAC7D,OAAO;YACL,KAAK;YACL,SAAS,EAAE,GAAG,GAAG,KAAK;YACtB,SAAS,EAAE,GAAG;YACd,IAAI,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAEM,SAAS,CAAC,KAA0B,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAC3D,OAAO,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;IAC/B,CAAC;IAEM,kBAAkB,CAAC,KAA+C,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACzF,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEM,eAAe,CAAC,KAA+C;QACpE,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,UAAU,GAAG,QAAQ,CAAC;QAE1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,SAAS,GAAG,UAAU,EAAE,CAAC;gBACjC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC7B,SAAS,GAAG,GAAG,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,MAAM,YAAY;IAEG;IACA;IACA;IAHnB,YACmB,SAA4B,EAC5B,aAAiC,EACjC,UAAgC;QAFhC,cAAS,GAAT,SAAS,CAAmB;QAC5B,kBAAa,GAAb,aAAa,CAAoB;QACjC,eAAU,GAAV,UAAU,CAAsB;IAChD,CAAC;IAEG,KAAK,CAAC,YAAY,CAAI,GAAW,EAAE,KAAoB;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,GAAW;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAC5D,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,YAA+B;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QAE/G,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAiC,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACpF,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAY,EAAE,YAA+B;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAe,EAAE,IAAI,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEnD,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,MAAM,kBAAkB;IAKH;IACA;IACA;IANX,YAAY,GAAkB,IAAI,CAAC;IACnC,cAAc,GAAyB,IAAI,CAAC;IAEpD,YACmB,SAA4B,EAC5B,aAAiC,EACjC,UAAgC;QAFhC,cAAS,GAAT,SAAS,CAAmB;QAC5B,kBAAa,GAAb,aAAa,CAAoB;QACjC,eAAU,GAAV,UAAU,CAAsB;IAChD,CAAC;IAEG,aAAa;QAClB,OAAO,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,QAAgB;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;YAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACrE,IAAI,CAAC,cAAc,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAE7D,MAAM,QAAQ,GAAG;gBACf,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;aACxB,CAAC;YAEF,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACtE,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAE9D,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9B,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,CAAC,QAAQ,GAAwB,IAAI,CAAC;IAE5C,KAAK,CAAmC;IACxC,MAAM,CAAc;IACpB,KAAK,CAAa;IACT,OAAO,CAAe;IACtB,YAAY,CAAoB;IAChC,aAAa,CAAqB;IAClC,aAAa,CAAqB;IAClC,UAAU,CAAuB;IAElD;;;OAGG;IACH,YAAoB,MAA6B;QAC/C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxF,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,CAAC;YACZ,eAAe,EAAE,CAAC;SACnB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,WAAW,CAAC,MAA6B;QACrD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3B,YAAY,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,aAAa;QACzB,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CAAC,QAAgB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,WAAW;QACtB,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,GAAG,CAAI,GAAW;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAA8B,CAAC;QAE/D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,KAAc;QACvD,MAAM,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAA4B,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAElC,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACI,GAAG,CAAC,GAAW;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,KAAK,KAAK,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CAAC,GAAW;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAElC,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAChE,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAClE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1E,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACtG,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,IAAI;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,MAA4B;QAC3C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,GAAW;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO;YACL,OAAO;YACP,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;SAClC,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,IAAuB;QAClD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,IAAI,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO;YACP,WAAW;SACZ,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,iDAAiD;YACjD,SAAS,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;YACtC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,SAAS,IAAI,EAAE,CAAC,CAAC,wBAAwB;QAC3C,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;IACzC,CAAC;;AAGH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,OAAO,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC"}