@blockrun/clawrouter 0.12.95 → 0.12.97

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 (282) hide show
  1. package/dist/auth.d.ts +82 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +388 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/balance.d.ts +97 -0
  6. package/dist/balance.d.ts.map +1 -0
  7. package/dist/balance.js +157 -0
  8. package/dist/balance.js.map +1 -0
  9. package/dist/cli.d.ts +15 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +256 -54994
  12. package/dist/cli.js.map +1 -1
  13. package/dist/compression/codebook.d.ts +24 -0
  14. package/dist/compression/codebook.d.ts.map +1 -0
  15. package/dist/compression/codebook.js +119 -0
  16. package/dist/compression/codebook.js.map +1 -0
  17. package/dist/compression/index.d.ts +33 -0
  18. package/dist/compression/index.d.ts.map +1 -0
  19. package/dist/compression/index.js +246 -0
  20. package/dist/compression/index.js.map +1 -0
  21. package/dist/compression/layers/deduplication.d.ts +28 -0
  22. package/dist/compression/layers/deduplication.d.ts.map +1 -0
  23. package/dist/compression/layers/deduplication.js +101 -0
  24. package/dist/compression/layers/deduplication.js.map +1 -0
  25. package/dist/compression/layers/dictionary.d.ts +21 -0
  26. package/dist/compression/layers/dictionary.d.ts.map +1 -0
  27. package/dist/compression/layers/dictionary.js +73 -0
  28. package/dist/compression/layers/dictionary.js.map +1 -0
  29. package/dist/compression/layers/dynamic-codebook.d.ts +26 -0
  30. package/dist/compression/layers/dynamic-codebook.d.ts.map +1 -0
  31. package/dist/compression/layers/dynamic-codebook.js +149 -0
  32. package/dist/compression/layers/dynamic-codebook.js.map +1 -0
  33. package/dist/compression/layers/json-compact.d.ts +23 -0
  34. package/dist/compression/layers/json-compact.d.ts.map +1 -0
  35. package/dist/compression/layers/json-compact.js +79 -0
  36. package/dist/compression/layers/json-compact.js.map +1 -0
  37. package/dist/compression/layers/observation.d.ts +21 -0
  38. package/dist/compression/layers/observation.d.ts.map +1 -0
  39. package/dist/compression/layers/observation.js +130 -0
  40. package/dist/compression/layers/observation.js.map +1 -0
  41. package/dist/compression/layers/paths.d.ts +24 -0
  42. package/dist/compression/layers/paths.d.ts.map +1 -0
  43. package/dist/compression/layers/paths.js +110 -0
  44. package/dist/compression/layers/paths.js.map +1 -0
  45. package/dist/compression/layers/whitespace.d.ts +27 -0
  46. package/dist/compression/layers/whitespace.d.ts.map +1 -0
  47. package/dist/compression/layers/whitespace.js +60 -0
  48. package/dist/compression/layers/whitespace.js.map +1 -0
  49. package/dist/compression/types.d.ts +84 -0
  50. package/dist/compression/types.d.ts.map +1 -0
  51. package/dist/compression/types.js +27 -0
  52. package/dist/compression/types.js.map +1 -0
  53. package/dist/config.d.ts +12 -0
  54. package/dist/config.d.ts.map +1 -0
  55. package/dist/config.js +22 -0
  56. package/dist/config.js.map +1 -0
  57. package/dist/dedup.d.ts +34 -0
  58. package/dist/dedup.d.ts.map +1 -0
  59. package/dist/dedup.js +150 -0
  60. package/dist/dedup.js.map +1 -0
  61. package/dist/doctor.d.ts +8 -0
  62. package/dist/doctor.d.ts.map +1 -0
  63. package/dist/doctor.js +375 -0
  64. package/dist/doctor.js.map +1 -0
  65. package/dist/error-classification.test.d.ts +2 -0
  66. package/dist/error-classification.test.d.ts.map +1 -0
  67. package/dist/error-classification.test.js +59 -0
  68. package/dist/error-classification.test.js.map +1 -0
  69. package/dist/errors.d.ts +54 -0
  70. package/dist/errors.d.ts.map +1 -0
  71. package/dist/errors.js +85 -0
  72. package/dist/errors.js.map +1 -0
  73. package/dist/exclude-models.d.ts +28 -0
  74. package/dist/exclude-models.d.ts.map +1 -0
  75. package/dist/exclude-models.integration.test.d.ts +2 -0
  76. package/dist/exclude-models.integration.test.d.ts.map +1 -0
  77. package/dist/exclude-models.integration.test.js +46 -0
  78. package/dist/exclude-models.integration.test.js.map +1 -0
  79. package/dist/exclude-models.js +70 -0
  80. package/dist/exclude-models.js.map +1 -0
  81. package/dist/exclude-models.test.d.ts +5 -0
  82. package/dist/exclude-models.test.d.ts.map +1 -0
  83. package/dist/exclude-models.test.js +95 -0
  84. package/dist/exclude-models.test.js.map +1 -0
  85. package/dist/fs-read.d.ts +11 -0
  86. package/dist/fs-read.d.ts.map +1 -0
  87. package/dist/fs-read.js +47 -0
  88. package/dist/fs-read.js.map +1 -0
  89. package/dist/index.d.ts +34 -1368
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +1071 -56194
  92. package/dist/index.js.map +1 -1
  93. package/dist/journal.d.ts +67 -0
  94. package/dist/journal.d.ts.map +1 -0
  95. package/dist/journal.js +184 -0
  96. package/dist/journal.js.map +1 -0
  97. package/dist/journal.test.d.ts +2 -0
  98. package/dist/journal.test.d.ts.map +1 -0
  99. package/dist/journal.test.js +201 -0
  100. package/dist/journal.test.js.map +1 -0
  101. package/dist/logger.d.ts +33 -0
  102. package/dist/logger.d.ts.map +1 -0
  103. package/dist/logger.js +35 -0
  104. package/dist/logger.js.map +1 -0
  105. package/dist/models.d.ts +107 -0
  106. package/dist/models.d.ts.map +1 -0
  107. package/dist/models.js +941 -0
  108. package/dist/models.js.map +1 -0
  109. package/dist/models.test.d.ts +2 -0
  110. package/dist/models.test.d.ts.map +1 -0
  111. package/dist/models.test.js +38 -0
  112. package/dist/models.test.js.map +1 -0
  113. package/dist/partners/index.d.ts +8 -0
  114. package/dist/partners/index.d.ts.map +1 -0
  115. package/dist/partners/index.js +6 -0
  116. package/dist/partners/index.js.map +1 -0
  117. package/dist/partners/registry.d.ts +51 -0
  118. package/dist/partners/registry.d.ts.map +1 -0
  119. package/dist/partners/registry.js +256 -0
  120. package/dist/partners/registry.js.map +1 -0
  121. package/dist/partners/tools.d.ts +24 -0
  122. package/dist/partners/tools.d.ts.map +1 -0
  123. package/dist/partners/tools.js +97 -0
  124. package/dist/partners/tools.js.map +1 -0
  125. package/dist/payment-preauth.d.ts +17 -0
  126. package/dist/payment-preauth.d.ts.map +1 -0
  127. package/dist/payment-preauth.js +102 -0
  128. package/dist/payment-preauth.js.map +1 -0
  129. package/dist/provider.d.ts +19 -0
  130. package/dist/provider.d.ts.map +1 -0
  131. package/dist/provider.js +45 -0
  132. package/dist/provider.js.map +1 -0
  133. package/dist/proxy.d.ts +210 -0
  134. package/dist/proxy.d.ts.map +1 -0
  135. package/dist/proxy.debrand.test.d.ts +2 -0
  136. package/dist/proxy.debrand.test.d.ts.map +1 -0
  137. package/dist/proxy.debrand.test.js +101 -0
  138. package/dist/proxy.debrand.test.js.map +1 -0
  139. package/dist/proxy.degraded-response.test.d.ts +2 -0
  140. package/dist/proxy.degraded-response.test.d.ts.map +1 -0
  141. package/dist/proxy.degraded-response.test.js +105 -0
  142. package/dist/proxy.degraded-response.test.js.map +1 -0
  143. package/dist/proxy.image-download.test.d.ts +2 -0
  144. package/dist/proxy.image-download.test.d.ts.map +1 -0
  145. package/dist/proxy.image-download.test.js +92 -0
  146. package/dist/proxy.image-download.test.js.map +1 -0
  147. package/dist/proxy.js +3810 -0
  148. package/dist/proxy.js.map +1 -0
  149. package/dist/proxy.models-endpoint.test.d.ts +2 -0
  150. package/dist/proxy.models-endpoint.test.d.ts.map +1 -0
  151. package/dist/proxy.models-endpoint.test.js +19 -0
  152. package/dist/proxy.models-endpoint.test.js.map +1 -0
  153. package/dist/proxy.multiturn-thinking.test.d.ts +2 -0
  154. package/dist/proxy.multiturn-thinking.test.d.ts.map +1 -0
  155. package/dist/proxy.multiturn-thinking.test.js +82 -0
  156. package/dist/proxy.multiturn-thinking.test.js.map +1 -0
  157. package/dist/proxy.payment-chain-reuse.test.d.ts +2 -0
  158. package/dist/proxy.payment-chain-reuse.test.d.ts.map +1 -0
  159. package/dist/proxy.payment-chain-reuse.test.js +30 -0
  160. package/dist/proxy.payment-chain-reuse.test.js.map +1 -0
  161. package/dist/proxy.solana-resilience.test.d.ts +12 -0
  162. package/dist/proxy.solana-resilience.test.d.ts.map +1 -0
  163. package/dist/proxy.solana-resilience.test.js +39 -0
  164. package/dist/proxy.solana-resilience.test.js.map +1 -0
  165. package/dist/report.d.ts +6 -0
  166. package/dist/report.d.ts.map +1 -0
  167. package/dist/report.js +44 -0
  168. package/dist/report.js.map +1 -0
  169. package/dist/response-cache.advanced.test.d.ts +2 -0
  170. package/dist/response-cache.advanced.test.d.ts.map +1 -0
  171. package/dist/response-cache.advanced.test.js +566 -0
  172. package/dist/response-cache.advanced.test.js.map +1 -0
  173. package/dist/response-cache.d.ts +85 -0
  174. package/dist/response-cache.d.ts.map +1 -0
  175. package/dist/response-cache.edge-cases.test.d.ts +2 -0
  176. package/dist/response-cache.edge-cases.test.d.ts.map +1 -0
  177. package/dist/response-cache.edge-cases.test.js +488 -0
  178. package/dist/response-cache.edge-cases.test.js.map +1 -0
  179. package/dist/response-cache.extreme.test.d.ts +2 -0
  180. package/dist/response-cache.extreme.test.d.ts.map +1 -0
  181. package/dist/response-cache.extreme.test.js +561 -0
  182. package/dist/response-cache.extreme.test.js.map +1 -0
  183. package/dist/response-cache.js +240 -0
  184. package/dist/response-cache.js.map +1 -0
  185. package/dist/response-cache.test.d.ts +2 -0
  186. package/dist/response-cache.test.d.ts.map +1 -0
  187. package/dist/response-cache.test.js +242 -0
  188. package/dist/response-cache.test.js.map +1 -0
  189. package/dist/retry.d.ts +42 -0
  190. package/dist/retry.d.ts.map +1 -0
  191. package/dist/retry.js +99 -0
  192. package/dist/retry.js.map +1 -0
  193. package/dist/router/config.d.ts +11 -0
  194. package/dist/router/config.d.ts.map +1 -0
  195. package/dist/router/config.js +1215 -0
  196. package/dist/router/config.js.map +1 -0
  197. package/dist/router/index.d.ts +18 -0
  198. package/dist/router/index.d.ts.map +1 -0
  199. package/dist/router/index.js +19 -0
  200. package/dist/router/index.js.map +1 -0
  201. package/dist/router/llm-classifier.d.ts +29 -0
  202. package/dist/router/llm-classifier.d.ts.map +1 -0
  203. package/dist/router/llm-classifier.js +99 -0
  204. package/dist/router/llm-classifier.js.map +1 -0
  205. package/dist/router/rules.d.ts +12 -0
  206. package/dist/router/rules.d.ts.map +1 -0
  207. package/dist/router/rules.js +202 -0
  208. package/dist/router/rules.js.map +1 -0
  209. package/dist/router/selector.d.ts +58 -0
  210. package/dist/router/selector.d.ts.map +1 -0
  211. package/dist/router/selector.js +165 -0
  212. package/dist/router/selector.js.map +1 -0
  213. package/dist/router/selector.test.d.ts +2 -0
  214. package/dist/router/selector.test.d.ts.map +1 -0
  215. package/dist/router/selector.test.js +67 -0
  216. package/dist/router/selector.test.js.map +1 -0
  217. package/dist/router/strategy.d.ts +19 -0
  218. package/dist/router/strategy.d.ts.map +1 -0
  219. package/dist/router/strategy.js +138 -0
  220. package/dist/router/strategy.js.map +1 -0
  221. package/dist/router/strategy.test.d.ts +2 -0
  222. package/dist/router/strategy.test.d.ts.map +1 -0
  223. package/dist/router/strategy.test.js +131 -0
  224. package/dist/router/strategy.test.js.map +1 -0
  225. package/dist/router/types.d.ts +127 -0
  226. package/dist/router/types.d.ts.map +1 -0
  227. package/dist/router/types.js +11 -0
  228. package/dist/router/types.js.map +1 -0
  229. package/dist/session.d.ts +124 -0
  230. package/dist/session.d.ts.map +1 -0
  231. package/dist/session.js +256 -0
  232. package/dist/session.js.map +1 -0
  233. package/dist/session.test.d.ts +2 -0
  234. package/dist/session.test.d.ts.map +1 -0
  235. package/dist/session.test.js +163 -0
  236. package/dist/session.test.js.map +1 -0
  237. package/dist/solana-balance.d.ts +48 -0
  238. package/dist/solana-balance.d.ts.map +1 -0
  239. package/dist/solana-balance.js +142 -0
  240. package/dist/solana-balance.js.map +1 -0
  241. package/dist/spend-control.d.ts +112 -0
  242. package/dist/spend-control.d.ts.map +1 -0
  243. package/dist/spend-control.js +278 -0
  244. package/dist/spend-control.js.map +1 -0
  245. package/dist/spend-control.test.d.ts +5 -0
  246. package/dist/spend-control.test.d.ts.map +1 -0
  247. package/dist/spend-control.test.js +210 -0
  248. package/dist/spend-control.test.js.map +1 -0
  249. package/dist/stats.d.ts +64 -0
  250. package/dist/stats.d.ts.map +1 -0
  251. package/dist/stats.js +295 -0
  252. package/dist/stats.js.map +1 -0
  253. package/dist/types.d.ts +150 -0
  254. package/dist/types.d.ts.map +1 -0
  255. package/dist/types.js +9 -0
  256. package/dist/types.js.map +1 -0
  257. package/dist/update-hint.test.d.ts +9 -0
  258. package/dist/update-hint.test.d.ts.map +1 -0
  259. package/dist/update-hint.test.js +156 -0
  260. package/dist/update-hint.test.js.map +1 -0
  261. package/dist/updater.d.ts +10 -0
  262. package/dist/updater.d.ts.map +1 -0
  263. package/dist/updater.js +55 -0
  264. package/dist/updater.js.map +1 -0
  265. package/dist/version.d.ts +3 -0
  266. package/dist/version.d.ts.map +1 -0
  267. package/dist/version.js +16 -0
  268. package/dist/version.js.map +1 -0
  269. package/dist/wallet.d.ts +52 -0
  270. package/dist/wallet.d.ts.map +1 -0
  271. package/dist/wallet.js +93 -0
  272. package/dist/wallet.js.map +1 -0
  273. package/dist/wallet.test.d.ts +6 -0
  274. package/dist/wallet.test.d.ts.map +1 -0
  275. package/dist/wallet.test.js +117 -0
  276. package/dist/wallet.test.js.map +1 -0
  277. package/dist/x402-sdk.test.d.ts +6 -0
  278. package/dist/x402-sdk.test.d.ts.map +1 -0
  279. package/dist/x402-sdk.test.js +161 -0
  280. package/dist/x402-sdk.test.js.map +1 -0
  281. package/package.json +1 -1
  282. package/scripts/e2e-multiturn.mjs +4 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-cache.advanced.test.d.ts","sourceRoot":"","sources":["../src/response-cache.advanced.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,566 @@
1
+ import { describe, it, expect, beforeEach, vi } from "vitest";
2
+ import { ResponseCache } from "./response-cache.js";
3
+ describe("ResponseCache Advanced Edge Cases", () => {
4
+ let cache;
5
+ beforeEach(() => {
6
+ cache = new ResponseCache();
7
+ });
8
+ describe("OpenAI API request variations", () => {
9
+ it("should differentiate requests with different temperature", () => {
10
+ const body1 = JSON.stringify({
11
+ model: "gpt-4",
12
+ messages: [{ role: "user", content: "hello" }],
13
+ temperature: 0.7,
14
+ });
15
+ const body2 = JSON.stringify({
16
+ model: "gpt-4",
17
+ messages: [{ role: "user", content: "hello" }],
18
+ temperature: 0.9,
19
+ });
20
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
21
+ });
22
+ it("should differentiate requests with different max_tokens", () => {
23
+ const body1 = JSON.stringify({
24
+ model: "gpt-4",
25
+ messages: [{ role: "user", content: "hello" }],
26
+ max_tokens: 100,
27
+ });
28
+ const body2 = JSON.stringify({
29
+ model: "gpt-4",
30
+ messages: [{ role: "user", content: "hello" }],
31
+ max_tokens: 200,
32
+ });
33
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
34
+ });
35
+ it("should differentiate requests with different seed", () => {
36
+ const body1 = JSON.stringify({
37
+ model: "gpt-4",
38
+ messages: [{ role: "user", content: "hello" }],
39
+ seed: 12345,
40
+ });
41
+ const body2 = JSON.stringify({
42
+ model: "gpt-4",
43
+ messages: [{ role: "user", content: "hello" }],
44
+ seed: 67890,
45
+ });
46
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
47
+ });
48
+ it("should differentiate requests with different system messages", () => {
49
+ const body1 = JSON.stringify({
50
+ model: "gpt-4",
51
+ messages: [
52
+ { role: "system", content: "You are a helpful assistant" },
53
+ { role: "user", content: "hello" },
54
+ ],
55
+ });
56
+ const body2 = JSON.stringify({
57
+ model: "gpt-4",
58
+ messages: [
59
+ { role: "system", content: "You are a coding assistant" },
60
+ { role: "user", content: "hello" },
61
+ ],
62
+ });
63
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
64
+ });
65
+ it("should differentiate requests with tools", () => {
66
+ const body1 = JSON.stringify({
67
+ model: "gpt-4",
68
+ messages: [{ role: "user", content: "hello" }],
69
+ tools: [{ type: "function", function: { name: "get_weather" } }],
70
+ });
71
+ const body2 = JSON.stringify({
72
+ model: "gpt-4",
73
+ messages: [{ role: "user", content: "hello" }],
74
+ tools: [{ type: "function", function: { name: "search" } }],
75
+ });
76
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
77
+ });
78
+ it("should differentiate requests with response_format", () => {
79
+ const body1 = JSON.stringify({
80
+ model: "gpt-4",
81
+ messages: [{ role: "user", content: "hello" }],
82
+ response_format: { type: "json_object" },
83
+ });
84
+ const body2 = JSON.stringify({
85
+ model: "gpt-4",
86
+ messages: [{ role: "user", content: "hello" }],
87
+ response_format: { type: "text" },
88
+ });
89
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
90
+ });
91
+ it("should handle multi-turn conversations", () => {
92
+ const body = JSON.stringify({
93
+ model: "gpt-4",
94
+ messages: [
95
+ { role: "system", content: "You are helpful" },
96
+ { role: "user", content: "Hello" },
97
+ { role: "assistant", content: "Hi there!" },
98
+ { role: "user", content: "How are you?" },
99
+ { role: "assistant", content: "I'm doing well!" },
100
+ { role: "user", content: "Great!" },
101
+ ],
102
+ });
103
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
104
+ });
105
+ it("should handle tool role messages", () => {
106
+ const body = JSON.stringify({
107
+ model: "gpt-4",
108
+ messages: [
109
+ { role: "user", content: "What's the weather?" },
110
+ {
111
+ role: "assistant",
112
+ content: null,
113
+ tool_calls: [
114
+ {
115
+ id: "call_123",
116
+ type: "function",
117
+ function: { name: "get_weather", arguments: "{}" },
118
+ },
119
+ ],
120
+ },
121
+ { role: "tool", tool_call_id: "call_123", content: "Sunny, 72°F" },
122
+ ],
123
+ });
124
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
125
+ });
126
+ it("should handle image content (vision API)", () => {
127
+ const body = JSON.stringify({
128
+ model: "gpt-4-vision-preview",
129
+ messages: [
130
+ {
131
+ role: "user",
132
+ content: [
133
+ { type: "text", text: "What's in this image?" },
134
+ { type: "image_url", image_url: { url: "data:image/png;base64,iVBORw0KGgo..." } },
135
+ ],
136
+ },
137
+ ],
138
+ });
139
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
140
+ });
141
+ it("should differentiate different images", () => {
142
+ const body1 = JSON.stringify({
143
+ model: "gpt-4-vision-preview",
144
+ messages: [
145
+ {
146
+ role: "user",
147
+ content: [{ type: "image_url", image_url: { url: "data:image/png;base64,ABC123" } }],
148
+ },
149
+ ],
150
+ });
151
+ const body2 = JSON.stringify({
152
+ model: "gpt-4-vision-preview",
153
+ messages: [
154
+ {
155
+ role: "user",
156
+ content: [{ type: "image_url", image_url: { url: "data:image/png;base64,XYZ789" } }],
157
+ },
158
+ ],
159
+ });
160
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
161
+ });
162
+ });
163
+ describe("timestamp stripping edge cases", () => {
164
+ it("should strip various timestamp formats", () => {
165
+ const timestamps = [
166
+ "[Mon 2024-01-15 10:30 PST]",
167
+ "[Tue 2024-12-31 23:59 UTC]",
168
+ "[Wed 2025-06-15 00:00 EST]",
169
+ ];
170
+ for (const ts of timestamps) {
171
+ const body1 = JSON.stringify({
172
+ model: "gpt-4",
173
+ messages: [{ role: "user", content: `${ts} hello world` }],
174
+ });
175
+ const body2 = JSON.stringify({
176
+ model: "gpt-4",
177
+ messages: [{ role: "user", content: "hello world" }],
178
+ });
179
+ expect(ResponseCache.generateKey(body1)).toBe(ResponseCache.generateKey(body2));
180
+ }
181
+ });
182
+ it("should NOT strip timestamp-like text in middle of content", () => {
183
+ const body1 = JSON.stringify({
184
+ model: "gpt-4",
185
+ messages: [{ role: "user", content: "Meeting at [Mon 2024-01-15 10:30 PST] confirmed" }],
186
+ });
187
+ const body2 = JSON.stringify({
188
+ model: "gpt-4",
189
+ messages: [{ role: "user", content: "Meeting at confirmed" }],
190
+ });
191
+ // Should NOT be equal - only strips from beginning
192
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
193
+ });
194
+ it("should handle content that looks like timestamp but isn't", () => {
195
+ const body = JSON.stringify({
196
+ model: "gpt-4",
197
+ messages: [{ role: "user", content: "[Not a timestamp] hello" }],
198
+ });
199
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
200
+ });
201
+ });
202
+ describe("model name variations", () => {
203
+ it("should differentiate provider-prefixed models", () => {
204
+ const body1 = JSON.stringify({
205
+ model: "openai/gpt-4",
206
+ messages: [{ role: "user", content: "hello" }],
207
+ });
208
+ const body2 = JSON.stringify({
209
+ model: "gpt-4",
210
+ messages: [{ role: "user", content: "hello" }],
211
+ });
212
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
213
+ });
214
+ it("should handle model with version suffix", () => {
215
+ const body1 = JSON.stringify({
216
+ model: "gpt-4-0125-preview",
217
+ messages: [{ role: "user", content: "hello" }],
218
+ });
219
+ const body2 = JSON.stringify({
220
+ model: "gpt-4-1106-preview",
221
+ messages: [{ role: "user", content: "hello" }],
222
+ });
223
+ expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
224
+ });
225
+ });
226
+ describe("concurrent operations simulation", () => {
227
+ it("should handle rapid interleaved operations", async () => {
228
+ const operations = [];
229
+ for (let i = 0; i < 100; i++) {
230
+ operations.push((async () => {
231
+ const key = `key-${i % 20}`;
232
+ cache.set(key, {
233
+ body: Buffer.from(`value-${i}`),
234
+ status: 200,
235
+ headers: {},
236
+ model: "gpt-4",
237
+ });
238
+ cache.get(key);
239
+ if (i % 10 === 0) {
240
+ cache.getStats();
241
+ }
242
+ })());
243
+ }
244
+ await Promise.all(operations);
245
+ expect(cache.getStats().size).toBeGreaterThan(0);
246
+ });
247
+ it("should handle set-get-clear cycles", () => {
248
+ for (let cycle = 0; cycle < 10; cycle++) {
249
+ // Fill cache
250
+ for (let i = 0; i < 50; i++) {
251
+ cache.set(`cycle-${cycle}-key-${i}`, {
252
+ body: Buffer.from(`value-${i}`),
253
+ status: 200,
254
+ headers: {},
255
+ model: "gpt-4",
256
+ });
257
+ }
258
+ // Read some
259
+ for (let i = 0; i < 25; i++) {
260
+ cache.get(`cycle-${cycle}-key-${i}`);
261
+ }
262
+ // Clear
263
+ cache.clear();
264
+ expect(cache.getStats().size).toBe(0);
265
+ }
266
+ });
267
+ });
268
+ describe("heap integrity under stress", () => {
269
+ it("should maintain heap integrity with many expirations", () => {
270
+ vi.useFakeTimers();
271
+ // Add items with varying TTLs
272
+ for (let i = 0; i < 100; i++) {
273
+ cache.set(`key-${i}`, {
274
+ body: Buffer.from(`value-${i}`),
275
+ status: 200,
276
+ headers: {},
277
+ model: "gpt-4",
278
+ }, i + 1);
279
+ }
280
+ expect(cache.getStats().size).toBe(100);
281
+ // Expire items with TTL <= 50 seconds
282
+ // Need to advance 51 seconds because expiration check is `>` not `>=`
283
+ vi.advanceTimersByTime(51 * 1000);
284
+ // Items with TTL > 51 should still exist (key-51 to key-99)
285
+ for (let i = 51; i < 100; i++) {
286
+ expect(cache.get(`key-${i}`)).toBeDefined();
287
+ }
288
+ // Items with TTL <= 50 should be expired (key-0 to key-49)
289
+ for (let i = 0; i < 50; i++) {
290
+ expect(cache.get(`key-${i}`)).toBeUndefined();
291
+ }
292
+ vi.useRealTimers();
293
+ });
294
+ it("should handle updating same key with different TTLs", () => {
295
+ vi.useFakeTimers();
296
+ // Set with short TTL
297
+ cache.set("key", { body: Buffer.from("v1"), status: 200, headers: {}, model: "gpt-4" }, 10);
298
+ // Update with longer TTL
299
+ cache.set("key", { body: Buffer.from("v2"), status: 200, headers: {}, model: "gpt-4" }, 100);
300
+ // Advance past first TTL
301
+ vi.advanceTimersByTime(50 * 1000);
302
+ // Should still exist with new TTL
303
+ const cached = cache.get("key");
304
+ expect(cached).toBeDefined();
305
+ expect(cached.body.toString()).toBe("v2");
306
+ vi.useRealTimers();
307
+ });
308
+ });
309
+ describe("response body edge cases", () => {
310
+ it("should handle streaming-style chunks", () => {
311
+ // Simulating SSE data
312
+ const sseData = `data: {"choices":[{"delta":{"content":"Hello"}}]}\n\ndata: {"choices":[{"delta":{"content":" world"}}]}\n\ndata: [DONE]\n\n`;
313
+ cache.set("sse", {
314
+ body: Buffer.from(sseData),
315
+ status: 200,
316
+ headers: { "content-type": "text/event-stream" },
317
+ model: "gpt-4",
318
+ });
319
+ const cached = cache.get("sse");
320
+ expect(cached.body.toString()).toBe(sseData);
321
+ });
322
+ it("should handle gzipped response body", () => {
323
+ // Simulated gzip data (just random bytes)
324
+ const gzipData = Buffer.from([0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00]);
325
+ cache.set("gzip", {
326
+ body: gzipData,
327
+ status: 200,
328
+ headers: { "content-encoding": "gzip" },
329
+ model: "gpt-4",
330
+ });
331
+ expect(cache.get("gzip").body).toEqual(gzipData);
332
+ });
333
+ it("should handle response with null bytes", () => {
334
+ const nullBytes = Buffer.from([0x00, 0x01, 0x00, 0x02, 0x00]);
335
+ cache.set("null-bytes", {
336
+ body: nullBytes,
337
+ status: 200,
338
+ headers: {},
339
+ model: "gpt-4",
340
+ });
341
+ expect(cache.get("null-bytes").body).toEqual(nullBytes);
342
+ });
343
+ it("should handle very large JSON response", () => {
344
+ const largeArray = Array(1000).fill({ text: "a".repeat(100) });
345
+ const largeResponse = JSON.stringify({ data: largeArray });
346
+ cache.set("large-json", {
347
+ body: Buffer.from(largeResponse),
348
+ status: 200,
349
+ headers: {},
350
+ model: "gpt-4",
351
+ });
352
+ const cached = cache.get("large-json");
353
+ expect(cached).toBeDefined();
354
+ expect(JSON.parse(cached.body.toString()).data.length).toBe(1000);
355
+ });
356
+ });
357
+ describe("header edge cases", () => {
358
+ it("should handle headers with array values (converted to string)", () => {
359
+ cache.set("array-header", {
360
+ body: Buffer.from("test"),
361
+ status: 200,
362
+ headers: { "set-cookie": "a=1; b=2" }, // Normally could be array
363
+ model: "gpt-4",
364
+ });
365
+ expect(cache.get("array-header")).toBeDefined();
366
+ });
367
+ it("should handle empty header values", () => {
368
+ cache.set("empty-headers", {
369
+ body: Buffer.from("test"),
370
+ status: 200,
371
+ headers: { "x-empty": "", "x-null-ish": "null", "x-undefined-ish": "undefined" },
372
+ model: "gpt-4",
373
+ });
374
+ const cached = cache.get("empty-headers");
375
+ expect(cached.headers["x-empty"]).toBe("");
376
+ });
377
+ it("should handle rate limit headers", () => {
378
+ cache.set("rate-limit", {
379
+ body: Buffer.from("test"),
380
+ status: 200,
381
+ headers: {
382
+ "x-ratelimit-limit-requests": "10000",
383
+ "x-ratelimit-remaining-requests": "9999",
384
+ "x-ratelimit-reset-requests": "1s",
385
+ },
386
+ model: "gpt-4",
387
+ });
388
+ expect(cache.get("rate-limit")).toBeDefined();
389
+ });
390
+ });
391
+ describe("shouldCache with various body formats", () => {
392
+ it("should handle body with nested cache:false", () => {
393
+ const body = JSON.stringify({
394
+ model: "gpt-4",
395
+ messages: [{ role: "user", content: "hello" }],
396
+ metadata: { cache: false }, // Nested - should NOT disable caching
397
+ });
398
+ expect(cache.shouldCache(body)).toBe(true);
399
+ });
400
+ it("should handle body with cache:true explicitly", () => {
401
+ const body = JSON.stringify({
402
+ model: "gpt-4",
403
+ messages: [],
404
+ cache: true,
405
+ });
406
+ expect(cache.shouldCache(body)).toBe(true);
407
+ });
408
+ it("should handle body with both cache and no_cache", () => {
409
+ const body = JSON.stringify({
410
+ model: "gpt-4",
411
+ messages: [],
412
+ cache: true,
413
+ no_cache: true, // Conflicting - no_cache wins
414
+ });
415
+ expect(cache.shouldCache(body)).toBe(false);
416
+ });
417
+ it("should handle body with cache:0 (falsy but not false)", () => {
418
+ const body = JSON.stringify({
419
+ model: "gpt-4",
420
+ messages: [],
421
+ cache: 0,
422
+ });
423
+ // cache: 0 is falsy but !== false
424
+ expect(cache.shouldCache(body)).toBe(true);
425
+ });
426
+ it("should handle body with cache:'false' (string)", () => {
427
+ const body = JSON.stringify({
428
+ model: "gpt-4",
429
+ messages: [],
430
+ cache: "false",
431
+ });
432
+ // cache: "false" is truthy string, not boolean false
433
+ expect(cache.shouldCache(body)).toBe(true);
434
+ });
435
+ });
436
+ describe("stats edge cases", () => {
437
+ it("should handle very high hit/miss counts", () => {
438
+ // Simulate many operations
439
+ for (let i = 0; i < 10000; i++) {
440
+ cache.get(`miss-${i}`); // All misses
441
+ }
442
+ cache.set("hit-key", {
443
+ body: Buffer.from("test"),
444
+ status: 200,
445
+ headers: {},
446
+ model: "gpt-4",
447
+ });
448
+ for (let i = 0; i < 10000; i++) {
449
+ cache.get("hit-key"); // All hits
450
+ }
451
+ const stats = cache.getStats();
452
+ expect(stats.misses).toBe(10000);
453
+ expect(stats.hits).toBe(10000);
454
+ expect(stats.hitRate).toBe("50.0%");
455
+ });
456
+ it("should handle stats after clear", () => {
457
+ cache.set("key", {
458
+ body: Buffer.from("test"),
459
+ status: 200,
460
+ headers: {},
461
+ model: "gpt-4",
462
+ });
463
+ cache.get("key");
464
+ cache.get("key");
465
+ cache.clear();
466
+ // Stats should persist after clear
467
+ const stats = cache.getStats();
468
+ expect(stats.hits).toBe(2);
469
+ expect(stats.size).toBe(0);
470
+ });
471
+ });
472
+ describe("eviction edge cases", () => {
473
+ it("should handle eviction when all items have same TTL", () => {
474
+ const smallCache = new ResponseCache({ maxSize: 5, defaultTTL: 600 });
475
+ for (let i = 0; i < 10; i++) {
476
+ smallCache.set(`key-${i}`, {
477
+ body: Buffer.from(`value-${i}`),
478
+ status: 200,
479
+ headers: {},
480
+ model: "gpt-4",
481
+ });
482
+ }
483
+ // Should have evicted oldest entries
484
+ expect(smallCache.getStats().size).toBeLessThanOrEqual(5);
485
+ expect(smallCache.getStats().evictions).toBeGreaterThan(0);
486
+ });
487
+ it("should prefer evicting expired items over non-expired", () => {
488
+ vi.useFakeTimers();
489
+ const smallCache = new ResponseCache({ maxSize: 3 });
490
+ // Add item with short TTL
491
+ smallCache.set("short-ttl", { body: Buffer.from("short"), status: 200, headers: {}, model: "gpt-4" }, 1);
492
+ // Add items with long TTL
493
+ smallCache.set("long-ttl-1", { body: Buffer.from("long1"), status: 200, headers: {}, model: "gpt-4" }, 600);
494
+ smallCache.set("long-ttl-2", { body: Buffer.from("long2"), status: 200, headers: {}, model: "gpt-4" }, 600);
495
+ // Expire short TTL item
496
+ vi.advanceTimersByTime(2000);
497
+ // Add new item - should evict expired one first
498
+ smallCache.set("new", { body: Buffer.from("new"), status: 200, headers: {}, model: "gpt-4" }, 600);
499
+ // Long TTL items should still exist
500
+ expect(smallCache.get("long-ttl-1")).toBeDefined();
501
+ expect(smallCache.get("long-ttl-2")).toBeDefined();
502
+ expect(smallCache.get("new")).toBeDefined();
503
+ vi.useRealTimers();
504
+ });
505
+ });
506
+ describe("JSON parsing edge cases in generateKey", () => {
507
+ it("should handle deeply nested objects", () => {
508
+ let nested = { value: "deep" };
509
+ for (let i = 0; i < 50; i++) {
510
+ nested = { nested };
511
+ }
512
+ const body = JSON.stringify({
513
+ model: "gpt-4",
514
+ messages: [{ role: "user", content: "test" }],
515
+ metadata: nested,
516
+ });
517
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
518
+ });
519
+ it("should handle arrays with mixed types", () => {
520
+ const body = JSON.stringify({
521
+ model: "gpt-4",
522
+ messages: [{ role: "user", content: [1, "two", true, null, { nested: "obj" }, [1, 2, 3]] }],
523
+ });
524
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
525
+ });
526
+ it("should handle numeric string keys", () => {
527
+ const body = JSON.stringify({
528
+ model: "gpt-4",
529
+ "123": "numeric key",
530
+ messages: [],
531
+ });
532
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
533
+ });
534
+ it("should handle escaped characters in strings", () => {
535
+ const body = JSON.stringify({
536
+ model: "gpt-4",
537
+ messages: [{ role: "user", content: 'Line1\\nLine2\\t"quoted"' }],
538
+ });
539
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
540
+ });
541
+ });
542
+ describe("disabled cache behavior", () => {
543
+ it("should not store anything when disabled", () => {
544
+ const disabled = new ResponseCache({ enabled: false });
545
+ disabled.set("key", {
546
+ body: Buffer.from("test"),
547
+ status: 200,
548
+ headers: {},
549
+ model: "gpt-4",
550
+ });
551
+ expect(disabled.get("key")).toBeUndefined();
552
+ expect(disabled.getStats().size).toBe(0);
553
+ });
554
+ it("should return false for shouldCache when disabled", () => {
555
+ const disabled = new ResponseCache({ enabled: false });
556
+ expect(disabled.shouldCache(JSON.stringify({ model: "gpt-4" }))).toBe(false);
557
+ });
558
+ it("should still track stats when disabled", () => {
559
+ const disabled = new ResponseCache({ enabled: false });
560
+ disabled.get("miss1");
561
+ disabled.get("miss2");
562
+ expect(disabled.getStats().misses).toBe(2);
563
+ });
564
+ });
565
+ });
566
+ //# sourceMappingURL=response-cache.advanced.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-cache.advanced.test.js","sourceRoot":"","sources":["../src/response-cache.advanced.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,IAAI,KAAoB,CAAC;IAEzB,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,WAAW,EAAE,GAAG;aACjB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,WAAW,EAAE,GAAG;aACjB,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,EAAE;oBAC1D,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;iBACnC;aACF,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,4BAA4B,EAAE;oBACzD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;iBACnC;aACF,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC;aACjE,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;aAC5D,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aACzC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;aAClC,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE;oBAC9C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;oBAClC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;oBAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;oBACzC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE;oBACjD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;iBACpC;aACF,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE;oBAChD;wBACE,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,IAAI;wBACb,UAAU,EAAE;4BACV;gCACE,EAAE,EAAE,UAAU;gCACd,IAAI,EAAE,UAAU;gCAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;6BACnD;yBACF;qBACF;oBACD,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE;iBACnE;aACF,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,sBAAsB;gBAC7B,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE;4BAC/C,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,sCAAsC,EAAE,EAAE;yBAClF;qBACF;iBACF;aACF,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,sBAAsB;gBAC7B,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,EAAE,CAAC;qBACrF;iBACF;aACF,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,sBAAsB;gBAC7B,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,EAAE,CAAC;qBACrF;iBACF;aACF,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,UAAU,GAAG;gBACjB,4BAA4B;gBAC5B,4BAA4B;gBAC5B,4BAA4B;aAC7B,CAAC;YAEF,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;iBAC3D,CAAC,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;iBACrD,CAAC,CAAC;gBACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iDAAiD,EAAE,CAAC;aACzF,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;aAC9D,CAAC,CAAC;YACH,mDAAmD;YACnD,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;aACjE,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,cAAc;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aAC/C,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aAC/C,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,oBAAoB;gBAC3B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aAC/C,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,oBAAoB;gBAC3B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aAC/C,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,UAAU,GAAoB,EAAE,CAAC;YAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,UAAU,CAAC,IAAI,CACb,CAAC,KAAK,IAAI,EAAE;oBACV,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;wBACb,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC/B,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE;wBACX,KAAK,EAAE,OAAO;qBACf,CAAC,CAAC;oBACH,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACf,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;wBACjB,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,CAAC;gBACH,CAAC,CAAC,EAAE,CACL,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;gBACxC,aAAa;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,EAAE,EAAE;wBACnC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC/B,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE;wBACX,KAAK,EAAE,OAAO;qBACf,CAAC,CAAC;gBACL,CAAC;gBAED,YAAY;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACvC,CAAC;gBAED,QAAQ;gBACR,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,EAAE,CAAC,aAAa,EAAE,CAAC;YAEnB,8BAA8B;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,KAAK,CAAC,GAAG,CACP,OAAO,CAAC,EAAE,EACV;oBACE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,OAAO;iBACf,EACD,CAAC,GAAG,CAAC,CACN,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAExC,sCAAsC;YACtC,sEAAsE;YACtE,EAAE,CAAC,mBAAmB,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YAElC,4DAA4D;YAC5D,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9C,CAAC;YAED,2DAA2D;YAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YAChD,CAAC;YAED,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,EAAE,CAAC,aAAa,EAAE,CAAC;YAEnB,qBAAqB;YACrB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAE5F,yBAAyB;YACzB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YAE7F,yBAAyB;YACzB,EAAE,CAAC,mBAAmB,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YAElC,kCAAkC;YAClC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3C,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,sBAAsB;YACtB,MAAM,OAAO,GAAG,6HAA6H,CAAC;YAC9I,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC1B,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE;gBAChD,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,0CAA0C;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/E,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE;gBACvC,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9D,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;gBACtB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAE3D,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;gBACtB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;gBAChC,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE;gBACxB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,0BAA0B;gBACjE,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE;gBAChF,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;gBACtB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACP,4BAA4B,EAAE,OAAO;oBACrC,gCAAgC,EAAE,MAAM;oBACxC,4BAA4B,EAAE,IAAI;iBACnC;gBACD,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACrD,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,sCAAsC;aACnE,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI,EAAE,8BAA8B;aAC/C,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YACH,kCAAkC;YAClC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YACH,qDAAqD;YACrD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,2BAA2B;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa;YACvC,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YACnC,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YACH,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEjB,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,mCAAmC;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;oBACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,OAAO;iBACf,CAAC,CAAC;YACL,CAAC;YAED,qCAAqC;YACrC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,EAAE,CAAC,aAAa,EAAE,CAAC;YAEnB,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YAErD,0BAA0B;YAC1B,UAAU,CAAC,GAAG,CACZ,WAAW,EACX,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EACxE,CAAC,CACF,CAAC;YAEF,0BAA0B;YAC1B,UAAU,CAAC,GAAG,CACZ,YAAY,EACZ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EACxE,GAAG,CACJ,CAAC;YACF,UAAU,CAAC,GAAG,CACZ,YAAY,EACZ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EACxE,GAAG,CACJ,CAAC;YAEF,wBAAwB;YACxB,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE7B,gDAAgD;YAChD,UAAU,CAAC,GAAG,CACZ,KAAK,EACL,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EACtE,GAAG,CACJ,CAAC;YAEF,oCAAoC;YACpC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAE5C,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACtD,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,IAAI,MAAM,GAA4B,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC7C,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5F,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;aAClE,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAEvD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE;gBAClB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YAC5C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAEvD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEtB,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}