@spooky-sync/client-solid 0.0.1-canary.9 → 0.0.1-canary.90
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/AGENTS.md +66 -0
- package/dist/index.cjs +216 -65
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +88 -21
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +88 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +214 -66
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
- package/skills/sp00ky-solid/SKILL.md +264 -0
- package/skills/sp00ky-solid/references/file-hooks.md +112 -0
- package/src/cache/index.ts +1 -1
- package/src/cache/surrealdb-wasm-factory.ts +4 -1
- package/src/index.ts +103 -55
- package/src/lib/{SpookyProvider.ts → Sp00kyProvider.ts} +9 -7
- package/src/lib/context.ts +3 -3
- package/src/lib/models.ts +1 -1
- package/src/lib/use-crdt-field.ts +68 -0
- package/src/lib/use-download-file.ts +2 -2
- package/src/lib/use-feature-flag.ts +50 -0
- package/src/lib/use-file-upload.ts +2 -1
- package/src/lib/use-query.ts +130 -28
- package/src/lib/use-sync-status.ts +39 -0
- package/src/types/index.ts +3 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthService, BucketHandle, RunOptions,
|
|
1
|
+
import { AuthService, BucketHandle, CrdtField, FeatureFlagOptions, RunOptions, Sp00kyClient, Sp00kyConfig, Sp00kyQueryResultPromise, SyncHealth, SyncHealth as SyncHealth$1, SyncHealthConfig, SyncHealthStatus, SyncHealthStatus as SyncHealthStatus$1, UpdateOptions } from "@spooky-sync/core";
|
|
2
2
|
import { RecordId, RecordId as RecordId$1, Surreal, Uuid } from "surrealdb";
|
|
3
3
|
import { Accessor, JSX } from "solid-js";
|
|
4
4
|
import { GenericModel, GenericSchema, SchemaStructure } from "@spooky/query-builder";
|
|
@@ -37,14 +37,22 @@ type InferRelationshipsFromConst<S extends SchemaStructure$1, Schema extends Gen
|
|
|
37
37
|
cardinality: Rel['cardinality'];
|
|
38
38
|
} } };
|
|
39
39
|
type Prettify<T> = { [K in keyof T]: T[K] } & {};
|
|
40
|
-
type SyncedDbConfig<S extends SchemaStructure$1> = Prettify<
|
|
40
|
+
type SyncedDbConfig<S extends SchemaStructure$1> = Prettify<Sp00kyConfig<S>>;
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region src/lib/use-query.d.ts
|
|
43
43
|
type QueryArg<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
44
44
|
columns: Record<string, ColumnSchema>;
|
|
45
|
-
}, RelatedFields extends Record<string, any>, IsOne extends boolean> = FinalQuery<S, TableName, T, RelatedFields, IsOne,
|
|
45
|
+
}, RelatedFields extends Record<string, any>, IsOne extends boolean> = FinalQuery<S, TableName, T, RelatedFields, IsOne, Sp00kyQueryResultPromise> | (() => FinalQuery<S, TableName, T, RelatedFields, IsOne, Sp00kyQueryResultPromise> | null | undefined);
|
|
46
46
|
type QueryOptions = {
|
|
47
47
|
enabled?: () => boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Tear down the query (remote `_00_query` view + local WASM view) when this
|
|
50
|
+
* hook is disposed and no other subscriber remains, instead of keeping it
|
|
51
|
+
* resident for cheap re-subscription. Use for viewport-windowed lists that
|
|
52
|
+
* mount/unmount a query per scroll window and want off-screen windows
|
|
53
|
+
* cancelled. Trade-off: scrolling back to a torn-down window re-registers it.
|
|
54
|
+
*/
|
|
55
|
+
deregisterOnCleanup?: boolean;
|
|
48
56
|
};
|
|
49
57
|
declare function useQuery<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
50
58
|
columns: Record<string, ColumnSchema>;
|
|
@@ -52,6 +60,7 @@ declare function useQuery<S extends SchemaStructure$1, TableName extends TableNa
|
|
|
52
60
|
data: () => TData | undefined;
|
|
53
61
|
error: () => Error | undefined;
|
|
54
62
|
isLoading: () => boolean;
|
|
63
|
+
isFetching: () => boolean;
|
|
55
64
|
};
|
|
56
65
|
declare function useQuery<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
57
66
|
columns: Record<string, ColumnSchema>;
|
|
@@ -59,8 +68,56 @@ declare function useQuery<S extends SchemaStructure$1, TableName extends TableNa
|
|
|
59
68
|
data: () => TData | undefined;
|
|
60
69
|
error: () => Error | undefined;
|
|
61
70
|
isLoading: () => boolean;
|
|
71
|
+
isFetching: () => boolean;
|
|
62
72
|
};
|
|
63
73
|
//#endregion
|
|
74
|
+
//#region src/lib/use-sync-status.d.ts
|
|
75
|
+
interface UseSyncStatus {
|
|
76
|
+
/** Full health snapshot; updates reactively on every transition. */
|
|
77
|
+
health: Accessor<SyncHealth$1>;
|
|
78
|
+
/** `'healthy'` | `'degraded'`. */
|
|
79
|
+
status: Accessor<SyncHealthStatus$1>;
|
|
80
|
+
isHealthy: Accessor<boolean>;
|
|
81
|
+
/** `true` once sync has failed for a sustained run — drive a banner off this. */
|
|
82
|
+
isDegraded: Accessor<boolean>;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Observe sync health for a "can't reach the server" banner / indicator.
|
|
86
|
+
*
|
|
87
|
+
* Backed by `db.subscribeToSyncHealth`. Individual sync failures (a transient
|
|
88
|
+
* remote 500 on query registration, a dropped socket) are absorbed by the
|
|
89
|
+
* retry and never flip this; `isDegraded()` only goes true once failures
|
|
90
|
+
* persist for the configured number of consecutive rounds (sp00ky core config
|
|
91
|
+
* `syncHealth.degradeAfterConsecutiveFailures`, default 3), and flips back on
|
|
92
|
+
* the next successful round. Must be used within a `<Sp00kyProvider>`.
|
|
93
|
+
*/
|
|
94
|
+
declare function useSyncStatus(): UseSyncStatus;
|
|
95
|
+
//# sourceMappingURL=use-sync-status.d.ts.map
|
|
96
|
+
//#endregion
|
|
97
|
+
//#region src/lib/use-crdt-field.d.ts
|
|
98
|
+
declare function useCrdtField(table: string, recordId: () => string | undefined, field: string, fallbackText?: () => string | undefined): Accessor<CrdtField | null>;
|
|
99
|
+
//# sourceMappingURL=use-crdt-field.d.ts.map
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/lib/use-feature-flag.d.ts
|
|
102
|
+
interface UseFeatureFlag {
|
|
103
|
+
variant: Accessor<string | undefined>;
|
|
104
|
+
payload: Accessor<unknown | undefined>;
|
|
105
|
+
enabled: Accessor<boolean>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Subscribe to a feature flag for the currently authenticated user.
|
|
109
|
+
*
|
|
110
|
+
* Returns three Solid accessors that update reactively whenever the
|
|
111
|
+
* server-materialized assignment in `_00_user_feature` changes. Backed by
|
|
112
|
+
* the same SSP + sync pipeline that powers `useQuery`, so toggling a flag
|
|
113
|
+
* via `spky flag enable <key>` propagates to the UI without a refresh.
|
|
114
|
+
*
|
|
115
|
+
* `enabled()` is `true` when the resolved variant exists and is not 'off'.
|
|
116
|
+
* For multi-variant flags, prefer `variant()` directly.
|
|
117
|
+
*/
|
|
118
|
+
declare function useFeatureFlag(key: string, options?: FeatureFlagOptions): UseFeatureFlag;
|
|
119
|
+
//# sourceMappingURL=use-feature-flag.d.ts.map
|
|
120
|
+
//#endregion
|
|
64
121
|
//#region src/lib/use-file-upload.d.ts
|
|
65
122
|
interface FileUploadResult {
|
|
66
123
|
isUploading: () => boolean;
|
|
@@ -89,16 +146,16 @@ declare function useDownloadFile<S extends SchemaStructure$1>(bucketName: Bucket
|
|
|
89
146
|
declare function useDownloadFile<S extends SchemaStructure$1>(db: SyncedDb<S>, bucketName: BucketNames<S>, path: Accessor<string | null | undefined>, options?: UseDownloadFileOptions): UseDownloadFileResult;
|
|
90
147
|
//# sourceMappingURL=use-download-file.d.ts.map
|
|
91
148
|
//#endregion
|
|
92
|
-
//#region src/lib/
|
|
93
|
-
interface
|
|
149
|
+
//#region src/lib/Sp00kyProvider.d.ts
|
|
150
|
+
interface Sp00kyProviderProps<S extends SchemaStructure> {
|
|
94
151
|
config: SyncedDbConfig<S>;
|
|
95
152
|
fallback?: JSX.Element;
|
|
96
153
|
onError?: (error: Error) => void;
|
|
97
154
|
onReady?: (db: SyncedDb<S>) => void;
|
|
98
155
|
children: JSX.Element;
|
|
99
156
|
}
|
|
100
|
-
declare function
|
|
101
|
-
//# sourceMappingURL=
|
|
157
|
+
declare function Sp00kyProvider<S extends SchemaStructure>(props: Sp00kyProviderProps<S>): JSX.Element;
|
|
158
|
+
//# sourceMappingURL=Sp00kyProvider.d.ts.map
|
|
102
159
|
//#endregion
|
|
103
160
|
//#region src/lib/context.d.ts
|
|
104
161
|
declare function useDb<S extends SchemaStructure>(): SyncedDb<S>;
|
|
@@ -106,13 +163,13 @@ declare function useDb<S extends SchemaStructure>(): SyncedDb<S>;
|
|
|
106
163
|
|
|
107
164
|
//#endregion
|
|
108
165
|
//#region src/index.d.ts
|
|
109
|
-
type RelationshipField<Schema extends SchemaStructure$1, TableName extends TableNames
|
|
110
|
-
type RelatedFieldsTableScoped<Schema extends SchemaStructure$1, TableName extends TableNames
|
|
166
|
+
type RelationshipField<Schema extends SchemaStructure$1, TableName extends TableNames<Schema>, Field extends RelationshipFieldsFromSchema<Schema, TableName>> = GetRelationship<Schema, TableName, Field>;
|
|
167
|
+
type RelatedFieldsTableScoped<Schema extends SchemaStructure$1, TableName extends TableNames<Schema>, RelatedFields extends RelationshipFieldsFromSchema<Schema, TableName> = RelationshipFieldsFromSchema<Schema, TableName>> = { [K in RelatedFields]: {
|
|
111
168
|
to: RelationshipField<Schema, TableName, K>['to'];
|
|
112
169
|
relatedFields: RelatedFieldsMap;
|
|
113
170
|
cardinality: RelationshipField<Schema, TableName, K>['cardinality'];
|
|
114
171
|
} };
|
|
115
|
-
type InferModel<Schema extends SchemaStructure$1, TableName extends TableNames
|
|
172
|
+
type InferModel<Schema extends SchemaStructure$1, TableName extends TableNames<Schema>, RelatedFields extends RelatedFieldsTableScoped<Schema, TableName>> = QueryResult<Schema, TableName, RelatedFields, true>;
|
|
116
173
|
type WithRelated<Field extends string, RelatedFields extends RelatedFieldsMap = {}> = { [K in Field]: Omit<RelatedFieldMapEntry, 'relatedFields'> & {
|
|
117
174
|
relatedFields: RelatedFields;
|
|
118
175
|
} };
|
|
@@ -122,17 +179,17 @@ type WithRelatedMany<Field extends string, RelatedFields extends RelatedFieldsMa
|
|
|
122
179
|
cardinality: 'many';
|
|
123
180
|
} };
|
|
124
181
|
/**
|
|
125
|
-
* SyncedDb - A thin wrapper around
|
|
126
|
-
* Delegates all logic to the underlying
|
|
182
|
+
* SyncedDb - A thin wrapper around sp00ky-ts for Solid.js integration
|
|
183
|
+
* Delegates all logic to the underlying sp00ky-ts instance
|
|
127
184
|
*/
|
|
128
185
|
declare class SyncedDb<S extends SchemaStructure$1> {
|
|
129
186
|
private config;
|
|
130
|
-
private
|
|
187
|
+
private sp00ky;
|
|
131
188
|
private _initialized;
|
|
132
189
|
constructor(config: SyncedDbConfig<S>);
|
|
133
|
-
|
|
190
|
+
getSp00ky(): Sp00kyClient<S>;
|
|
134
191
|
/**
|
|
135
|
-
* Initialize the
|
|
192
|
+
* Initialize the sp00ky-ts instance
|
|
136
193
|
*/
|
|
137
194
|
init(): Promise<void>;
|
|
138
195
|
/**
|
|
@@ -142,15 +199,15 @@ declare class SyncedDb<S extends SchemaStructure$1> {
|
|
|
142
199
|
/**
|
|
143
200
|
* Update an existing record in the database
|
|
144
201
|
*/
|
|
145
|
-
update<TName extends TableNames
|
|
202
|
+
update<TName extends TableNames<S>>(tableName: TName, recordId: string, payload: Partial<TableModel<GetTable<S, TName>>>, options?: UpdateOptions): Promise<void>;
|
|
146
203
|
/**
|
|
147
204
|
* Delete an existing record in the database
|
|
148
205
|
*/
|
|
149
|
-
delete<TName extends TableNames
|
|
206
|
+
delete<TName extends TableNames<S>>(tableName: TName, selector: string | RecordId | InnerQuery<GetTable<S, TName>, boolean>): Promise<void>;
|
|
150
207
|
/**
|
|
151
208
|
* Query data from the database
|
|
152
209
|
*/
|
|
153
|
-
query<TName extends TableNames
|
|
210
|
+
query<TName extends TableNames<S>>(table: TName): QueryBuilder<S, TName, Sp00kyQueryResultPromise, {}, false>;
|
|
154
211
|
/**
|
|
155
212
|
* Run a backend operation
|
|
156
213
|
*/
|
|
@@ -175,20 +232,30 @@ declare class SyncedDb<S extends SchemaStructure$1> {
|
|
|
175
232
|
/**
|
|
176
233
|
* Access the remote database service directly
|
|
177
234
|
*/
|
|
178
|
-
get remote():
|
|
235
|
+
get remote(): Sp00kyClient<S>['remoteClient'];
|
|
179
236
|
/**
|
|
180
237
|
* Access the local database service directly
|
|
181
238
|
*/
|
|
182
|
-
get local():
|
|
239
|
+
get local(): Sp00kyClient<S>['localClient'];
|
|
183
240
|
/**
|
|
184
241
|
* Access the auth service
|
|
185
242
|
*/
|
|
186
243
|
get auth(): AuthService<S>;
|
|
187
244
|
get pendingMutationCount(): number;
|
|
245
|
+
/** Diagnostic — see `Sp00kyClient.liveRetryCount`. */
|
|
246
|
+
get liveRetryCount(): number;
|
|
188
247
|
subscribeToPendingMutations(cb: (count: number) => void): () => void;
|
|
248
|
+
/** Current sync-health snapshot. See {@link useSyncStatus}. */
|
|
249
|
+
get syncHealth(): SyncHealth$1;
|
|
250
|
+
/**
|
|
251
|
+
* Observe sync health. Fires immediately with the current status and again
|
|
252
|
+
* on every healthy↔degraded transition. Prefer the `useSyncStatus` hook in
|
|
253
|
+
* components; this is the imperative escape hatch.
|
|
254
|
+
*/
|
|
255
|
+
subscribeToSyncHealth(cb: (health: SyncHealth$1) => void): () => void;
|
|
189
256
|
bucket<B extends BucketNames<S>>(name: B): BucketHandle;
|
|
190
257
|
getBucketConfig(name: string): BucketDefinitionSchema | undefined;
|
|
191
258
|
}
|
|
192
259
|
//#endregion
|
|
193
|
-
export { CacheStrategy, type FileUploadResult, type GenericModel, type GenericSchema, type GetCardinality, type GetTable, InferModel, type InferRelatedModelFromMetadata, InferRelationshipsFromConst, InferSchemaFromConst, type Model, type ModelPayload, ProvisionOptions, type QueryInfo, type QueryModifier, type QueryModifierBuilder, type QueryResult, RecordId, RelatedFieldsTableScoped, type RelationshipDefinition, RelationshipField, type RelationshipsMetadata,
|
|
260
|
+
export { CacheStrategy, type FileUploadResult, type GenericModel, type GenericSchema, type GetCardinality, type GetTable, InferModel, type InferRelatedModelFromMetadata, InferRelationshipsFromConst, InferSchemaFromConst, type Model, type ModelPayload, ProvisionOptions, type QueryInfo, type QueryModifier, type QueryModifierBuilder, type QueryResult, RecordId, RelatedFieldsTableScoped, type RelationshipDefinition, RelationshipField, type RelationshipsMetadata, Sp00kyProvider, type Sp00kyProviderProps, type SyncHealth, type SyncHealthConfig, type SyncHealthStatus, SyncedDb, SyncedDbConfig, type TableModel, type TableNames, type UseDownloadFileOptions, type UseDownloadFileResult, type UseFeatureFlag, type UseSyncStatus, Uuid, WithRelated, WithRelatedMany, useCrdtField, useDb, useDownloadFile, useFeatureFlag, useFileUpload, useQuery, useSyncStatus };
|
|
194
261
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/lib/models.ts","../../../src/types/index.ts","../../../src/lib/use-query.ts","../../../src/lib/use-file-upload.ts","../../../src/lib/use-download-file.ts","../../../src/lib/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/lib/models.ts","../../../src/types/index.ts","../../../src/lib/use-query.ts","../../../src/lib/use-sync-status.ts","../../../src/lib/use-crdt-field.ts","../../../src/lib/use-feature-flag.ts","../../../src/lib/use-file-upload.ts","../../../src/lib/use-download-file.ts","../../../src/lib/Sp00kyProvider.ts","../../../src/lib/context.ts","../../../src/index.ts"],"sourcesContent":[],"mappings":"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AA,EAAA,GAAA,IAAA;EAAA,QAAA,EQKZ,GAAA,CAAI,ORLQ;;AAAgB,iBQQxB,cRRwB,CAAA,UQQC,eRRD,CAAA,CAAA,KAAA,EQS/B,mBRT+B,CQSX,CRTW,CAAA,CAAA,EQUrC,GAAA,CAAI,ORViC;;;;iBSDxB,gBAAgB,oBAAoB,SAAS;;;;;ARE5C,KS4DL,iBT5DqB,CAAA,eS6DhB,iBT7DgB,EAAA,kBS8Db,UT9Da,CS8DF,MT9DE,CAAA,EAAA,cS+DjB,4BT/DiB,CS+DY,MT/DZ,ES+DoB,ST/DpB,CAAA,CAAA,GSgE7B,eThE6B,CSgEb,MThEa,ESgEL,SThEK,ESgEM,KThEN,CAAA;AAOhB,KS2DL,wBT3DK,CAAA,eS4DA,iBT5DA,EAAA,kBS6DG,UT7DH,CS6Dc,MT7Dd,CAAA,EAAA,sBS8DO,4BT9DP,CS8DoC,MT9DpC,ES8D4C,ST9D5C,CAAA,GS+Db,4BT/Da,CS+DgB,MT/DhB,ES+DwB,ST/DxB,CAAA,CAAA,GAAA,QSiET,aT7DiB,GAAA;EAKb,EAAA,ESyDJ,iBTzDwB,CSyDN,MTzDM,ESyDE,STzDF,ESyDa,CTzDb,CAAA,CAAA,IAAA,CAAA;EAAA,aAAA,ES0Db,gBT1Da;EAAW,WAAA,ES2D1B,iBT3D0B,CS2DR,MT3DQ,ES2DA,ST3DA,ES2DW,CT3DX,CAAA,CAAA,aAAA,CAAA;;AACC,KS8DhC,UT9DgC,CAAA,eS+D3B,iBT/D2B,EAAA,kBSgExB,UThEwB,CSgEb,MThEa,CAAA,EAAA,sBSiEpB,wBTjEoB,CSiEK,MTjEL,ESiEa,STjEb,CAAA,CAAA,GSkExC,WTlEwC,CSkE5B,MTlE4B,ESkEpB,STlEoB,ESkET,aTlES,EAAA,IAAA,CAAA;AAAG,KSoEnC,WTpEmC,CAAA,cAAA,MAAA,EAAA,sBSoEqB,gBTpErB,GAAA,CAAA,CAAA,CAAA,GAAA,QSqEvC,KTrE2B,GSqEnB,ITrEmB,CSqEd,oBTrEc,EAAA,eAAA,CAAA,GAAA;EAAX,aAAA,ESsEL,aTtEK;AAAU,CAAA,EAOlC;AAAuC,KSmE3B,eTnE2B,CAAA,cAAA,MAAA,EAAA,sBSmEiC,gBTnEjC,GAAA,CAAA,CAAA,CAAA,GAAA,QSoE/B,KTpE0C,GAAA;EAAgC,EAAA,ESqE1E,KTrE0E;EACvD,aAAA,ESqER,aTrEQ;EAAX,WAAA,EAAA,MAAA;;;;;;AAE8B,cS4EjC,QT5EiC,CAAA,US4Ed,iBT5Ec,CAAA,CAAA;UAAO,MAAA;UACxC,MAAA;UACM,YAAA;EAAG,WAAA,CAAA,MAAA,ES+EA,cT/EA,CS+Ee,CT/Ef,CAAA;EAMjB,SAAA,CAAA,CAAQ,ES6ES,YT7ET,CS6EsB,CT7EtB,CAAA;EAAA;;;MAA0B,CAAA,CAAA,ESqFvB,OTrFuB,CAAA,IAAA,CAAA;EAAC;AAExC;;QAAqC,CAAA,EAAA,EAAA,MAAA,EAAA,OAAA,ES6FD,MT7FC,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,ES6FyB,OT7FzB,CAAA,IAAA,CAAA;;;;EAA2B,MAAA,CAAA,cSqGnC,UTrGmC,CSqGxB,CTrGwB,CAAA,CAAA,CAAA,SAAA,ESsGjD,KTtGiD,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,ESwGnD,OTxGmD,CSwG3C,UTxG2C,CSwGhC,QTxGgC,CSwGvB,CTxGuB,ESwGpB,KTxGoB,CAAA,CAAA,CAAA,EAAA,OAAA,CAAA,ESyGlD,aTzGkD,CAAA,ES0G3D,OT1G2D,CAAA,IAAA,CAAA;;;;EChC3D,MAAA,CAAA,cQuJwB,URvJhB,CQuJ2B,CRvJ3B,CAAA,CAAA,CAAA,SAAA,EQwJE,KRxJF,EAAA,QAAA,EAAA,MAAA,GQyJU,QRzJV,GQyJqB,URzJrB,CQyJgC,QRzJhC,CQyJyC,CRzJzC,EQyJ4C,KRzJ5C,CAAA,EAAA,OAAA,CAAA,CAAA,EQ0JR,OR1JQ,CAAA,IAAA,CAAA;EAAA;;;OAEO,CAAA,cQgLS,URhLT,CQgLoB,CRhLpB,CAAA,CAAA,CAAA,KAAA,EQiLT,KRjLS,CAAA,EQkLf,YRlLe,CQkLF,CRlLE,EQkLC,KRlLD,EQkLQ,wBRlLR,EAAA,CAAA,CAAA,EAAA,KAAA,CAAA;;;;KAKL,CAAA,UQsLD,YRtLC,CQsLY,CRtLZ,CAAA,EAAA,UQuLD,aRvLC,CQuLa,CRvLb,EQuLgB,CRvLhB,CAAA,CAAA,CAAA,OAAA,EQyLF,CRzLE,EAAA,IAAA,EQ0LL,CR1LK,EAAA,OAAA,EQ2LF,YR3LE,CQ2LW,CR3LX,EQ2Lc,CR3Ld,EQ2LiB,CR3LjB,CAAA,EAAA,OAAA,CAAA,EQ4LD,UR5LC,CAAA,EQ6LV,OR7LU,CAAA,IAAA,CAAA;;;;cAAgC,CAAA,KAAA,EAAA,MAAA,CAAA,EQqMH,ORrMG,CQqMK,QRrML,CAAA,MAAA,CAAA,CAAA;;;;;gBAEd,CAAA,CAAA,EQgNA,ORhNA,CAAA,IAAA,CAAA;;;;SAAzB,CAAA,CAAA,EQuNkB,ORvNlB,CAAA,IAAA,CAAA;EAAU;AAAA;AAiBlB;EAAwB,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EQ8Ma,OR9Mb,EAAA,GQ8MyB,CR9MzB,GQ8M6B,OR9M7B,CQ8MqC,CR9MrC,CAAA,CAAA,EQ8M0C,OR9M1C,CQ8MkD,CR9MlD,CAAA;;;;MAGc,MAAA,CAAA,CAAA,EQkNtB,YRlNsB,CQkNT,CRlNS,CAAA,CAAA,cAAA,CAAA;;;;MAGb,KAAA,CAAA,CAAA,EQuNV,YRvNU,CQuNG,CRvNH,CAAA,CAAA,aAAA,CAAA;;;;MAEF,IAAA,CAAA,CAAA,EQ6NT,WR7NS,CQ6NG,CR7NH,CAAA;MAAG,oBAAA,CAAA,CAAA,EAAA,MAAA;;MAAc,cAAA,CAAA,CAAA,EAAA,MAAA;6BAAe,CAAA,EAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;MAC3C,UAAA,CAAA,CAAA,EQkPQ,YRlPR;;;;AASZ;;uBACY,CAAA,EAAA,EAAA,CAAA,MAAA,EQkPyB,YRlPzB,EAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,IAAA;QACmB,CAAA,UQsPZ,WRtPY,CQsPA,CRtPA,CAAA,CAAA,CAAA,IAAA,EQsPU,CRtPV,CAAA,EQsPc,YRtPd;iBAAX,CAAA,IAAA,EAAA,MAAA,CAAA,EQ2Pa,sBR3Pb,GAAA,SAAA"}
|