node-switchbot 1.10.0 → 2.0.0-beta.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 (94) hide show
  1. package/.gitattributes +2 -0
  2. package/.github/dependabot.yml +17 -0
  3. package/.github/labeler.yml +38 -0
  4. package/.github/npm-version-script.cjs +81 -0
  5. package/.github/workflows/beta-release.yml +31 -0
  6. package/.github/workflows/build.yml +18 -0
  7. package/.github/workflows/changerelease.yml +13 -0
  8. package/.github/workflows/dependabot.yml +17 -0
  9. package/.github/workflows/labeler.yml +16 -0
  10. package/.github/workflows/release-drafter.yml +14 -0
  11. package/.github/workflows/release.yml +24 -0
  12. package/.github/workflows/stale.yml +12 -0
  13. package/CHANGELOG.md +308 -0
  14. package/dist/advertising.d.ts +172 -0
  15. package/dist/advertising.d.ts.map +1 -0
  16. package/dist/advertising.js +620 -0
  17. package/dist/advertising.js.map +1 -0
  18. package/dist/device/woblindtilt.d.ts +9 -0
  19. package/dist/device/woblindtilt.d.ts.map +1 -0
  20. package/dist/device/woblindtilt.js +108 -0
  21. package/dist/device/woblindtilt.js.map +1 -0
  22. package/dist/device/wobulb.d.ts +39 -0
  23. package/dist/device/wobulb.d.ts.map +1 -0
  24. package/dist/device/wobulb.js +156 -0
  25. package/dist/device/wobulb.js.map +1 -0
  26. package/dist/device/wocontact.d.ts +4 -0
  27. package/dist/device/wocontact.d.ts.map +1 -0
  28. package/dist/device/wocontact.js +8 -0
  29. package/dist/device/wocontact.js.map +1 -0
  30. package/dist/device/wocurtain.d.ts +9 -0
  31. package/dist/device/wocurtain.d.ts.map +1 -0
  32. package/dist/device/wocurtain.js +104 -0
  33. package/dist/device/wocurtain.js.map +1 -0
  34. package/dist/device/wohand.d.ts +10 -0
  35. package/dist/device/wohand.d.ts.map +1 -0
  36. package/dist/device/wohand.js +93 -0
  37. package/dist/device/wohand.js.map +1 -0
  38. package/dist/device/wohumi.d.ts +10 -0
  39. package/dist/device/wohumi.d.ts.map +1 -0
  40. package/dist/device/wohumi.js +93 -0
  41. package/dist/device/wohumi.js.map +1 -0
  42. package/dist/device/woiosensorth.d.ts +4 -0
  43. package/dist/device/woiosensorth.d.ts.map +1 -0
  44. package/dist/device/woiosensorth.js +4 -0
  45. package/dist/device/woiosensorth.js.map +1 -0
  46. package/dist/device/woplugmini.d.ts +31 -0
  47. package/dist/device/woplugmini.d.ts.map +1 -0
  48. package/dist/device/woplugmini.js +68 -0
  49. package/dist/device/woplugmini.js.map +1 -0
  50. package/dist/device/wopresence.d.ts +4 -0
  51. package/dist/device/wopresence.d.ts.map +1 -0
  52. package/dist/device/wopresence.js +4 -0
  53. package/dist/device/wopresence.js.map +1 -0
  54. package/dist/device/wosensorth.d.ts +4 -0
  55. package/dist/device/wosensorth.d.ts.map +1 -0
  56. package/dist/device/wosensorth.js +4 -0
  57. package/dist/device/wosensorth.js.map +1 -0
  58. package/dist/device/wostrip.d.ts +39 -0
  59. package/dist/device/wostrip.d.ts.map +1 -0
  60. package/dist/device/wostrip.js +145 -0
  61. package/dist/device/wostrip.js.map +1 -0
  62. package/dist/device.d.ts +46 -0
  63. package/dist/device.d.ts.map +1 -0
  64. package/dist/device.js +498 -0
  65. package/dist/device.js.map +1 -0
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +6 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/parameter-checker.d.ts +25 -0
  71. package/dist/parameter-checker.d.ts.map +1 -0
  72. package/dist/parameter-checker.js +488 -0
  73. package/dist/parameter-checker.js.map +1 -0
  74. package/dist/switchbot.d.ts +29 -0
  75. package/dist/switchbot.d.ts.map +1 -0
  76. package/dist/switchbot.js +461 -0
  77. package/dist/switchbot.js.map +1 -0
  78. package/errros.log +13 -0
  79. package/package.json +19 -12
  80. package/lib/parameter-checker.js +0 -524
  81. package/lib/switchbot-advertising.js +0 -713
  82. package/lib/switchbot-device-woblindtilt.js +0 -120
  83. package/lib/switchbot-device-wobulb.js +0 -188
  84. package/lib/switchbot-device-wocontact.js +0 -6
  85. package/lib/switchbot-device-wocurtain.js +0 -117
  86. package/lib/switchbot-device-wohand.js +0 -106
  87. package/lib/switchbot-device-wohumi.js +0 -106
  88. package/lib/switchbot-device-woiosensorth.js +0 -6
  89. package/lib/switchbot-device-woplugmini.js +0 -84
  90. package/lib/switchbot-device-wopresence.js +0 -6
  91. package/lib/switchbot-device-wosensorth.js +0 -6
  92. package/lib/switchbot-device-wostrip.js +0 -182
  93. package/lib/switchbot-device.js +0 -536
  94. package/lib/switchbot.js +0 -496
package/dist/device.js ADDED
@@ -0,0 +1,498 @@
1
+ import { Buffer } from 'buffer';
2
+ import { ParameterChecker } from './parameter-checker.js';
3
+ import { Advertising } from './advertising.js';
4
+ export class SwitchbotDevice {
5
+ _peripheral;
6
+ _noble;
7
+ _chars;
8
+ _SERV_UUID_PRIMARY;
9
+ _CHAR_UUID_WRITE;
10
+ _CHAR_UUID_NOTIFY;
11
+ _CHAR_UUID_DEVICE;
12
+ _READ_TIMEOUT_MSEC;
13
+ _WRITE_TIMEOUT_MSEC;
14
+ _COMMAND_TIMEOUT_MSEC;
15
+ _id;
16
+ _address;
17
+ _model;
18
+ _modelName;
19
+ _was_connected_explicitly;
20
+ _connected;
21
+ _onconnect;
22
+ _ondisconnect;
23
+ _ondisconnect_internal;
24
+ _onnotify_internal;
25
+ /* ------------------------------------------------------------------
26
+ * Constructor
27
+ *
28
+ * [Arguments]
29
+ * - peripheral | Object | Required | The `peripheral` object of noble,
30
+ * | | | which represents this device
31
+ * - noble | Noble | Required | The Noble object created by the noble module.
32
+ * ---------------------------------------------------------------- */
33
+ constructor(peripheral, noble) {
34
+ this._peripheral = peripheral;
35
+ this._noble = noble;
36
+ this._chars = null;
37
+ this._SERV_UUID_PRIMARY = 'cba20d00224d11e69fb80002a5d5c51b';
38
+ this._CHAR_UUID_WRITE = 'cba20002224d11e69fb80002a5d5c51b';
39
+ // Save the device information
40
+ const ad = Advertising.parse(peripheral);
41
+ this._id = ad?.id;
42
+ this._address = ad?.address;
43
+ this._model = ad?.serviceData.model;
44
+ this._modelName = ad?.serviceData.modelName;
45
+ this._was_connected_explicitly = false;
46
+ this._connected = false;
47
+ this._onconnect = () => { };
48
+ this._ondisconnect = () => { };
49
+ this._ondisconnect_internal = () => { };
50
+ this._onnotify_internal = () => { };
51
+ }
52
+ // Getters
53
+ get id() {
54
+ return this._id;
55
+ }
56
+ get address() {
57
+ return this._address;
58
+ }
59
+ get model() {
60
+ return this._model;
61
+ }
62
+ get modelName() {
63
+ return this._modelName;
64
+ }
65
+ get connectionState() {
66
+ if (!this._connected && this._peripheral.state === 'disconnecting') {
67
+ return 'disconnected';
68
+ }
69
+ else {
70
+ return this._peripheral.state;
71
+ }
72
+ }
73
+ // Setters
74
+ set onconnect(func) {
75
+ if (!func || typeof func !== 'function') {
76
+ throw new Error('The `onconnect` must be a function.');
77
+ }
78
+ this._onconnect = func;
79
+ }
80
+ set ondisconnect(func) {
81
+ if (!func || typeof func !== 'function') {
82
+ throw new Error('The `ondisconnect` must be a function.');
83
+ }
84
+ this._ondisconnect = func;
85
+ }
86
+ /* ------------------------------------------------------------------
87
+ * connect()
88
+ * - Connect the device
89
+ *
90
+ * [Arguments]
91
+ * - none
92
+ *
93
+ * [Return value]
94
+ * - Promise object
95
+ * Nothing will be passed to the `resolve()`.
96
+ * ---------------------------------------------------------------- */
97
+ connect() {
98
+ this._was_connected_explicitly = true;
99
+ return this._connect();
100
+ }
101
+ _connect() {
102
+ return new Promise((resolve, reject) => {
103
+ // Check the bluetooth state
104
+ if (this._noble.state !== 'poweredOn') {
105
+ reject(new Error('The Bluetooth status is ' + this._noble.state + ', not poweredOn.'));
106
+ return;
107
+ }
108
+ // Check the connection state
109
+ const state = this.connectionState;
110
+ if (state === 'connected') {
111
+ resolve();
112
+ return;
113
+ }
114
+ else if (state === 'connecting' || state === 'disconnecting') {
115
+ reject(new Error('Now ' + state + '. Wait for a few seconds then try again.'));
116
+ return;
117
+ }
118
+ // Set event handlers for events fired on the `Peripheral` object
119
+ this._peripheral.once('connect', () => {
120
+ this._connected = true;
121
+ this._onconnect();
122
+ });
123
+ this._peripheral.once('disconnect', () => {
124
+ this._connected = false;
125
+ this._chars = null;
126
+ this._peripheral.removeAllListeners();
127
+ this._ondisconnect_internal();
128
+ this._ondisconnect();
129
+ });
130
+ // Connect
131
+ this._peripheral.connect((error) => {
132
+ if (error) {
133
+ reject(error);
134
+ return;
135
+ }
136
+ this._getCharacteristics()
137
+ .then((chars) => {
138
+ this._chars = chars;
139
+ return this._subscribe();
140
+ })
141
+ .then(() => {
142
+ resolve();
143
+ })
144
+ .catch((error) => {
145
+ this._peripheral.disconnect();
146
+ reject(error);
147
+ });
148
+ });
149
+ });
150
+ }
151
+ _getCharacteristics() {
152
+ return new Promise((resolve, reject) => {
153
+ // Set timeout timer
154
+ let timer = setTimeout(() => {
155
+ this._ondisconnect_internal = () => { };
156
+ timer = null;
157
+ reject(new Error('Failed to discover services and characteristics: TIMEOUT'));
158
+ }, 5000);
159
+ // Watch the connection state
160
+ this._ondisconnect_internal = () => {
161
+ if (timer) {
162
+ clearTimeout(timer);
163
+ timer = null;
164
+ this._ondisconnect_internal = () => { };
165
+ }
166
+ reject(new Error('Failed to discover services and characteristics: DISCONNECTED'));
167
+ };
168
+ // Discover services and characteristics
169
+ (async () => {
170
+ const service_list = await this._discoverServices();
171
+ if (!timer) {
172
+ throw new Error('');
173
+ }
174
+ const chars = {
175
+ write: null,
176
+ notify: null,
177
+ device: null,
178
+ };
179
+ for (const service of service_list) {
180
+ const char_list = await this._discoverCharacteristics(service);
181
+ for (const char of char_list) {
182
+ if (char.uuid === this._CHAR_UUID_WRITE) {
183
+ chars.write = char;
184
+ }
185
+ else if (char.uuid === this._CHAR_UUID_NOTIFY) {
186
+ chars.notify = char;
187
+ }
188
+ else if (char.uuid === this._CHAR_UUID_DEVICE) {
189
+ // Some models of Bot don't seem to support this characteristic UUID
190
+ chars.device = char;
191
+ }
192
+ }
193
+ }
194
+ if (chars.write && chars.notify) {
195
+ resolve(chars);
196
+ }
197
+ else {
198
+ reject(new Error('No characteristic was found.'));
199
+ }
200
+ })().catch((error) => {
201
+ if (timer) {
202
+ clearTimeout(timer);
203
+ timer = null;
204
+ this._ondisconnect_internal = () => { };
205
+ reject(error);
206
+ }
207
+ else {
208
+ // Do nothing
209
+ }
210
+ });
211
+ });
212
+ }
213
+ _discoverServices() {
214
+ return new Promise((resolve, reject) => {
215
+ this._peripheral.discoverServices([], (error, service_list) => {
216
+ if (error) {
217
+ reject(error);
218
+ return;
219
+ }
220
+ let service = null;
221
+ for (const s of service_list) {
222
+ if (s.uuid === this._SERV_UUID_PRIMARY) {
223
+ service = s;
224
+ break;
225
+ }
226
+ }
227
+ if (service) {
228
+ resolve(service_list);
229
+ }
230
+ else {
231
+ reject(new Error('No service was found.'));
232
+ }
233
+ });
234
+ });
235
+ }
236
+ _discoverCharacteristics(service) {
237
+ return new Promise((resolve, reject) => {
238
+ service.discoverCharacteristics([], (error, char_list) => {
239
+ if (error) {
240
+ reject(error);
241
+ }
242
+ else {
243
+ resolve(char_list);
244
+ }
245
+ });
246
+ });
247
+ }
248
+ _subscribe() {
249
+ return new Promise((resolve, reject) => {
250
+ const char = this._chars.notify;
251
+ if (!char) {
252
+ reject(new Error('No notify characteristic was found.'));
253
+ return;
254
+ }
255
+ char.subscribe((error) => {
256
+ if (error) {
257
+ reject(error);
258
+ return;
259
+ }
260
+ char.on('data', () => {
261
+ this._onnotify_internal();
262
+ });
263
+ resolve();
264
+ });
265
+ });
266
+ }
267
+ _unsubscribe() {
268
+ return new Promise((resolve) => {
269
+ const char = this._chars.notify;
270
+ if (!char) {
271
+ resolve();
272
+ return;
273
+ }
274
+ char.removeAllListeners();
275
+ char.unsubscribe(() => {
276
+ resolve();
277
+ });
278
+ });
279
+ }
280
+ /* ------------------------------------------------------------------
281
+ * disconnect()
282
+ * - Disconnect the device
283
+ *
284
+ * [Arguments]
285
+ * - none
286
+ *
287
+ * [Return value]
288
+ * - Promise object
289
+ * Nothing will be passed to the `resolve()`.
290
+ * ---------------------------------------------------------------- */
291
+ disconnect() {
292
+ return new Promise((resolve, reject) => {
293
+ this._was_connected_explicitly = false;
294
+ // Check the connection state
295
+ const state = this._peripheral.state;
296
+ if (state === 'disconnected') {
297
+ resolve();
298
+ return;
299
+ }
300
+ else if (state === 'connecting' || state === 'disconnecting') {
301
+ reject(new Error('Now ' + state + '. Wait for a few seconds then try again.'));
302
+ return;
303
+ }
304
+ // Unsubscribe
305
+ this._unsubscribe().then(() => {
306
+ // Disconnect
307
+ this._peripheral.disconnect(() => {
308
+ resolve();
309
+ });
310
+ });
311
+ });
312
+ }
313
+ _disconnect() {
314
+ if (this._was_connected_explicitly) {
315
+ return new Promise((resolve) => {
316
+ resolve();
317
+ });
318
+ }
319
+ else {
320
+ return this.disconnect();
321
+ }
322
+ }
323
+ /* ------------------------------------------------------------------
324
+ * getDeviceName()
325
+ * - Retrieve the device name
326
+ *
327
+ * [Arguments]
328
+ * - none
329
+ *
330
+ * [Return value]
331
+ * - Promise object
332
+ * The device name will be passed to the `resolve()`.
333
+ * ---------------------------------------------------------------- */
334
+ getDeviceName() {
335
+ return new Promise((resolve, reject) => {
336
+ let name = '';
337
+ this._connect()
338
+ .then(() => {
339
+ if (!this._chars.device) {
340
+ // Some models of Bot don't seem to support this characteristic UUID
341
+ throw new Error('The device does not support the characteristic UUID 0x' +
342
+ this._CHAR_UUID_DEVICE +
343
+ '.');
344
+ }
345
+ return this._read(this._chars.device);
346
+ })
347
+ .then((buf) => {
348
+ name = buf.toString('utf8');
349
+ return this._disconnect();
350
+ })
351
+ .then(() => {
352
+ resolve(name);
353
+ })
354
+ .catch((error) => {
355
+ reject(error);
356
+ });
357
+ });
358
+ }
359
+ /* ------------------------------------------------------------------
360
+ * setDeviceName(name)
361
+ * - Set the device name
362
+ *
363
+ * [Arguments]
364
+ * - name | String | Required | Device name. The bytes length of the name
365
+ * | | | must be in the range of 1 to 20 bytes.
366
+ *
367
+ * [Return value]
368
+ * - Promise object
369
+ * Nothing will be passed to the `resolve()`.
370
+ * ---------------------------------------------------------------- */
371
+ setDeviceName(name) {
372
+ return new Promise((resolve, reject) => {
373
+ // Check the parameters
374
+ const valid = ParameterChecker.check({ name: name }, {
375
+ name: { required: true, type: 'string', minBytes: 1, maxBytes: 100 },
376
+ }, true);
377
+ if (!valid) {
378
+ reject(new Error(ParameterChecker.error.message));
379
+ return;
380
+ }
381
+ const buf = Buffer.from(name, 'utf8');
382
+ this._connect()
383
+ .then(() => {
384
+ if (!this._chars.device) {
385
+ // Some models of Bot don't seem to support this characteristic UUID
386
+ throw new Error('The device does not support the characteristic UUID 0x' +
387
+ this._CHAR_UUID_DEVICE +
388
+ '.');
389
+ }
390
+ return this._write(this._chars.device, buf);
391
+ })
392
+ .then(() => {
393
+ return this._disconnect();
394
+ })
395
+ .then(() => {
396
+ resolve();
397
+ })
398
+ .catch((error) => {
399
+ reject(error);
400
+ });
401
+ });
402
+ }
403
+ // Write the specified Buffer data to the write characteristic
404
+ // and receive the response from the notify characteristic
405
+ // with connection handling
406
+ _command(req_buf) {
407
+ return new Promise((resolve, reject) => {
408
+ if (!Buffer.isBuffer(req_buf)) {
409
+ reject(new Error('The specified data is not acceptable for writing.'));
410
+ return;
411
+ }
412
+ let res_buf;
413
+ this._connect()
414
+ .then(() => {
415
+ if (!this._chars) {
416
+ return reject(new Error('No characteristics available.'));
417
+ }
418
+ return this._write(this._chars.write, req_buf);
419
+ })
420
+ .then(() => {
421
+ return this._waitCommandResponse();
422
+ })
423
+ .then((buf) => {
424
+ res_buf = buf;
425
+ return this._disconnect();
426
+ })
427
+ .then(() => {
428
+ resolve(res_buf);
429
+ })
430
+ .catch((error) => {
431
+ reject(error);
432
+ });
433
+ });
434
+ }
435
+ _waitCommandResponse() {
436
+ return new Promise((resolve, reject) => {
437
+ const buf = null;
438
+ let timer = setTimeout(() => {
439
+ timer = undefined;
440
+ this._onnotify_internal = () => { };
441
+ reject(new Error('COMMAND_TIMEOUT'));
442
+ }, this._COMMAND_TIMEOUT_MSEC);
443
+ this._onnotify_internal = () => {
444
+ if (timer) {
445
+ clearTimeout(timer);
446
+ timer = undefined;
447
+ }
448
+ this._onnotify_internal = () => { };
449
+ resolve(buf);
450
+ };
451
+ });
452
+ }
453
+ // Read data from the specified characteristic
454
+ _read(char) {
455
+ return new Promise((resolve, reject) => {
456
+ // Set a timeout timer
457
+ let timer = setTimeout(() => {
458
+ reject('READ_TIMEOUT');
459
+ }, this._READ_TIMEOUT_MSEC);
460
+ // Read charcteristic data
461
+ char.read((error, buf) => {
462
+ if (timer) {
463
+ clearTimeout(timer);
464
+ timer = undefined;
465
+ }
466
+ if (error) {
467
+ reject(error);
468
+ }
469
+ else {
470
+ resolve(buf);
471
+ }
472
+ });
473
+ });
474
+ }
475
+ // Write the specified Buffer data to the specified characteristic
476
+ _write(char, buf) {
477
+ return new Promise((resolve, reject) => {
478
+ // Set a timeout timer
479
+ let timer = setTimeout(() => {
480
+ reject('WRITE_TIMEOUT');
481
+ }, this._WRITE_TIMEOUT_MSEC);
482
+ // write charcteristic data
483
+ char.write(buf, false, (error) => {
484
+ if (timer) {
485
+ clearTimeout(timer);
486
+ timer = undefined;
487
+ }
488
+ if (error) {
489
+ reject(error);
490
+ }
491
+ else {
492
+ resolve();
493
+ }
494
+ });
495
+ });
496
+ }
497
+ }
498
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './switchbot.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ /* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
2
+ *
3
+ * index.ts: Switchbot BLE API registration.
4
+ */
5
+ export * from './switchbot.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,25 @@
1
+ type Rule = {
2
+ required?: boolean;
3
+ min?: number;
4
+ max?: number;
5
+ minBytes?: number;
6
+ maxBytes?: number;
7
+ pattern?: RegExp;
8
+ enum?: any[];
9
+ };
10
+ export declare class ParameterChecker {
11
+ _error: any;
12
+ static error: any;
13
+ constructor();
14
+ get error(): any;
15
+ static isSpecified(value: any): boolean;
16
+ static check(obj: any, rules: any, required: any): boolean;
17
+ static isFloat(value: any, rule: Rule, name?: string): boolean;
18
+ static isInteger(value: any, rule: Rule, name?: string): boolean;
19
+ static isBoolean(value: any, rule: Rule, name?: string): boolean;
20
+ static isObject(value: any, rule: Rule, name?: string): boolean;
21
+ static isArray(value: any, rule: Rule, name?: string): boolean;
22
+ static isString(value: any, rule: Rule, name?: string): boolean;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=parameter-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-checker.d.ts","sourceRoot":"","sources":["../src/parameter-checker.ts"],"names":[],"mappings":"AAEA,KAAK,IAAI,GAAG;IACV,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;CACd,CAAC;AAEF,qBAAa,gBAAgB;IAE3B,MAAM,MAAC;IACP,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;;IAKlB,IAAI,KAAK,QAUR;IAED,MAAM,CAAC,WAAW,CAAC,KAAK,KAAA;IAqCxB,MAAM,CAAC,KAAK,CAAC,GAAG,KAAA,EAAE,KAAK,KAAA,EAAE,QAAQ,KAAA;IAsGjC,MAAM,CAAC,OAAO,CAAC,KAAK,KAAA,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAU;IAkFhD,MAAM,CAAC,SAAS,CAAC,KAAK,KAAA,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAU;IAqClD,MAAM,CAAC,SAAS,CAAC,KAAK,KAAA,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAU;IAgClD,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAA,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAU;IAoCjD,MAAM,CAAC,OAAO,CAAC,KAAK,KAAA,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAU;IAuEhD,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAA,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAU;CAuGlD"}