@ledgerhq/react-native-hw-transport-ble 6.25.2-monorepo.0 → 6.25.2-monorepo.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +44 -0
  3. package/lib/BleTransport.d.ts +69 -0
  4. package/lib/BleTransport.d.ts.map +1 -0
  5. package/lib/BleTransport.js +648 -0
  6. package/lib/BleTransport.js.map +1 -0
  7. package/lib/awaitsBleOn.d.ts +3 -0
  8. package/lib/awaitsBleOn.d.ts.map +1 -0
  9. package/lib/awaitsBleOn.js +38 -0
  10. package/lib/awaitsBleOn.js.map +1 -0
  11. package/lib/monitorCharacteristic.d.ts +5 -0
  12. package/lib/monitorCharacteristic.d.ts.map +1 -0
  13. package/lib/monitorCharacteristic.js +35 -0
  14. package/lib/monitorCharacteristic.js.map +1 -0
  15. package/lib/remapErrors.d.ts +4 -0
  16. package/lib/remapErrors.d.ts.map +1 -0
  17. package/lib/remapErrors.js +23 -0
  18. package/lib/remapErrors.js.map +1 -0
  19. package/lib/timer.d.ts +5 -0
  20. package/lib/timer.d.ts.map +1 -0
  21. package/lib/timer.js +26 -0
  22. package/lib/timer.js.map +1 -0
  23. package/lib/types.d.ts +4 -0
  24. package/lib/types.d.ts.map +1 -0
  25. package/lib/types.js +3 -0
  26. package/lib/types.js.map +1 -0
  27. package/lib-es/BleTransport.d.ts +69 -0
  28. package/lib-es/BleTransport.d.ts.map +1 -0
  29. package/lib-es/BleTransport.js +641 -0
  30. package/lib-es/BleTransport.js.map +1 -0
  31. package/lib-es/awaitsBleOn.d.ts +3 -0
  32. package/lib-es/awaitsBleOn.d.ts.map +1 -0
  33. package/lib-es/awaitsBleOn.js +31 -0
  34. package/lib-es/awaitsBleOn.js.map +1 -0
  35. package/lib-es/monitorCharacteristic.d.ts +5 -0
  36. package/lib-es/monitorCharacteristic.d.ts.map +1 -0
  37. package/lib-es/monitorCharacteristic.js +31 -0
  38. package/lib-es/monitorCharacteristic.js.map +1 -0
  39. package/lib-es/remapErrors.d.ts +4 -0
  40. package/lib-es/remapErrors.d.ts.map +1 -0
  41. package/lib-es/remapErrors.js +17 -0
  42. package/lib-es/remapErrors.js.map +1 -0
  43. package/lib-es/timer.d.ts +5 -0
  44. package/lib-es/timer.d.ts.map +1 -0
  45. package/lib-es/timer.js +24 -0
  46. package/lib-es/timer.js.map +1 -0
  47. package/lib-es/types.d.ts +4 -0
  48. package/lib-es/types.d.ts.map +1 -0
  49. package/lib-es/types.js +2 -0
  50. package/lib-es/types.js.map +1 -0
  51. package/package.json +5 -5
@@ -0,0 +1,3 @@
1
+ import type { BleManager } from "./types";
2
+ export declare const awaitsBleOn: (bleManager: BleManager, ms?: number) => Promise<void>;
3
+ //# sourceMappingURL=awaitsBleOn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awaitsBleOn.d.ts","sourceRoot":"","sources":["../src/awaitsBleOn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,eAAO,MAAM,WAAW,eAAgB,UAAU,kBAAc,QAAQ,IAAI,CAyBxE,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.awaitsBleOn = void 0;
7
+ var errors_1 = require("@ledgerhq/errors");
8
+ var logs_1 = require("@ledgerhq/logs");
9
+ var timer_1 = __importDefault(require("./timer"));
10
+ var awaitsBleOn = function (bleManager, ms) {
11
+ if (ms === void 0) { ms = 3000; }
12
+ return new Promise(function (resolve, reject) {
13
+ var done = false;
14
+ var lastState = "Unknown";
15
+ var stateSub = bleManager.onStateChange(function (state) {
16
+ lastState = state;
17
+ (0, logs_1.log)("ble-verbose", "ble state -> ".concat(state));
18
+ if (state === "PoweredOn") {
19
+ if (done)
20
+ return;
21
+ removeTimeout();
22
+ done = true;
23
+ stateSub.remove();
24
+ resolve();
25
+ }
26
+ }, true);
27
+ var removeTimeout = timer_1["default"].timeout(function () {
28
+ if (done)
29
+ return;
30
+ stateSub.remove();
31
+ reject(new errors_1.BluetoothRequired("", {
32
+ state: lastState
33
+ }));
34
+ }, ms);
35
+ });
36
+ };
37
+ exports.awaitsBleOn = awaitsBleOn;
38
+ //# sourceMappingURL=awaitsBleOn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awaitsBleOn.js","sourceRoot":"","sources":["../src/awaitsBleOn.ts"],"names":[],"mappings":";;;;;;AAAA,2CAAqD;AACrD,uCAAqC;AACrC,kDAA4B;AAErB,IAAM,WAAW,GAAG,UAAC,UAAsB,EAAE,EAAS;IAAT,mBAAA,EAAA,SAAS;IAC3D,OAAA,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QAC1B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,SAAS,GAAG,SAAS,CAAC;QAC1B,IAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,UAAC,KAAK;YAC9C,SAAS,GAAG,KAAK,CAAC;YAClB,IAAA,UAAG,EAAC,aAAa,EAAE,uBAAgB,KAAK,CAAE,CAAC,CAAC;YAE5C,IAAI,KAAK,KAAK,WAAW,EAAE;gBACzB,IAAI,IAAI;oBAAE,OAAO;gBACjB,aAAa,EAAE,CAAC;gBAChB,IAAI,GAAG,IAAI,CAAC;gBACZ,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;aACX;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,IAAM,aAAa,GAAG,kBAAK,CAAC,OAAO,CAAC;YAClC,IAAI,IAAI;gBAAE,OAAO;YACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,CACJ,IAAI,0BAAiB,CAAC,EAAE,EAAE;gBACxB,KAAK,EAAE,SAAS;aACjB,CAAC,CACH,CAAC;QACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;AAxBF,CAwBE,CAAC;AAzBQ,QAAA,WAAW,eAyBnB"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="node" />
2
+ import { Observable } from "rxjs";
3
+ import type { Characteristic } from "./types";
4
+ export declare const monitorCharacteristic: (characteristic: Characteristic) => Observable<Buffer>;
5
+ //# sourceMappingURL=monitorCharacteristic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitorCharacteristic.d.ts","sourceRoot":"","sources":["../src/monitorCharacteristic.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,qBAAqB,mBAChB,cAAc,KAC7B,WAAW,MAAM,CA8BhB,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.monitorCharacteristic = void 0;
4
+ var rxjs_1 = require("rxjs");
5
+ var errors_1 = require("@ledgerhq/errors");
6
+ var logs_1 = require("@ledgerhq/logs");
7
+ var monitorCharacteristic = function (characteristic) {
8
+ return new rxjs_1.Observable(function (o) {
9
+ (0, logs_1.log)("ble-verbose", "start monitor " + characteristic.uuid);
10
+ var subscription = characteristic.monitor(function (error, c) {
11
+ if (error) {
12
+ (0, logs_1.log)("ble-verbose", "error monitor " + characteristic.uuid + ": " + error);
13
+ o.error(error);
14
+ }
15
+ else if (!c) {
16
+ o.error(new errors_1.TransportError("characteristic monitor null value", "CharacteristicMonitorNull"));
17
+ }
18
+ else {
19
+ try {
20
+ var value = Buffer.from(c.value, "base64");
21
+ o.next(value);
22
+ }
23
+ catch (error) {
24
+ o.error(error);
25
+ }
26
+ }
27
+ });
28
+ return function () {
29
+ (0, logs_1.log)("ble-verbose", "end monitor " + characteristic.uuid);
30
+ subscription.remove();
31
+ };
32
+ });
33
+ };
34
+ exports.monitorCharacteristic = monitorCharacteristic;
35
+ //# sourceMappingURL=monitorCharacteristic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitorCharacteristic.js","sourceRoot":"","sources":["../src/monitorCharacteristic.ts"],"names":[],"mappings":";;;AAAA,6BAAkC;AAClC,2CAAkD;AAElD,uCAAqC;AAC9B,IAAM,qBAAqB,GAAG,UACnC,cAA8B;IAE9B,OAAA,IAAI,iBAAU,CAAC,UAAC,CAAC;QACf,IAAA,UAAG,EAAC,aAAa,EAAE,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,CAAC;YACnD,IAAI,KAAK,EAAE;gBACT,IAAA,UAAG,EACD,aAAa,EACb,gBAAgB,GAAG,cAAc,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CACtD,CAAC;gBACF,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAChB;iBAAM,IAAI,CAAC,CAAC,EAAE;gBACb,CAAC,CAAC,KAAK,CACL,IAAI,uBAAc,CAChB,mCAAmC,EACnC,2BAA2B,CAC5B,CACF,CAAC;aACH;iBAAM;gBACL,IAAI;oBACF,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACf;gBAAC,OAAO,KAAK,EAAE;oBACd,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAChB;aACF;QACH,CAAC,CAAC,CAAC;QACH,OAAO;YACL,IAAA,UAAG,EAAC,aAAa,EAAE,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACzD,YAAY,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC,CAAC;AA7BF,CA6BE,CAAC;AAhCQ,QAAA,qBAAqB,yBAgC7B"}
@@ -0,0 +1,4 @@
1
+ export declare const remapError: (error: Error | null | undefined) => any;
2
+ export declare const rethrowError: (e: Error | null | undefined) => never;
3
+ export declare const decoratePromiseErrors: <A>(promise: Promise<A>) => Promise<A>;
4
+ //# sourceMappingURL=remapErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remapErrors.d.ts","sourceRoot":"","sources":["../src/remapErrors.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,UAAW,KAAK,GAAG,IAAI,GAAG,SAAS,QAWzD,CAAC;AACF,eAAO,MAAM,YAAY,MAAO,KAAK,GAAG,IAAI,GAAG,SAAS,UAEvD,CAAC;AACF,eAAO,MAAM,qBAAqB,wCACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.decoratePromiseErrors = exports.rethrowError = exports.remapError = void 0;
4
+ var errors_1 = require("@ledgerhq/errors");
5
+ var remapError = function (error) {
6
+ if (!error || !error.message)
7
+ return error;
8
+ if (error.message.includes("was disconnected") ||
9
+ error.message.includes("not found")) {
10
+ return new errors_1.DisconnectedDevice();
11
+ }
12
+ return error;
13
+ };
14
+ exports.remapError = remapError;
15
+ var rethrowError = function (e) {
16
+ throw (0, exports.remapError)(e);
17
+ };
18
+ exports.rethrowError = rethrowError;
19
+ var decoratePromiseErrors = function (promise) {
20
+ return promise["catch"](exports.rethrowError);
21
+ };
22
+ exports.decoratePromiseErrors = decoratePromiseErrors;
23
+ //# sourceMappingURL=remapErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remapErrors.js","sourceRoot":"","sources":["../src/remapErrors.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AAC/C,IAAM,UAAU,GAAG,UAAC,KAA+B;IACxD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3C,IACE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC1C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EACnC;QACA,OAAO,IAAI,2BAAkB,EAAE,CAAC;KACjC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAXW,QAAA,UAAU,cAWrB;AACK,IAAM,YAAY,GAAG,UAAC,CAA2B;IACtD,MAAM,IAAA,kBAAU,EAAC,CAAC,CAAC,CAAC;AACtB,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB;AACK,IAAM,qBAAqB,GAAG,UAAI,OAAmB;IAC1D,OAAA,OAAO,CAAC,OAAK,CAAA,CAAC,oBAAY,CAAC;AAA3B,CAA2B,CAAC;AADjB,QAAA,qBAAqB,yBACJ"}
package/lib/timer.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ declare const timer: {
2
+ timeout: (fn: (...args: Array<any>) => any, ms: number) => () => void;
3
+ };
4
+ export default timer;
5
+ //# sourceMappingURL=timer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../src/timer.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK;4BAGqB,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM,MAAM;CAmBvD,CAAC;AACR,eAAe,KAAK,CAAC"}
package/lib/timer.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ var timer = process.env.NODE_ENV === "development"
4
+ ? {
5
+ timeout: function (fn, ms) {
6
+ // hack for a bug in RN https://github.com/facebook/react-native/issues/9030
7
+ var startTime = Date.now();
8
+ var interval = setInterval(function () {
9
+ if (Date.now() - startTime >= ms) {
10
+ clearInterval(interval);
11
+ fn();
12
+ }
13
+ }, 100);
14
+ return function () {
15
+ clearInterval(interval);
16
+ };
17
+ }
18
+ }
19
+ : {
20
+ timeout: function (fn, ms) {
21
+ var timeout = setTimeout(fn, ms);
22
+ return function () { return clearTimeout(timeout); };
23
+ }
24
+ };
25
+ exports["default"] = timer;
26
+ //# sourceMappingURL=timer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer.js","sourceRoot":"","sources":["../src/timer.ts"],"names":[],"mappings":";;AAAA,IAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;IACpC,CAAC,CAAC;QACE,OAAO,EAAE,UAAC,EAAgC,EAAE,EAAU;YACpD,4EAA4E;YAC5E,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAM,QAAQ,GAAG,WAAW,CAAC;gBAC3B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,EAAE,EAAE;oBAChC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACxB,EAAE,EAAE,CAAC;iBACN;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,OAAO;gBACL,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC,CAAC;QACJ,CAAC;KACF;IACH,CAAC,CAAC;QACE,OAAO,EAAE,UAAC,EAAgC,EAAE,EAAU;YACpD,IAAM,OAAO,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACnC,OAAO,cAAM,OAAA,YAAY,CAAC,OAAO,CAAC,EAArB,CAAqB,CAAC;QACrC,CAAC;KACF,CAAC;AACR,qBAAe,KAAK,CAAC"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export type { BleManager } from "react-native-ble-plx";
2
+ export declare type Device = any;
3
+ export declare type Characteristic = any;
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,oBAAY,MAAM,GAAG,GAAG,CAAC;AACzB,oBAAY,cAAc,GAAG,GAAG,CAAC"}
package/lib/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ /// <reference types="node" />
2
+ import Transport from "@ledgerhq/hw-transport";
3
+ import type { DeviceModel } from "@ledgerhq/devices";
4
+ import { Observable } from "rxjs";
5
+ import type { Device, Characteristic } from "./types";
6
+ declare type ReconnectionConfig = {
7
+ pairingThreshold: number;
8
+ delayAfterFirstPairing: number;
9
+ };
10
+ export declare function setReconnectionConfig(config: ReconnectionConfig | null | undefined): void;
11
+ /**
12
+ * react-native bluetooth BLE implementation
13
+ * @example
14
+ * import BluetoothTransport from "@ledgerhq/react-native-hw-transport-ble";
15
+ */
16
+ export default class BluetoothTransport extends Transport {
17
+ /**
18
+ *
19
+ */
20
+ static isSupported: () => Promise<boolean>;
21
+ /**
22
+ *
23
+ */
24
+ static setLogLevel: (level: any) => void;
25
+ /**
26
+ * TODO could add this concept in all transports
27
+ * observe event with { available: bool, string } // available is generic, type is specific
28
+ * an event is emit once and then listened
29
+ */
30
+ static observeState(observer: any): {
31
+ unsubscribe: () => void;
32
+ };
33
+ static list: () => any;
34
+ /**
35
+ * Scan for bluetooth Ledger devices
36
+ */
37
+ static listen(observer: any): {
38
+ unsubscribe: () => void;
39
+ };
40
+ /**
41
+ * Open a BLE transport
42
+ * @param {*} deviceOrId
43
+ */
44
+ static open(deviceOrId: Device | string): Promise<any>;
45
+ /**
46
+ * Globally disconnect a BLE device by its ID
47
+ */
48
+ static disconnect: (id: any) => Promise<void>;
49
+ id: string;
50
+ device: Device;
51
+ mtuSize: number;
52
+ writeCharacteristic: Characteristic;
53
+ writeCmdCharacteristic: Characteristic;
54
+ notifyObservable: Observable<any>;
55
+ deviceModel: DeviceModel;
56
+ notYetDisconnected: boolean;
57
+ constructor(device: Device, writeCharacteristic: Characteristic, writeCmdCharacteristic: Characteristic, notifyObservable: Observable<any>, deviceModel: DeviceModel);
58
+ /**
59
+ * communicate with a BLE transport
60
+ */
61
+ exchange: (apdu: Buffer) => Promise<any>;
62
+ inferMTU(): Promise<number>;
63
+ requestConnectionPriority(connectionPriority: "Balanced" | "High" | "LowPower"): Promise<void>;
64
+ setScrambleKey(): void;
65
+ write: (buffer: Buffer, txid?: string | null | undefined) => Promise<void>;
66
+ close(): Promise<void>;
67
+ }
68
+ export {};
69
+ //# sourceMappingURL=BleTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BleTransport.d.ts","sourceRoot":"","sources":["../src/BleTransport.ts"],"names":[],"mappings":";AACA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAU/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,EAAE,UAAU,EAAsC,MAAM,MAAM,CAAC;AAetE,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAoBtD,aAAK,kBAAkB,GAAG;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAAC;AAKF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,QAG9C;AAmOD;;;;GAIG;AAEH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS;IACvD;;OAEG;IACH,MAAM,CAAC,WAAW,QAAO,QAAQ,OAAO,CAAC,CACW;IAEpD;;OAEG;IACH,MAAM,CAAC,WAAW,UAAW,GAAG,UAE9B;IAEF;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG;;;IAcjC,MAAM,CAAC,IAAI,QAAO,GAAG,CAEnB;IAEF;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG;;;IAmD3B;;;OAGG;WACU,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI7C;;OAEG;IACH,MAAM,CAAC,UAAU,OAAc,GAAG,mBAGhC;IACF,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,SAAM;IACb,mBAAmB,EAAE,cAAc,CAAC;IACpC,sBAAsB,EAAE,cAAc,CAAC;IACvC,gBAAgB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAClC,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,UAAQ;gBAGxB,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,cAAc,EACnC,sBAAsB,EAAE,cAAc,EACtC,gBAAgB,EAAE,UAAU,CAAC,GAAG,CAAC,EACjC,WAAW,EAAE,WAAW;IAY1B;;OAEG;IACH,QAAQ,SAAU,MAAM,KAAG,QAAQ,GAAG,CAAC,CAuBlC;IAGC,QAAQ;IAqCR,yBAAyB,CAC7B,kBAAkB,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU;IAStD,cAAc;IAEd,KAAK,WAAkB,MAAM,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,mBAsB7D;IAEI,KAAK;CAKZ"}