@wovin/core 0.0.1-RC4 → 0.0.1-RC6
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/dist/applog.d.ts +70 -0
- package/dist/applog.js +85 -0
- package/dist/applog.js.map +1 -0
- package/dist/chunk-F3FYYIAV.js +11 -0
- package/dist/chunk-F3FYYIAV.js.map +1 -0
- package/dist/chunk-HWWMVYRI.js +56 -0
- package/dist/chunk-HWWMVYRI.js.map +1 -0
- package/dist/chunk-TYTIT5QO.js +768 -0
- package/dist/chunk-TYTIT5QO.js.map +1 -0
- package/dist/chunk-W5MZGTNK.js +577 -0
- package/dist/chunk-W5MZGTNK.js.map +1 -0
- package/dist/chunk-ZWEMUC65.js +59 -0
- package/dist/chunk-ZWEMUC65.js.map +1 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.js +78 -7033
- package/dist/index.js.map +1 -0
- package/dist/ipfs.d.ts +36 -0
- package/dist/ipfs.js +28 -0
- package/dist/ipfs.js.map +1 -0
- package/dist/{stream/mapped.d.ts → mapped-X-JaKwfX.d.ts} +7 -5
- package/dist/pubsub.d.ts +41 -0
- package/dist/pubsub.js +14 -0
- package/dist/pubsub.js.map +1 -0
- package/dist/queries.d.ts +141 -0
- package/dist/queries.js +112 -0
- package/dist/queries.js.map +1 -0
- package/dist/stream.d.ts +44 -0
- package/dist/stream.js +37 -0
- package/dist/stream.js.map +1 -0
- package/dist/types-B8KPeyK1.d.ts +153 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.js +46 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -0
- package/dist/{stream/writeable.d.ts → writeable-rCfOnOTa.d.ts} +7 -5
- package/package.json +35 -19
- package/dist/data/applog-helpers.d.ts +0 -24
- package/dist/data/applog-helpers.d.ts.map +0 -1
- package/dist/data/applog-utils.d.ts +0 -42
- package/dist/data/applog-utils.d.ts.map +0 -1
- package/dist/data/datom-types.d.ts +0 -84
- package/dist/data/datom-types.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/ipfs/ipfs-utils.d.ts +0 -17
- package/dist/ipfs/ipfs-utils.d.ts.map +0 -1
- package/dist/mobx/mobx-utils.d.ts +0 -67
- package/dist/mobx/mobx-utils.d.ts.map +0 -1
- package/dist/queries/divergences.d.ts +0 -12
- package/dist/queries/divergences.d.ts.map +0 -1
- package/dist/queries/matchers.d.ts +0 -4
- package/dist/queries/matchers.d.ts.map +0 -1
- package/dist/queries/queries.d.ts +0 -58
- package/dist/queries/queries.d.ts.map +0 -1
- package/dist/stream/filters.d.ts +0 -38
- package/dist/stream/filters.d.ts.map +0 -1
- package/dist/stream/mapped.d.ts.map +0 -1
- package/dist/stream/writeable.d.ts.map +0 -1
- package/dist/types/typescript-utils.d.ts +0 -27
- package/dist/types/typescript-utils.d.ts.map +0 -1
- package/src/index.ts +0 -3
package/dist/applog.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { c as Applog, e as ApplogForInsertOptionalAgent, d as ApplogForInsert, T as Timestamp, f as ApplogNoCid, b as ApplogValue, A as ApplogStream, D as DatalogQueryPattern, S as SearchContext, V as ValueOrMatcher, R as ResultContext, g as DatalogQueryResultEntry } from './types-B8KPeyK1.js';
|
|
2
|
+
export { n as AgentHash, k as AgentID, w as AppLogTB, x as AppLogTBC, o as ApplogOptionalCid, m as Atom, p as AtomPattern, l as Attribute, v as CIDTB, C as CidString, s as DatalogQuery, r as DatalogQueryPatternArray, t as DatalogQueryResultRows, q as DatalogStateIdentifier, j as DatomPart, h as EntityID, E as EntityID_LENGTH, N as Nullable, u as SearchContextWithLog, U as URL, W as WithMatchers, y as getApplogTypeErrors, z as isValidApplog } from './types-B8KPeyK1.js';
|
|
3
|
+
import { W as WriteableApplogStream } from './writeable-rCfOnOTa.js';
|
|
4
|
+
import '@sinclair/typebox';
|
|
5
|
+
import '@sinclair/typebox/compiler';
|
|
6
|
+
import 'multiformats/cid';
|
|
7
|
+
|
|
8
|
+
declare const sortApplogByTs: (p: Applog, n: Applog) => 0 | 1 | -1;
|
|
9
|
+
declare const sortApplogByTsDec: (p: Applog, n: Applog) => 0 | 1 | -1;
|
|
10
|
+
declare function filterOnlyLatest(logs: Applog[], onlyLatest: boolean): Applog[];
|
|
11
|
+
declare function hasAg(log: ApplogForInsertOptionalAgent): log is ApplogForInsert;
|
|
12
|
+
declare function hasTs(log: ApplogForInsert): log is Omit<ApplogForInsert, 'ts'> & {
|
|
13
|
+
ts: Timestamp;
|
|
14
|
+
};
|
|
15
|
+
declare function hasPv(log: ApplogForInsert): log is ApplogForInsert & {
|
|
16
|
+
pv: string;
|
|
17
|
+
};
|
|
18
|
+
declare function withTs(log: ApplogForInsert, ts: Timestamp): Omit<ApplogForInsert, "ts"> & {
|
|
19
|
+
ts: string;
|
|
20
|
+
};
|
|
21
|
+
declare function withPv(log: ApplogNoCid, ds: WriteableApplogStream): {
|
|
22
|
+
pv: any;
|
|
23
|
+
at: string;
|
|
24
|
+
ts: string;
|
|
25
|
+
ag: string;
|
|
26
|
+
en: string;
|
|
27
|
+
vl: ApplogValue;
|
|
28
|
+
};
|
|
29
|
+
declare function joinStreams(streams: ApplogStream[]): ApplogStream;
|
|
30
|
+
|
|
31
|
+
declare const isoDateStrCompare: (strA: string, strB: string, dir?: 'asc' | 'desc') => number;
|
|
32
|
+
/** Sort by TS (modifies the array, but also returns for ease of use) */
|
|
33
|
+
declare function sortApplogsByTs(appLogArray: Applog[], dir?: 'asc' | 'desc'): Applog[];
|
|
34
|
+
declare const isTsBefore: (log: Applog, logToCompare: Applog) => boolean;
|
|
35
|
+
declare const uniqueEnFromAppLogs: (appLogArray: Applog[]) => string[];
|
|
36
|
+
declare const areApplogsEqual: (logA: Applog, logB: Applog) => boolean;
|
|
37
|
+
declare const removeDuplicateAppLogs: (appLogArray: Applog[]) => any[];
|
|
38
|
+
declare const getHashID: (stringifiable: any, lngth?: number) => string;
|
|
39
|
+
declare function isVariable(x: any): x is string;
|
|
40
|
+
declare function variableNameWithoutQuestionmark(str: string): string;
|
|
41
|
+
declare function isStaticPattern(x: any): x is ApplogValue;
|
|
42
|
+
declare function resolveOrRemoveVariables(pattern: DatalogQueryPattern, candidate: SearchContext): {}[];
|
|
43
|
+
declare function matchPartStatic(field: keyof Applog, patternPart: ValueOrMatcher<ApplogValue>, atomPart: ApplogValue): boolean;
|
|
44
|
+
declare function matchPart(patternPart: ValueOrMatcher<ApplogValue>, atomPart: ApplogValue, context: SearchContext): ResultContext;
|
|
45
|
+
/**
|
|
46
|
+
* Check if pattern matches triple with context substitutions
|
|
47
|
+
*/
|
|
48
|
+
declare function matchPattern(pattern: DatalogQueryPattern, applog: Applog, context: SearchContext): ResultContext;
|
|
49
|
+
declare function actualize<SELECT extends string>(context: ResultContext, find: readonly SELECT[]): DatalogQueryResultEntry<SELECT>;
|
|
50
|
+
declare const arrStats: {
|
|
51
|
+
max: (array: number[]) => number;
|
|
52
|
+
min: (array: number[]) => number;
|
|
53
|
+
range: (array: number[]) => number;
|
|
54
|
+
midrange: (array: number[]) => number;
|
|
55
|
+
sum: (array: number[]) => number;
|
|
56
|
+
mean: (array: number[]) => number;
|
|
57
|
+
average: (array: number[]) => number;
|
|
58
|
+
median: (array: number[]) => number;
|
|
59
|
+
modes: (array: number[]) => any[];
|
|
60
|
+
variance: (array: number[]) => number;
|
|
61
|
+
standardDeviation: (array: number[]) => number;
|
|
62
|
+
meanAbsoluteDeviation: (array: number[]) => number;
|
|
63
|
+
zScores: (array: number[]) => number[];
|
|
64
|
+
};
|
|
65
|
+
declare const tsNearlySame: (timeA: string, timeB: string) => boolean;
|
|
66
|
+
declare const cyrb53hash: (str: string, seed: number, strLength: number) => string;
|
|
67
|
+
declare function arraysContainSameElements(arr1: any, arr2: any): boolean;
|
|
68
|
+
declare function dateNowIso(): string;
|
|
69
|
+
|
|
70
|
+
export { Applog, ApplogForInsert, ApplogForInsertOptionalAgent, ApplogNoCid, ApplogValue, DatalogQueryPattern, DatalogQueryResultEntry, ResultContext, SearchContext, Timestamp, ValueOrMatcher, actualize, areApplogsEqual, arrStats, arraysContainSameElements, cyrb53hash, dateNowIso, filterOnlyLatest, getHashID, hasAg, hasPv, hasTs, isStaticPattern, isTsBefore, isVariable, isoDateStrCompare, joinStreams, matchPart, matchPartStatic, matchPattern, removeDuplicateAppLogs, resolveOrRemoveVariables, sortApplogByTs, sortApplogByTsDec, sortApplogsByTs, tsNearlySame, uniqueEnFromAppLogs, variableNameWithoutQuestionmark, withPv, withTs };
|
package/dist/applog.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AppLogTB,
|
|
3
|
+
AppLogTBC,
|
|
4
|
+
CIDTB,
|
|
5
|
+
EntityID,
|
|
6
|
+
EntityID_LENGTH,
|
|
7
|
+
Nullable,
|
|
8
|
+
URL,
|
|
9
|
+
filterOnlyLatest,
|
|
10
|
+
getApplogTypeErrors,
|
|
11
|
+
hasAg,
|
|
12
|
+
hasPv,
|
|
13
|
+
hasTs,
|
|
14
|
+
isValidApplog,
|
|
15
|
+
joinStreams,
|
|
16
|
+
sortApplogByTs,
|
|
17
|
+
sortApplogByTsDec,
|
|
18
|
+
withPv,
|
|
19
|
+
withTs
|
|
20
|
+
} from "./chunk-W5MZGTNK.js";
|
|
21
|
+
import {
|
|
22
|
+
actualize,
|
|
23
|
+
areApplogsEqual,
|
|
24
|
+
arrStats,
|
|
25
|
+
arraysContainSameElements,
|
|
26
|
+
cyrb53hash,
|
|
27
|
+
dateNowIso,
|
|
28
|
+
getHashID,
|
|
29
|
+
isStaticPattern,
|
|
30
|
+
isTsBefore,
|
|
31
|
+
isVariable,
|
|
32
|
+
isoDateStrCompare,
|
|
33
|
+
matchPart,
|
|
34
|
+
matchPartStatic,
|
|
35
|
+
matchPattern,
|
|
36
|
+
removeDuplicateAppLogs,
|
|
37
|
+
resolveOrRemoveVariables,
|
|
38
|
+
sortApplogsByTs,
|
|
39
|
+
tsNearlySame,
|
|
40
|
+
uniqueEnFromAppLogs,
|
|
41
|
+
variableNameWithoutQuestionmark
|
|
42
|
+
} from "./chunk-TYTIT5QO.js";
|
|
43
|
+
import "./chunk-ZWEMUC65.js";
|
|
44
|
+
import "./chunk-F3FYYIAV.js";
|
|
45
|
+
export {
|
|
46
|
+
AppLogTB,
|
|
47
|
+
AppLogTBC,
|
|
48
|
+
CIDTB,
|
|
49
|
+
EntityID,
|
|
50
|
+
EntityID_LENGTH,
|
|
51
|
+
Nullable,
|
|
52
|
+
URL,
|
|
53
|
+
actualize,
|
|
54
|
+
areApplogsEqual,
|
|
55
|
+
arrStats,
|
|
56
|
+
arraysContainSameElements,
|
|
57
|
+
cyrb53hash,
|
|
58
|
+
dateNowIso,
|
|
59
|
+
filterOnlyLatest,
|
|
60
|
+
getApplogTypeErrors,
|
|
61
|
+
getHashID,
|
|
62
|
+
hasAg,
|
|
63
|
+
hasPv,
|
|
64
|
+
hasTs,
|
|
65
|
+
isStaticPattern,
|
|
66
|
+
isTsBefore,
|
|
67
|
+
isValidApplog,
|
|
68
|
+
isVariable,
|
|
69
|
+
isoDateStrCompare,
|
|
70
|
+
joinStreams,
|
|
71
|
+
matchPart,
|
|
72
|
+
matchPartStatic,
|
|
73
|
+
matchPattern,
|
|
74
|
+
removeDuplicateAppLogs,
|
|
75
|
+
resolveOrRemoveVariables,
|
|
76
|
+
sortApplogByTs,
|
|
77
|
+
sortApplogByTsDec,
|
|
78
|
+
sortApplogsByTs,
|
|
79
|
+
tsNearlySame,
|
|
80
|
+
uniqueEnFromAppLogs,
|
|
81
|
+
variableNameWithoutQuestionmark,
|
|
82
|
+
withPv,
|
|
83
|
+
withTs
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=applog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => {
|
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
return value;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
__publicField
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-F3FYYIAV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// src/ipfs/car.ts
|
|
2
|
+
import { CarWriter } from "@ipld/car";
|
|
3
|
+
import * as dagJson from "@ipld/dag-json";
|
|
4
|
+
import { Logger } from "besonders-logger/src";
|
|
5
|
+
var { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO);
|
|
6
|
+
async function decodeCarToApplogs(car) {
|
|
7
|
+
const { roots, blocks } = await decodeCar(car);
|
|
8
|
+
if (!roots || !blocks) {
|
|
9
|
+
throw ERROR("decodeCar is funky", { roots, blocks });
|
|
10
|
+
}
|
|
11
|
+
if (roots.length !== 1) {
|
|
12
|
+
WARN("Unexpected roots count:", roots);
|
|
13
|
+
}
|
|
14
|
+
const root = blocks.get(roots[0]);
|
|
15
|
+
const applogs = root.applogs.map((cid) => {
|
|
16
|
+
const applog = blocks.get(cid.toV1().toString());
|
|
17
|
+
return {
|
|
18
|
+
...applog,
|
|
19
|
+
cid: cid.toString()
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
DEBUG("Decoded car logs:", root, { roots, blocks, applogs });
|
|
23
|
+
return { applogs };
|
|
24
|
+
}
|
|
25
|
+
async function decodeCar(car) {
|
|
26
|
+
const roots = (await car.getRoots()).map((c) => c.toV1().toString());
|
|
27
|
+
const blocks = /* @__PURE__ */ new Map();
|
|
28
|
+
for await (const { cid, bytes } of car.blocks()) {
|
|
29
|
+
blocks.set(cid.toV1().toString(), dagJson.decode(bytes));
|
|
30
|
+
}
|
|
31
|
+
return { roots, blocks };
|
|
32
|
+
}
|
|
33
|
+
async function makeCarOut(roots, blocks) {
|
|
34
|
+
const { writer, out } = CarWriter.create(Array.isArray(roots) ? roots : [roots]);
|
|
35
|
+
VERBOSE(`Writing ${blocks.length} blocks to CAR`, { roots, blocks });
|
|
36
|
+
blocks.forEach((b) => writer.put(b));
|
|
37
|
+
writer.close();
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
async function makeCarBlob(roots, blocks) {
|
|
41
|
+
const carOut = await makeCarOut(roots, blocks);
|
|
42
|
+
const chunks = [];
|
|
43
|
+
for await (const chunk of carOut) {
|
|
44
|
+
chunks.push(chunk);
|
|
45
|
+
}
|
|
46
|
+
const blob = new Blob(chunks);
|
|
47
|
+
return blob;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
decodeCarToApplogs,
|
|
52
|
+
decodeCar,
|
|
53
|
+
makeCarOut,
|
|
54
|
+
makeCarBlob
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=chunk-HWWMVYRI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ipfs/car.ts"],"sourcesContent":["import { CarReader, CarWriter } from '@ipld/car'\nimport * as dagJson from '@ipld/dag-json'\nimport { Logger } from 'besonders-logger/src'\nimport { CID } from 'multiformats'\nimport { Applog, CidString } from '../data/datom-types'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO) // eslint-disable-line no-unused-vars\n\nexport type CIDForCar = Exclude<Parameters<(typeof CarWriter)['create']>[0], void>\nexport type BlockForCar = Parameters<CarWriter['put']>[0]\n\nexport async function decodeCarToApplogs(car: CarReader) {\n\tconst { roots, blocks } = await decodeCar(car)\n\tif (!roots || !blocks) {\n\t\tthrow ERROR('decodeCar is funky', { roots, blocks })\n\t}\n\n\tif (roots.length !== 1) {\n\t\tWARN('Unexpected roots count:', roots)\n\t}\n\tconst root = blocks.get(roots[0])\n\tconst applogs: Array<Applog | Uint8Array> = root.applogs.map((cid: CID) => {\n\t\tconst applog = blocks.get(cid.toV1().toString())\n\t\treturn {\n\t\t\t...applog,\n\t\t\tcid: cid.toString(),\n\t\t}\n\t})\n\tDEBUG('Decoded car logs:', root, { roots, blocks, applogs })\n\treturn { applogs }\n}\n\nexport async function decodeCar(car: CarReader) {\n\tconst roots = (await car.getRoots()).map(c => c.toV1().toString() as CidString)\n\tconst blocks = new Map<CidString, any>()\n\tfor await (const { cid, bytes } of car.blocks()) {\n\t\tblocks.set(cid.toV1().toString(), dagJson.decode(bytes)) // HACK: tried using CID as map key, but because it's based on referential equality it's not working\n\t}\n\treturn { roots, blocks }\n}\n\n// make out in the car... been a while but also sounds nice\nexport async function makeCarOut(roots: CIDForCar, blocks: BlockForCar[]) {\n\tconst { writer, out } = CarWriter.create(Array.isArray(roots) ? roots : [roots])\n\n\t// add the blocks to the CAR and close it\n\tVERBOSE(`Writing ${blocks.length} blocks to CAR`, { roots, blocks })\n\tblocks.forEach(b => writer.put(b))\n\twriter.close()\n\t// VERBOSE(`Wrote ${blocks.length} blocks to CAR`, writer)\n\treturn out\n} /** create a new CarWriter, with the encoded block as the root */\n\n// export async function makeCarReader(roots: CIDForCar, blocks: BlockForCar[]) {\n// \tconst out = await makeCarOut(roots, blocks)\n\n// \t// create a new CarReader we can hand to web3.storage.putCar\n// \tconst reader = await CarReader.fromIterable(out)\n// \tVERBOSE(`CAR reader`, reader)\n// \treturn reader\n// } /** create a new CarWriter, with the encoded block as the root */\n\nexport async function makeCarBlob(roots: CIDForCar, blocks: BlockForCar[]) {\n\tconst carOut = await makeCarOut(roots, blocks)\n\tconst chunks = []\n\tfor await (const chunk of carOut) {\n\t\tchunks.push(chunk)\n\t}\n\tconst blob = new Blob(chunks)\n\treturn blob\n}\n"],"mappings":";AAAA,SAAoB,iBAAiB;AACrC,YAAY,aAAa;AACzB,SAAS,cAAc;AAIvB,IAAM,EAAE,MAAM,KAAK,OAAO,SAAS,MAAM,IAAI,OAAO,MAAM,OAAO,IAAI;AAKrE,eAAsB,mBAAmB,KAAgB;AACxD,QAAM,EAAE,OAAO,OAAO,IAAI,MAAM,UAAU,GAAG;AAC7C,MAAI,CAAC,SAAS,CAAC,QAAQ;AACtB,UAAM,MAAM,sBAAsB,EAAE,OAAO,OAAO,CAAC;AAAA,EACpD;AAEA,MAAI,MAAM,WAAW,GAAG;AACvB,SAAK,2BAA2B,KAAK;AAAA,EACtC;AACA,QAAM,OAAO,OAAO,IAAI,MAAM,CAAC,CAAC;AAChC,QAAM,UAAsC,KAAK,QAAQ,IAAI,CAAC,QAAa;AAC1E,UAAM,SAAS,OAAO,IAAI,IAAI,KAAK,EAAE,SAAS,CAAC;AAC/C,WAAO;AAAA,MACN,GAAG;AAAA,MACH,KAAK,IAAI,SAAS;AAAA,IACnB;AAAA,EACD,CAAC;AACD,QAAM,qBAAqB,MAAM,EAAE,OAAO,QAAQ,QAAQ,CAAC;AAC3D,SAAO,EAAE,QAAQ;AAClB;AAEA,eAAsB,UAAU,KAAgB;AAC/C,QAAM,SAAS,MAAM,IAAI,SAAS,GAAG,IAAI,OAAK,EAAE,KAAK,EAAE,SAAS,CAAc;AAC9E,QAAM,SAAS,oBAAI,IAAoB;AACvC,mBAAiB,EAAE,KAAK,MAAM,KAAK,IAAI,OAAO,GAAG;AAChD,WAAO,IAAI,IAAI,KAAK,EAAE,SAAS,GAAW,eAAO,KAAK,CAAC;AAAA,EACxD;AACA,SAAO,EAAE,OAAO,OAAO;AACxB;AAGA,eAAsB,WAAW,OAAkB,QAAuB;AACzE,QAAM,EAAE,QAAQ,IAAI,IAAI,UAAU,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;AAG/E,UAAQ,WAAW,OAAO,MAAM,kBAAkB,EAAE,OAAO,OAAO,CAAC;AACnE,SAAO,QAAQ,OAAK,OAAO,IAAI,CAAC,CAAC;AACjC,SAAO,MAAM;AAEb,SAAO;AACR;AAWA,eAAsB,YAAY,OAAkB,QAAuB;AAC1E,QAAM,SAAS,MAAM,WAAW,OAAO,MAAM;AAC7C,QAAM,SAAS,CAAC;AAChB,mBAAiB,SAAS,QAAQ;AACjC,WAAO,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,OAAO,IAAI,KAAK,MAAM;AAC5B,SAAO;AACR;","names":[]}
|