@mark1russell7/packing 0.2.2 → 0.2.4
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/README.md +11 -0
- package/build/index.d.ts +63 -26
- package/build/index.d.ts.map +1 -1
- package/build/index.js +312 -19
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters.ts +30 -5
- package/src/free.ts +3 -0
- package/src/index.ts +1 -1
- package/src/measures.ts +35 -3
- package/src/moves.ts +47 -0
- package/src/pack.ts +18 -4
- package/src/shelf.ts +203 -0
- package/src/skyline.ts +34 -7
package/README.md
CHANGED
|
@@ -35,6 +35,17 @@ pack(rects, outer, { strategy: "skyline", sortOrder: "area-desc" });
|
|
|
35
35
|
- `packSkyline`: each rectangle goes to the lowest place where it fits. It packs around a `locked` rectangle.
|
|
36
36
|
- `packShelf`: it fills rows left to right in the sort order, and goes around each `locked` rectangle. With the sort order `input`, the rows read in your order.
|
|
37
37
|
|
|
38
|
+
Since 0.2.4, `packShelf` and the strategy `shelf` have the option `fit`. `SHELF_FITS` lists its values. Without `fit`, the shelf packing does not change.
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
pack(rects, outer, { strategy: "shelf", fit: "best" });
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- `fit: "next"`: each rectangle uses only the open shelf. A short rectangle can also stack above a shorter rectangle.
|
|
45
|
+
- `fit: "first"`: each rectangle goes on the first shelf from the top where it fits.
|
|
46
|
+
- `fit: "best"`: each rectangle goes on the shelf with the least height left over above it.
|
|
47
|
+
- With a `fit`, the shelves open only in the free spans of each container shape. `docs/PACKER.md` tells the rules.
|
|
48
|
+
|
|
38
49
|
Both functions also work alone, in an outer rectangle with a width that you set. They do not change the width.
|
|
39
50
|
|
|
40
51
|
A `locked` rectangle keeps its position. `packSkyline` and `packShelf` put the other rectangles around it. `packRows` only keeps its position.
|
package/build/index.d.ts
CHANGED
|
@@ -142,6 +142,46 @@ interface FreeSpace {
|
|
|
142
142
|
* frame is the corner of the container, moved in by the inset and out by half the gap. `FreeSpace` tells the methods.
|
|
143
143
|
*/
|
|
144
144
|
export declare function freeSpace(input: PackInput): FreeSpace;
|
|
145
|
+
/**
|
|
146
|
+
* The rule of a shelf packing to choose the shelf of a rectangle. `packShelf` tells each rule.
|
|
147
|
+
*
|
|
148
|
+
* - `next`: only the open shelf, the last shelf that the packing opened.
|
|
149
|
+
* - `first`: the first shelf from the top where the rectangle fits.
|
|
150
|
+
* - `best`: the shelf with the least height left over above the rectangle.
|
|
151
|
+
*/
|
|
152
|
+
type ShelfFit = "next" | "first" | "best";
|
|
153
|
+
/** This constant lists each shelf fit. */
|
|
154
|
+
export declare const SHELF_FITS: readonly ShelfFit[];
|
|
155
|
+
/** The options of `packShelf` */
|
|
156
|
+
interface ShelfOptions {
|
|
157
|
+
/** The order of the rectangles before the packing. The default is `height-desc`. */
|
|
158
|
+
sortOrder?: SortOrder;
|
|
159
|
+
/**
|
|
160
|
+
* The free space of the container: `freeSpace` of the input. Without it, or when it is plain, the packer uses only the
|
|
161
|
+
* outer rectangle and the locked rectangles.
|
|
162
|
+
*/
|
|
163
|
+
space?: FreeSpace;
|
|
164
|
+
/**
|
|
165
|
+
* The rule to choose a shelf. Without it, `packShelf` packs as in 0.2.3. With it, `packShelf` uses its own shelves in
|
|
166
|
+
* each container shape, and it stacks rectangles in the strips above the shorter rectangles.
|
|
167
|
+
*/
|
|
168
|
+
fit?: ShelfFit;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* This function packs rectangles into shelves: rows that it fills left to right in the sort order, and does not fill
|
|
172
|
+
* again. It goes around each `locked` rectangle. It sets the position of each rectangle and gives the outer rectangle.
|
|
173
|
+
*
|
|
174
|
+
* - With the sort order `input`, the rows read in the order of the array: left to right, and top to bottom.
|
|
175
|
+
* - With `height-desc` (the default), it is the classic Next-Fit Decreasing Height packing.
|
|
176
|
+
* - A rectangle goes to the first x in the row where it crosses no locked rectangle. If no such x is in the width,
|
|
177
|
+
* a new row starts under the current row.
|
|
178
|
+
* - A rectangle wider than the outer rectangle goes on its own row, at the left edge, and overflows.
|
|
179
|
+
* - It does not change the width. Without `fixedSize`, the height grows to the content. With `fixedSize`, a
|
|
180
|
+
* rectangle that does not fit is not packed: its `wasPacked` stays `false`.
|
|
181
|
+
* - With a space that is not plain, `packRowsInSpace` packs the rows into the outline of the space and around its holes.
|
|
182
|
+
* - With `fit`, `packShelvesInSpace` packs the rectangles, in each container shape. A `fit` that is not in `SHELF_FITS` throws a `RangeError`.
|
|
183
|
+
*/
|
|
184
|
+
export declare function packShelf<T>(rects: Rect<T>[], outer: Rect<T>, options?: ShelfOptions): Rect<T>;
|
|
145
185
|
/** The options of `pack` and `packRows` */
|
|
146
186
|
interface PackOptions {
|
|
147
187
|
/** The order of the rectangles before the packing. The default is `height-desc`. */
|
|
@@ -159,6 +199,8 @@ interface PackLayoutOptions extends PackOptions {
|
|
|
159
199
|
* Use `shelf` with the sort order `input` to keep the order of the array around locked rectangles.
|
|
160
200
|
*/
|
|
161
201
|
strategy?: "rows" | "skyline" | "shelf";
|
|
202
|
+
/** The rule of `shelf` to choose a shelf. Only `shelf` reads it. `ShelfOptions` tells it. Without it, `shelf` packs as in 0.2.3. */
|
|
203
|
+
fit?: ShelfFit;
|
|
162
204
|
}
|
|
163
205
|
/**
|
|
164
206
|
* This function packs rectangles into an outer rectangle of a given width with a guillotine row packing. It does
|
|
@@ -217,30 +259,6 @@ interface SkylineOptions {
|
|
|
217
259
|
* the obstacles and the locked items, thus the locked rectangles only keep their positions.
|
|
218
260
|
*/
|
|
219
261
|
export declare function packSkyline<T>(rects: Rect<T>[], outer: Rect<T>, options?: SkylineOptions): Rect<T>;
|
|
220
|
-
/** The options of `packShelf` */
|
|
221
|
-
interface ShelfOptions {
|
|
222
|
-
/** The order of the rectangles before the packing. The default is `height-desc`. */
|
|
223
|
-
sortOrder?: SortOrder;
|
|
224
|
-
/**
|
|
225
|
-
* The free space of the container: `freeSpace` of the input. Without it, or when it is plain, the packer uses only the
|
|
226
|
-
* outer rectangle and the locked rectangles.
|
|
227
|
-
*/
|
|
228
|
-
space?: FreeSpace;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* This function packs rectangles into shelves: rows that it fills left to right in the sort order, and does not fill
|
|
232
|
-
* again. It goes around each `locked` rectangle. It sets the position of each rectangle and gives the outer rectangle.
|
|
233
|
-
*
|
|
234
|
-
* - With the sort order `input`, the rows read in the order of the array: left to right, and top to bottom.
|
|
235
|
-
* - With `height-desc` (the default), it is the classic Next-Fit Decreasing Height packing.
|
|
236
|
-
* - A rectangle goes to the first x in the row where it crosses no locked rectangle. If no such x is in the width,
|
|
237
|
-
* a new row starts under the current row.
|
|
238
|
-
* - A rectangle wider than the outer rectangle goes on its own row, at the left edge, and overflows.
|
|
239
|
-
* - It does not change the width. Without `fixedSize`, the height grows to the content. With `fixedSize`, a
|
|
240
|
-
* rectangle that does not fit is not packed: its `wasPacked` stays `false`.
|
|
241
|
-
* - With a space that is not plain, `packRowsInSpace` packs the rows into the outline of the space and around its holes.
|
|
242
|
-
*/
|
|
243
|
-
export declare function packShelf<T>(rects: Rect<T>[], outer: Rect<T>, options?: ShelfOptions): Rect<T>;
|
|
244
262
|
/** The options of `packFree` */
|
|
245
263
|
interface FreeWidthOptions extends PackLayoutOptions {
|
|
246
264
|
/** The target aspect: the width divided by the height. The default is 1, a square. */
|
|
@@ -351,7 +369,7 @@ export declare function packingMetrics(rects: readonly Rect[], options?: Metrics
|
|
|
351
369
|
/** The family of a measure. Each family has a section in `docs/MEASURES.md`. */
|
|
352
370
|
type MeasureFamily = "density" | "aspect" | "order" | "raggedness" | "overflow" | "stability" | "determinism" | "speed";
|
|
353
371
|
/** The id of a measure of the packer. The ids are those of `docs/FORMAT.md`, and `highways` uses the same ids. */
|
|
354
|
-
type MeasureId = "pack.area" | "pack.fill" | "pack.whitespace" | "pack.aspect" | "pack.aspectError" | "pack.order.inversions" | "pack.order.breaks" | "pack.raggedness" | "pack.overflow" | "pack.overflow.rate" | "pack.overflow.area" | "pack.overflow.forced" | "pack.overflow.forcedArea" | "pack.overflow.excess" | "pack.stability.moved" | "pack.stability.mean" | "pack.stability.q95" | "pack.deterministic" | "pack.search.widths" | "pack.search.ms";
|
|
372
|
+
type MeasureId = "pack.area" | "pack.fill" | "pack.whitespace" | "pack.aspect" | "pack.aspectError" | "pack.order.inversions" | "pack.order.breaks" | "pack.raggedness" | "pack.overflow" | "pack.overflow.rate" | "pack.overflow.area" | "pack.overflow.forced" | "pack.overflow.forcedArea" | "pack.overflow.excess" | "pack.overflow.forcedAreaMin" | "pack.overflow.excessArea" | "pack.stability.moved" | "pack.stability.mean" | "pack.stability.q95" | "pack.deterministic" | "pack.search.widths" | "pack.search.ms";
|
|
355
373
|
/**
|
|
356
374
|
* The facts of one measure: its family, its unit, its direction and its range.
|
|
357
375
|
* It is `MeasureSpec` of the contract for a packer measure id, with a family.
|
|
@@ -387,8 +405,17 @@ interface LayoutMeasures {
|
|
|
387
405
|
"pack.overflow.rate": number;
|
|
388
406
|
"pack.overflow.area": number;
|
|
389
407
|
"pack.overflow.forced": number;
|
|
408
|
+
/** The tight lower bound of `pack.overflow.area`. `docs/MEASURES.md` defines it. */
|
|
390
409
|
"pack.overflow.forcedArea": number;
|
|
391
410
|
"pack.overflow.excess": number;
|
|
411
|
+
/**
|
|
412
|
+
* This measure is an alias of `pack.overflow.forcedArea`, with the same value.
|
|
413
|
+
*
|
|
414
|
+
* @deprecated Use `pack.overflow.forcedArea`. The alias stays until the next minor version.
|
|
415
|
+
*/
|
|
416
|
+
"pack.overflow.forcedAreaMin": number;
|
|
417
|
+
/** The overflow area above its bound: `pack.overflow.area` less `pack.overflow.forcedArea`. */
|
|
418
|
+
"pack.overflow.excessArea": number;
|
|
392
419
|
"pack.search.widths": number;
|
|
393
420
|
"pack.search.ms": number;
|
|
394
421
|
}
|
|
@@ -414,6 +441,8 @@ interface MeasureOptions {
|
|
|
414
441
|
* - A share of an area from 0 to 1 has 0.005. A guard has its tolerance.
|
|
415
442
|
* - An area and a ratio of lengths have `{ rel: 0.01 }`: 1% of the larger value.
|
|
416
443
|
* - The time has no minimum effect, because the times of CI change each time.
|
|
444
|
+
* - `pack.overflow.forcedAreaMin` is a deprecated alias of `pack.overflow.forcedArea`. Its spec is the same, except the id.
|
|
445
|
+
* The alias stays until the next minor version.
|
|
417
446
|
*/
|
|
418
447
|
export declare const MEASURE_SPECS: Readonly<Record<MeasureId, MeasureSpec>>;
|
|
419
448
|
/**
|
|
@@ -425,6 +454,8 @@ export declare const MEASURE_SPECS: Readonly<Record<MeasureId, MeasureSpec>>;
|
|
|
425
454
|
* - The time `pack.search.ms` comes from the trace. It is not part of the determinism rule.
|
|
426
455
|
* - The overflow measures count each id once. `pack.overflow.forced` is the lower bound of `overflowBound`.
|
|
427
456
|
* - `pack.overflow.excess` is the overflow less the forced overflow. A container with no fixed side gives 0 for both.
|
|
457
|
+
* - `pack.overflow.forcedArea` is a lower bound of the overflow area. `pack.overflow.excessArea` is the overflow area above it.
|
|
458
|
+
* - `pack.overflow.forcedAreaMin` is a deprecated alias of `pack.overflow.forcedArea`, with the same value.
|
|
428
459
|
*
|
|
429
460
|
* @example
|
|
430
461
|
* ```ts
|
|
@@ -584,6 +615,11 @@ interface LayoutStrategyOptions {
|
|
|
584
615
|
sortOrder: SortOrder;
|
|
585
616
|
/** The number of widths that the first pass of the size search `log-sweep` tries. */
|
|
586
617
|
samples: number;
|
|
618
|
+
/**
|
|
619
|
+
* The rule of `shelf` to choose a shelf: `next`, `first` or `best`. Only `shelf` reads it. Without it, `shelf` packs
|
|
620
|
+
* as in 0.2.3. With it, the trace also counts `move.firstFit` and `move.bestFit`.
|
|
621
|
+
*/
|
|
622
|
+
fit?: ShelfFit;
|
|
587
623
|
}
|
|
588
624
|
/** The options of the strategy `push`. */
|
|
589
625
|
interface PushStrategyOptions {
|
|
@@ -606,6 +642,7 @@ export declare const skyline: Strategy<LayoutStrategyOptions>;
|
|
|
606
642
|
/**
|
|
607
643
|
* The strategy `shelf` uses `packShelf`: rows filled left to right, around the locked items and the fixed obstacles.
|
|
608
644
|
* With the sort order `input`, the rows keep the rank order. Turnable items, groups and item shapes throw `UnsupportedCell`.
|
|
645
|
+
* The option `fit` selects a shelf rule of roadmap item k21: `next`, `first` or `best`. The default has no `fit`.
|
|
609
646
|
*/
|
|
610
647
|
export declare const shelf: Strategy<LayoutStrategyOptions>;
|
|
611
648
|
/**
|
|
@@ -834,5 +871,5 @@ interface Corpus {
|
|
|
834
871
|
* `RangeError` for an unknown generator, a different version or 2 inputs with the same id.
|
|
835
872
|
*/
|
|
836
873
|
export declare function corpus(name: string, specs: readonly CorpusSpec[]): Corpus;
|
|
837
|
-
export { type Cell, type ChangeMeasures, type ContainerTest, type Corpus, type CorpusCell, type CorpusEntry, type CorpusGenerator, type CorpusManifest, type CorpusSpec, type CountScale, DEFAULT_TOLERANCE, type Dimension, type DimensionValue, type Direction, EPS, type EdgeCase, type EdgeCaseParams, type FreeSpace, type FreeSpan, type FreeWidthOptions, type FreeWidthResult, type FreeWidthTry, type GeneratedInput, type GeneratorParams, type GeneratorStamp, type Item, type LayoutContainer, type LayoutEdge, type LayoutInput, type LayoutMeasures, type LayoutStrategyOptions, type Margin, type MeasureFamily, type MeasureId, type MeasureOptions, type MeasureSpec, type MetricsOptions, type Obstacle, type ObstacleLayout, type PackContext, type PackHard, type PackInput, type PackLayoutOptions, type PackOptions, type PackOutput, type PackingMetrics, type Placement, type Port, type PushOptions, type PushStrategyOptions, RECORD_EPS, type RectGridParams, type RectScatteredParams, type Region, type ShelfOptions, type Side, type Sides, type SizeDistribution, type SizeSearch, type SkylineOptions, type SortOrder, type SpaceRect, type StageTrace, type Strategy, type Supports, type Tolerance, type UiParams, checkInput, turnPoint, turnPort, turnRegion };
|
|
874
|
+
export { type Cell, type ChangeMeasures, type ContainerTest, type Corpus, type CorpusCell, type CorpusEntry, type CorpusGenerator, type CorpusManifest, type CorpusSpec, type CountScale, DEFAULT_TOLERANCE, type Dimension, type DimensionValue, type Direction, EPS, type EdgeCase, type EdgeCaseParams, type FreeSpace, type FreeSpan, type FreeWidthOptions, type FreeWidthResult, type FreeWidthTry, type GeneratedInput, type GeneratorParams, type GeneratorStamp, type Item, type LayoutContainer, type LayoutEdge, type LayoutInput, type LayoutMeasures, type LayoutStrategyOptions, type Margin, type MeasureFamily, type MeasureId, type MeasureOptions, type MeasureSpec, type MetricsOptions, type Obstacle, type ObstacleLayout, type PackContext, type PackHard, type PackInput, type PackLayoutOptions, type PackOptions, type PackOutput, type PackingMetrics, type Placement, type Port, type PushOptions, type PushStrategyOptions, RECORD_EPS, type RectGridParams, type RectScatteredParams, type Region, type ShelfFit, type ShelfOptions, type Side, type Sides, type SizeDistribution, type SizeSearch, type SkylineOptions, type SortOrder, type SpaceRect, type StageTrace, type Strategy, type Supports, type Tolerance, type UiParams, checkInput, turnPoint, turnPort, turnRegion };
|
|
838
875
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["Item","Sides","ContractMeasureSpec","Direction","ContainerTest","PackHard","LayoutContainer","LayoutEdge","LayoutInput"],"sources":["../src/vector.ts","../src/rect.ts","../src/order.ts","../src/contract.ts","../src/space.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["Item","Sides","ContractMeasureSpec","Direction","ContainerTest","PackHard","LayoutContainer","LayoutEdge","LayoutInput"],"sources":["../src/vector.ts","../src/rect.ts","../src/order.ts","../src/contract.ts","../src/space.ts","../src/shelf.ts","../src/pack.ts","../src/skyline.ts","../src/free.ts","../src/push.ts","../src/metrics.ts","../src/measures.ts","../src/strategy.ts","../src/adapters.ts","../src/convert.ts","../src/registry.ts","../src/check.ts","../src/layout-input.ts","../src/generators.ts","../src/corpus.ts"],"mappings":";;qBACa;;EAIX,YAAY,YAAO;;MAMf;MACA,EAAE;;MAEF;MACA,EAAE;;EAGN,IAAI,WAAW;;EAMf,MAAM,GAAG;;EAMT,IAAI,OAAO,SAAS;;EAKpB;;EAKA,SAAS;;EAKT,MAAM,KAAK,QAAQ,KAAK,SAAS;;SAQ1B,GAAG,iBAAiB;;SAKpB,IAAI,SAAS,WAAW;;SASxB,IAAI,SAAS,WAAW;;aASpB,YAAY;;;qBCxEZ,KAAK;;;EAKhB,KAAK;;EAEL;;EAEA;;EAEA;;;;;EAKA;;MAGI,YAAY;;MAEZ,QAAQ;;EAGZ;;EAEA;;EAGA,WAAW;;EAOX,YAAY,QAAQ;;EAMpB;;SAGO,OAAO,GAAG,OAAO,KAAK,OAAO,KAAK;;SAKlC,SAAS,GAAG,OAAO,KAAK,OAAO,KAAK;;SAKpC,YAAY,GAAG,OAAO,KAAK;;SAK3B,SAAS,GAAG,OAAO,KAAK;;SAKxB,UAAU,GAAG,OAAO,KAAK;;;;;;KC/DtB;;qBAGC,sBAAsB;;wBAGnB,aAAa,OAAO,aAAa,GAAG,GAAG,KAAK,IAAI,GAAG,KAAK;;wBCiBxD,SAAS,MAAM,KAAKA,oBAAkBC;;;;;;;wBAWtC,SAAS,MAAMD,SAAOA;;UC/BrB;WACN;WACA;;;UAIM;WACN;WACA;WACA;WACA;;;;;;;;;;;UAYM;;WAEN;;WAEA;;;;;WAKA;;EAET,KAAK,YAAY,aAAa;;;;;EAK9B,OAAO,YAAY,YAAY,gBAAgB;;EAE/C,KAAK,MAAM;;EAEX,KAAK,WAAW,WAAW,YAAY;;;;;EAKvC,MAAM,YAAY,YAAY;;;;;;wBAgUhB,UAAU,OAAO,YAAY;;;;;;;;KC5WjC;;qBAGC,qBAAqB;;UAGjB;;EAEf,YAAY;;;;;EAKZ,QAAQ;;;;;EAKR,MAAM;;;;;;;;;;;;;;;;wBAmDQ,UAAU,GAAG,OAAO,KAAK,MAAM,OAAO,KAAK,IAAI,UAAS,eAAoB,KAAK;;UCxEhF;;EAEf,YAAY;;;;;EAKZ,QAAQ;;;UAIO,0BAA0B;;;;;EAKzC;;EAEA,MAAM;;;;;;;;;;wBAmFQ,SAAS,GAAG,OAAO,KAAK,MAAM,OAAO,KAAK,IAAI,UAAS,cAAmB,KAAK;;;;;;;;;;;wBAoB/E,KAAK,GAAG,OAAO,KAAK,MAAM,QAAO,KAAK,IAAiB,UAAS,oBAAyB,KAAK;;;;;;;;;wBCrH9F,aAAa,SAAS,mBAAmB,eAAe,YAAY,QAAQ,mBAAmB;EAAW;EAAW;;;UAwEpH;;EAEf,YAAY;;;;;EAKZ,QAAQ;;;;;;;;;;;;;;;;wBAiBM,YAAY,GAAG,OAAO,KAAK,MAAM,OAAO,KAAK,IAAI,UAAS,iBAAsB,KAAK;;UCxGpF,yBAAyB;;EAExC;;;;;EAKA;;EAEA;;;UAIe;;EAEf;;EAEA;;EAEA;;EAEA;;;UAIe,gBAAgB;;EAE/B,OAAO,KAAK;;EAEZ;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,OAAO;;;wBAIO,YAAY,eAAe,gBAAgB;;;;;;;;;;;wBAe3C,SAAS,GAAG,OAAO,KAAK,MAAM,QAAO,KAAK,IAAiB,UAAS,mBAAwB,gBAAgB;;UC5D3G;;EAEf;;EAEA;;;;;;;;;;;;;wBAqDc,YAAY,GAAG,QAAQ,KAAK,IAAI,gBAAgB,KAAK,MAAM,UAAS,cAAmB,KAAK;;UCxD3F;;EAEf;;EAEA;IAAQ;IAAe;;;EAEvB;;EAEA;;EAEA;;EAEA;;EAEA;;;UAIe;;EAEf;;;;;;;;;;;wBAYc,eAAe,gBAAgB,QAAQ,UAAS,iBAAsB;;KCxB1E;;KAGA;;;;;UAMK,oBAAoBE,cAAoB;WAC9C,QAAQ;;;;;WAKR;;;;;;;;;WASA;;;UAIM;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;;;;;;EAMA;;EAEA;EACA;EACA;;;UAIe;EACf;EACA;EACA;;;UAIe;;;;;EAKf;;;;;;;;;;;;;qBA4BW,eAAe,SAAS,OAAO,WAAW;;;;;;;;;;;;;;;;;;;wBAyHvC,QAAQ,OAAO,WAAW,QAAQ,YAAY,UAAS,iBAAsB;;;;;;;;;;;wBA4F7E,cAAc,WAAW,WAAW,YAAY,YAAY,aAAa,WAAW,cAAc,aAAa;;;;;;;;wBAqC/G,gBAAgB,OAAO,YAAY,QAAQ;;;;;wBAkC3C,cAAc,kBAAkB,UAAU,IAAI;;;;;;;;;wBAc9C,YAAY,mBAAmB,iBAAiB,WAAWC;;;;;wBAY3D,SAAS,2BAA2B;;wBAoBpC,YAAY;;wBAKZ,UAAU,2BAA2B;;;;;KCtbzC;EACV;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;;KAIU,kBAAkB;;KAGlB,eAAe,UAAU,YAAY,aAAa,SAAS;;;;;UAMtD;EACf,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;EACX,UAAU;EACV,OAAO;EACP,QAAQ;;;UAIO;;EAEf;;EAEA;;EAEA;IAAW;IAAa;;;EAExB,WAAW;;;UAII,SAAS;;EAExB;;EAEA;;EAEA;;EAEA,UAAU;;EAEV,UAAU;;EAEV;;EAEA,KAAK,OAAO,WAAW,SAAS,GAAG,SAAS,cAAc;;;UAI3C;EACf;;EAEA,OAAO,OAAO,WAAW,OAAO,UAAU,SAAS,aAAa,oBAAoB;;;;;;qBAOzE,wBAAwB;;WAE1B,WAAW;;WAEX;EAET,YAAY,WAAW,WAAW;;;wBASpB,WAAW;;wBAWX,cAAc,eAAU,OAAM,KAAK,+BAAoC;;;;;;;;;;wBAwDvE,OAAO,OAAO,YAAY;;wBAqC1B,cAAc,UAAU,UAAU,MAAM,QAAQ,OAAO;EAAwB,WAAW;EAAW;;;wBAUrG,aAAa,UAAU,UAAU,MAAM,QAAQ,OAAO;;wBAKtD,gBAAgB,UAAU,UAAU,OAAO;;UCrM1C;;EAEf,WAAW;;EAEX;;;;;EAKA,MAAM;;;UAIS;;EAEf,WAAW;;EAEX;;;;;;;qBAyFW,MAAM,SAAS;;;;;qBASf,SAAS,SAAS;;;;;;qBAUlB,OAAO,SAAS;;;;;qBAShB,UAAU;;;;;;qBA0HV,MAAM,SAAS;;;;;;;;wBCtQZ,UAAU,GAAG,gBAAgB,KAAK,MAAM,OAAO,KAAK,KAAK;;;;;wBAoBzD,QAAQ,GAAG,QAAQ,YAAY,OAAO,KAAK,MAAM,OAAO,KAAK,KAAK,KAAK;;qBCzB1E,qBAAqB;;wBAGlB,SAAS,aAAa;;;;;wBAUtB,SAAS,YAAY,OAAO,WAAW,mBAAmB,gBAAW;;;;;;;;;;;;;;;;;;;;;wBCyBrE,UACd,OAAO,WACP,QAAQ,YACR,YAAW,KAAK,uBAChB,UAASC,kBACRC;;KCtCS,kBAAkB;;;;;UAMb,uBAAuB;WAC7B,QAAQ,SAAS;;;;;;UAOX,uBAAuBG;WAC7B;WACA;WACA;;WAEA;;WAEA,WAAW;WACX,WAAWF;WACX,gBAAgBC;;WAEhB;;;KAIC;;KAGA;;KAGA;;;;;UAMK,mBAAmB;EAClC,WAAW;EACX,OAAO;EACP,OAAO;EACP;;;wBAIc,QAAQ;;wBAOR,OAAO;;;;;wBASP,cAAc;;wBAYd,UAAU,MAAMC;;wBAMhB,UAAU,gBAAgB;;;;;wBAY1B,YAAY,MAAM,KAAKA,8DAA4D;;UCnFlF,gBAAgB,UAAU,kBAAkB;;WAElD;;WAEA;;WAEA;;WAEA,UAAU,SAAS;;WAEnB,oBAAoB,WAAW,cAAc,EAAE;;EAExD,aAAa,SAAS,QAAQ,KAAK;;EAEnC,KAAK,SAAS,QAAQ,KAAK;;EAE3B,SAAS,cAAc,SAAS,QAAQ,IAAI,eAAe;;;KAgJjD;EAAwB;;;qBAGvB,eAAe,gBAAgB;;KA8QhC;EACV,eAAe;EACf,gBAAgB;EAChB,WAAW;EACX,OAAO;EACP;;;;;;qBAOW,UAAU,gBAAgB;;KA2B3B;EACV,eAAe;EACf;;;qBA0BW,SAAS,gBAAgB;;qBAWzB,WAAW,gBAAgB;;qBAS3B,OAAO,gBAAgB;;qBAUvB,WAAW,gBAAgB;;KAY5B;;KAGA;EAAmB,MAAM;EAAU;;;;;;;;;;;qBAoBlC,WAAW,gBAAgB;;qBAwF3B,qBAAqB;;wBAGlB,UAAU,eAAe;;UChqBxB;;EAEf;;EAEA;;EAEA,SAAS;EACT;;;UAIe;EACf;EACA;EACA,MAAM;;;UAIS;EACf;;EAEA;;EAEA;IAAS;IAAmB;IAAiB,QAAQ;IAAiB;;EACtE,QAAQ;;;UAIO;EACf,UAAU;EACV,QAAQ;;;;;;wBAOM,OAAO,cAAc,gBAAgB,eAAe"}
|