@bcts/sskr 1.0.0-alpha.9 → 1.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.
- package/LICENSE +3 -2
- package/dist/index.cjs +131 -85
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +46 -25
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +46 -25
- package/dist/index.d.mts.map +1 -1
- package/dist/index.iife.js +163 -118
- package/dist/index.iife.js.map +1 -1
- package/dist/index.mjs +118 -72
- package/dist/index.mjs.map +1 -1
- package/package.json +16 -17
- package/src/encoding.ts +19 -4
- package/src/error.ts +15 -1
- package/src/index.ts +6 -3
- package/src/secret.ts +18 -0
- package/src/share.ts +6 -0
- package/src/spec.ts +39 -5
package/dist/index.d.cts
CHANGED
|
@@ -20,7 +20,7 @@ declare enum SSKRErrorType {
|
|
|
20
20
|
ShareReservedBitsInvalid = "ShareReservedBitsInvalid",
|
|
21
21
|
SharesEmpty = "SharesEmpty",
|
|
22
22
|
ShareSetInvalid = "ShareSetInvalid",
|
|
23
|
-
ShamirError = "ShamirError"
|
|
23
|
+
ShamirError = "ShamirError"
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Error class for SSKR operations.
|
|
@@ -32,9 +32,22 @@ declare class SSKRError extends Error {
|
|
|
32
32
|
private static defaultMessage;
|
|
33
33
|
static fromShamirError(error: ShamirError): SSKRError;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Mirrors Rust's `Result<T, Error>` (`bc-sskr-rust/src/error.rs:54`).
|
|
37
|
+
*
|
|
38
|
+
* The TypeScript port surfaces failures by throwing {@link SSKRError}
|
|
39
|
+
* rather than returning a sum type, so this alias is a no-op
|
|
40
|
+
* (`SSKRResult<T>` ≡ `T`). It is kept so signatures published in
|
|
41
|
+
* `@bcts/sskr` remain visually parallel to their Rust counterparts.
|
|
42
|
+
*/
|
|
35
43
|
type SSKRResult<T> = T;
|
|
36
44
|
//#endregion
|
|
37
45
|
//#region src/secret.d.ts
|
|
46
|
+
/**
|
|
47
|
+
* Copyright © 2023-2026 Blockchain Commons, LLC
|
|
48
|
+
* Copyright © 2025-2026 Parity Technologies
|
|
49
|
+
*
|
|
50
|
+
*/
|
|
38
51
|
/**
|
|
39
52
|
* A secret to be split into shares.
|
|
40
53
|
*/
|
|
@@ -60,10 +73,22 @@ declare class Secret {
|
|
|
60
73
|
isEmpty(): boolean;
|
|
61
74
|
/**
|
|
62
75
|
* Returns a reference to the secret data.
|
|
76
|
+
*
|
|
77
|
+
* Mirrors Rust's `Secret::data(&self) -> &[u8]`
|
|
78
|
+
* (`bc-sskr-rust/src/secret.rs:43`).
|
|
63
79
|
*/
|
|
64
80
|
getData(): Uint8Array;
|
|
65
81
|
/**
|
|
66
82
|
* Returns the secret data as a Uint8Array.
|
|
83
|
+
*
|
|
84
|
+
* Mirrors Rust's `impl AsRef<[u8]> for Secret`
|
|
85
|
+
* (`bc-sskr-rust/src/secret.rs:46-49`). In Rust, `as_ref()` is
|
|
86
|
+
* provided via the `AsRef<[u8]>` trait, which lets the `Secret` flow
|
|
87
|
+
* naturally through any API expecting `impl AsRef<[u8]>`. TypeScript
|
|
88
|
+
* has no equivalent of that trait, so we expose the same backing
|
|
89
|
+
* buffer through both {@link getData} (the field accessor) and
|
|
90
|
+
* `asRef` (the trait-style accessor) for ergonomic parity. Callers
|
|
91
|
+
* may pick whichever name reads better at the call site.
|
|
67
92
|
*/
|
|
68
93
|
asRef(): Uint8Array;
|
|
69
94
|
/**
|
|
@@ -77,6 +102,11 @@ declare class Secret {
|
|
|
77
102
|
}
|
|
78
103
|
//#endregion
|
|
79
104
|
//#region src/spec.d.ts
|
|
105
|
+
/**
|
|
106
|
+
* Copyright © 2023-2026 Blockchain Commons, LLC
|
|
107
|
+
* Copyright © 2025-2026 Parity Technologies
|
|
108
|
+
*
|
|
109
|
+
*/
|
|
80
110
|
/**
|
|
81
111
|
* A specification for a group of shares within an SSKR split.
|
|
82
112
|
*/
|
|
@@ -106,7 +136,15 @@ declare class GroupSpec {
|
|
|
106
136
|
memberCount(): number;
|
|
107
137
|
/**
|
|
108
138
|
* Parses a group specification from a string.
|
|
109
|
-
* Format: "M-of-N" where M is the threshold and N is the count.
|
|
139
|
+
* Format: `"M-of-N"` where `M` is the threshold and `N` is the count.
|
|
140
|
+
*
|
|
141
|
+
* Mirrors Rust's `GroupSpec::parse` (`bc-sskr-rust/src/spec.rs:97-112`),
|
|
142
|
+
* which calls `parts[0].parse::<usize>()`. Rust's `usize::FromStr` is
|
|
143
|
+
* strict: it rejects whitespace, decimals, trailing characters, and the
|
|
144
|
+
* `-` sign, accepting only an optional `+` prefix followed by digits.
|
|
145
|
+
* We mirror that with the regex `^\+?\d+$` so strings like `"2.5"`,
|
|
146
|
+
* `"2x"`, `" 2"`, `"-2"`, and `""` all surface
|
|
147
|
+
* {@link SSKRErrorType.GroupSpecInvalid} on both sides.
|
|
110
148
|
*/
|
|
111
149
|
static parse(s: string): GroupSpec;
|
|
112
150
|
/**
|
|
@@ -156,28 +194,6 @@ declare class Spec {
|
|
|
156
194
|
shareCount(): number;
|
|
157
195
|
}
|
|
158
196
|
//#endregion
|
|
159
|
-
//#region src/share.d.ts
|
|
160
|
-
/**
|
|
161
|
-
* A share in the SSKR scheme.
|
|
162
|
-
*/
|
|
163
|
-
declare class SSKRShare {
|
|
164
|
-
private readonly _identifier;
|
|
165
|
-
private readonly _groupIndex;
|
|
166
|
-
private readonly _groupThreshold;
|
|
167
|
-
private readonly _groupCount;
|
|
168
|
-
private readonly _memberIndex;
|
|
169
|
-
private readonly _memberThreshold;
|
|
170
|
-
private readonly _value;
|
|
171
|
-
constructor(identifier: number, groupIndex: number, groupThreshold: number, groupCount: number, memberIndex: number, memberThreshold: number, value: Secret);
|
|
172
|
-
identifier(): number;
|
|
173
|
-
groupIndex(): number;
|
|
174
|
-
groupThreshold(): number;
|
|
175
|
-
groupCount(): number;
|
|
176
|
-
memberIndex(): number;
|
|
177
|
-
memberThreshold(): number;
|
|
178
|
-
value(): Secret;
|
|
179
|
-
}
|
|
180
|
-
//#endregion
|
|
181
197
|
//#region src/encoding.d.ts
|
|
182
198
|
/**
|
|
183
199
|
* Generates SSKR shares for the given Spec and Secret.
|
|
@@ -211,6 +227,11 @@ declare function sskrGenerateUsing(spec: Spec, masterSecret: Secret, randomGener
|
|
|
211
227
|
declare function sskrCombine(shares: Uint8Array[]): Secret;
|
|
212
228
|
//#endregion
|
|
213
229
|
//#region src/index.d.ts
|
|
230
|
+
/**
|
|
231
|
+
* Copyright © 2023-2026 Blockchain Commons, LLC
|
|
232
|
+
* Copyright © 2025-2026 Parity Technologies
|
|
233
|
+
*
|
|
234
|
+
*/
|
|
214
235
|
/**
|
|
215
236
|
* The minimum length of a secret.
|
|
216
237
|
*/
|
|
@@ -236,5 +257,5 @@ declare const METADATA_SIZE_BYTES = 5;
|
|
|
236
257
|
*/
|
|
237
258
|
declare const MIN_SERIALIZE_SIZE_BYTES: any;
|
|
238
259
|
//#endregion
|
|
239
|
-
export { GroupSpec, MAX_GROUPS_COUNT, MAX_SECRET_LEN, MAX_SHARE_COUNT, METADATA_SIZE_BYTES, MIN_SECRET_LEN, MIN_SERIALIZE_SIZE_BYTES, SSKRError, SSKRErrorType, type SSKRResult,
|
|
260
|
+
export { GroupSpec, MAX_GROUPS_COUNT, MAX_SECRET_LEN, MAX_SHARE_COUNT, METADATA_SIZE_BYTES, MIN_SECRET_LEN, MIN_SERIALIZE_SIZE_BYTES, SSKRError, SSKRErrorType, type SSKRResult, Secret, Spec, sskrCombine, sskrGenerate, sskrGenerateUsing };
|
|
240
261
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/error.ts","../src/secret.ts","../src/spec.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/error.ts","../src/secret.ts","../src/spec.ts","../src/encoding.ts","../src/index.ts"],"mappings":";;;;;;;aAaY,aAAA;EACV,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,kBAAA;EACA,sBAAA;EACA,eAAA;EACA,mBAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;AAAA;;;;cAMW,SAAA,SAAkB,KAAA;EAAA,SACpB,IAAA,EAAM,aAAA;EAAA,SACN,WAAA,GAAc,WAAA;cAEX,IAAA,EAAM,aAAA,EAAe,OAAA,WAAkB,WAAA,GAAc,WAAA;EAAA,eAOlD,cAAA;EAAA,OAqCR,eAAA,CAAgB,KAAA,EAAO,WAAA,GAAc,SAAA;AAAA;;;;;;;;;KAalC,UAAA,MAAgB,CAAA;;;;;;;AAlF5B;;;;cCCa,MAAA;EAAA,iBACM,IAAA;EAAA,QAEV,WAAA,CAAA;EDAP;;;;;;;;EAAA,OCYO,GAAA,CAAI,IAAA,EAAM,UAAA,YAAsB,MAAA;EDHvC;;;ECuBA,GAAA,CAAA;EDrBW;AAMb;;ECsBE,OAAA,CAAA;EDrBe;;;;;;EC+Bf,OAAA,CAAA,GAAW,UAAA;EDhCuB;;;;;;;;;;;;ECgDlC,KAAA,CAAA,GAAS,UAAA;EDrCM;;;EC4Cf,MAAA,CAAO,KAAA,EAAO,MAAA;EDP8B;;;ECsB5C,KAAA,CAAA,GAAS,MAAA;AAAA;;;;;;;AD3FX;;;;cEqBa,SAAA;EAAA,iBACM,gBAAA;EAAA,iBACA,YAAA;EAAA,QAEV,WAAA,CAAA;EFpBP;;;;;;;;;;;EAAA,OEoCO,GAAA,CAAI,eAAA,UAAyB,WAAA,WAAsB,SAAA;EF1B/C;AAMb;;EEoCE,eAAA,CAAA;EFnCe;;;EE0Cf,WAAA,CAAA;EFK8B;;;;;;;;;;;;EAAA,OEWvB,KAAA,CAAM,CAAA,WAAY,SAAA;EFvDQ;;;EAAA,OEiF1B,OAAA,CAAA,GAAW,SAAA;EFrCX;;;EE4CP,QAAA,CAAA;AAAA;;AF/BF;;cEuCa,IAAA;EAAA,iBACM,eAAA;EAAA,iBACA,OAAA;EAAA,QAEV,WAAA,CAAA;;;AD5HT;;;;;;;;;;SC6IS,GAAA,CAAI,cAAA,UAAwB,MAAA,EAAQ,SAAA,KAAc,IAAA;ED5IxC;;;EC4JjB,cAAA,CAAA;ED9IW;;;ECqJX,MAAA,CAAA,GAAU,SAAA;EDhHV;;;ECuHA,UAAA,CAAA;EDhGA;;;ECuGA,UAAA,CAAA;AAAA;;;;;;;;;;;iBCtKc,YAAA,CAAa,IAAA,EAAM,IAAA,EAAM,YAAA,EAAc,MAAA,GAAS,UAAA;;;;;;;;;AHQhE;;;iBGQgB,iBAAA,CACd,IAAA,EAAM,IAAA,EACN,YAAA,EAAc,MAAA,EACd,eAAA,EAAiB,qBAAA,GAChB,UAAA;;;;;;;;;iBAgBa,WAAA,CAAY,MAAA,EAAQ,UAAA,KAAe,MAAA;;;;;;;AHjDnD;;;;cIYa,cAAA;;;;cAKA,cAAA;;;;cAKA,eAAA;;;;cAKA,gBAAA;;;;cAKA,mBAAA;AJXb;;;AAAA,cIgBa,wBAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -20,7 +20,7 @@ declare enum SSKRErrorType {
|
|
|
20
20
|
ShareReservedBitsInvalid = "ShareReservedBitsInvalid",
|
|
21
21
|
SharesEmpty = "SharesEmpty",
|
|
22
22
|
ShareSetInvalid = "ShareSetInvalid",
|
|
23
|
-
ShamirError = "ShamirError"
|
|
23
|
+
ShamirError = "ShamirError"
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Error class for SSKR operations.
|
|
@@ -32,9 +32,22 @@ declare class SSKRError extends Error {
|
|
|
32
32
|
private static defaultMessage;
|
|
33
33
|
static fromShamirError(error: ShamirError): SSKRError;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Mirrors Rust's `Result<T, Error>` (`bc-sskr-rust/src/error.rs:54`).
|
|
37
|
+
*
|
|
38
|
+
* The TypeScript port surfaces failures by throwing {@link SSKRError}
|
|
39
|
+
* rather than returning a sum type, so this alias is a no-op
|
|
40
|
+
* (`SSKRResult<T>` ≡ `T`). It is kept so signatures published in
|
|
41
|
+
* `@bcts/sskr` remain visually parallel to their Rust counterparts.
|
|
42
|
+
*/
|
|
35
43
|
type SSKRResult<T> = T;
|
|
36
44
|
//#endregion
|
|
37
45
|
//#region src/secret.d.ts
|
|
46
|
+
/**
|
|
47
|
+
* Copyright © 2023-2026 Blockchain Commons, LLC
|
|
48
|
+
* Copyright © 2025-2026 Parity Technologies
|
|
49
|
+
*
|
|
50
|
+
*/
|
|
38
51
|
/**
|
|
39
52
|
* A secret to be split into shares.
|
|
40
53
|
*/
|
|
@@ -60,10 +73,22 @@ declare class Secret {
|
|
|
60
73
|
isEmpty(): boolean;
|
|
61
74
|
/**
|
|
62
75
|
* Returns a reference to the secret data.
|
|
76
|
+
*
|
|
77
|
+
* Mirrors Rust's `Secret::data(&self) -> &[u8]`
|
|
78
|
+
* (`bc-sskr-rust/src/secret.rs:43`).
|
|
63
79
|
*/
|
|
64
80
|
getData(): Uint8Array;
|
|
65
81
|
/**
|
|
66
82
|
* Returns the secret data as a Uint8Array.
|
|
83
|
+
*
|
|
84
|
+
* Mirrors Rust's `impl AsRef<[u8]> for Secret`
|
|
85
|
+
* (`bc-sskr-rust/src/secret.rs:46-49`). In Rust, `as_ref()` is
|
|
86
|
+
* provided via the `AsRef<[u8]>` trait, which lets the `Secret` flow
|
|
87
|
+
* naturally through any API expecting `impl AsRef<[u8]>`. TypeScript
|
|
88
|
+
* has no equivalent of that trait, so we expose the same backing
|
|
89
|
+
* buffer through both {@link getData} (the field accessor) and
|
|
90
|
+
* `asRef` (the trait-style accessor) for ergonomic parity. Callers
|
|
91
|
+
* may pick whichever name reads better at the call site.
|
|
67
92
|
*/
|
|
68
93
|
asRef(): Uint8Array;
|
|
69
94
|
/**
|
|
@@ -77,6 +102,11 @@ declare class Secret {
|
|
|
77
102
|
}
|
|
78
103
|
//#endregion
|
|
79
104
|
//#region src/spec.d.ts
|
|
105
|
+
/**
|
|
106
|
+
* Copyright © 2023-2026 Blockchain Commons, LLC
|
|
107
|
+
* Copyright © 2025-2026 Parity Technologies
|
|
108
|
+
*
|
|
109
|
+
*/
|
|
80
110
|
/**
|
|
81
111
|
* A specification for a group of shares within an SSKR split.
|
|
82
112
|
*/
|
|
@@ -106,7 +136,15 @@ declare class GroupSpec {
|
|
|
106
136
|
memberCount(): number;
|
|
107
137
|
/**
|
|
108
138
|
* Parses a group specification from a string.
|
|
109
|
-
* Format: "M-of-N" where M is the threshold and N is the count.
|
|
139
|
+
* Format: `"M-of-N"` where `M` is the threshold and `N` is the count.
|
|
140
|
+
*
|
|
141
|
+
* Mirrors Rust's `GroupSpec::parse` (`bc-sskr-rust/src/spec.rs:97-112`),
|
|
142
|
+
* which calls `parts[0].parse::<usize>()`. Rust's `usize::FromStr` is
|
|
143
|
+
* strict: it rejects whitespace, decimals, trailing characters, and the
|
|
144
|
+
* `-` sign, accepting only an optional `+` prefix followed by digits.
|
|
145
|
+
* We mirror that with the regex `^\+?\d+$` so strings like `"2.5"`,
|
|
146
|
+
* `"2x"`, `" 2"`, `"-2"`, and `""` all surface
|
|
147
|
+
* {@link SSKRErrorType.GroupSpecInvalid} on both sides.
|
|
110
148
|
*/
|
|
111
149
|
static parse(s: string): GroupSpec;
|
|
112
150
|
/**
|
|
@@ -156,28 +194,6 @@ declare class Spec {
|
|
|
156
194
|
shareCount(): number;
|
|
157
195
|
}
|
|
158
196
|
//#endregion
|
|
159
|
-
//#region src/share.d.ts
|
|
160
|
-
/**
|
|
161
|
-
* A share in the SSKR scheme.
|
|
162
|
-
*/
|
|
163
|
-
declare class SSKRShare {
|
|
164
|
-
private readonly _identifier;
|
|
165
|
-
private readonly _groupIndex;
|
|
166
|
-
private readonly _groupThreshold;
|
|
167
|
-
private readonly _groupCount;
|
|
168
|
-
private readonly _memberIndex;
|
|
169
|
-
private readonly _memberThreshold;
|
|
170
|
-
private readonly _value;
|
|
171
|
-
constructor(identifier: number, groupIndex: number, groupThreshold: number, groupCount: number, memberIndex: number, memberThreshold: number, value: Secret);
|
|
172
|
-
identifier(): number;
|
|
173
|
-
groupIndex(): number;
|
|
174
|
-
groupThreshold(): number;
|
|
175
|
-
groupCount(): number;
|
|
176
|
-
memberIndex(): number;
|
|
177
|
-
memberThreshold(): number;
|
|
178
|
-
value(): Secret;
|
|
179
|
-
}
|
|
180
|
-
//#endregion
|
|
181
197
|
//#region src/encoding.d.ts
|
|
182
198
|
/**
|
|
183
199
|
* Generates SSKR shares for the given Spec and Secret.
|
|
@@ -211,6 +227,11 @@ declare function sskrGenerateUsing(spec: Spec, masterSecret: Secret, randomGener
|
|
|
211
227
|
declare function sskrCombine(shares: Uint8Array[]): Secret;
|
|
212
228
|
//#endregion
|
|
213
229
|
//#region src/index.d.ts
|
|
230
|
+
/**
|
|
231
|
+
* Copyright © 2023-2026 Blockchain Commons, LLC
|
|
232
|
+
* Copyright © 2025-2026 Parity Technologies
|
|
233
|
+
*
|
|
234
|
+
*/
|
|
214
235
|
/**
|
|
215
236
|
* The minimum length of a secret.
|
|
216
237
|
*/
|
|
@@ -236,5 +257,5 @@ declare const METADATA_SIZE_BYTES = 5;
|
|
|
236
257
|
*/
|
|
237
258
|
declare const MIN_SERIALIZE_SIZE_BYTES: any;
|
|
238
259
|
//#endregion
|
|
239
|
-
export { GroupSpec, MAX_GROUPS_COUNT, MAX_SECRET_LEN, MAX_SHARE_COUNT, METADATA_SIZE_BYTES, MIN_SECRET_LEN, MIN_SERIALIZE_SIZE_BYTES, SSKRError, SSKRErrorType, type SSKRResult,
|
|
260
|
+
export { GroupSpec, MAX_GROUPS_COUNT, MAX_SECRET_LEN, MAX_SHARE_COUNT, METADATA_SIZE_BYTES, MIN_SECRET_LEN, MIN_SERIALIZE_SIZE_BYTES, SSKRError, SSKRErrorType, type SSKRResult, Secret, Spec, sskrCombine, sskrGenerate, sskrGenerateUsing };
|
|
240
261
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/error.ts","../src/secret.ts","../src/spec.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/error.ts","../src/secret.ts","../src/spec.ts","../src/encoding.ts","../src/index.ts"],"mappings":";;;;;;;aAaY,aAAA;EACV,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,kBAAA;EACA,sBAAA;EACA,eAAA;EACA,mBAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;AAAA;;;;cAMW,SAAA,SAAkB,KAAA;EAAA,SACpB,IAAA,EAAM,aAAA;EAAA,SACN,WAAA,GAAc,WAAA;cAEX,IAAA,EAAM,aAAA,EAAe,OAAA,WAAkB,WAAA,GAAc,WAAA;EAAA,eAOlD,cAAA;EAAA,OAqCR,eAAA,CAAgB,KAAA,EAAO,WAAA,GAAc,SAAA;AAAA;;;;;;;;;KAalC,UAAA,MAAgB,CAAA;;;;;;;AAlF5B;;;;cCCa,MAAA;EAAA,iBACM,IAAA;EAAA,QAEV,WAAA,CAAA;EDAP;;;;;;;;EAAA,OCYO,GAAA,CAAI,IAAA,EAAM,UAAA,YAAsB,MAAA;EDHvC;;;ECuBA,GAAA,CAAA;EDrBW;AAMb;;ECsBE,OAAA,CAAA;EDrBe;;;;;;EC+Bf,OAAA,CAAA,GAAW,UAAA;EDhCuB;;;;;;;;;;;;ECgDlC,KAAA,CAAA,GAAS,UAAA;EDrCM;;;EC4Cf,MAAA,CAAO,KAAA,EAAO,MAAA;EDP8B;;;ECsB5C,KAAA,CAAA,GAAS,MAAA;AAAA;;;;;;;AD3FX;;;;cEqBa,SAAA;EAAA,iBACM,gBAAA;EAAA,iBACA,YAAA;EAAA,QAEV,WAAA,CAAA;EFpBP;;;;;;;;;;;EAAA,OEoCO,GAAA,CAAI,eAAA,UAAyB,WAAA,WAAsB,SAAA;EF1B/C;AAMb;;EEoCE,eAAA,CAAA;EFnCe;;;EE0Cf,WAAA,CAAA;EFK8B;;;;;;;;;;;;EAAA,OEWvB,KAAA,CAAM,CAAA,WAAY,SAAA;EFvDQ;;;EAAA,OEiF1B,OAAA,CAAA,GAAW,SAAA;EFrCX;;;EE4CP,QAAA,CAAA;AAAA;;AF/BF;;cEuCa,IAAA;EAAA,iBACM,eAAA;EAAA,iBACA,OAAA;EAAA,QAEV,WAAA,CAAA;;;AD5HT;;;;;;;;;;SC6IS,GAAA,CAAI,cAAA,UAAwB,MAAA,EAAQ,SAAA,KAAc,IAAA;ED5IxC;;;EC4JjB,cAAA,CAAA;ED9IW;;;ECqJX,MAAA,CAAA,GAAU,SAAA;EDhHV;;;ECuHA,UAAA,CAAA;EDhGA;;;ECuGA,UAAA,CAAA;AAAA;;;;;;;;;;;iBCtKc,YAAA,CAAa,IAAA,EAAM,IAAA,EAAM,YAAA,EAAc,MAAA,GAAS,UAAA;;;;;;;;;AHQhE;;;iBGQgB,iBAAA,CACd,IAAA,EAAM,IAAA,EACN,YAAA,EAAc,MAAA,EACd,eAAA,EAAiB,qBAAA,GAChB,UAAA;;;;;;;;;iBAgBa,WAAA,CAAY,MAAA,EAAQ,UAAA,KAAe,MAAA;;;;;;;AHjDnD;;;;cIYa,cAAA;;;;cAKA,cAAA;;;;cAKA,eAAA;;;;cAKA,gBAAA;;;;cAKA,mBAAA;AJXb;;;AAAA,cIgBa,wBAAA"}
|