databonk 0.0.1 → 0.0.2
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/core/column.d.ts +31 -1
- package/dist/core/column.d.ts.map +1 -1
- package/dist/core/dataframe.d.ts +40 -0
- package/dist/core/dataframe.d.ts.map +1 -1
- package/dist/core/index-cache.d.ts +44 -0
- package/dist/core/index-cache.d.ts.map +1 -0
- package/dist/index.esm.js +719 -119
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +719 -119
- package/dist/index.js.map +1 -1
- package/dist/operations/groupby.d.ts +8 -1
- package/dist/operations/groupby.d.ts.map +1 -1
- package/dist/operations/join.d.ts +3 -0
- package/dist/operations/join.d.ts.map +1 -1
- package/dist/utils/aggregation-engine.d.ts +84 -0
- package/dist/utils/aggregation-engine.d.ts.map +1 -0
- package/dist/utils/bitset.d.ts +18 -0
- package/dist/utils/bitset.d.ts.map +1 -1
- package/dist/utils/hash.d.ts +79 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -4,10 +4,17 @@ export declare class GroupBy {
|
|
|
4
4
|
private df;
|
|
5
5
|
private groupColumns;
|
|
6
6
|
private groups;
|
|
7
|
+
private groupOrder;
|
|
8
|
+
private cachedGroupCols;
|
|
7
9
|
constructor(df: DataFrame, columns: string[]);
|
|
8
10
|
private computeGroups;
|
|
11
|
+
/**
|
|
12
|
+
* Create a simple string key for a row using '||' separator.
|
|
13
|
+
*/
|
|
9
14
|
private createGroupKey;
|
|
10
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Perform aggregation using single-pass algorithm for efficiency.
|
|
17
|
+
*/
|
|
11
18
|
agg(spec: Record<string, AggregateFunction | AggregateFunction[]>): DataFrame;
|
|
12
19
|
private computeAggregateValue;
|
|
13
20
|
private computeVar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groupby.d.ts","sourceRoot":"","sources":["../../src/operations/groupby.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAiB,iBAAiB,EAAc,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"groupby.d.ts","sourceRoot":"","sources":["../../src/operations/groupby.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAiB,iBAAiB,EAAc,MAAM,kBAAkB,CAAC;AAShF,qBAAa,OAAO;IAClB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,UAAU,CAAoB;IAGtC,OAAO,CAAC,eAAe,CAAW;gBAEtB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;IAW5C,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC,GAAG,SAAS;IAsF7E,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,UAAU;IAIlB,KAAK,IAAI,SAAS;IA4BlB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS;IAQjC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS;IAQlC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS;IAQjC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS;IAQjC,KAAK,IAAI,SAAS;IAyBlB,IAAI,IAAI,SAAS;IAyBjB,IAAI,IAAI,SAAS;CA0BlB;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,SAAS;QACjB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;KACrC;CACF"}
|
|
@@ -4,6 +4,9 @@ export declare class Joiner {
|
|
|
4
4
|
static join(left: DataFrame, right: DataFrame, on: string | string[], how?: JoinType, suffixes?: [string, string]): DataFrame;
|
|
5
5
|
private static validateJoinKeys;
|
|
6
6
|
private static buildHashIndex;
|
|
7
|
+
/**
|
|
8
|
+
* Create a simple string key for a row using '||' separator.
|
|
9
|
+
*/
|
|
7
10
|
private static createJoinKey;
|
|
8
11
|
private static innerJoin;
|
|
9
12
|
private static leftJoin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/operations/join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/operations/join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAI5D,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5D,qBAAa,MAAM;IACjB,MAAM,CAAC,IAAI,CACT,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EACrB,GAAG,GAAE,QAAkB,EACvB,QAAQ,GAAE,CAAC,MAAM,EAAE,MAAM,CAAgB,GACxC,SAAS;IAsBZ,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAW/B,OAAO,CAAC,MAAM,CAAC,cAAc;IAqC7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAa5B,OAAO,CAAC,MAAM,CAAC,SAAS;IAwCxB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAuCvB,OAAO,CAAC,MAAM,CAAC,SAAS;IAuCxB,OAAO,CAAC,MAAM,CAAC,SAAS;IAoDxB,OAAO,CAAC,MAAM,CAAC,oBAAoB;CA+CpC;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,SAAS;QACjB,IAAI,CACF,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EACrB,GAAG,CAAC,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,SAAS,CAAC;KACd;CACF"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { AggregateFunction } from '../operations/aggregation.js';
|
|
2
|
+
/**
|
|
3
|
+
* StatAccumulator tracks multiple statistics in a single pass through the data.
|
|
4
|
+
* Uses Welford's online algorithm for numerically stable variance computation.
|
|
5
|
+
*/
|
|
6
|
+
export declare class StatAccumulator {
|
|
7
|
+
count: number;
|
|
8
|
+
sum: number;
|
|
9
|
+
min: number;
|
|
10
|
+
max: number;
|
|
11
|
+
private mean_;
|
|
12
|
+
private m2;
|
|
13
|
+
/**
|
|
14
|
+
* Add a single value to the accumulator.
|
|
15
|
+
* Updates all statistics in O(1) time.
|
|
16
|
+
*/
|
|
17
|
+
add(value: number): void;
|
|
18
|
+
/**
|
|
19
|
+
* Get the mean of all added values.
|
|
20
|
+
*/
|
|
21
|
+
getMean(): number;
|
|
22
|
+
/**
|
|
23
|
+
* Get the sample variance (n-1 denominator).
|
|
24
|
+
*/
|
|
25
|
+
getVariance(): number;
|
|
26
|
+
/**
|
|
27
|
+
* Get the sample standard deviation.
|
|
28
|
+
*/
|
|
29
|
+
getStd(): number;
|
|
30
|
+
/**
|
|
31
|
+
* Get a specific aggregate value by function name.
|
|
32
|
+
*/
|
|
33
|
+
getValue(fn: AggregateFunction): number;
|
|
34
|
+
/**
|
|
35
|
+
* Merge another accumulator into this one.
|
|
36
|
+
* Useful for parallel aggregation.
|
|
37
|
+
*/
|
|
38
|
+
merge(other: StatAccumulator): void;
|
|
39
|
+
/**
|
|
40
|
+
* Reset the accumulator for reuse.
|
|
41
|
+
*/
|
|
42
|
+
reset(): void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* GroupedAccumulators manages StatAccumulators for multiple groups and columns.
|
|
46
|
+
* Enables single-pass aggregation across all groups and aggregate functions.
|
|
47
|
+
*/
|
|
48
|
+
export declare class GroupedAccumulators {
|
|
49
|
+
private accumulators;
|
|
50
|
+
private columns;
|
|
51
|
+
constructor(columns: string[]);
|
|
52
|
+
/**
|
|
53
|
+
* Get or create the accumulator for a group and column.
|
|
54
|
+
*/
|
|
55
|
+
getAccumulator(groupKey: string, columnName: string): StatAccumulator;
|
|
56
|
+
/**
|
|
57
|
+
* Add a value for a specific group and column.
|
|
58
|
+
*/
|
|
59
|
+
add(groupKey: string, columnName: string, value: number | null): void;
|
|
60
|
+
/**
|
|
61
|
+
* Get all group keys.
|
|
62
|
+
*/
|
|
63
|
+
getGroups(): string[];
|
|
64
|
+
/**
|
|
65
|
+
* Get the aggregate value for a group and column.
|
|
66
|
+
*/
|
|
67
|
+
getValue(groupKey: string, columnName: string, fn: AggregateFunction): number;
|
|
68
|
+
/**
|
|
69
|
+
* Get the count for a group (same across all columns).
|
|
70
|
+
*/
|
|
71
|
+
getGroupCount(groupKey: string): number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* AggregationPlan represents the columns and functions to aggregate.
|
|
75
|
+
*/
|
|
76
|
+
export interface AggregationPlan {
|
|
77
|
+
columns: string[];
|
|
78
|
+
functions: Map<string, AggregateFunction[]>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates an aggregation plan from a spec object.
|
|
82
|
+
*/
|
|
83
|
+
export declare function createAggregationPlan(spec: Record<string, AggregateFunction | AggregateFunction[]>): AggregationPlan;
|
|
84
|
+
//# sourceMappingURL=aggregation-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregation-engine.d.ts","sourceRoot":"","sources":["../../src/utils/aggregation-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE;;;GAGG;AACH,qBAAa,eAAe;IAC1B,KAAK,EAAE,MAAM,CAAK;IAClB,GAAG,EAAE,MAAM,CAAK;IAChB,GAAG,EAAE,MAAM,CAAY;IACvB,GAAG,EAAE,MAAM,CAAa;IACxB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,EAAE,CAAa;IAEvB;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAcxB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,iBAAiB,GAAG,MAAM;IAqBvC;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IA2BnC;;OAEG;IACH,KAAK,IAAI,IAAI;CAQd;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAE9B,OAAO,CAAC,YAAY,CAAwD;IAC5E,OAAO,CAAC,OAAO,CAAW;gBAEd,OAAO,EAAE,MAAM,EAAE;IAI7B;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe;IAgBrE;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAMrE;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,GAAG,MAAM;IAQ7E;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAUxC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC,GAC5D,eAAe,CAWjB"}
|
package/dist/utils/bitset.d.ts
CHANGED
|
@@ -7,6 +7,24 @@ export declare class BitSet {
|
|
|
7
7
|
size(): number;
|
|
8
8
|
count(): number;
|
|
9
9
|
private popCount;
|
|
10
|
+
/**
|
|
11
|
+
* Get a batch of null flags as a bitmask.
|
|
12
|
+
* Useful for SIMD-style batch null checking.
|
|
13
|
+
* @param startIndex The starting index (must be aligned to 32 for optimal performance)
|
|
14
|
+
* @param count Number of bits to get (max 32)
|
|
15
|
+
* @returns A number where bit i is set if index (startIndex + i) is null
|
|
16
|
+
*/
|
|
17
|
+
getNullMaskBatch(startIndex: number, count: number): number;
|
|
18
|
+
/**
|
|
19
|
+
* Check if any bit in a range is set.
|
|
20
|
+
* Faster than checking each bit individually.
|
|
21
|
+
*/
|
|
22
|
+
anySet(startIndex: number, count: number): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Get direct access to the underlying data array.
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
getDataRef(): Uint32Array;
|
|
10
28
|
[Symbol.iterator](): Iterator<boolean>;
|
|
11
29
|
}
|
|
12
30
|
//# sourceMappingURL=bitset.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitset.d.ts","sourceRoot":"","sources":["../../src/utils/bitset.ts"],"names":[],"mappings":"AAAA,qBAAa,MAAM;IACjB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAK1B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAaxC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAS3B,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,MAAM;IAQf,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"bitset.d.ts","sourceRoot":"","sources":["../../src/utils/bitset.ts"],"names":[],"mappings":"AAAA,qBAAa,MAAM;IACjB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAK1B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAaxC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAS3B,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,MAAM;IAQf,OAAO,CAAC,QAAQ;IAMhB;;;;;;OAMG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IA4B3D;;;OAGG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAmBlD;;;OAGG;IACH,UAAU,IAAI,WAAW;IAIxB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC;CAKxC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { DataType } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* TypedHasher provides efficient hashing for different data types.
|
|
4
|
+
* Uses numeric hashing for numeric keys to avoid expensive string conversion.
|
|
5
|
+
*/
|
|
6
|
+
export declare class TypedHasher {
|
|
7
|
+
private static readonly FNV_OFFSET;
|
|
8
|
+
private static readonly FNV_PRIME;
|
|
9
|
+
private static readonly NULL_SENTINEL;
|
|
10
|
+
/**
|
|
11
|
+
* Hash a single numeric value directly without string conversion.
|
|
12
|
+
* For 32-bit integers, uses the value itself as the hash.
|
|
13
|
+
* For floats, uses bit-level hashing.
|
|
14
|
+
*/
|
|
15
|
+
static hashSingleNumeric(value: number | null): number;
|
|
16
|
+
/**
|
|
17
|
+
* Hash a float64 value using bit-level operations.
|
|
18
|
+
*/
|
|
19
|
+
private static hashFloat64;
|
|
20
|
+
/**
|
|
21
|
+
* Hash a string value using FNV-1a.
|
|
22
|
+
*/
|
|
23
|
+
static hashString(value: string | null): number;
|
|
24
|
+
/**
|
|
25
|
+
* Hash any value based on its type.
|
|
26
|
+
*/
|
|
27
|
+
static hashValue(value: any, dataType: DataType): number;
|
|
28
|
+
/**
|
|
29
|
+
* Hash a composite key (multiple columns) using FNV-1a combining.
|
|
30
|
+
*/
|
|
31
|
+
static hashCompositeKey(values: any[], types: DataType[]): number;
|
|
32
|
+
/**
|
|
33
|
+
* Create a compound key for exact matching when hash collision is possible.
|
|
34
|
+
* Returns a string representation for collision detection.
|
|
35
|
+
*/
|
|
36
|
+
static createCompoundKey(values: any[]): string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* NumericHashMap is a hash map optimized for numeric keys.
|
|
40
|
+
* Uses open addressing with linear probing for cache-friendly access.
|
|
41
|
+
*/
|
|
42
|
+
export declare class NumericHashMap<V> {
|
|
43
|
+
private keys;
|
|
44
|
+
private values;
|
|
45
|
+
private compoundKeys;
|
|
46
|
+
private size;
|
|
47
|
+
private capacity;
|
|
48
|
+
private readonly EMPTY;
|
|
49
|
+
private readonly DELETED;
|
|
50
|
+
constructor(expectedSize?: number);
|
|
51
|
+
private nextPowerOfTwo;
|
|
52
|
+
private hash;
|
|
53
|
+
/**
|
|
54
|
+
* Set a value with both numeric hash and compound key for exact matching.
|
|
55
|
+
*/
|
|
56
|
+
set(numericKey: number, compoundKey: string, value: V): void;
|
|
57
|
+
/**
|
|
58
|
+
* Get a value by numeric hash and compound key.
|
|
59
|
+
*/
|
|
60
|
+
get(numericKey: number, compoundKey: string): V | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Check if a key exists.
|
|
63
|
+
*/
|
|
64
|
+
has(numericKey: number, compoundKey: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Get or create a value.
|
|
67
|
+
*/
|
|
68
|
+
getOrCreate(numericKey: number, compoundKey: string, factory: () => V): V;
|
|
69
|
+
private resize;
|
|
70
|
+
/**
|
|
71
|
+
* Iterate over all entries.
|
|
72
|
+
*/
|
|
73
|
+
entries(): IterableIterator<[string, V]>;
|
|
74
|
+
/**
|
|
75
|
+
* Get the number of entries.
|
|
76
|
+
*/
|
|
77
|
+
getSize(): number;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;GAGG;AACH,qBAAa,WAAW;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAc;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAc;IAG/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAe;IAEpD;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAWtD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAO1B;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAW/C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM;IAmBxD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM;IAWjE;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM;CAGhD;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,YAAY,GAAE,MAAa;IAQvC,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,IAAI;IAKZ;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAgC5D;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAkB3D;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAIrD;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;IAgCzE,OAAO,CAAC,MAAM;IAmBd;;OAEG;IACF,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAQzC;;OAEG;IACH,OAAO,IAAI,MAAM;CAGlB"}
|