pond-ts 0.3.0 → 0.4.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.
@@ -0,0 +1,340 @@
1
+ import { Event } from './Event.js';
2
+ import { Interval } from './Interval.js';
3
+ import { LiveAggregation } from './LiveAggregation.js';
4
+ import { LiveView, makeDiffView, makeFillView, makeCumulativeView, } from './LiveView.js';
5
+ import { Time } from './Time.js';
6
+ import { TimeRange } from './TimeRange.js';
7
+ import { LiveRollingAggregation, } from './LiveRollingAggregation.js';
8
+ import { TimeSeries } from './TimeSeries.js';
9
+ import { ValidationError } from './errors.js';
10
+ import { parseDuration } from './utils/duration.js';
11
+ // ── Single-row validation ───────────────────────────────────────
12
+ const FIRST_COL_KINDS = new Set([
13
+ 'time',
14
+ 'interval',
15
+ 'timeRange',
16
+ ]);
17
+ function validateSchema(schema) {
18
+ if (!schema.length) {
19
+ throw new ValidationError('schema must have at least one column');
20
+ }
21
+ if (!FIRST_COL_KINDS.has(schema[0].kind)) {
22
+ throw new ValidationError('first column must be one of: time, interval, timeRange');
23
+ }
24
+ for (let col = 1; col < schema.length; col++) {
25
+ const kind = schema[col].kind;
26
+ if (kind !== 'number' && kind !== 'string' && kind !== 'boolean') {
27
+ throw new ValidationError(`column ${col} has unsupported value kind '${kind}'`);
28
+ }
29
+ }
30
+ }
31
+ function normalizeKey(kind, value) {
32
+ switch (kind) {
33
+ case 'time':
34
+ return value instanceof Time ? value : new Time(value);
35
+ case 'timeRange':
36
+ return value instanceof TimeRange
37
+ ? value
38
+ : new TimeRange(value);
39
+ case 'interval':
40
+ return value instanceof Interval
41
+ ? value
42
+ : new Interval(value);
43
+ }
44
+ }
45
+ function assertCellKind(kind, value, name) {
46
+ if (value === undefined)
47
+ return;
48
+ switch (kind) {
49
+ case 'number':
50
+ if (typeof value !== 'number' || !Number.isFinite(value))
51
+ throw new ValidationError(`'${name}': expected finite number`);
52
+ return;
53
+ case 'string':
54
+ if (typeof value !== 'string')
55
+ throw new ValidationError(`'${name}': expected string`);
56
+ return;
57
+ case 'boolean':
58
+ if (typeof value !== 'boolean')
59
+ throw new ValidationError(`'${name}': expected boolean`);
60
+ return;
61
+ }
62
+ }
63
+ function compareKeys(a, b) {
64
+ return a.begin() !== b.begin() ? a.begin() - b.begin() : a.end() - b.end();
65
+ }
66
+ function estimateEventBytes(event) {
67
+ let bytes = 64; // base overhead (object, key, data refs)
68
+ const data = event.data();
69
+ for (const v of Object.values(data)) {
70
+ if (typeof v === 'number')
71
+ bytes += 8;
72
+ else if (typeof v === 'string')
73
+ bytes += 2 * v.length;
74
+ else if (typeof v === 'boolean')
75
+ bytes += 4;
76
+ }
77
+ return bytes;
78
+ }
79
+ // ── LiveSeries ──────────────────────────────────────────────────
80
+ export class LiveSeries {
81
+ name;
82
+ schema;
83
+ #ordering;
84
+ #graceWindowMs;
85
+ #maxEvents;
86
+ #maxAgeMs;
87
+ #maxBytes;
88
+ #events;
89
+ #byteEstimate;
90
+ #onEvent;
91
+ #onBatch;
92
+ #onEvict;
93
+ constructor(options) {
94
+ this.name = options.name;
95
+ this.schema = Object.freeze([...options.schema]);
96
+ this.#ordering = options.ordering ?? 'strict';
97
+ this.#graceWindowMs = options.graceWindow
98
+ ? parseDuration(options.graceWindow)
99
+ : Infinity;
100
+ if (this.#ordering !== 'reorder' && options.graceWindow !== undefined) {
101
+ throw new ValidationError('graceWindow is only valid with ordering: "reorder"');
102
+ }
103
+ const ret = options.retention ?? {};
104
+ this.#maxEvents = ret.maxEvents ?? Infinity;
105
+ this.#maxAgeMs = ret.maxAge ? parseDuration(ret.maxAge) : Infinity;
106
+ this.#maxBytes = ret.maxBytes ?? Infinity;
107
+ this.#events = [];
108
+ this.#byteEstimate = 0;
109
+ this.#onEvent = new Set();
110
+ this.#onBatch = new Set();
111
+ this.#onEvict = new Set();
112
+ validateSchema(this.schema);
113
+ }
114
+ get length() {
115
+ return this.#events.length;
116
+ }
117
+ get graceWindowMs() {
118
+ return this.#graceWindowMs;
119
+ }
120
+ at(index) {
121
+ if (index < 0)
122
+ index = this.#events.length + index;
123
+ return this.#events[index];
124
+ }
125
+ first() {
126
+ return this.#events[0];
127
+ }
128
+ last() {
129
+ return this.#events[this.#events.length - 1];
130
+ }
131
+ push(...rows) {
132
+ if (rows.length === 0)
133
+ return;
134
+ const added = [];
135
+ for (const row of rows) {
136
+ const event = this.#validateRow(row);
137
+ if (this.#insert(event)) {
138
+ added.push(event);
139
+ this.#byteEstimate += estimateEventBytes(event);
140
+ for (const fn of this.#onEvent)
141
+ fn(event);
142
+ }
143
+ }
144
+ if (added.length === 0)
145
+ return;
146
+ const evicted = this.#applyRetention();
147
+ for (const fn of this.#onBatch)
148
+ fn(added);
149
+ if (evicted.length > 0) {
150
+ for (const fn of this.#onEvict)
151
+ fn(evicted);
152
+ }
153
+ }
154
+ clear() {
155
+ const evicted = this.#events;
156
+ this.#events = [];
157
+ this.#byteEstimate = 0;
158
+ if (evicted.length > 0) {
159
+ for (const fn of this.#onEvict)
160
+ fn(evicted);
161
+ }
162
+ }
163
+ toTimeSeries(name) {
164
+ const rows = this.#events.map((event) => {
165
+ const row = [event.key()];
166
+ for (let col = 1; col < this.schema.length; col++) {
167
+ row.push(event.get(this.schema[col].name));
168
+ }
169
+ return row;
170
+ });
171
+ return new TimeSeries({
172
+ name: name ?? this.name,
173
+ schema: this.schema,
174
+ rows: rows,
175
+ });
176
+ }
177
+ filter(predicate) {
178
+ return new LiveView(this, (event) => predicate(event) ? event : undefined);
179
+ }
180
+ map(fn) {
181
+ return new LiveView(this, fn);
182
+ }
183
+ select(...keys) {
184
+ const newSchema = Object.freeze([
185
+ this.schema[0],
186
+ ...this.schema.slice(1).filter((c) => keys.includes(c.name)),
187
+ ]);
188
+ return new LiveView(this, (event) => event.select(...keys), {
189
+ schema: newSchema,
190
+ });
191
+ }
192
+ window(size) {
193
+ if (typeof size === 'number' && Number.isInteger(size) && size > 0) {
194
+ const count = size;
195
+ return new LiveView(this, (event) => event, {
196
+ evict: (events) => Math.max(0, events.length - count),
197
+ });
198
+ }
199
+ if (typeof size === 'string') {
200
+ const ms = parseDuration(size);
201
+ return new LiveView(this, (event) => event, {
202
+ evict: (events) => {
203
+ if (events.length === 0)
204
+ return 0;
205
+ const cutoff = events[events.length - 1].begin() - ms;
206
+ let i = 0;
207
+ while (i < events.length && events[i].begin() < cutoff)
208
+ i++;
209
+ return i;
210
+ },
211
+ });
212
+ }
213
+ throw new TypeError('window must be a positive integer (event count) or duration string');
214
+ }
215
+ aggregate(sequence, mapping) {
216
+ return new LiveAggregation(this, sequence, mapping);
217
+ }
218
+ rolling(window, mapping) {
219
+ return new LiveRollingAggregation(this, window, mapping);
220
+ }
221
+ diff(columns, options) {
222
+ return makeDiffView(this, 'diff', columns, options);
223
+ }
224
+ rate(columns, options) {
225
+ return makeDiffView(this, 'rate', columns, options);
226
+ }
227
+ pctChange(columns, options) {
228
+ return makeDiffView(this, 'pctChange', columns, options);
229
+ }
230
+ fill(strategy, options) {
231
+ return makeFillView(this, strategy, options);
232
+ }
233
+ cumulative(spec) {
234
+ return makeCumulativeView(this, spec);
235
+ }
236
+ on(type, fn) {
237
+ const set = type === 'event'
238
+ ? this.#onEvent
239
+ : type === 'batch'
240
+ ? this.#onBatch
241
+ : this.#onEvict;
242
+ set.add(fn);
243
+ return () => {
244
+ set.delete(fn);
245
+ };
246
+ }
247
+ // ── Private ─────────────────────────────────────────────────
248
+ #validateRow(row) {
249
+ const arr = row;
250
+ if (arr.length !== this.schema.length) {
251
+ throw new ValidationError(`expected ${this.schema.length} values, got ${arr.length}`);
252
+ }
253
+ const keyDef = this.schema[0];
254
+ const key = normalizeKey(keyDef.kind, arr[0]);
255
+ const data = {};
256
+ for (let col = 1; col < this.schema.length; col++) {
257
+ const def = this.schema[col];
258
+ const value = arr[col];
259
+ if (value === undefined) {
260
+ if (def.required !== false) {
261
+ throw new ValidationError(`column '${def.name}' is required`);
262
+ }
263
+ data[def.name] = undefined;
264
+ continue;
265
+ }
266
+ assertCellKind(def.kind, value, def.name);
267
+ data[def.name] = value;
268
+ }
269
+ return new Event(key, data);
270
+ }
271
+ #insert(event) {
272
+ const last = this.#events[this.#events.length - 1];
273
+ if (!last || compareKeys(last.key(), event.key()) <= 0) {
274
+ this.#events.push(event);
275
+ return true;
276
+ }
277
+ switch (this.#ordering) {
278
+ case 'strict':
279
+ throw new ValidationError(`out-of-order event: timestamp ${event.begin()} is before latest ${last.begin()}`);
280
+ case 'drop':
281
+ return false;
282
+ case 'reorder': {
283
+ if (this.#graceWindowMs !== Infinity &&
284
+ last.begin() - event.begin() > this.#graceWindowMs) {
285
+ throw new ValidationError(`event at ${event.begin()} is outside grace window ` +
286
+ `(latest: ${last.begin()}, grace: ${this.#graceWindowMs}ms)`);
287
+ }
288
+ let lo = 0;
289
+ let hi = this.#events.length;
290
+ while (lo < hi) {
291
+ const mid = (lo + hi) >>> 1;
292
+ if (compareKeys(this.#events[mid].key(), event.key()) <= 0) {
293
+ lo = mid + 1;
294
+ }
295
+ else {
296
+ hi = mid;
297
+ }
298
+ }
299
+ this.#events.splice(lo, 0, event);
300
+ return true;
301
+ }
302
+ }
303
+ }
304
+ #applyRetention() {
305
+ let evictCount = 0;
306
+ if (this.#events.length > this.#maxEvents) {
307
+ evictCount = this.#events.length - this.#maxEvents;
308
+ }
309
+ if (this.#maxAgeMs !== Infinity && this.#events.length > 0) {
310
+ const latest = this.#events[this.#events.length - 1];
311
+ const cutoff = latest.begin() - this.#maxAgeMs;
312
+ let i = evictCount;
313
+ while (i < this.#events.length && this.#events[i].begin() < cutoff) {
314
+ i++;
315
+ }
316
+ evictCount = Math.max(evictCount, i);
317
+ }
318
+ if (this.#maxBytes !== Infinity && this.#byteEstimate > this.#maxBytes) {
319
+ let i = evictCount;
320
+ let freed = 0;
321
+ for (let j = 0; j < evictCount; j++) {
322
+ freed += estimateEventBytes(this.#events[j]);
323
+ }
324
+ while (i < this.#events.length &&
325
+ this.#byteEstimate - freed > this.#maxBytes) {
326
+ freed += estimateEventBytes(this.#events[i]);
327
+ i++;
328
+ }
329
+ evictCount = Math.max(evictCount, i);
330
+ }
331
+ if (evictCount === 0)
332
+ return [];
333
+ const evicted = this.#events.splice(0, evictCount);
334
+ for (const e of evicted) {
335
+ this.#byteEstimate -= estimateEventBytes(e);
336
+ }
337
+ return evicted;
338
+ }
339
+ }
340
+ //# sourceMappingURL=LiveSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveSeries.js","sourceRoot":"","sources":["../src/LiveSeries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { LiveAggregation } from './LiveAggregation.js';
2
+ import { LiveRollingAggregation, type RollingWindow } from './LiveRollingAggregation.js';
3
+ import { TimeSeries } from './TimeSeries.js';
4
+ import type { Sequence } from './Sequence.js';
5
+ import type { AggregateMap, DiffSchema, EventDataForSchema, EventForSchema, LiveSource, NumericColumnNameForSchema, ScalarValue, SelectSchema, SeriesSchema, ValueColumnsForSchema } from './types.js';
6
+ export type LiveFillStrategy = 'hold' | 'zero';
7
+ export type LiveFillMapping<S extends SeriesSchema> = {
8
+ [K in ValueColumnsForSchema<S>[number]['name']]?: LiveFillStrategy | ScalarValue;
9
+ };
10
+ type EventListener<S extends SeriesSchema> = (event: EventForSchema<S>) => void;
11
+ type ViewOptions<S extends SeriesSchema> = {
12
+ schema?: S;
13
+ evict?: (events: readonly EventForSchema<S>[]) => number;
14
+ };
15
+ export declare class LiveView<S extends SeriesSchema> implements LiveSource<S> {
16
+ #private;
17
+ readonly name: string;
18
+ readonly schema: S;
19
+ constructor(source: LiveSource<any>, process: (event: any) => EventForSchema<S> | undefined, options?: ViewOptions<S>);
20
+ get length(): number;
21
+ at(index: number): EventForSchema<S> | undefined;
22
+ first(): EventForSchema<S> | undefined;
23
+ last(): EventForSchema<S> | undefined;
24
+ filter(predicate: (event: EventForSchema<S>) => boolean): LiveView<S>;
25
+ map(fn: (event: EventForSchema<S>) => EventForSchema<S>): LiveView<S>;
26
+ select<const Keys extends readonly (keyof EventDataForSchema<S>)[]>(...keys: Keys): LiveView<SelectSchema<S, Keys[number] & string>>;
27
+ window(size: RollingWindow): LiveView<S>;
28
+ aggregate(sequence: Sequence, mapping: AggregateMap<S>): LiveAggregation<S>;
29
+ rolling(window: RollingWindow, mapping: AggregateMap<S>): LiveRollingAggregation<S>;
30
+ diff<const Target extends NumericColumnNameForSchema<S>>(columns: Target | readonly Target[], options?: {
31
+ drop?: boolean;
32
+ }): LiveView<DiffSchema<S, Target>>;
33
+ rate<const Target extends NumericColumnNameForSchema<S>>(columns: Target | readonly Target[], options?: {
34
+ drop?: boolean;
35
+ }): LiveView<DiffSchema<S, Target>>;
36
+ pctChange<const Target extends NumericColumnNameForSchema<S>>(columns: Target | readonly Target[], options?: {
37
+ drop?: boolean;
38
+ }): LiveView<DiffSchema<S, Target>>;
39
+ fill(strategy: LiveFillStrategy | LiveFillMapping<S>, options?: {
40
+ limit?: number;
41
+ }): LiveView<S>;
42
+ cumulative<const Targets extends NumericColumnNameForSchema<S>>(spec: {
43
+ [K in Targets]: 'sum' | 'max' | 'min' | 'count' | ((acc: number, value: number) => number);
44
+ }): LiveView<DiffSchema<S, Targets>>;
45
+ toTimeSeries(name?: string): TimeSeries<S>;
46
+ on(type: 'event', fn: EventListener<S>): () => void;
47
+ dispose(): void;
48
+ }
49
+ export declare function makeDiffView<S extends SeriesSchema, Target extends NumericColumnNameForSchema<S>>(source: LiveSource<S>, mode: 'diff' | 'rate' | 'pctChange', columns: Target | readonly Target[], options?: {
50
+ drop?: boolean;
51
+ }): LiveView<DiffSchema<S, Target>>;
52
+ export declare function makeFillView<S extends SeriesSchema>(source: LiveSource<S>, strategy: LiveFillStrategy | LiveFillMapping<S>, options?: {
53
+ limit?: number;
54
+ }): LiveView<S>;
55
+ export declare function makeCumulativeView<S extends SeriesSchema, Targets extends NumericColumnNameForSchema<S>>(source: LiveSource<S>, spec: {
56
+ [K in Targets]: 'sum' | 'max' | 'min' | 'count' | ((acc: number, value: number) => number);
57
+ }): LiveView<DiffSchema<S, Targets>>;
58
+ export {};
59
+ //# sourceMappingURL=LiveView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveView.d.ts","sourceRoot":"","sources":["../src/LiveView.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,KAAK,aAAa,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,0BAA0B,EAE1B,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/C,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,YAAY,IAAI;KACnD,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC5C,gBAAgB,GAChB,WAAW;CAChB,CAAC;AAKF,KAAK,aAAa,CAAC,CAAC,SAAS,YAAY,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAEhF,KAAK,WAAW,CAAC,CAAC,SAAS,YAAY,IAAI;IACzC,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;CAC1D,CAAC;AAEF,qBAAa,QAAQ,CAAC,CAAC,SAAS,YAAY,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAWjB,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,EACvB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,EACtD,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAyB1B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAKhD,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAItC,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAIrC,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;IAMrE,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAIrE,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,SAAS,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,EAChE,GAAG,IAAI,EAAE,IAAI,GACZ,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IAWnD,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC;IAwBxC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAI3E,OAAO,CACL,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GACvB,sBAAsB,CAAC,CAAC,CAAC;IAI5B,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,0BAA0B,CAAC,CAAC,CAAC,EACrD,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACnC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3B,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAIlC,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,0BAA0B,CAAC,CAAC,CAAC,EACrD,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACnC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3B,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAIlC,SAAS,CAAC,KAAK,CAAC,MAAM,SAAS,0BAA0B,CAAC,CAAC,CAAC,EAC1D,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACnC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3B,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAIlC,IAAI,CACF,QAAQ,EAAE,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,EAC/C,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,QAAQ,CAAC,CAAC,CAAC;IAId,UAAU,CAAC,KAAK,CAAC,OAAO,SAAS,0BAA0B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;SACnE,CAAC,IAAI,OAAO,GACT,KAAK,GACL,KAAK,GACL,KAAK,GACL,OAAO,GACP,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;KAC7C,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAIpC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAe1C,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAOnD,OAAO,IAAI,IAAI;CAShB;AAID,wBAAgB,YAAY,CAC1B,CAAC,SAAS,YAAY,EACtB,MAAM,SAAS,0BAA0B,CAAC,CAAC,CAAC,EAE5C,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EACrB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,EACnC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACnC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAqEjC;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,YAAY,EACjD,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EACrB,QAAQ,EAAE,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,EAC/C,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,QAAQ,CAAC,CAAC,CAAC,CAgFb;AAED,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,YAAY,EACtB,OAAO,SAAS,0BAA0B,CAAC,CAAC,CAAC,EAE7C,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EACrB,IAAI,EAAE;KACH,CAAC,IAAI,OAAO,GACT,KAAK,GACL,KAAK,GACL,KAAK,GACL,OAAO,GACP,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C,GACA,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAqFlC"}