xypriss-security 1.0.7 → 1.0.8

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 (34) hide show
  1. package/dist/cjs/components/cache/FastLRU.js +323 -0
  2. package/dist/cjs/components/cache/FastLRU.js.map +1 -0
  3. package/dist/cjs/components/cache/UFSIMC.js +1130 -0
  4. package/dist/cjs/components/cache/UFSIMC.js.map +1 -0
  5. package/dist/cjs/components/cache/cacheSys.js +624 -0
  6. package/dist/cjs/components/cache/cacheSys.js.map +1 -0
  7. package/dist/cjs/components/cache/cacheSys.utils.js +137 -0
  8. package/dist/cjs/components/cache/cacheSys.utils.js.map +1 -0
  9. package/dist/cjs/components/cache/config/cache.config.js +39 -0
  10. package/dist/cjs/components/cache/config/cache.config.js.map +1 -0
  11. package/dist/cjs/components/cache/index.js +1356 -0
  12. package/dist/cjs/components/cache/index.js.map +1 -0
  13. package/dist/cjs/components/cache/useCache.js +243 -0
  14. package/dist/cjs/components/cache/useCache.js.map +1 -0
  15. package/dist/cjs/index.js +37 -4
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/esm/components/cache/FastLRU.js +320 -0
  18. package/dist/esm/components/cache/FastLRU.js.map +1 -0
  19. package/dist/esm/components/cache/UFSIMC.js +1108 -0
  20. package/dist/esm/components/cache/UFSIMC.js.map +1 -0
  21. package/dist/esm/components/cache/cacheSys.js +622 -0
  22. package/dist/esm/components/cache/cacheSys.js.map +1 -0
  23. package/dist/esm/components/cache/cacheSys.utils.js +112 -0
  24. package/dist/esm/components/cache/cacheSys.utils.js.map +1 -0
  25. package/dist/esm/components/cache/config/cache.config.js +36 -0
  26. package/dist/esm/components/cache/config/cache.config.js.map +1 -0
  27. package/dist/esm/components/cache/index.js +1329 -0
  28. package/dist/esm/components/cache/index.js.map +1 -0
  29. package/dist/esm/components/cache/useCache.js +240 -0
  30. package/dist/esm/components/cache/useCache.js.map +1 -0
  31. package/dist/esm/index.js +5 -0
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/index.d.ts +3283 -13
  34. package/package.json +1 -1
@@ -0,0 +1,323 @@
1
+ 'use strict';
2
+
3
+ // LRU Node with better type safety and additional metadata
4
+ class LRUNode {
5
+ constructor(key, entry) {
6
+ this.prev = null;
7
+ this.next = null;
8
+ this.accessCount = 0;
9
+ this.key = key;
10
+ this.entry = entry;
11
+ this.createdAt = Date.now();
12
+ this.lastAccessed = this.createdAt;
13
+ }
14
+ updateAccess() {
15
+ this.lastAccessed = Date.now();
16
+ this.accessCount++;
17
+ }
18
+ }
19
+ // Performance-optimized and feature-rich LRU Cache
20
+ class FastLRU {
21
+ constructor(config) {
22
+ this.size = 0;
23
+ this.map = new Map();
24
+ // Statistics tracking
25
+ this.stats = {
26
+ hits: 0,
27
+ misses: 0,
28
+ evictions: 0,
29
+ totalAccesses: 0,
30
+ };
31
+ // Support both old constructor signature and new config object
32
+ if (typeof config === "number") {
33
+ this.capacity = config;
34
+ this.enableStats = false;
35
+ }
36
+ else {
37
+ this.capacity = config.capacity;
38
+ this.ttl = config.ttl;
39
+ this.enableStats = config.enableStats ?? false;
40
+ this.onEvict = config.onEvict;
41
+ }
42
+ // Initialize sentinel nodes
43
+ this.head = new LRUNode("__HEAD__", null);
44
+ this.tail = new LRUNode("__TAIL__", null);
45
+ this.head.next = this.tail;
46
+ this.tail.prev = this.head;
47
+ // Setup TTL cleanup if enabled
48
+ if (this.ttl) {
49
+ this.setupTTLCleanup();
50
+ }
51
+ }
52
+ get(key) {
53
+ if (this.enableStats) {
54
+ this.stats.totalAccesses++;
55
+ }
56
+ const node = this.map.get(key);
57
+ if (!node) {
58
+ if (this.enableStats)
59
+ this.stats.misses++;
60
+ return undefined;
61
+ }
62
+ // Check TTL expiration
63
+ if (this.ttl && this.isExpired(node)) {
64
+ this.delete(key);
65
+ if (this.enableStats)
66
+ this.stats.misses++;
67
+ return undefined;
68
+ }
69
+ // Update access tracking
70
+ node.updateAccess();
71
+ this.moveToHead(node);
72
+ if (this.enableStats)
73
+ this.stats.hits++;
74
+ return node.entry;
75
+ }
76
+ put(key, entry) {
77
+ const existingNode = this.map.get(key);
78
+ if (existingNode) {
79
+ // Update existing entry
80
+ existingNode.entry = entry;
81
+ existingNode.updateAccess();
82
+ this.moveToHead(existingNode);
83
+ return null;
84
+ }
85
+ // Create new node
86
+ const newNode = new LRUNode(key, entry);
87
+ this.map.set(key, newNode);
88
+ this.addToHead(newNode);
89
+ this.size++;
90
+ // Handle capacity overflow
91
+ if (this.size > this.capacity) {
92
+ const evicted = this.removeTail();
93
+ if (evicted) {
94
+ this.map.delete(evicted.key);
95
+ this.size--;
96
+ if (this.enableStats)
97
+ this.stats.evictions++;
98
+ if (this.onEvict && evicted.entry) {
99
+ this.onEvict(evicted.key, evicted.entry);
100
+ }
101
+ return evicted.entry;
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ has(key) {
107
+ const node = this.map.get(key);
108
+ if (!node)
109
+ return false;
110
+ // Check TTL without updating access
111
+ if (this.ttl && this.isExpired(node)) {
112
+ this.delete(key);
113
+ return false;
114
+ }
115
+ return true;
116
+ }
117
+ peek(key) {
118
+ // Get without updating LRU order
119
+ const node = this.map.get(key);
120
+ if (!node)
121
+ return undefined;
122
+ if (this.ttl && this.isExpired(node)) {
123
+ this.delete(key);
124
+ return undefined;
125
+ }
126
+ return node.entry;
127
+ }
128
+ delete(key) {
129
+ const node = this.map.get(key);
130
+ if (!node)
131
+ return false;
132
+ this.removeNode(node);
133
+ this.map.delete(key);
134
+ this.size--;
135
+ if (this.onEvict && node.entry) {
136
+ this.onEvict(node.key, node.entry);
137
+ }
138
+ return true;
139
+ }
140
+ clear() {
141
+ if (this.onEvict) {
142
+ // Call onEvict for all entries being cleared
143
+ for (const [key, node] of this.map) {
144
+ if (node.entry) {
145
+ this.onEvict(key, node.entry);
146
+ }
147
+ }
148
+ }
149
+ this.map.clear();
150
+ this.size = 0;
151
+ this.head.next = this.tail;
152
+ this.tail.prev = this.head;
153
+ // Reset stats
154
+ if (this.enableStats) {
155
+ this.stats = { hits: 0, misses: 0, evictions: 0, totalAccesses: 0 };
156
+ }
157
+ }
158
+ // iteration methods
159
+ keys() {
160
+ return this.map.keys();
161
+ }
162
+ values() {
163
+ const values = [];
164
+ for (const node of this.map.values()) {
165
+ if (node.entry !== null) {
166
+ values.push(node.entry);
167
+ }
168
+ }
169
+ return values[Symbol.iterator]();
170
+ }
171
+ entries() {
172
+ const entries = [];
173
+ for (const [key, node] of this.map) {
174
+ if (node.entry !== null) {
175
+ entries.push([key, node.entry]);
176
+ }
177
+ }
178
+ return entries[Symbol.iterator]();
179
+ }
180
+ // Get all keys as array (for compatibility)
181
+ getKeys() {
182
+ return Array.from(this.map.keys());
183
+ }
184
+ // Get keys in LRU order (most recent first)
185
+ getKeysInOrder() {
186
+ const keys = [];
187
+ let current = this.head.next;
188
+ while (current && current !== this.tail) {
189
+ keys.push(current.key);
190
+ current = current.next;
191
+ }
192
+ return keys;
193
+ }
194
+ // Get internal node (for compatibility with UFSIMC)
195
+ getNode(key) {
196
+ const node = this.map.get(key);
197
+ if (!node || !node.entry)
198
+ return null;
199
+ // Check TTL expiration
200
+ if (this.ttl && this.isExpired(node)) {
201
+ this.delete(key);
202
+ return null;
203
+ }
204
+ return {
205
+ entry: node.entry,
206
+ key: node.key,
207
+ };
208
+ }
209
+ // Get least recently used entries
210
+ getLRUEntries(count) {
211
+ const entries = [];
212
+ let current = this.tail.prev;
213
+ let collected = 0;
214
+ while (current && current !== this.head && collected < count) {
215
+ if (current.entry !== null) {
216
+ entries.push({
217
+ key: current.key,
218
+ entry: current.entry,
219
+ lastAccessed: current.lastAccessed,
220
+ });
221
+ collected++;
222
+ }
223
+ current = current.prev;
224
+ }
225
+ return entries;
226
+ }
227
+ getSize() {
228
+ return this.size;
229
+ }
230
+ getCapacity() {
231
+ return this.capacity;
232
+ }
233
+ // Get comprehensive cache statistics
234
+ getStats() {
235
+ if (!this.enableStats) {
236
+ throw new Error("Statistics are not enabled. Enable stats in constructor config.");
237
+ }
238
+ const memoryUsage = this.getMemoryUsage();
239
+ return {
240
+ ...this.stats,
241
+ hitRate: this.stats.totalAccesses > 0
242
+ ? this.stats.hits / this.stats.totalAccesses
243
+ : 0,
244
+ size: this.size,
245
+ capacity: this.capacity,
246
+ totalSize: memoryUsage.bytes,
247
+ entryCount: this.size,
248
+ memoryUsage: {
249
+ used: memoryUsage.bytes,
250
+ limit: this.capacity * 1000, // Rough estimate
251
+ percentage: this.capacity > 0 ? (this.size / this.capacity) * 100 : 0,
252
+ },
253
+ };
254
+ }
255
+ // Memory usage estimation
256
+ getMemoryUsage() {
257
+ // Rough estimation - actual memory usage depends on entry content
258
+ const nodeOverhead = 120; // Approximate bytes per node
259
+ const mapOverhead = 24; // Approximate bytes per map entry
260
+ return {
261
+ approximate: true,
262
+ bytes: this.size * (nodeOverhead + mapOverhead),
263
+ };
264
+ }
265
+ // Cleanup and resource management
266
+ destroy() {
267
+ if (this.cleanupTimer) {
268
+ clearInterval(this.cleanupTimer);
269
+ }
270
+ this.clear();
271
+ }
272
+ // Private helper methods
273
+ addToHead(node) {
274
+ node.prev = this.head;
275
+ node.next = this.head.next;
276
+ if (this.head.next) {
277
+ this.head.next.prev = node;
278
+ }
279
+ this.head.next = node;
280
+ }
281
+ removeNode(node) {
282
+ if (node.prev)
283
+ node.prev.next = node.next;
284
+ if (node.next)
285
+ node.next.prev = node.prev;
286
+ }
287
+ moveToHead(node) {
288
+ this.removeNode(node);
289
+ this.addToHead(node);
290
+ }
291
+ removeTail() {
292
+ const lastNode = this.tail.prev;
293
+ if (lastNode && lastNode !== this.head) {
294
+ this.removeNode(lastNode);
295
+ return lastNode;
296
+ }
297
+ return null;
298
+ }
299
+ isExpired(node) {
300
+ if (!this.ttl)
301
+ return false;
302
+ return Date.now() - node.createdAt > this.ttl;
303
+ }
304
+ setupTTLCleanup() {
305
+ const cleanupInterval = Math.min(this.ttl / 4, 60000); // Cleanup every 1/4 TTL or 1 minute, whichever is smaller
306
+ this.cleanupTimer = setInterval(() => {
307
+ const now = Date.now();
308
+ const keysToDelete = [];
309
+ for (const [key, node] of this.map) {
310
+ if (now - node.createdAt > this.ttl) {
311
+ keysToDelete.push(key);
312
+ }
313
+ }
314
+ for (const key of keysToDelete) {
315
+ this.delete(key);
316
+ }
317
+ }, cleanupInterval);
318
+ }
319
+ }
320
+
321
+ exports.FastLRU = FastLRU;
322
+ exports.LRUNode = LRUNode;
323
+ //# sourceMappingURL=FastLRU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FastLRU.js","sources":["../../../../src/components/cache/FastLRU.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;AACA,MAAM,OAAO,CAAA;IAST,WAAY,CAAA,GAAW,EAAE,KAAe,EAAA;QANxC,IAAI,CAAA,IAAA,GAAsB,IAAI,CAAC;QAC/B,IAAI,CAAA,IAAA,GAAsB,IAAI,CAAC;QAC/B,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;AAKpB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;KACtC;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;AACJ,CAAA;AAED;MACa,OAAO,CAAA;AAsBhB,IAAA,WAAA,CAAY,MAA8B,EAAA;QAhBlC,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;AAGT,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;;AAGpC,QAAA,IAAA,CAAA,KAAK,GAAG;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,aAAa,EAAE,CAAC;SACnB,CAAC;;AAOE,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC5B;aAAM;AACH,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;AAC/C,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;SACjC;;QAGD,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAI,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAI,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;;AAG3B,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,eAAe,EAAE,CAAC;SAC1B;KACJ;AAED,IAAA,GAAG,CAAC,GAAW,EAAA;AACX,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;SAC9B;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,IAAI,CAAC,WAAW;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC1C,YAAA,OAAO,SAAS,CAAC;SACpB;;QAGD,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,WAAW;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC1C,YAAA,OAAO,SAAS,CAAC;SACpB;;QAGD,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,KAAU,CAAC;KAC1B;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ,EAAA;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,YAAY,EAAE;;AAEd,YAAA,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;YAC3B,YAAY,CAAC,YAAY,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC9B,YAAA,OAAO,IAAI,CAAC;SACf;;QAGD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;;QAGZ,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEZ,IAAI,IAAI,CAAC,WAAW;AAAE,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE;oBAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC5C;gBAED,OAAO,OAAO,CAAC,KAAK,CAAC;aACxB;SACJ;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,GAAG,CAAC,GAAW,EAAA;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;;QAGxB,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjB,YAAA,OAAO,KAAK,CAAC;SAChB;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,IAAI,CAAC,GAAW,EAAA;;QAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS,CAAC;QAE5B,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjB,YAAA,OAAO,SAAS,CAAC;SACpB;QAED,OAAO,IAAI,CAAC,KAAU,CAAC;KAC1B;AAED,IAAA,MAAM,CAAC,GAAW,EAAA;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;AAExB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACtC;AAED,QAAA,OAAO,IAAI,CAAC;KACf;IAED,KAAK,GAAA;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;YAEd,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;AAChC,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBACjC;aACJ;SACJ;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;;AAG3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;SACvE;KACJ;;IAGD,IAAI,GAAA;AACA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;KAC1B;IAED,MAAM,GAAA;QACF,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE;AAClC,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACrB,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC3B;SACJ;AACD,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;KACpC;IAED,OAAO,GAAA;QACH,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;AAChC,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;gBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACnC;SACJ;AACD,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;KACrC;;IAGD,OAAO,GAAA;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;KACtC;;IAGD,cAAc,GAAA;QACV,MAAM,IAAI,GAAa,EAAE,CAAC;AAC1B,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAE7B,OAAO,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,EAAE;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,YAAA,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;SAC1B;AAED,QAAA,OAAO,IAAI,CAAC;KACf;;AAGD,IAAA,OAAO,CAAC,GAAW,EAAA;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;;QAGtC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjB,YAAA,OAAO,IAAI,CAAC;SACf;QAED,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;SAChB,CAAC;KACL;;AAGD,IAAA,aAAa,CACT,KAAa,EAAA;QAEb,MAAM,OAAO,GACT,EAAE,CAAC;AACP,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,QAAA,OAAO,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,IAAI,SAAS,GAAG,KAAK,EAAE;AAC1D,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE;gBACxB,OAAO,CAAC,IAAI,CAAC;oBACT,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,YAAY,EAAE,OAAO,CAAC,YAAY;AACrC,iBAAA,CAAC,CAAC;AACH,gBAAA,SAAS,EAAE,CAAC;aACf;AACD,YAAA,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;SAC1B;AAED,QAAA,OAAO,OAAO,CAAC;KAClB;IAED,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;IAED,WAAW,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;;IAGD,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CACX,iEAAiE,CACpE,CAAC;SACL;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,OAAO;YACH,GAAG,IAAI,CAAC,KAAK;AACb,YAAA,OAAO,EACH,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC;kBACtB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;AAC5C,kBAAE,CAAC;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,WAAW,CAAC,KAAK;YAC5B,UAAU,EAAE,IAAI,CAAC,IAAI;AACrB,YAAA,WAAW,EAAE;gBACT,IAAI,EAAE,WAAW,CAAC,KAAK;AACvB,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;gBAC3B,UAAU,EACN,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC;AAChE,aAAA;SACJ,CAAC;KACL;;IAGD,cAAc,GAAA;;AAEV,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,QAAA,MAAM,WAAW,GAAG,EAAE,CAAC;QAEvB,OAAO;AACH,YAAA,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,YAAY,GAAG,WAAW,CAAC;SAClD,CAAC;KACL;;IAGD,OAAO,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;KAChB;;AAGO,IAAA,SAAS,CAAC,IAAgB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SAC9B;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACzB;AAEO,IAAA,UAAU,CAAC,IAAgB,EAAA;QAC/B,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KAC7C;AAEO,IAAA,UAAU,CAAC,IAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACxB;IAEO,UAAU,GAAA;AACd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1B,YAAA,OAAO,QAAQ,CAAC;SACnB;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAEO,IAAA,SAAS,CAAC,IAAgB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;KACjD;IAEO,eAAe,GAAA;AACnB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAEvD,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAK;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,YAAY,GAAa,EAAE,CAAC;YAElC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;gBAChC,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAI,EAAE;AAClC,oBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC1B;aACJ;AAED,YAAA,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;SACJ,EAAE,eAAe,CAAC,CAAC;KACvB;AACJ;;;;;"}