@0xmonaco/core 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +23 -8
  2. package/dist/api/applications/api.d.ts +1 -2
  3. package/dist/api/applications/api.d.ts.map +1 -1
  4. package/dist/api/applications/api.js +1 -2
  5. package/dist/api/applications/api.js.map +1 -1
  6. package/dist/api/applications/index.d.ts +1 -2
  7. package/dist/api/applications/index.d.ts.map +1 -1
  8. package/dist/api/applications/index.js +1 -1
  9. package/dist/api/applications/index.js.map +1 -1
  10. package/dist/api/auth/api.d.ts +1 -1
  11. package/dist/api/auth/api.d.ts.map +1 -1
  12. package/dist/api/auth/api.js +2 -2
  13. package/dist/api/auth/api.js.map +1 -1
  14. package/dist/api/auth/index.d.ts +1 -2
  15. package/dist/api/auth/index.d.ts.map +1 -1
  16. package/dist/api/auth/index.js +1 -1
  17. package/dist/api/auth/index.js.map +1 -1
  18. package/dist/api/base.d.ts +26 -1
  19. package/dist/api/base.d.ts.map +1 -1
  20. package/dist/api/base.js +173 -43
  21. package/dist/api/base.js.map +1 -1
  22. package/dist/api/fees/api.d.ts +1 -1
  23. package/dist/api/fees/api.d.ts.map +1 -1
  24. package/dist/api/fees/api.js +4 -4
  25. package/dist/api/fees/api.js.map +1 -1
  26. package/dist/api/fees/index.d.ts +1 -1
  27. package/dist/api/fees/index.d.ts.map +1 -1
  28. package/dist/api/fees/index.js +1 -1
  29. package/dist/api/fees/index.js.map +1 -1
  30. package/dist/api/index.d.ts +10 -8
  31. package/dist/api/index.d.ts.map +1 -1
  32. package/dist/api/index.js +10 -8
  33. package/dist/api/index.js.map +1 -1
  34. package/dist/api/market/api.d.ts +1 -1
  35. package/dist/api/market/api.d.ts.map +1 -1
  36. package/dist/api/market/api.js +12 -3
  37. package/dist/api/market/api.js.map +1 -1
  38. package/dist/api/market/index.d.ts +1 -2
  39. package/dist/api/market/index.d.ts.map +1 -1
  40. package/dist/api/market/index.js +1 -1
  41. package/dist/api/market/index.js.map +1 -1
  42. package/dist/api/orderbook/api.d.ts +16 -0
  43. package/dist/api/orderbook/api.d.ts.map +1 -0
  44. package/dist/api/orderbook/api.js +38 -0
  45. package/dist/api/orderbook/api.js.map +1 -0
  46. package/dist/api/orderbook/index.d.ts +2 -0
  47. package/dist/api/orderbook/index.d.ts.map +1 -0
  48. package/dist/api/orderbook/index.js +2 -0
  49. package/dist/api/orderbook/index.js.map +1 -0
  50. package/dist/api/profile/api.d.ts +10 -11
  51. package/dist/api/profile/api.d.ts.map +1 -1
  52. package/dist/api/profile/api.js +17 -11
  53. package/dist/api/profile/api.js.map +1 -1
  54. package/dist/api/profile/index.d.ts +1 -1
  55. package/dist/api/profile/index.d.ts.map +1 -1
  56. package/dist/api/profile/index.js +1 -1
  57. package/dist/api/profile/index.js.map +1 -1
  58. package/dist/api/trades/api.d.ts +45 -0
  59. package/dist/api/trades/api.d.ts.map +1 -0
  60. package/dist/api/trades/api.js +43 -0
  61. package/dist/api/trades/api.js.map +1 -0
  62. package/dist/api/trades/index.d.ts +2 -0
  63. package/dist/api/trades/index.d.ts.map +1 -0
  64. package/dist/api/trades/index.js +2 -0
  65. package/dist/api/trades/index.js.map +1 -0
  66. package/dist/api/trading/api.d.ts +1 -2
  67. package/dist/api/trading/api.d.ts.map +1 -1
  68. package/dist/api/trading/api.js +10 -2
  69. package/dist/api/trading/api.js.map +1 -1
  70. package/dist/api/trading/index.d.ts +1 -2
  71. package/dist/api/trading/index.d.ts.map +1 -1
  72. package/dist/api/trading/index.js +1 -1
  73. package/dist/api/trading/index.js.map +1 -1
  74. package/dist/api/vault/api.d.ts +17 -19
  75. package/dist/api/vault/api.d.ts.map +1 -1
  76. package/dist/api/vault/api.js +58 -46
  77. package/dist/api/vault/api.js.map +1 -1
  78. package/dist/api/vault/index.d.ts +1 -2
  79. package/dist/api/vault/index.d.ts.map +1 -1
  80. package/dist/api/vault/index.js +1 -1
  81. package/dist/api/vault/index.js.map +1 -1
  82. package/dist/api/websocket/index.d.ts +3 -9
  83. package/dist/api/websocket/index.d.ts.map +1 -1
  84. package/dist/api/websocket/index.js +3 -9
  85. package/dist/api/websocket/index.js.map +1 -1
  86. package/dist/api/websocket/types.d.ts +34 -0
  87. package/dist/api/websocket/types.d.ts.map +1 -0
  88. package/dist/api/websocket/types.js +2 -0
  89. package/dist/api/websocket/types.js.map +1 -0
  90. package/dist/api/websocket/utils.d.ts +9 -0
  91. package/dist/api/websocket/utils.d.ts.map +1 -0
  92. package/dist/api/websocket/utils.js +23 -0
  93. package/dist/api/websocket/utils.js.map +1 -0
  94. package/dist/api/websocket/websocket.d.ts +6 -0
  95. package/dist/api/websocket/websocket.d.ts.map +1 -0
  96. package/dist/api/websocket/websocket.js +309 -0
  97. package/dist/api/websocket/websocket.js.map +1 -0
  98. package/dist/errors/errors.d.ts +382 -0
  99. package/dist/errors/errors.d.ts.map +1 -0
  100. package/dist/errors/errors.js +801 -0
  101. package/dist/errors/errors.js.map +1 -0
  102. package/dist/errors/index.d.ts +2 -0
  103. package/dist/errors/index.d.ts.map +1 -0
  104. package/dist/errors/index.js +2 -0
  105. package/dist/errors/index.js.map +1 -0
  106. package/dist/index.d.ts +5 -11
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +5 -22
  109. package/dist/index.js.map +1 -1
  110. package/dist/networks/index.d.ts +2 -0
  111. package/dist/networks/index.d.ts.map +1 -0
  112. package/dist/networks/index.js +2 -0
  113. package/dist/networks/index.js.map +1 -0
  114. package/dist/{networks.d.ts → networks/networks.d.ts} +1 -1
  115. package/dist/networks/networks.d.ts.map +1 -0
  116. package/dist/{networks.js → networks/networks.js} +4 -3
  117. package/dist/networks/networks.js.map +1 -0
  118. package/dist/sdk.d.ts +19 -27
  119. package/dist/sdk.d.ts.map +1 -1
  120. package/dist/sdk.js +77 -107
  121. package/dist/sdk.js.map +1 -1
  122. package/dist/utils/index.d.ts +1 -1
  123. package/dist/utils/index.d.ts.map +1 -1
  124. package/dist/utils/index.js +1 -1
  125. package/dist/utils/index.js.map +1 -1
  126. package/package.json +5 -7
  127. package/dist/api/websocket/base-ws-client.d.ts +0 -85
  128. package/dist/api/websocket/base-ws-client.d.ts.map +0 -1
  129. package/dist/api/websocket/base-ws-client.js +0 -256
  130. package/dist/api/websocket/base-ws-client.js.map +0 -1
  131. package/dist/api/websocket/clients/ohlcv-ws-client.d.ts +0 -57
  132. package/dist/api/websocket/clients/ohlcv-ws-client.d.ts.map +0 -1
  133. package/dist/api/websocket/clients/ohlcv-ws-client.js +0 -132
  134. package/dist/api/websocket/clients/ohlcv-ws-client.js.map +0 -1
  135. package/dist/api/websocket/clients/orderbook-ws-client.d.ts +0 -70
  136. package/dist/api/websocket/clients/orderbook-ws-client.d.ts.map +0 -1
  137. package/dist/api/websocket/clients/orderbook-ws-client.js +0 -197
  138. package/dist/api/websocket/clients/orderbook-ws-client.js.map +0 -1
  139. package/dist/api/websocket/clients/orders-ws-client.d.ts +0 -61
  140. package/dist/api/websocket/clients/orders-ws-client.d.ts.map +0 -1
  141. package/dist/api/websocket/clients/orders-ws-client.js +0 -150
  142. package/dist/api/websocket/clients/orders-ws-client.js.map +0 -1
  143. package/dist/errors.d.ts +0 -103
  144. package/dist/errors.d.ts.map +0 -1
  145. package/dist/errors.js +0 -108
  146. package/dist/errors.js.map +0 -1
  147. package/dist/networks.d.ts.map +0 -1
  148. package/dist/networks.js.map +0 -1
@@ -0,0 +1,309 @@
1
+ import { ALL_MAGNITUDES } from "../../utils";
2
+ import { keysToCamelCase } from "./utils";
3
+ // Connection constants
4
+ const CONNECTION_TIMEOUT = 10000;
5
+ const HEARTBEAT_INTERVAL = 15000;
6
+ const MAX_RECONNECT_DELAY = 30000;
7
+ /**
8
+ * Create a Monaco WebSocket client
9
+ */
10
+ export function createMonacoWebSocket(baseUrl, options = {}) {
11
+ let ws = null;
12
+ let token = options.token;
13
+ let reconnectAttempts = 0;
14
+ let reconnectTimer = null;
15
+ let heartbeatTimer = null;
16
+ let autoReconnect = options.autoReconnect ?? true;
17
+ const maxReconnectAttempts = options.maxReconnectAttempts ?? 5;
18
+ // Handler storage: channel -> handler
19
+ const handlers = new Map();
20
+ const getStatus = () => {
21
+ if (!ws)
22
+ return "disconnected";
23
+ switch (ws.readyState) {
24
+ case WebSocket.CONNECTING:
25
+ return "connecting";
26
+ case WebSocket.OPEN:
27
+ return "connected";
28
+ default:
29
+ return "disconnected";
30
+ }
31
+ };
32
+ const getUrl = () => {
33
+ const url = new URL(baseUrl);
34
+ if (token)
35
+ url.searchParams.set("token", token);
36
+ return url.toString();
37
+ };
38
+ const stopHeartbeat = () => {
39
+ if (heartbeatTimer) {
40
+ clearInterval(heartbeatTimer);
41
+ heartbeatTimer = null;
42
+ }
43
+ };
44
+ const startHeartbeat = () => {
45
+ stopHeartbeat();
46
+ heartbeatTimer = setInterval(() => {
47
+ if (ws?.readyState === WebSocket.OPEN) {
48
+ ws.send(JSON.stringify({ type: "Ping" }));
49
+ }
50
+ }, HEARTBEAT_INTERVAL);
51
+ };
52
+ const stopReconnect = () => {
53
+ if (reconnectTimer) {
54
+ clearTimeout(reconnectTimer);
55
+ reconnectTimer = null;
56
+ }
57
+ };
58
+ const scheduleReconnect = () => {
59
+ if (!autoReconnect || reconnectAttempts >= maxReconnectAttempts) {
60
+ console.error("WebSocket: Max reconnect attempts reached");
61
+ return;
62
+ }
63
+ reconnectAttempts++;
64
+ const delay = Math.min(1000 * 2 ** reconnectAttempts, MAX_RECONNECT_DELAY);
65
+ reconnectTimer = setTimeout(() => connect(), delay);
66
+ };
67
+ const send = (data) => {
68
+ if (ws?.readyState === WebSocket.OPEN) {
69
+ ws.send(JSON.stringify(data));
70
+ }
71
+ };
72
+ const resubscribeAll = () => {
73
+ const channels = Array.from(handlers.keys());
74
+ if (channels.length > 0) {
75
+ send({ type: "Subscribe", channels });
76
+ }
77
+ };
78
+ const routeMessage = (msg) => {
79
+ if (msg.type !== "Event" || !msg.channel)
80
+ return;
81
+ // Find matching handler
82
+ for (const [subscriptionChannel, handler] of handlers) {
83
+ if (msg.channel === subscriptionChannel || msg.channel.startsWith(`${subscriptionChannel}:`)) {
84
+ handler(msg.data);
85
+ return;
86
+ }
87
+ }
88
+ };
89
+ const connect = () => {
90
+ return new Promise((resolve, reject) => {
91
+ // Use WebSocket's built-in readyState instead of manual tracking
92
+ if (ws?.readyState === WebSocket.CONNECTING || ws?.readyState === WebSocket.OPEN) {
93
+ resolve();
94
+ return;
95
+ }
96
+ try {
97
+ ws = new WebSocket(getUrl());
98
+ const timeout = setTimeout(() => {
99
+ if (ws?.readyState === WebSocket.CONNECTING) {
100
+ ws.close();
101
+ reject(new Error("WebSocket connection timeout"));
102
+ }
103
+ }, CONNECTION_TIMEOUT);
104
+ ws.onopen = () => {
105
+ clearTimeout(timeout);
106
+ reconnectAttempts = 0;
107
+ startHeartbeat();
108
+ resubscribeAll();
109
+ options.onStatusChange?.("connected");
110
+ resolve();
111
+ };
112
+ ws.onmessage = (event) => {
113
+ try {
114
+ const msg = JSON.parse(event.data);
115
+ // Handle pong silently
116
+ if (msg.type === "Pong")
117
+ return;
118
+ routeMessage(msg);
119
+ }
120
+ catch (err) {
121
+ console.warn("WebSocket: Failed to parse message", err);
122
+ }
123
+ };
124
+ ws.onclose = (event) => {
125
+ clearTimeout(timeout);
126
+ stopHeartbeat();
127
+ options.onStatusChange?.("disconnected");
128
+ // Reconnect on abnormal close
129
+ if (autoReconnect && event.code !== 1000) {
130
+ scheduleReconnect();
131
+ }
132
+ };
133
+ ws.onerror = () => clearTimeout(timeout);
134
+ }
135
+ catch (err) {
136
+ options.onStatusChange?.("disconnected");
137
+ reject(err);
138
+ }
139
+ });
140
+ };
141
+ const disconnect = () => {
142
+ autoReconnect = false;
143
+ stopReconnect();
144
+ stopHeartbeat();
145
+ handlers.clear();
146
+ ws?.close(1000, "Client disconnect");
147
+ ws = null;
148
+ options.onStatusChange?.("disconnected");
149
+ };
150
+ const subscribe = (channel, handler) => {
151
+ handlers.set(channel, handler);
152
+ if (ws?.readyState === WebSocket.OPEN) {
153
+ send({ type: "Subscribe", channels: [channel] });
154
+ }
155
+ // Return unsubscribe function
156
+ return () => {
157
+ handlers.delete(channel);
158
+ if (ws?.readyState === WebSocket.OPEN) {
159
+ send({ type: "Unsubscribe", channels: [channel] });
160
+ }
161
+ };
162
+ };
163
+ // --- Channel-specific subscription methods ---
164
+ const subscribeOrders = (market, tradingMode, handler) => {
165
+ const channel = `orders:${market}:${tradingMode}`;
166
+ return subscribe(channel, (rawData) => {
167
+ try {
168
+ const data = rawData;
169
+ const event = {
170
+ orderId: data.order_id,
171
+ eventType: data.event_type,
172
+ timestamp: data.timestamp,
173
+ data: keysToCamelCase(data.data),
174
+ };
175
+ handler(event);
176
+ }
177
+ catch (err) {
178
+ console.error("WebSocket: Error processing order event", err);
179
+ }
180
+ });
181
+ };
182
+ const subscribeOrderbook = (market, tradingMode, magnitude, quotationMode, handler) => {
183
+ if (!market || !tradingMode || magnitude === undefined || !quotationMode) {
184
+ throw new Error(`orderbook subscription requires all params: market="${market}", tradingMode="${tradingMode}", magnitude=${magnitude} (valid: ${ALL_MAGNITUDES.join(", ")}), quotationMode="${quotationMode}" (valid: "BASE", "QUOTE")`);
185
+ }
186
+ if (!ALL_MAGNITUDES.includes(magnitude)) {
187
+ throw new Error(`Invalid magnitude: ${magnitude}. Must be one of: ${ALL_MAGNITUDES.join(", ")}`);
188
+ }
189
+ const channel = `orderbook:${market}:${tradingMode}:${magnitude}:${quotationMode.toLowerCase()}`;
190
+ return subscribe(channel, (rawData) => {
191
+ try {
192
+ const data = rawData;
193
+ const orderbookData = data.data;
194
+ const event = {
195
+ symbol: data.pair,
196
+ tradingMode: data.trading_mode,
197
+ bids: (orderbookData?.bids || []).map((level) => ({
198
+ price: level.price,
199
+ quantity: level.quantity,
200
+ orderCount: level.order_count || 0,
201
+ })),
202
+ asks: (orderbookData?.asks || []).map((level) => ({
203
+ price: level.price,
204
+ quantity: level.quantity,
205
+ orderCount: level.order_count || 0,
206
+ })),
207
+ bestBid: orderbookData?.best_bid,
208
+ bestAsk: orderbookData?.best_ask,
209
+ bidVolume: orderbookData?.bid_volume || undefined,
210
+ askVolume: orderbookData?.ask_volume || undefined,
211
+ priceChange: orderbookData?.price_change
212
+ ? {
213
+ side: orderbookData.price_change.side,
214
+ oldPrice: orderbookData.price_change.old_price,
215
+ newPrice: orderbookData.price_change.new_price,
216
+ levelRemoved: orderbookData.price_change.level_removed || false,
217
+ levelAdded: orderbookData.price_change.level_added || false,
218
+ }
219
+ : undefined,
220
+ baseDecimals: data.base_decimals || 0,
221
+ quoteDecimals: data.quote_decimals || 0,
222
+ timestamp: data.timestamp || new Date().toISOString(),
223
+ sequence: data.sequence_number || 0,
224
+ };
225
+ handler(event);
226
+ }
227
+ catch (err) {
228
+ console.error("WebSocket: Error processing orderbook event", err);
229
+ }
230
+ });
231
+ };
232
+ const subscribeOHLCV = (symbol, tradingMode, interval, handler) => {
233
+ const channel = `ohlcv:${symbol}:${tradingMode}:${interval}`;
234
+ return subscribe(channel, (rawData) => {
235
+ try {
236
+ const data = rawData;
237
+ const ohlcvData = data.data;
238
+ const event = {
239
+ symbol: data.pair,
240
+ tradingMode: data.trading_mode,
241
+ interval: data.interval,
242
+ candlestick: {
243
+ T: ohlcvData.period_start || 0,
244
+ t: ohlcvData.period_end || 0,
245
+ o: ohlcvData.open || "0",
246
+ h: ohlcvData.high || "0",
247
+ l: ohlcvData.low || "0",
248
+ c: ohlcvData.close || "0",
249
+ v: ohlcvData.volume || "0",
250
+ s: data.pair,
251
+ i: data.interval,
252
+ n: ohlcvData.trades_count || 0,
253
+ },
254
+ };
255
+ handler(event);
256
+ }
257
+ catch (err) {
258
+ console.error("WebSocket: Error processing OHLCV event", err);
259
+ }
260
+ });
261
+ };
262
+ const subscribeTrades = (tradingPairId, handler) => {
263
+ const channel = `trades:${tradingPairId}`;
264
+ return subscribe(channel, (rawData) => {
265
+ try {
266
+ const data = rawData;
267
+ const tradeData = data.data;
268
+ const event = {
269
+ eventType: "trade",
270
+ pairId: data.pair_id,
271
+ tradingMode: data.trading_mode.toUpperCase(),
272
+ data: {
273
+ tradeId: tradeData.trade_id,
274
+ price: tradeData.price,
275
+ quantity: tradeData.quantity,
276
+ makerSide: tradeData.maker_side.toUpperCase(),
277
+ executedAt: tradeData.executed_at,
278
+ },
279
+ };
280
+ handler(event);
281
+ }
282
+ catch (err) {
283
+ console.error("WebSocket: Error processing trade event", err);
284
+ }
285
+ });
286
+ };
287
+ return {
288
+ connect,
289
+ disconnect,
290
+ isConnected: () => ws?.readyState === WebSocket.OPEN,
291
+ getStatus,
292
+ setToken: (newToken) => {
293
+ token = newToken;
294
+ // Reconnect to include token in ws URL
295
+ if (ws?.readyState === WebSocket.OPEN || ws?.readyState === WebSocket.CONNECTING) {
296
+ ws.close(1000, "Token updated, reconnecting.");
297
+ ws = null;
298
+ }
299
+ connect().catch((err) => {
300
+ console.warn("WebSocket: Failed to reconnect after token update:", err);
301
+ });
302
+ },
303
+ orders: subscribeOrders,
304
+ orderbook: subscribeOrderbook,
305
+ ohlcv: subscribeOHLCV,
306
+ trades: subscribeTrades,
307
+ };
308
+ }
309
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/websocket/websocket.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,uBAAuB;AACvB,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,UAAkC,EAAE;IACzF,IAAI,EAAE,GAAqB,IAAI,CAAC;IAChC,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,cAAc,GAAyC,IAAI,CAAC;IAChE,IAAI,cAAc,GAA0C,IAAI,CAAC;IACjE,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IAClD,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC;IAE/D,sCAAsC;IACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE5D,MAAM,SAAS,GAAG,GAAoB,EAAE;QACtC,IAAI,CAAC,EAAE;YAAE,OAAO,cAAc,CAAC;QAC/B,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC;YACtB,KAAK,SAAS,CAAC,UAAU;gBACvB,OAAO,YAAY,CAAC;YACtB,KAAK,SAAS,CAAC,IAAI;gBACjB,OAAO,WAAW,CAAC;YACrB;gBACE,OAAO,cAAc,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,KAAK;YAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,cAAc,EAAE,CAAC;YACnB,aAAa,CAAC,cAAc,CAAC,CAAC;YAC9B,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,aAAa,EAAE,CAAC;QAChB,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACtC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,cAAc,EAAE,CAAC;YACnB,YAAY,CAAC,cAAc,CAAC,CAAC;YAC7B,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,aAAa,IAAI,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,iBAAiB,EAAE,CAAC;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;QAC3E,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,EAAE;QAC7B,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACtC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,GAAuD,EAAE,EAAE;QAC/E,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO;QAEjD,wBAAwB;QACxB,KAAK,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACtD,IAAI,GAAG,CAAC,OAAO,KAAK,mBAAmB,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC;gBAC7F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAkB,EAAE;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,iEAAiE;YACjE,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACjF,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,EAAE,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBAE7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;wBAC5C,EAAE,CAAC,KAAK,EAAE,CAAC;wBACX,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACpD,CAAC;gBACH,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBAEvB,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;oBACf,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,iBAAiB,GAAG,CAAC,CAAC;oBACtB,cAAc,EAAE,CAAC;oBACjB,cAAc,EAAE,CAAC;oBACjB,OAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC;oBACtC,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBAEF,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;oBACvB,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACnC,uBAAuB;wBACvB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;4BAAE,OAAO;wBAChC,YAAY,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;oBAC1D,CAAC;gBACH,CAAC,CAAC;gBAEF,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;oBACrB,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,aAAa,EAAE,CAAC;oBAChB,OAAO,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,CAAC;oBAEzC,8BAA8B;oBAC9B,IAAI,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;wBACzC,iBAAiB,EAAE,CAAC;oBACtB,CAAC;gBACH,CAAC,CAAC;gBAEF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,aAAa,GAAG,KAAK,CAAC;QACtB,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QACrC,EAAE,GAAG,IAAI,CAAC;QACV,OAAO,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAI,OAAe,EAAE,OAA0B,EAAgB,EAAE;QACjF,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAkC,CAAC,CAAC;QAE1D,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,gDAAgD;IAEhD,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,WAAwB,EAAE,OAAmC,EAAgB,EAAE;QACtH,MAAM,OAAO,GAAG,UAAU,MAAM,IAAI,WAAW,EAAE,CAAC;QAElD,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,OAAqF,CAAC;gBACnG,MAAM,KAAK,GAAe;oBACxB,OAAO,EAAE,IAAI,CAAC,QAAQ;oBACtB,SAAS,EAAE,IAAI,CAAC,UAAqC;oBACrD,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;iBACjC,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CACzB,MAAc,EACd,WAAwB,EACxB,SAAiB,EACjB,aAAqC,EACrC,OAAuC,EACzB,EAAE;QAChB,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CACb,uDAAuD,MAAM,mBAAmB,WAAW,gBAAgB,SAAS,YAAY,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,aAAa,4BAA4B,CACxN,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,MAAM,IAAI,WAAW,IAAI,SAAS,IAAI,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;QAEjG,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,OAAkC,CAAC;gBAChD,MAAM,aAAa,GAAG,IAAI,CAAC,IAA+B,CAAC;gBAK3D,MAAM,KAAK,GAAmB;oBAC5B,MAAM,EAAE,IAAI,CAAC,IAAc;oBAC3B,WAAW,EAAE,IAAI,CAAC,YAA2B;oBAC7C,IAAI,EAAE,CAAE,aAAa,EAAE,IAAqB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAClE,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,UAAU,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;qBACnC,CAAC,CAAC;oBACH,IAAI,EAAE,CAAE,aAAa,EAAE,IAAqB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAClE,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,UAAU,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;qBACnC,CAAC,CAAC;oBACH,OAAO,EAAE,aAAa,EAAE,QAA8B;oBACtD,OAAO,EAAE,aAAa,EAAE,QAA8B;oBACtD,SAAS,EAAG,aAAa,EAAE,UAAqB,IAAI,SAAS;oBAC7D,SAAS,EAAG,aAAa,EAAE,UAAqB,IAAI,SAAS;oBAC7D,WAAW,EAAE,aAAa,EAAE,YAAY;wBACtC,CAAC,CAAC;4BACE,IAAI,EAAG,aAAa,CAAC,YAA+B,CAAC,IAAiB;4BACtE,QAAQ,EAAG,aAAa,CAAC,YAA+B,CAAC,SAAS;4BAClE,QAAQ,EAAG,aAAa,CAAC,YAA+B,CAAC,SAAS;4BAClE,YAAY,EAAG,aAAa,CAAC,YAA+B,CAAC,aAAa,IAAI,KAAK;4BACnF,UAAU,EAAG,aAAa,CAAC,YAA+B,CAAC,WAAW,IAAI,KAAK;yBAChF;wBACH,CAAC,CAAC,SAAS;oBACb,YAAY,EAAG,IAAI,CAAC,aAAwB,IAAI,CAAC;oBACjD,aAAa,EAAG,IAAI,CAAC,cAAyB,IAAI,CAAC;oBACnD,SAAS,EAAG,IAAI,CAAC,SAAoB,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACjE,QAAQ,EAAG,IAAI,CAAC,eAA0B,IAAI,CAAC;iBAChD,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,WAAwB,EAAE,QAAkB,EAAE,OAAmC,EAAgB,EAAE;QACzI,MAAM,OAAO,GAAG,SAAS,MAAM,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;QAE7D,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,OAAkC,CAAC;gBAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAA+B,CAAC;gBAEvD,MAAM,KAAK,GAAe;oBACxB,MAAM,EAAE,IAAI,CAAC,IAAc;oBAC3B,WAAW,EAAE,IAAI,CAAC,YAA2B;oBAC7C,QAAQ,EAAE,IAAI,CAAC,QAAoB;oBACnC,WAAW,EAAE;wBACX,CAAC,EAAG,SAAS,CAAC,YAAuB,IAAI,CAAC;wBAC1C,CAAC,EAAG,SAAS,CAAC,UAAqB,IAAI,CAAC;wBACxC,CAAC,EAAG,SAAS,CAAC,IAAe,IAAI,GAAG;wBACpC,CAAC,EAAG,SAAS,CAAC,IAAe,IAAI,GAAG;wBACpC,CAAC,EAAG,SAAS,CAAC,GAAc,IAAI,GAAG;wBACnC,CAAC,EAAG,SAAS,CAAC,KAAgB,IAAI,GAAG;wBACrC,CAAC,EAAG,SAAS,CAAC,MAAiB,IAAI,GAAG;wBACtC,CAAC,EAAE,IAAI,CAAC,IAAc;wBACtB,CAAC,EAAE,IAAI,CAAC,QAAkB;wBAC1B,CAAC,EAAG,SAAS,CAAC,YAAuB,IAAI,CAAC;qBAC3C;iBACF,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,aAAqB,EAAE,OAAmC,EAAgB,EAAE;QACnG,MAAM,OAAO,GAAG,UAAU,aAAa,EAAE,CAAC;QAE1C,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,OAAkC,CAAC;gBAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAA+B,CAAC;gBAEvD,MAAM,KAAK,GAAe;oBACxB,SAAS,EAAE,OAAO;oBAClB,MAAM,EAAE,IAAI,CAAC,OAAiB;oBAC9B,WAAW,EAAG,IAAI,CAAC,YAAuB,CAAC,WAAW,EAAiB;oBACvE,IAAI,EAAE;wBACJ,OAAO,EAAE,SAAS,CAAC,QAAkB;wBACrC,KAAK,EAAE,SAAS,CAAC,KAAe;wBAChC,QAAQ,EAAE,SAAS,CAAC,QAAkB;wBACtC,SAAS,EAAG,SAAS,CAAC,UAAqB,CAAC,WAAW,EAAqC;wBAC5F,UAAU,EAAE,SAAS,CAAC,WAAqB;qBAC5C;iBACF,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,UAAU;QACV,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI;QACpD,SAAS;QACT,QAAQ,EAAE,CAAC,QAAgB,EAAE,EAAE;YAC7B,KAAK,GAAG,QAAQ,CAAC;YACjB,uCAAuC;YACvC,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;gBACjF,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;gBAC/C,EAAE,GAAG,IAAI,CAAC;YACZ,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACtB,OAAO,CAAC,IAAI,CAAC,oDAAoD,EAAE,GAAG,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,kBAAkB;QAC7B,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,eAAe;KACxB,CAAC;AACJ,CAAC"}