@aura3d/addons 0.0.0-stage → 5.0.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.
Files changed (54) hide show
  1. package/README.md +11 -2
  2. package/dist/effects/AsciiOutput.d.ts +60 -0
  3. package/dist/effects/AsciiOutput.d.ts.map +1 -0
  4. package/dist/effects/AsciiOutput.js +187 -0
  5. package/dist/effects/AsciiOutput.js.map +1 -0
  6. package/dist/effects/OutlineOutput.d.ts +58 -0
  7. package/dist/effects/OutlineOutput.d.ts.map +1 -0
  8. package/dist/effects/OutlineOutput.js +274 -0
  9. package/dist/effects/OutlineOutput.js.map +1 -0
  10. package/dist/effects/StereoOutputs.d.ts +106 -0
  11. package/dist/effects/StereoOutputs.d.ts.map +1 -0
  12. package/dist/effects/StereoOutputs.js +315 -0
  13. package/dist/effects/StereoOutputs.js.map +1 -0
  14. package/dist/generators/EnvironmentGenerators.d.ts +100 -0
  15. package/dist/generators/EnvironmentGenerators.d.ts.map +1 -0
  16. package/dist/generators/EnvironmentGenerators.js +477 -0
  17. package/dist/generators/EnvironmentGenerators.js.map +1 -0
  18. package/dist/index.d.ts +14 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +14 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/objects/MarchingCubes.d.ts +80 -0
  23. package/dist/objects/MarchingCubes.d.ts.map +1 -0
  24. package/dist/objects/MarchingCubes.js +289 -0
  25. package/dist/objects/MarchingCubes.js.map +1 -0
  26. package/dist/objects/SpecializedObjects.d.ts +150 -0
  27. package/dist/objects/SpecializedObjects.d.ts.map +1 -0
  28. package/dist/objects/SpecializedObjects.js +544 -0
  29. package/dist/objects/SpecializedObjects.js.map +1 -0
  30. package/dist/renderers/SpatialDOMRenderer.d.ts +76 -0
  31. package/dist/renderers/SpatialDOMRenderer.d.ts.map +1 -0
  32. package/dist/renderers/SpatialDOMRenderer.js +279 -0
  33. package/dist/renderers/SpatialDOMRenderer.js.map +1 -0
  34. package/dist/renderers/VectorRenderer.d.ts +98 -0
  35. package/dist/renderers/VectorRenderer.d.ts.map +1 -0
  36. package/dist/renderers/VectorRenderer.js +253 -0
  37. package/dist/renderers/VectorRenderer.js.map +1 -0
  38. package/dist/tools/Fracture.d.ts +87 -0
  39. package/dist/tools/Fracture.d.ts.map +1 -0
  40. package/dist/tools/Fracture.js +422 -0
  41. package/dist/tools/Fracture.js.map +1 -0
  42. package/dist/tools/Sculptor.d.ts +84 -0
  43. package/dist/tools/Sculptor.d.ts.map +1 -0
  44. package/dist/tools/Sculptor.js +207 -0
  45. package/dist/tools/Sculptor.js.map +1 -0
  46. package/dist/tools/TubePainter.d.ts +47 -0
  47. package/dist/tools/TubePainter.d.ts.map +1 -0
  48. package/dist/tools/TubePainter.js +170 -0
  49. package/dist/tools/TubePainter.js.map +1 -0
  50. package/dist/utils/WorkerPool.d.ts +93 -0
  51. package/dist/utils/WorkerPool.d.ts.map +1 -0
  52. package/dist/utils/WorkerPool.js +360 -0
  53. package/dist/utils/WorkerPool.js.map +1 -0
  54. package/package.json +114 -3
@@ -0,0 +1,253 @@
1
+ const IDENTITY = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
2
+ const CLIP_EPSILON = 1e-10;
3
+ /**
4
+ * Produce a standalone SVG from CPU-readable, static Aura3D render geometry.
5
+ * Triangles, lines and points are clipped in homogeneous space before the
6
+ * perspective divide. `renderOrder` then far-to-near painter ordering is used;
7
+ * intersecting polygons cannot be depth-tested per pixel. Vector styles are
8
+ * flat and explicit; textures, lighting, shadows and post effects are not
9
+ * exported. Skinned, morphed and instanced draws throw instead of silently
10
+ * exporting an undeformed or partial scene. The renderer owns no geometry.
11
+ */
12
+ export class VectorRenderer {
13
+ width;
14
+ height;
15
+ background;
16
+ maxPrimitives;
17
+ resolveStyle;
18
+ disposed = false;
19
+ constructor(options) {
20
+ this.width = positive(options.width, "width");
21
+ this.height = positive(options.height, "height");
22
+ this.background = options.background;
23
+ const maxPrimitives = options.maxPrimitives ?? 100_000;
24
+ if (!Number.isSafeInteger(maxPrimitives) || maxPrimitives <= 0)
25
+ throw new RangeError("maxPrimitives must be a positive safe integer.");
26
+ this.maxPrimitives = maxPrimitives;
27
+ this.resolveStyle = options.resolveStyle;
28
+ }
29
+ setSize(width, height) {
30
+ this.assertAlive();
31
+ const nextWidth = positive(width, "width");
32
+ const nextHeight = positive(height, "height");
33
+ this.width = nextWidth;
34
+ this.height = nextHeight;
35
+ }
36
+ render(items, view) {
37
+ this.assertAlive();
38
+ const viewMatrix = matrix(view.viewProjectionMatrix, "viewProjectionMatrix");
39
+ const viewport = view.viewport ?? { x: 0, y: 0, width: this.width, height: this.height };
40
+ validateViewport(viewport, this.width, this.height);
41
+ const depthRange = view.depthRange ?? "minus-one-to-one";
42
+ if (depthRange !== "minus-one-to-one" && depthRange !== "zero-to-one")
43
+ throw new RangeError("Unknown vector depth range.");
44
+ const depthOrder = view.depthOrder ?? "standard";
45
+ if (depthOrder !== "standard" && depthOrder !== "reversed")
46
+ throw new RangeError("Unknown vector depth order.");
47
+ const planes = clipPlanes(depthRange);
48
+ const primitives = [];
49
+ let submitted = 0;
50
+ let sequence = 0;
51
+ for (const item of items) {
52
+ if (item.skinning !== undefined || item.morphTargets !== undefined || item.morphWeights !== undefined || item.instanceTransforms !== undefined) {
53
+ throw new Error("VectorRenderer requires static, non-instanced geometry; bake skinning, morphs and instances first.");
54
+ }
55
+ const order = item.renderOrder ?? 0;
56
+ if (!Number.isFinite(order))
57
+ throw new RangeError("Vector renderOrder must be finite.");
58
+ const topology = item.geometry.topology;
59
+ const step = topology === "triangles" ? 3 : topology === "lines" ? 2 : topology === "points" ? 1 : 0;
60
+ if (!step)
61
+ throw new Error(`Unsupported vector topology: ${String(topology)}`);
62
+ const buffer = item.geometry.vertexBuffer;
63
+ if (!Number.isSafeInteger(buffer.vertexCount) || buffer.vertexCount < 0)
64
+ throw new RangeError("Geometry vertexCount must be a non-negative safe integer.");
65
+ const positions = item.geometry.getAttributeBuffer?.("position") ?? buffer;
66
+ const indices = item.geometry.indexBuffer?.data;
67
+ const count = indices?.length ?? buffer.vertexCount;
68
+ // Both windows constrain the GPU draw. Replacing the geometry range
69
+ // with an item override exports vertices the actual draw never submits.
70
+ const geometryRange = drawWindow(item.geometry.drawRange, count);
71
+ const itemRange = drawWindow(item.drawRange, count);
72
+ const start = Math.max(geometryRange.start, itemRange.start);
73
+ const end = Math.min(geometryRange.end, itemRange.end);
74
+ const primitiveCount = Math.floor(Math.max(0, end - start) / step);
75
+ submitted += primitiveCount;
76
+ if (submitted > this.maxPrimitives)
77
+ throw new RangeError(`VectorRenderer exceeds its ${this.maxPrimitives} primitive budget.`);
78
+ const model = item.modelViewProjectionMatrix
79
+ ? matrix(item.modelViewProjectionMatrix, "modelViewProjectionMatrix")
80
+ : multiply(viewMatrix, matrix(item.modelMatrix ?? IDENTITY, "modelMatrix"));
81
+ const transform = multiply(model, matrix(item.geometryMatrix ?? IDENTITY, "geometryMatrix"));
82
+ if (!transform.every(Number.isFinite))
83
+ throw new RangeError("Vector transformation overflowed.");
84
+ const style = validateStyle({ ...this.resolveStyle?.(item), ...item.style });
85
+ const attributes = styleAttributes(style, topology);
86
+ const pointAt = (streamIndex) => {
87
+ const vertexIndex = indices ? indices[streamIndex] : streamIndex;
88
+ if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= buffer.vertexCount)
89
+ throw new RangeError(`Vector vertex index ${vertexIndex} is out of range.`);
90
+ const position = positions.getDecodedAttribute
91
+ ? positions.getDecodedAttribute(vertexIndex, "position")
92
+ : positions.getAttribute(vertexIndex, "position");
93
+ if (position.length < 3 || ![position[0], position[1], position[2]].every(Number.isFinite))
94
+ throw new RangeError("Vector positions must contain three finite numbers.");
95
+ return transformPoint(transform, position);
96
+ };
97
+ for (let index = start; index + step <= end; index += step) {
98
+ const points = [];
99
+ for (let offset = 0; offset < step; offset++)
100
+ points.push(pointAt(index + offset));
101
+ const clipped = topology === "triangles" ? clipPolygon(points, planes)
102
+ : topology === "lines" ? clipLine(points[0], points[1], planes)
103
+ : planes.every((plane) => clipDistance(plane, points[0]) >= 0) ? points : [];
104
+ if (clipped.length < step)
105
+ continue;
106
+ const projected = clipped.map((point) => project(point, viewport));
107
+ const depth = clipped.reduce((sum, point) => sum + point[2] / point[3], 0) / clipped.length;
108
+ const markup = topology === "points"
109
+ ? `<circle cx="${number(projected[0][0])}" cy="${number(projected[0][1])}" r="${number((style.pointSize ?? 4) / 2)}" ${attributes}/>`
110
+ : `<${topology === "triangles" ? "polygon" : "polyline"} points="${projected.map(([x, y]) => `${number(x)},${number(y)}`).join(" ")}" ${attributes}/>`;
111
+ primitives.push({ order, depth, sequence: sequence++, markup });
112
+ }
113
+ }
114
+ primitives.sort((a, b) => a.order - b.order || (depthOrder === "reversed" ? a.depth - b.depth : b.depth - a.depth) || a.sequence - b.sequence);
115
+ const bg = this.background === undefined ? "" : `<rect width="100%" height="100%" fill="${escapeAttribute(this.background)}"/>`;
116
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${number(this.width)}" height="${number(this.height)}" viewBox="0 0 ${number(this.width)} ${number(this.height)}">${bg}<svg x="${number(viewport.x)}" y="${number(viewport.y)}" width="${number(viewport.width)}" height="${number(viewport.height)}" viewBox="${number(viewport.x)} ${number(viewport.y)} ${number(viewport.width)} ${number(viewport.height)}" overflow="hidden">${primitives.map((primitive) => primitive.markup).join("")}</svg></svg>`;
117
+ }
118
+ dispose() { this.disposed = true; }
119
+ assertAlive() { if (this.disposed)
120
+ throw new Error("VectorRenderer is disposed."); }
121
+ }
122
+ function positive(value, name) {
123
+ if (!Number.isFinite(value) || value <= 0)
124
+ throw new RangeError(`${name} must be positive and finite.`);
125
+ return value;
126
+ }
127
+ function validateViewport(view, width, height) {
128
+ if (![view.x, view.y, view.width, view.height].every(Number.isFinite) || view.x < 0 || view.y < 0 || view.width <= 0 || view.height <= 0 || view.x + view.width > width || view.y + view.height > height)
129
+ throw new RangeError("Vector viewport must fit within the renderer size.");
130
+ }
131
+ function drawWindow(range, available) {
132
+ if (!Number.isSafeInteger(available) || available < 0)
133
+ throw new RangeError("Geometry index count must be a non-negative safe integer.");
134
+ if (!range)
135
+ return { start: 0, end: available };
136
+ if (!Number.isSafeInteger(range.start) || range.start < 0 || !Number.isSafeInteger(range.count) || range.count < 0)
137
+ throw new RangeError("Vector draw range must contain non-negative safe integers.");
138
+ // Avoid adding two safe integers whose sum is no longer exactly representable.
139
+ const start = Math.min(available, range.start);
140
+ return { start, end: start + Math.min(range.count, available - start) };
141
+ }
142
+ function matrix(value, name) {
143
+ if (value.length !== 16)
144
+ throw new RangeError(`${name} must contain 16 column-major values.`);
145
+ const result = Array.from(value);
146
+ if (!result.every(Number.isFinite))
147
+ throw new RangeError(`${name} must contain finite values.`);
148
+ return result;
149
+ }
150
+ function multiply(a, b) {
151
+ const result = new Array(16).fill(0);
152
+ for (let c = 0; c < 4; c++)
153
+ for (let r = 0; r < 4; r++)
154
+ for (let k = 0; k < 4; k++)
155
+ result[c * 4 + r] += a[k * 4 + r] * b[c * 4 + k];
156
+ return result;
157
+ }
158
+ function transformPoint(m, p) {
159
+ const [x, y, z] = p;
160
+ const result = [m[0] * x + m[4] * y + m[8] * z + m[12], m[1] * x + m[5] * y + m[9] * z + m[13], m[2] * x + m[6] * y + m[10] * z + m[14], m[3] * x + m[7] * y + m[11] * z + m[15]];
161
+ if (!result.every(Number.isFinite))
162
+ throw new RangeError("Transformed vector position is not finite.");
163
+ return result;
164
+ }
165
+ function clipPlanes(depthRange) {
166
+ return [(p) => p[3] - CLIP_EPSILON, (p) => p[3] + p[0], (p) => p[3] - p[0], (p) => p[3] + p[1], (p) => p[3] - p[1], (p) => depthRange === "zero-to-one" ? p[2] : p[3] + p[2], (p) => p[3] - p[2]];
167
+ }
168
+ function interpolate(a, b, t) {
169
+ const s = 1 - t;
170
+ return [a[0] * s + b[0] * t, a[1] * s + b[1] * t, a[2] * s + b[2] * t, a[3] * s + b[3] * t];
171
+ }
172
+ function clipDistance(plane, point) {
173
+ const distance = plane(point);
174
+ if (!Number.isFinite(distance))
175
+ throw new RangeError("Vector clipping overflowed.");
176
+ return distance;
177
+ }
178
+ // Endpoints straddle the plane. Scaling first avoids overflowing the sum of
179
+ // large finite signed distances while computing their intersection fraction.
180
+ function intersectionFraction(first, second) {
181
+ const a = Math.abs(first), b = Math.abs(second);
182
+ const scale = Math.max(a, b);
183
+ return (a / scale) / (a / scale + b / scale);
184
+ }
185
+ function clipPolygon(input, planes) {
186
+ let result = [...input];
187
+ for (const plane of planes) {
188
+ if (result.length === 0)
189
+ break;
190
+ const next = [];
191
+ let previous = result[result.length - 1];
192
+ let previousDistance = clipDistance(plane, previous);
193
+ for (const current of result) {
194
+ const distance = clipDistance(plane, current);
195
+ if ((distance >= 0) !== (previousDistance >= 0))
196
+ next.push(interpolate(previous, current, intersectionFraction(previousDistance, distance)));
197
+ if (distance >= 0)
198
+ next.push(current);
199
+ previous = current;
200
+ previousDistance = distance;
201
+ }
202
+ result = next;
203
+ }
204
+ return result;
205
+ }
206
+ function clipLine(first, second, planes) {
207
+ let a = first, b = second;
208
+ for (const plane of planes) {
209
+ const da = clipDistance(plane, a), db = clipDistance(plane, b);
210
+ if (da < 0 && db < 0)
211
+ return [];
212
+ if (da < 0)
213
+ a = interpolate(a, b, intersectionFraction(da, db));
214
+ else if (db < 0)
215
+ b = interpolate(a, b, intersectionFraction(da, db));
216
+ }
217
+ return [a, b];
218
+ }
219
+ function project(point, view) {
220
+ return [view.x + (point[0] / point[3] * 0.5 + 0.5) * view.width, view.y + (0.5 - point[1] / point[3] * 0.5) * view.height];
221
+ }
222
+ function validateStyle(style) {
223
+ if (style.opacity !== undefined && (!Number.isFinite(style.opacity) || style.opacity < 0 || style.opacity > 1))
224
+ throw new RangeError("Vector opacity must be in [0, 1].");
225
+ if (style.strokeWidth !== undefined && (!Number.isFinite(style.strokeWidth) || style.strokeWidth < 0))
226
+ throw new RangeError("Vector strokeWidth must be finite and non-negative.");
227
+ if (style.pointSize !== undefined)
228
+ positive(style.pointSize, "pointSize");
229
+ if (style.lineCap !== undefined && !["butt", "round", "square"].includes(style.lineCap))
230
+ throw new RangeError("Unknown vector line cap.");
231
+ if (style.lineJoin !== undefined && !["miter", "round", "bevel"].includes(style.lineJoin))
232
+ throw new RangeError("Unknown vector line join.");
233
+ return style;
234
+ }
235
+ function styleAttributes(style, topology) {
236
+ const fill = style.fill ?? (topology === "lines" ? "none" : "#fff");
237
+ const stroke = style.stroke ?? (topology === "lines" ? "#fff" : "none");
238
+ return `fill="${escapeAttribute(fill)}" stroke="${escapeAttribute(stroke)}" stroke-width="${number(style.strokeWidth ?? 1)}" opacity="${number(style.opacity ?? 1)}" stroke-linecap="${style.lineCap ?? "butt"}" stroke-linejoin="${style.lineJoin ?? "miter"}"`;
239
+ }
240
+ function escapeAttribute(value) {
241
+ // XML cannot represent NUL, most controls or unpaired UTF-16 surrogates,
242
+ // even as character references. Reject them instead of returning a broken SVG.
243
+ for (const character of value) {
244
+ const code = character.codePointAt(0);
245
+ if (!(code === 0x09 || code === 0x0a || code === 0x0d || (code >= 0x20 && code <= 0xd7ff) || (code >= 0xe000 && code <= 0xfffd) || (code >= 0x10000 && code <= 0x10ffff))) {
246
+ throw new RangeError("Vector SVG attributes must contain valid XML characters.");
247
+ }
248
+ }
249
+ return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
250
+ }
251
+ // Fixed decimal places round sufficiently small valid dimensions to zero.
252
+ function number(value) { return String(Number(value.toPrecision(12))); }
253
+ //# sourceMappingURL=VectorRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VectorRenderer.js","sourceRoot":"","sources":["../../src/renderers/VectorRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Deterministic, CPU-side fracture of closed convex triangle meshes.
3
+ *
4
+ * The algorithm clips each outward-facing polygon against a plane, then fills
5
+ * the cross section on both sides. It is authored for Aura3D and does not
6
+ * invoke another geometry engine. Returned geometry can be passed to
7
+ * `defineAuraCustomGeometry` / `geometry.dynamic` without a GPU allocation.
8
+ */
9
+ export type FractureVec3 = readonly [number, number, number];
10
+ export interface FractureGeometryGroup {
11
+ readonly start: number;
12
+ readonly count: number;
13
+ readonly materialIndex?: number;
14
+ }
15
+ /**
16
+ * A closed, consistently wound convex triangle mesh. Coincident seam vertices
17
+ * are accepted when their coordinates are exactly equal. Flat packed
18
+ * positions and an optional triangle index stream are supported; omitted or
19
+ * empty indices mean a non-indexed triangle list. Input normals
20
+ * are validated and recomputed as flat geometric normals. UV/color/custom
21
+ * attribute interpolation, skinned/morph meshes, draw ranges, lines, points,
22
+ * concave or open meshes are rejected rather than silently discarded.
23
+ */
24
+ export interface ConvexFractureInput {
25
+ readonly positions: ArrayLike<number>;
26
+ readonly indices?: ArrayLike<number>;
27
+ readonly groups?: readonly FractureGeometryGroup[];
28
+ readonly topology?: string;
29
+ readonly normals?: ArrayLike<number>;
30
+ readonly uvs?: unknown;
31
+ readonly colors?: unknown;
32
+ readonly attributes?: unknown;
33
+ readonly morphTargets?: unknown;
34
+ readonly drawRange?: unknown;
35
+ }
36
+ /** Plane equation is dot(normal, position) = constant, in mesh-local space. */
37
+ export interface FracturePlane {
38
+ readonly normal: FractureVec3;
39
+ readonly constant: number;
40
+ }
41
+ export interface ConvexFractureOptions {
42
+ /** Exact target fragment count for seeded cuts; defaults to 2. */
43
+ readonly pieces?: number;
44
+ /** Integer in [0, 2^32 - 1]. Identical inputs and seed give identical output. */
45
+ readonly seed?: number;
46
+ /** Ordered local-space planes. Mutually exclusive with `pieces`. */
47
+ readonly planes?: readonly FracturePlane[];
48
+ /** Hard limit on fragments, 1..128. Defaults to 64. */
49
+ readonly maxFragments?: number;
50
+ /** Maximum total output triangles, 4..250000. Defaults to 100000. */
51
+ readonly maxTriangles?: number;
52
+ /** Material slot assigned to new cross-section faces; defaults to 1. */
53
+ readonly capMaterialIndex?: number;
54
+ }
55
+ export interface FractureGeometry {
56
+ readonly kind: "aura-custom-geometry";
57
+ readonly positions: Float32Array;
58
+ readonly normals: Float32Array;
59
+ readonly indices: Uint32Array;
60
+ readonly bounds: {
61
+ readonly min: FractureVec3;
62
+ readonly max: FractureVec3;
63
+ };
64
+ readonly groups: readonly FractureGeometryGroup[];
65
+ }
66
+ export interface ConvexFractureFragment {
67
+ /** Geometry is in the input's local coordinate system. */
68
+ readonly geometry: FractureGeometry;
69
+ readonly volume: number;
70
+ readonly centroid: FractureVec3;
71
+ }
72
+ export interface ConvexFractureResult {
73
+ /** Empty after dispose. Fragment arrays already retained by a caller remain valid. */
74
+ readonly fragments: readonly ConvexFractureFragment[];
75
+ readonly disposed: boolean;
76
+ /** Drops the result's references; no GPU resources or input buffers are owned. */
77
+ dispose(): void;
78
+ }
79
+ /**
80
+ * Cut a closed convex solid into independently renderable pieces. With `planes`,
81
+ * every supplied plane is applied to every piece it actually intersects. With
82
+ * `pieces`, seeded planes go through the largest piece's centroid. A tangent or
83
+ * external explicit plane leaves the solid unchanged. Limits are checked while
84
+ * clipping, before final typed-array allocation. Unsupported geometry throws.
85
+ */
86
+ export declare function fractureConvex(input: ConvexFractureInput, options?: ConvexFractureOptions): ConvexFractureResult;
87
+ //# sourceMappingURL=Fracture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fracture.d.ts","sourceRoot":"","sources":["../../src/tools/Fracture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,uDAAuD;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,qEAAqE;IACrE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAA;KAAE,CAAC;IAC5E,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,kFAAkF;IAClF,OAAO,IAAI,IAAI,CAAC;CACjB;AAoRD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,GAAE,qBAA0B,GAAG,oBAAoB,CA+DpH"}