math 0.0.3 → 0.1.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.
- package/API.md +1605 -0
- package/LICENSE +21 -0
- package/README.md +197 -0
- package/dist/color/color.js +136 -0
- package/dist/color/color.js.map +1 -0
- package/dist/color/colorspace.js +43 -0
- package/dist/color/colorspace.js.map +1 -0
- package/dist/color/hsl.js +123 -0
- package/dist/color/hsl.js.map +1 -0
- package/dist/color/index.js +7 -0
- package/dist/color/index.js.map +1 -0
- package/dist/color/parse.js +276 -0
- package/dist/color/parse.js.map +1 -0
- package/dist/core/angle.js +43 -0
- package/dist/core/angle.js.map +1 -0
- package/dist/core/euler.js +212 -0
- package/dist/core/euler.js.map +1 -0
- package/dist/core/mat2.js +385 -0
- package/dist/core/mat2.js.map +1 -0
- package/dist/core/mat2d.js +422 -0
- package/dist/core/mat2d.js.map +1 -0
- package/dist/core/mat3.js +749 -0
- package/dist/core/mat3.js.map +1 -0
- package/dist/core/mat4.js +2197 -0
- package/dist/core/mat4.js.map +1 -0
- package/dist/core/polar.js +200 -0
- package/dist/core/polar.js.map +1 -0
- package/dist/core/quat.js +730 -0
- package/dist/core/quat.js.map +1 -0
- package/dist/core/quat2.js +883 -0
- package/dist/core/quat2.js.map +1 -0
- package/dist/core/scalar.js +112 -0
- package/dist/core/scalar.js.map +1 -0
- package/dist/core/spherical.js +248 -0
- package/dist/core/spherical.js.map +1 -0
- package/dist/core/vec2.js +597 -0
- package/dist/core/vec2.js.map +1 -0
- package/dist/core/vec3.js +916 -0
- package/dist/core/vec3.js.map +1 -0
- package/dist/core/vec4.js +573 -0
- package/dist/core/vec4.js.map +1 -0
- package/dist/geometry/circumcircle.js +39 -0
- package/dist/geometry/circumcircle.js.map +1 -0
- package/dist/geometry/index.js +6 -0
- package/dist/geometry/index.js.map +1 -0
- package/dist/geometry/polygon2-decompose.js +411 -0
- package/dist/geometry/polygon2-decompose.js.map +1 -0
- package/dist/geometry/polygon2-triangulate.js +222 -0
- package/dist/geometry/polygon2-triangulate.js.map +1 -0
- package/dist/geometry/quickhull2.js +123 -0
- package/dist/geometry/quickhull2.js.map +1 -0
- package/dist/geometry/quickhull3.js +605 -0
- package/dist/geometry/quickhull3.js.map +1 -0
- package/dist/ik/fabrik2.js +675 -0
- package/dist/ik/fabrik2.js.map +1 -0
- package/dist/ik/fabrik3.js +912 -0
- package/dist/ik/fabrik3.js.map +1 -0
- package/dist/ik/index.js +5 -0
- package/dist/ik/index.js.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/noise/fractal.js +185 -0
- package/dist/noise/fractal.js.map +1 -0
- package/dist/noise/index.js +16 -0
- package/dist/noise/index.js.map +1 -0
- package/dist/noise/perlin2d.js +50 -0
- package/dist/noise/perlin2d.js.map +1 -0
- package/dist/noise/perlin3d.js +72 -0
- package/dist/noise/perlin3d.js.map +1 -0
- package/dist/noise/permutation.js +120 -0
- package/dist/noise/permutation.js.map +1 -0
- package/dist/noise/simplex2d.js +84 -0
- package/dist/noise/simplex2d.js.map +1 -0
- package/dist/noise/simplex3d.js +147 -0
- package/dist/noise/simplex3d.js.map +1 -0
- package/dist/noise/simplex4d.js +149 -0
- package/dist/noise/simplex4d.js.map +1 -0
- package/dist/noise/worley2d.js +50 -0
- package/dist/noise/worley2d.js.map +1 -0
- package/dist/noise/worley3d.js +61 -0
- package/dist/noise/worley3d.js.map +1 -0
- package/dist/random/index.js +9 -0
- package/dist/random/index.js.map +1 -0
- package/dist/random/isaac32.js +164 -0
- package/dist/random/isaac32.js.map +1 -0
- package/dist/random/isaac64.js +215 -0
- package/dist/random/isaac64.js.map +1 -0
- package/dist/random/mulberry32.js +48 -0
- package/dist/random/mulberry32.js.map +1 -0
- package/dist/random/random.js +120 -0
- package/dist/random/random.js.map +1 -0
- package/dist/shapes/box2.js +300 -0
- package/dist/shapes/box2.js.map +1 -0
- package/dist/shapes/box3.js +550 -0
- package/dist/shapes/box3.js.map +1 -0
- package/dist/shapes/circle.js +6 -0
- package/dist/shapes/circle.js.map +1 -0
- package/dist/shapes/frustum.js +662 -0
- package/dist/shapes/frustum.js.map +1 -0
- package/dist/shapes/index.js +25 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/obb3.js +557 -0
- package/dist/shapes/obb3.js.map +1 -0
- package/dist/shapes/plane3.js +267 -0
- package/dist/shapes/plane3.js.map +1 -0
- package/dist/shapes/polygon2.js +451 -0
- package/dist/shapes/polygon2.js.map +1 -0
- package/dist/shapes/raycast3.js +164 -0
- package/dist/shapes/raycast3.js.map +1 -0
- package/dist/shapes/segment2.js +82 -0
- package/dist/shapes/segment2.js.map +1 -0
- package/dist/shapes/sphere.js +23 -0
- package/dist/shapes/sphere.js.map +1 -0
- package/dist/shapes/triangle2.js +79 -0
- package/dist/shapes/triangle2.js.map +1 -0
- package/dist/shapes/triangle3.js +60 -0
- package/dist/shapes/triangle3.js.map +1 -0
- package/dist/src/color/color.d.ts +50 -0
- package/dist/src/color/colorspace.d.ts +15 -0
- package/dist/src/color/hsl.d.ts +28 -0
- package/dist/src/color/index.d.ts +5 -0
- package/dist/src/color/parse.d.ts +15 -0
- package/dist/src/core/angle.d.ts +29 -0
- package/dist/src/core/arrays.d.ts +4 -0
- package/dist/src/core/euler.d.ts +78 -0
- package/dist/src/core/index.d.ts +27 -0
- package/dist/src/core/mat2.d.ts +217 -0
- package/dist/src/core/mat2d.d.ts +218 -0
- package/dist/src/core/mat3.d.ts +295 -0
- package/dist/src/core/mat4.d.ts +667 -0
- package/dist/src/core/polar.d.ts +151 -0
- package/dist/src/core/quat.d.ts +370 -0
- package/dist/src/core/quat2.d.ts +344 -0
- package/dist/src/core/scalar.d.ts +75 -0
- package/dist/src/core/spherical.d.ts +165 -0
- package/dist/src/core/vec2.d.ts +403 -0
- package/dist/src/core/vec3.d.ts +493 -0
- package/dist/src/core/vec4.d.ts +336 -0
- package/dist/src/geometry/circumcircle.d.ts +9 -0
- package/dist/src/geometry/index.d.ts +5 -0
- package/dist/src/geometry/polygon2-decompose.d.ts +25 -0
- package/dist/src/geometry/polygon2-triangulate.d.ts +15 -0
- package/dist/src/geometry/quickhull2.d.ts +10 -0
- package/dist/src/geometry/quickhull3.d.ts +27 -0
- package/dist/src/ik/fabrik2.d.ts +314 -0
- package/dist/src/ik/fabrik3.d.ts +371 -0
- package/dist/src/ik/index.d.ts +2 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/noise/fractal.d.ts +95 -0
- package/dist/src/noise/index.d.ts +9 -0
- package/dist/src/noise/perlin2d.d.ts +19 -0
- package/dist/src/noise/perlin3d.d.ts +20 -0
- package/dist/src/noise/permutation.d.ts +22 -0
- package/dist/src/noise/simplex2d.d.ts +19 -0
- package/dist/src/noise/simplex3d.d.ts +20 -0
- package/dist/src/noise/simplex4d.d.ts +24 -0
- package/dist/src/noise/worley2d.d.ts +22 -0
- package/dist/src/noise/worley3d.d.ts +23 -0
- package/dist/src/random/index.d.ts +8 -0
- package/dist/src/random/isaac32.d.ts +62 -0
- package/dist/src/random/isaac64.d.ts +75 -0
- package/dist/src/random/mulberry32.d.ts +43 -0
- package/dist/src/random/random.d.ts +67 -0
- package/dist/src/shapes/box2.d.ts +174 -0
- package/dist/src/shapes/box3.d.ts +213 -0
- package/dist/src/shapes/circle.d.ts +7 -0
- package/dist/src/shapes/frustum.d.ts +147 -0
- package/dist/src/shapes/index.d.ts +20 -0
- package/dist/src/shapes/obb3.d.ts +105 -0
- package/dist/src/shapes/plane3.d.ts +130 -0
- package/dist/src/shapes/polygon2.d.ts +155 -0
- package/dist/src/shapes/raycast3.d.ts +42 -0
- package/dist/src/shapes/segment2.d.ts +34 -0
- package/dist/src/shapes/sphere.d.ts +19 -0
- package/dist/src/shapes/triangle2.d.ts +53 -0
- package/dist/src/shapes/triangle3.d.ts +29 -0
- package/dist/src/time/easing.d.ts +21 -0
- package/dist/src/time/index.d.ts +6 -0
- package/dist/src/time/spring-core.d.ts +15 -0
- package/dist/src/time/spring.d.ts +36 -0
- package/dist/src/time/spring2.d.ts +11 -0
- package/dist/src/time/spring3.d.ts +11 -0
- package/dist/src/time/spring4.d.ts +11 -0
- package/dist/time/easing.js +24 -0
- package/dist/time/easing.js.map +1 -0
- package/dist/time/index.js +11 -0
- package/dist/time/index.js.map +1 -0
- package/dist/time/spring-core.js +48 -0
- package/dist/time/spring-core.js.map +1 -0
- package/dist/time/spring.js +62 -0
- package/dist/time/spring.js.map +1 -0
- package/dist/time/spring2.js +31 -0
- package/dist/time/spring2.js.map +1 -0
- package/dist/time/spring3.js +32 -0
- package/dist/time/spring3.js.map +1 -0
- package/dist/time/spring4.js +32 -0
- package/dist/time/spring4.js.map +1 -0
- package/package.json +90 -16
- package/skills/math/SKILL.md +140 -0
- package/AUTHORS +0 -1
- package/Cakefile +0 -28
- package/math.coffee +0 -112
- package/math.js +0 -141
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickhull3.js","sources":["../../src/geometry/quickhull3.ts"],"sourcesContent":["/**\n * Incremental Convex Hull 3D implementation based on Three.js ConvexHull.\n *\n * This implements the QuickHull algorithm with an incremental approach that maintains\n * a valid hull at each step using a half-edge data structure (DCEL - Doubly Connected\n * Edge List) for O(1) face adjacency queries.\n *\n * The algorithm is based on John Lloyd's Java implementation and was ported to\n * JavaScript by Mauricio Poppe (quickhull3d), then incorporated into Three.js.\n *\n * References:\n * - Three.js ConvexHull: https://github.com/mrdoob/three.js/blob/dev/examples/jsm/math/ConvexHull.js\n * - quickhull3d by Mauricio Poppe: https://github.com/maurizzzio/quickhull3d/\n * - Original Java by John Lloyd: http://www.cs.ubc.ca/~lloyd/java/quickhull3d.html\n * - Dirk Gregorius presentation: https://archive.org/details/GDC2014Gregorius\n *\n * Algorithm: QuickHull (incremental variant)\n * Time complexity: O(n log n) average, O(n²) worst case\n * Space complexity: O(n + f + e) where f=faces, e=edges (~3x more than basic)\n */\n\nconst EPSILON = 1e-12;\nconst VISIBLE = 0;\nconst DELETED = 1;\n\ntype VertexNode = {\n index: number;\n prev: VertexNode | null;\n next: VertexNode | null;\n face: Face | null;\n};\n\ntype HalfEdge = {\n vertex: VertexNode;\n prev: HalfEdge | null;\n next: HalfEdge | null;\n twin: HalfEdge | null;\n face: Face;\n};\n\ntype Face = {\n normal: [number, number, number];\n midpoint: [number, number, number];\n area: number;\n constant: number;\n outside: VertexNode | null;\n mark: number;\n edge: HalfEdge | null;\n};\n\ntype VertexList = {\n head: VertexNode | null;\n tail: VertexNode | null;\n};\n\ntype HullState = {\n points: number[];\n tolerance: number;\n faces: Face[];\n newFaces: Face[];\n assigned: VertexList;\n unassigned: VertexList;\n vertices: VertexNode[];\n};\n\n/**\n * Computes the convex hull of a set of 3D points using an incremental QuickHull algorithm.\n *\n * @param points An array of numbers representing the 3D points (x1, y1, z1, x2, y2, z2, ...)\n * @returns An array of indices representing the triangles of the convex hull (i1, j1, k1, i2, j2, k2, ...).\n */\nexport function quickhull3(points: number[]): number[] {\n const n = points.length / 3;\n if (n < 4) return [];\n\n const state = createHullState(points, n);\n\n computeInitialHull(state);\n\n // Incrementally add vertices to hull\n let vertex = nextVertexToAdd(state);\n while (vertex !== null) {\n addVertexToHull(state, vertex);\n vertex = nextVertexToAdd(state);\n }\n\n reindexFaces(state);\n\n return getTriangleIndices(state);\n}\n\n// Hull state management\n\nfunction createHullState(points: number[], n: number): HullState {\n const vertices: VertexNode[] = [];\n for (let i = 0; i < n; i++) {\n vertices.push(createVertexNode(i));\n }\n\n return {\n points,\n tolerance: -1,\n faces: [],\n newFaces: [],\n assigned: createVertexList(),\n unassigned: createVertexList(),\n vertices,\n };\n}\n\nfunction getTriangleIndices(state: HullState): number[] {\n const result: number[] = [];\n for (const face of state.faces) {\n if (face.mark === VISIBLE && face.edge) {\n result.push(face.edge.vertex.index, face.edge.next!.vertex.index, face.edge.prev!.vertex.index);\n }\n }\n return result;\n}\n\n// Vertex node functions\n\nfunction createVertexNode(index: number): VertexNode {\n return {\n index,\n prev: null,\n next: null,\n face: null,\n };\n}\n\n// Vertex list functions\n\nfunction createVertexList(): VertexList {\n return {\n head: null,\n tail: null,\n };\n}\n\nfunction vertexListIsEmpty(list: VertexList): boolean {\n return list.head === null;\n}\n\nfunction vertexListClear(list: VertexList): void {\n list.head = null;\n list.tail = null;\n}\n\nfunction vertexListAppend(list: VertexList, vertex: VertexNode): void {\n if (list.head === null) {\n list.head = vertex;\n } else {\n list.tail!.next = vertex;\n }\n\n vertex.prev = list.tail;\n vertex.next = null;\n list.tail = vertex;\n}\n\nfunction vertexListAppendChain(list: VertexList, vertex: VertexNode): void {\n if (list.head === null) {\n list.head = vertex;\n } else {\n list.tail!.next = vertex;\n }\n\n vertex.prev = list.tail;\n\n // Find end of chain\n let current = vertex;\n while (current.next !== null) {\n current = current.next;\n }\n\n list.tail = current;\n}\n\nfunction vertexListInsertBefore(list: VertexList, target: VertexNode, vertex: VertexNode): void {\n vertex.prev = target.prev;\n vertex.next = target;\n\n if (vertex.prev === null) {\n list.head = vertex;\n } else {\n vertex.prev.next = vertex;\n }\n\n target.prev = vertex;\n}\n\nfunction vertexListRemove(list: VertexList, vertex: VertexNode): void {\n if (vertex.prev === null) {\n list.head = vertex.next;\n } else {\n vertex.prev.next = vertex.next;\n }\n\n if (vertex.next === null) {\n list.tail = vertex.prev;\n } else {\n vertex.next.prev = vertex.prev;\n }\n}\n\nfunction vertexListRemoveSubList(list: VertexList, a: VertexNode, b: VertexNode): void {\n if (a.prev === null) {\n list.head = b.next;\n } else {\n a.prev.next = b.next;\n }\n\n if (b.next === null) {\n list.tail = a.prev;\n } else {\n b.next.prev = a.prev;\n }\n}\n\n// Half-edge functions\n\nfunction createHalfEdge(vertex: VertexNode, face: Face): HalfEdge {\n return {\n vertex,\n prev: null,\n next: null,\n twin: null,\n face,\n };\n}\n\nfunction halfEdgeHead(edge: HalfEdge): VertexNode {\n return edge.vertex;\n}\n\nfunction halfEdgeTail(edge: HalfEdge): VertexNode | null {\n return edge.prev ? edge.prev.vertex : null;\n}\n\nfunction halfEdgeSetTwin(edge: HalfEdge, twin: HalfEdge): void {\n edge.twin = twin;\n twin.twin = edge;\n}\n\n// Face functions\n\nfunction createFace(): Face {\n return {\n normal: [0, 0, 0],\n midpoint: [0, 0, 0],\n area: 0,\n constant: 0,\n outside: null,\n mark: VISIBLE,\n edge: null,\n };\n}\n\nfunction faceCreate(a: VertexNode, b: VertexNode, c: VertexNode): Face {\n const face = createFace();\n\n const e0 = createHalfEdge(a, face);\n const e1 = createHalfEdge(b, face);\n const e2 = createHalfEdge(c, face);\n\n // Join edges in a cycle\n e0.next = e1;\n e0.prev = e2;\n e1.next = e2;\n e1.prev = e0;\n e2.next = e0;\n e2.prev = e1;\n\n face.edge = e0;\n\n return face;\n}\n\nfunction faceGetEdge(face: Face, i: number): HalfEdge | null {\n let edge = face.edge;\n if (!edge) return null;\n\n while (i > 0) {\n edge = edge.next!;\n i--;\n }\n\n while (i < 0) {\n edge = edge.prev!;\n i++;\n }\n\n return edge;\n}\n\nfunction faceCompute(face: Face, points: number[]): void {\n const a = halfEdgeTail(face.edge!)!;\n const b = halfEdgeHead(face.edge!);\n const c = halfEdgeHead(face.edge!.next!);\n\n const aIdx = a.index * 3;\n const bIdx = b.index * 3;\n const cIdx = c.index * 3;\n\n const ax = points[aIdx],\n ay = points[aIdx + 1],\n az = points[aIdx + 2];\n const bx = points[bIdx],\n by = points[bIdx + 1],\n bz = points[bIdx + 2];\n const cx = points[cIdx],\n cy = points[cIdx + 1],\n cz = points[cIdx + 2];\n\n // Compute edges\n const e1x = bx - ax,\n e1y = by - ay,\n e1z = bz - az;\n const e2x = cx - ax,\n e2y = cy - ay,\n e2z = cz - az;\n\n // Cross product for normal\n const nx = e1y * e2z - e1z * e2y;\n const ny = e1z * e2x - e1x * e2z;\n const nz = e1x * e2y - e1y * e2x;\n\n // Normalize\n const len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > EPSILON) {\n face.normal[0] = nx / len;\n face.normal[1] = ny / len;\n face.normal[2] = nz / len;\n }\n\n // Compute midpoint\n face.midpoint[0] = (ax + bx + cx) / 3;\n face.midpoint[1] = (ay + by + cy) / 3;\n face.midpoint[2] = (az + bz + cz) / 3;\n\n // Area\n face.area = len / 2;\n\n // Plane constant\n face.constant = face.normal[0] * face.midpoint[0] + face.normal[1] * face.midpoint[1] + face.normal[2] * face.midpoint[2];\n}\n\nfunction faceDistanceToPoint(face: Face, points: number[], vertexIndex: number): number {\n const idx = vertexIndex * 3;\n return face.normal[0] * points[idx] + face.normal[1] * points[idx + 1] + face.normal[2] * points[idx + 2] - face.constant;\n}\n\n// Hull computation functions\n\nfunction computeExtremes(state: HullState): { min: VertexNode[]; max: VertexNode[] } {\n const minVertices: VertexNode[] = [];\n const maxVertices: VertexNode[] = [];\n const min = [Infinity, Infinity, Infinity];\n const max = [-Infinity, -Infinity, -Infinity];\n\n // Initialize with first vertex\n for (let i = 0; i < 3; i++) {\n minVertices[i] = state.vertices[0];\n maxVertices[i] = state.vertices[0];\n min[i] = state.points[i];\n max[i] = state.points[i];\n }\n\n // Find extremal points along each axis\n for (let i = 0; i < state.vertices.length; i++) {\n const vertex = state.vertices[i];\n const idx = vertex.index * 3;\n\n for (let j = 0; j < 3; j++) {\n const val = state.points[idx + j];\n if (val < min[j]) {\n min[j] = val;\n minVertices[j] = vertex;\n }\n if (val > max[j]) {\n max[j] = val;\n maxVertices[j] = vertex;\n }\n }\n }\n\n // Compute tolerance based on data range\n state.tolerance =\n 3 *\n Number.EPSILON *\n (Math.max(Math.abs(min[0]), Math.abs(max[0])) +\n Math.max(Math.abs(min[1]), Math.abs(max[1])) +\n Math.max(Math.abs(min[2]), Math.abs(max[2])));\n\n return { min: minVertices, max: maxVertices };\n}\n\nfunction computeInitialHull(state: HullState): void {\n const extremes = computeExtremes(state);\n const min = extremes.min;\n const max = extremes.max;\n\n // 1. Find the two vertices with greatest 1D separation\n let maxDistance = 0;\n let index = 0;\n\n for (let i = 0; i < 3; i++) {\n const idx0 = min[i].index * 3;\n const idx1 = max[i].index * 3;\n const distance = state.points[idx0 + i] - state.points[idx1 + i];\n if (Math.abs(distance) > maxDistance) {\n maxDistance = Math.abs(distance);\n index = i;\n }\n }\n\n const v0 = min[index];\n const v1 = max[index];\n\n // 2. Find vertex farthest from line v0-v1\n let v2: VertexNode | null = null;\n maxDistance = 0;\n\n for (const vertex of state.vertices) {\n if (vertex !== v0 && vertex !== v1) {\n const dist = distanceToLineSquared(state.points, vertex.index, v0.index, v1.index);\n if (dist > maxDistance) {\n maxDistance = dist;\n v2 = vertex;\n }\n }\n }\n\n if (!v2) return;\n\n // 3. Find vertex farthest from plane v0-v1-v2\n let v3: VertexNode | null = null;\n maxDistance = -1;\n\n const normal: [number, number, number] = [0, 0, 0];\n const offset = computePlane(state.points, v0.index, v1.index, v2.index, normal);\n\n for (const vertex of state.vertices) {\n if (vertex !== v0 && vertex !== v1 && vertex !== v2) {\n const dist = Math.abs(distanceToPlane(state.points, vertex.index, normal, offset));\n if (dist > maxDistance) {\n maxDistance = dist;\n v3 = vertex;\n }\n }\n }\n\n if (!v3) return;\n\n // Create initial tetrahedron\n const faces: Face[] = [];\n\n if (distanceToPlane(state.points, v3.index, normal, offset) < 0) {\n // Normal points outward\n faces.push(faceCreate(v0, v1, v2), faceCreate(v3, v1, v0), faceCreate(v3, v2, v1), faceCreate(v3, v0, v2));\n\n // Set twin edges\n for (let i = 0; i < 3; i++) {\n const j = (i + 1) % 3;\n halfEdgeSetTwin(faceGetEdge(faces[i + 1], 2)!, faceGetEdge(faces[0], j)!);\n halfEdgeSetTwin(faceGetEdge(faces[i + 1], 1)!, faceGetEdge(faces[j + 1], 0)!);\n }\n } else {\n // Normal points inward\n faces.push(faceCreate(v0, v2, v1), faceCreate(v3, v0, v1), faceCreate(v3, v1, v2), faceCreate(v3, v2, v0));\n\n // Set twin edges\n for (let i = 0; i < 3; i++) {\n const j = (i + 1) % 3;\n halfEdgeSetTwin(faceGetEdge(faces[i + 1], 2)!, faceGetEdge(faces[0], (3 - i) % 3)!);\n halfEdgeSetTwin(faceGetEdge(faces[i + 1], 0)!, faceGetEdge(faces[j + 1], 1)!);\n }\n }\n\n // Add faces to hull\n for (const face of faces) {\n faceCompute(face, state.points);\n state.faces.push(face);\n }\n\n // Assign remaining vertices to faces\n for (const vertex of state.vertices) {\n if (vertex !== v0 && vertex !== v1 && vertex !== v2 && vertex !== v3) {\n maxDistance = state.tolerance;\n let maxFace: Face | null = null;\n\n for (const face of state.faces) {\n const distance = faceDistanceToPoint(face, state.points, vertex.index);\n if (distance > maxDistance) {\n maxDistance = distance;\n maxFace = face;\n }\n }\n\n if (maxFace !== null) {\n addVertexToFace(state, vertex, maxFace);\n }\n }\n }\n}\n\nfunction addVertexToFace(state: HullState, vertex: VertexNode, face: Face): void {\n vertex.face = face;\n\n if (face.outside === null) {\n vertexListAppend(state.assigned, vertex);\n } else {\n vertexListInsertBefore(state.assigned, face.outside, vertex);\n }\n\n face.outside = vertex;\n}\n\nfunction removeVertexFromFace(state: HullState, vertex: VertexNode, face: Face): void {\n if (vertex === face.outside) {\n if (vertex.next !== null && vertex.next.face === face) {\n face.outside = vertex.next;\n } else {\n face.outside = null;\n }\n }\n\n vertexListRemove(state.assigned, vertex);\n}\n\nfunction removeAllVerticesFromFace(state: HullState, face: Face): VertexNode | null {\n if (face.outside !== null) {\n const start = face.outside;\n let end = face.outside;\n\n while (end.next !== null && end.next.face === face) {\n end = end.next;\n }\n\n vertexListRemoveSubList(state.assigned, start, end);\n\n start.prev = null;\n end.next = null;\n face.outside = null;\n\n return start;\n }\n\n return null;\n}\n\nfunction deleteFaceVertices(state: HullState, face: Face, absorbingFace?: Face): void {\n const faceVertices = removeAllVerticesFromFace(state, face);\n\n if (faceVertices !== null) {\n if (absorbingFace === undefined) {\n vertexListAppendChain(state.unassigned, faceVertices);\n } else {\n let vertex: VertexNode | null = faceVertices;\n\n while (vertex !== null) {\n const nextVertex: VertexNode | null = vertex.next;\n const distance = faceDistanceToPoint(absorbingFace, state.points, vertex.index);\n\n if (distance > state.tolerance) {\n addVertexToFace(state, vertex, absorbingFace);\n } else {\n vertexListAppend(state.unassigned, vertex);\n }\n\n vertex = nextVertex;\n }\n }\n }\n}\n\nfunction resolveUnassignedPoints(state: HullState, newFaces: Face[]): void {\n if (vertexListIsEmpty(state.unassigned)) return;\n\n let vertex: VertexNode | null = state.unassigned.head;\n\n while (vertex !== null) {\n const nextVertex: VertexNode | null = vertex.next;\n let maxDistance = state.tolerance;\n let maxFace: Face | null = null;\n\n for (const face of newFaces) {\n if (face.mark === VISIBLE) {\n const distance = faceDistanceToPoint(face, state.points, vertex.index);\n\n if (distance > maxDistance) {\n maxDistance = distance;\n maxFace = face;\n }\n\n if (maxDistance > 1000 * state.tolerance) break;\n }\n }\n\n if (maxFace !== null) {\n addVertexToFace(state, vertex, maxFace);\n }\n\n vertex = nextVertex;\n }\n}\n\nfunction nextVertexToAdd(state: HullState): VertexNode | null {\n if (vertexListIsEmpty(state.assigned)) return null;\n\n let eyeVertex: VertexNode | null = null;\n let maxDistance = 0;\n\n const eyeFace = state.assigned.head!.face!;\n let vertex: VertexNode | null = eyeFace.outside;\n\n while (vertex !== null && vertex.face === eyeFace) {\n const distance = faceDistanceToPoint(eyeFace, state.points, vertex.index);\n\n if (distance > maxDistance) {\n maxDistance = distance;\n eyeVertex = vertex;\n }\n\n vertex = vertex.next;\n }\n\n return eyeVertex;\n}\n\nfunction computeHorizon(state: HullState, eyePoint: number, crossEdge: HalfEdge | null, face: Face, horizon: HalfEdge[]): void {\n deleteFaceVertices(state, face);\n face.mark = DELETED;\n\n let edge: HalfEdge;\n\n if (crossEdge === null) {\n edge = faceGetEdge(face, 0)!;\n } else {\n edge = crossEdge.next!;\n }\n\n const startEdge = edge;\n\n do {\n const twinEdge = edge.twin!;\n const oppositeFace = twinEdge.face;\n\n if (oppositeFace.mark === VISIBLE) {\n if (faceDistanceToPoint(oppositeFace, state.points, eyePoint) > state.tolerance) {\n computeHorizon(state, eyePoint, twinEdge, oppositeFace, horizon);\n } else {\n horizon.push(edge);\n }\n }\n\n edge = edge.next!;\n } while (edge !== startEdge);\n}\n\nfunction addAdjoiningFace(state: HullState, eyeVertex: VertexNode, horizonEdge: HalfEdge): HalfEdge {\n const face = faceCreate(eyeVertex, halfEdgeTail(horizonEdge)!, halfEdgeHead(horizonEdge));\n faceCompute(face, state.points);\n\n state.faces.push(face);\n\n halfEdgeSetTwin(faceGetEdge(face, -1)!, horizonEdge.twin!);\n\n return faceGetEdge(face, 0)!;\n}\n\nfunction addNewFaces(state: HullState, eyeVertex: VertexNode, horizon: HalfEdge[]): void {\n state.newFaces = [];\n\n let firstSideEdge: HalfEdge | null = null;\n let previousSideEdge: HalfEdge | null = null;\n\n for (const horizonEdge of horizon) {\n const sideEdge = addAdjoiningFace(state, eyeVertex, horizonEdge);\n\n if (firstSideEdge === null) {\n firstSideEdge = sideEdge;\n } else {\n halfEdgeSetTwin(sideEdge.next!, previousSideEdge!);\n }\n\n state.newFaces.push(sideEdge.face);\n previousSideEdge = sideEdge;\n }\n\n halfEdgeSetTwin(firstSideEdge!.next!, previousSideEdge!);\n}\n\nfunction addVertexToHull(state: HullState, eyeVertex: VertexNode): void {\n const horizon: HalfEdge[] = [];\n\n vertexListClear(state.unassigned);\n\n removeVertexFromFace(state, eyeVertex, eyeVertex.face!);\n\n computeHorizon(state, eyeVertex.index, null, eyeVertex.face!, horizon);\n\n addNewFaces(state, eyeVertex, horizon);\n\n resolveUnassignedPoints(state, state.newFaces);\n}\n\nfunction reindexFaces(state: HullState): void {\n const activeFaces: Face[] = [];\n\n for (const face of state.faces) {\n if (face.mark === VISIBLE) {\n activeFaces.push(face);\n }\n }\n\n state.faces = activeFaces;\n}\n\n// Helper functions\n\nfunction computePlane(points: number[], v0: number, v1: number, v2: number, outNormal: [number, number, number]): number {\n const p0x = points[v0 * 3];\n const p0y = points[v0 * 3 + 1];\n const p0z = points[v0 * 3 + 2];\n const p1x = points[v1 * 3];\n const p1y = points[v1 * 3 + 1];\n const p1z = points[v1 * 3 + 2];\n const p2x = points[v2 * 3];\n const p2y = points[v2 * 3 + 1];\n const p2z = points[v2 * 3 + 2];\n\n const e1x = p1x - p0x;\n const e1y = p1y - p0y;\n const e1z = p1z - p0z;\n const e2x = p2x - p0x;\n const e2y = p2y - p0y;\n const e2z = p2z - p0z;\n\n const nx = e1y * e2z - e1z * e2y;\n const ny = e1z * e2x - e1x * e2z;\n const nz = e1x * e2y - e1y * e2x;\n\n const len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len < EPSILON) {\n outNormal[0] = 0;\n outNormal[1] = 0;\n outNormal[2] = 1;\n return 0;\n }\n\n const invLen = 1 / len;\n outNormal[0] = nx * invLen;\n outNormal[1] = ny * invLen;\n outNormal[2] = nz * invLen;\n\n return -(outNormal[0] * p0x + outNormal[1] * p0y + outNormal[2] * p0z);\n}\n\nfunction distanceToPlane(points: number[], idx: number, normal: [number, number, number], offset: number): number {\n const x = points[idx * 3];\n const y = points[idx * 3 + 1];\n const z = points[idx * 3 + 2];\n return normal[0] * x + normal[1] * y + normal[2] * z + offset;\n}\n\nfunction distanceToLineSquared(points: number[], idx: number, v0: number, v1: number): number {\n const px = points[idx * 3];\n const py = points[idx * 3 + 1];\n const pz = points[idx * 3 + 2];\n const ax = points[v0 * 3];\n const ay = points[v0 * 3 + 1];\n const az = points[v0 * 3 + 2];\n const bx = points[v1 * 3];\n const by = points[v1 * 3 + 1];\n const bz = points[v1 * 3 + 2];\n\n const apx = px - ax;\n const apy = py - ay;\n const apz = pz - az;\n\n const abx = bx - ax;\n const aby = by - ay;\n const abz = bz - az;\n\n const cx = apy * abz - apz * aby;\n const cy = apz * abx - apx * abz;\n const cz = apx * aby - apy * abx;\n\n const crossLenSq = cx * cx + cy * cy + cz * cz;\n const abLenSq = abx * abx + aby * aby + abz * abz;\n\n if (abLenSq < EPSILON) return apx * apx + apy * apy + apz * apz;\n\n return crossLenSq / abLenSq;\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;AAmBG;AAEH,MAAM,OAAO,GAAG,KAAK;AACrB,MAAM,OAAO,GAAG,CAAC;AACjB,MAAM,OAAO,GAAG,CAAC;AA0CjB;;;;;AAKG;AACG,SAAU,UAAU,CAAC,MAAgB,EAAA;AACvC,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,EAAE;IAEpB,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IAExC,kBAAkB,CAAC,KAAK,CAAC;;AAGzB,IAAA,IAAI,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;AACnC,IAAA,OAAO,MAAM,KAAK,IAAI,EAAE;AACpB,QAAA,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC;AAC9B,QAAA,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;IACnC;IAEA,YAAY,CAAC,KAAK,CAAC;AAEnB,IAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC;AACpC;AAEA;AAEA,SAAS,eAAe,CAAC,MAAgB,EAAE,CAAS,EAAA;IAChD,MAAM,QAAQ,GAAiB,EAAE;AACjC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtC;IAEA,OAAO;QACH,MAAM;QACN,SAAS,EAAE,EAAE;AACb,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,gBAAgB,EAAE;QAC5B,UAAU,EAAE,gBAAgB,EAAE;QAC9B,QAAQ;KACX;AACL;AAEA,SAAS,kBAAkB,CAAC,KAAgB,EAAA;IACxC,MAAM,MAAM,GAAa,EAAE;AAC3B,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;AACpC,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACnG;IACJ;AACA,IAAA,OAAO,MAAM;AACjB;AAEA;AAEA,SAAS,gBAAgB,CAAC,KAAa,EAAA;IACnC,OAAO;QACH,KAAK;AACL,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAI;KACb;AACL;AAEA;AAEA,SAAS,gBAAgB,GAAA;IACrB,OAAO;AACH,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAI;KACb;AACL;AAEA,SAAS,iBAAiB,CAAC,IAAgB,EAAA;AACvC,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI;AAC7B;AAEA,SAAS,eAAe,CAAC,IAAgB,EAAA;AACrC,IAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,IAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AACpB;AAEA,SAAS,gBAAgB,CAAC,IAAgB,EAAE,MAAkB,EAAA;AAC1D,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM;IACtB;SAAO;AACH,QAAA,IAAI,CAAC,IAAK,CAAC,IAAI,GAAG,MAAM;IAC5B;AAEA,IAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACvB,IAAA,MAAM,CAAC,IAAI,GAAG,IAAI;AAClB,IAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AACtB;AAEA,SAAS,qBAAqB,CAAC,IAAgB,EAAE,MAAkB,EAAA;AAC/D,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM;IACtB;SAAO;AACH,QAAA,IAAI,CAAC,IAAK,CAAC,IAAI,GAAG,MAAM;IAC5B;AAEA,IAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;;IAGvB,IAAI,OAAO,GAAG,MAAM;AACpB,IAAA,OAAO,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE;AAC1B,QAAA,OAAO,GAAG,OAAO,CAAC,IAAI;IAC1B;AAEA,IAAA,IAAI,CAAC,IAAI,GAAG,OAAO;AACvB;AAEA,SAAS,sBAAsB,CAAC,IAAgB,EAAE,MAAkB,EAAE,MAAkB,EAAA;AACpF,IAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACzB,IAAA,MAAM,CAAC,IAAI,GAAG,MAAM;AAEpB,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM;IACtB;SAAO;AACH,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM;IAC7B;AAEA,IAAA,MAAM,CAAC,IAAI,GAAG,MAAM;AACxB;AAEA,SAAS,gBAAgB,CAAC,IAAgB,EAAE,MAAkB,EAAA;AAC1D,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;IAC3B;SAAO;QACH,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;IAClC;AAEA,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;IAC3B;SAAO;QACH,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;IAClC;AACJ;AAEA,SAAS,uBAAuB,CAAC,IAAgB,EAAE,CAAa,EAAE,CAAa,EAAA;AAC3E,IAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;IACtB;SAAO;QACH,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;IACxB;AAEA,IAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;IACtB;SAAO;QACH,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;IACxB;AACJ;AAEA;AAEA,SAAS,cAAc,CAAC,MAAkB,EAAE,IAAU,EAAA;IAClD,OAAO;QACH,MAAM;AACN,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAI;QACV,IAAI;KACP;AACL;AAEA,SAAS,YAAY,CAAC,IAAc,EAAA;IAChC,OAAO,IAAI,CAAC,MAAM;AACtB;AAEA,SAAS,YAAY,CAAC,IAAc,EAAA;AAChC,IAAA,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI;AAC9C;AAEA,SAAS,eAAe,CAAC,IAAc,EAAE,IAAc,EAAA;AACnD,IAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,IAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AACpB;AAEA;AAEA,SAAS,UAAU,GAAA;IACf,OAAO;AACH,QAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACjB,QAAA,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,CAAC;AACX,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,IAAI,EAAE,IAAI;KACb;AACL;AAEA,SAAS,UAAU,CAAC,CAAa,EAAE,CAAa,EAAE,CAAa,EAAA;AAC3D,IAAA,MAAM,IAAI,GAAG,UAAU,EAAE;IAEzB,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC;IAClC,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC;IAClC,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC;;AAGlC,IAAA,EAAE,CAAC,IAAI,GAAG,EAAE;AACZ,IAAA,EAAE,CAAC,IAAI,GAAG,EAAE;AACZ,IAAA,EAAE,CAAC,IAAI,GAAG,EAAE;AACZ,IAAA,EAAE,CAAC,IAAI,GAAG,EAAE;AACZ,IAAA,EAAE,CAAC,IAAI,GAAG,EAAE;AACZ,IAAA,EAAE,CAAC,IAAI,GAAG,EAAE;AAEZ,IAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AAEd,IAAA,OAAO,IAAI;AACf;AAEA,SAAS,WAAW,CAAC,IAAU,EAAE,CAAS,EAAA;AACtC,IAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;AACpB,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AAEtB,IAAA,OAAO,CAAC,GAAG,CAAC,EAAE;AACV,QAAA,IAAI,GAAG,IAAI,CAAC,IAAK;AACjB,QAAA,CAAC,EAAE;IACP;AAEA,IAAA,OAAO,CAAC,GAAG,CAAC,EAAE;AACV,QAAA,IAAI,GAAG,IAAI,CAAC,IAAK;AACjB,QAAA,CAAC,EAAE;IACP;AAEA,IAAA,OAAO,IAAI;AACf;AAEA,SAAS,WAAW,CAAC,IAAU,EAAE,MAAgB,EAAA;IAC7C,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAK,CAAE;IACnC,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAK,CAAC;IAClC,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAK,CAAC,IAAK,CAAC;AAExC,IAAA,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;AACxB,IAAA,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IAExB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EACnB,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,EACrB,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EACnB,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,EACrB,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EACnB,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,EACrB,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;;AAGzB,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,EACf,GAAG,GAAG,EAAE,GAAG,EAAE,EACb,GAAG,GAAG,EAAE,GAAG,EAAE;AACjB,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,EACf,GAAG,GAAG,EAAE,GAAG,EAAE,EACb,GAAG,GAAG,EAAE,GAAG,EAAE;;IAGjB,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAChC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAChC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;;AAGhC,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAClD,IAAA,IAAI,GAAG,GAAG,OAAO,EAAE;QACf,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG;QACzB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG;QACzB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG;IAC7B;;AAGA,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;AACrC,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;AACrC,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;;AAGrC,IAAA,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC;;IAGnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7H;AAEA,SAAS,mBAAmB,CAAC,IAAU,EAAE,MAAgB,EAAE,WAAmB,EAAA;AAC1E,IAAA,MAAM,GAAG,GAAG,WAAW,GAAG,CAAC;AAC3B,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;AAC7H;AAEA;AAEA,SAAS,eAAe,CAAC,KAAgB,EAAA;IACrC,MAAM,WAAW,GAAiB,EAAE;IACpC,MAAM,WAAW,GAAiB,EAAE;IACpC,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1C,IAAA,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;;AAG7C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACxB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B;;AAGA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;AAE5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;AACjC,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;AACd,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AACZ,gBAAA,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM;YAC3B;AACA,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;AACd,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AACZ,gBAAA,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM;YAC3B;QACJ;IACJ;;AAGA,IAAA,KAAK,CAAC,SAAS;QACX,CAAC;AACD,YAAA,MAAM,CAAC,OAAO;aACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;AACjD;AAEA,SAAS,kBAAkB,CAAC,KAAgB,EAAA;AACxC,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC;AACvC,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG;AACxB,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG;;IAGxB,IAAI,WAAW,GAAG,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC;AAEb,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC7B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE;AAClC,YAAA,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAChC,KAAK,GAAG,CAAC;QACb;IACJ;AAEA,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;AACrB,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;;IAGrB,IAAI,EAAE,GAAsB,IAAI;IAChC,WAAW,GAAG,CAAC;AAEf,IAAA,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;QACjC,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;AAClF,YAAA,IAAI,IAAI,GAAG,WAAW,EAAE;gBACpB,WAAW,GAAG,IAAI;gBAClB,EAAE,GAAG,MAAM;YACf;QACJ;IACJ;AAEA,IAAA,IAAI,CAAC,EAAE;QAAE;;IAGT,IAAI,EAAE,GAAsB,IAAI;IAChC,WAAW,GAAG,EAAE;IAEhB,MAAM,MAAM,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;AAE/E,IAAA,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAClF,YAAA,IAAI,IAAI,GAAG,WAAW,EAAE;gBACpB,WAAW,GAAG,IAAI;gBAClB,EAAE,GAAG,MAAM;YACf;QACJ;IACJ;AAEA,IAAA,IAAI,CAAC,EAAE;QAAE;;IAGT,MAAM,KAAK,GAAW,EAAE;AAExB,IAAA,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;;AAE7D,QAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;;AAG1G,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACrB,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC;YACzE,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC;QACjF;IACJ;SAAO;;AAEH,QAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;;AAG1G,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAE,CAAC;YACnF,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC;QACjF;IACJ;;AAGA,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,QAAA,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;AAC/B,QAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B;;AAGA,IAAA,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,EAAE;AAClE,YAAA,WAAW,GAAG,KAAK,CAAC,SAAS;YAC7B,IAAI,OAAO,GAAgB,IAAI;AAE/B,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;AACtE,gBAAA,IAAI,QAAQ,GAAG,WAAW,EAAE;oBACxB,WAAW,GAAG,QAAQ;oBACtB,OAAO,GAAG,IAAI;gBAClB;YACJ;AAEA,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,gBAAA,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;YAC3C;QACJ;IACJ;AACJ;AAEA,SAAS,eAAe,CAAC,KAAgB,EAAE,MAAkB,EAAE,IAAU,EAAA;AACrE,IAAA,MAAM,CAAC,IAAI,GAAG,IAAI;AAElB,IAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,QAAA,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC5C;SAAO;QACH,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;IAChE;AAEA,IAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACzB;AAEA,SAAS,oBAAoB,CAAC,KAAgB,EAAE,MAAkB,EAAE,IAAU,EAAA;AAC1E,IAAA,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACnD,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI;QAC9B;aAAO;AACH,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACvB;IACJ;AAEA,IAAA,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC5C;AAEA,SAAS,yBAAyB,CAAC,KAAgB,EAAE,IAAU,EAAA;AAC3D,IAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO;AAEtB,QAAA,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AAChD,YAAA,GAAG,GAAG,GAAG,CAAC,IAAI;QAClB;QAEA,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC;AAEnD,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI;AACjB,QAAA,GAAG,CAAC,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AAEnB,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,OAAO,IAAI;AACf;AAEA,SAAS,kBAAkB,CAAC,KAAgB,EAAE,IAAU,EAAE,aAAoB,EAAA;IAC1E,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC;AAE3D,IAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACvB,QAAiC;AAC7B,YAAA,qBAAqB,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC;QACzD;IAgBJ;AACJ;AAEA,SAAS,uBAAuB,CAAC,KAAgB,EAAE,QAAgB,EAAA;AAC/D,IAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE;AAEzC,IAAA,IAAI,MAAM,GAAsB,KAAK,CAAC,UAAU,CAAC,IAAI;AAErD,IAAA,OAAO,MAAM,KAAK,IAAI,EAAE;AACpB,QAAA,MAAM,UAAU,GAAsB,MAAM,CAAC,IAAI;AACjD,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,SAAS;QACjC,IAAI,OAAO,GAAgB,IAAI;AAE/B,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACvB,gBAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;AAEtE,gBAAA,IAAI,QAAQ,GAAG,WAAW,EAAE;oBACxB,WAAW,GAAG,QAAQ;oBACtB,OAAO,GAAG,IAAI;gBAClB;AAEA,gBAAA,IAAI,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC,SAAS;oBAAE;YAC9C;QACJ;AAEA,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,YAAA,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;QAC3C;QAEA,MAAM,GAAG,UAAU;IACvB;AACJ;AAEA,SAAS,eAAe,CAAC,KAAgB,EAAA;AACrC,IAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,IAAI;IAElD,IAAI,SAAS,GAAsB,IAAI;IACvC,IAAI,WAAW,GAAG,CAAC;IAEnB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAK,CAAC,IAAK;AAC1C,IAAA,IAAI,MAAM,GAAsB,OAAO,CAAC,OAAO;IAE/C,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AAC/C,QAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;AAEzE,QAAA,IAAI,QAAQ,GAAG,WAAW,EAAE;YACxB,WAAW,GAAG,QAAQ;YACtB,SAAS,GAAG,MAAM;QACtB;AAEA,QAAA,MAAM,GAAG,MAAM,CAAC,IAAI;IACxB;AAEA,IAAA,OAAO,SAAS;AACpB;AAEA,SAAS,cAAc,CAAC,KAAgB,EAAE,QAAgB,EAAE,SAA0B,EAAE,IAAU,EAAE,OAAmB,EAAA;AACnH,IAAA,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC;AAC/B,IAAA,IAAI,CAAC,IAAI,GAAG,OAAO;AAEnB,IAAA,IAAI,IAAc;AAElB,IAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,QAAA,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAE;IAChC;SAAO;AACH,QAAA,IAAI,GAAG,SAAS,CAAC,IAAK;IAC1B;IAEA,MAAM,SAAS,GAAG,IAAI;AAEtB,IAAA,GAAG;AACC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAK;AAC3B,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI;AAElC,QAAA,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE;AAC/B,YAAA,IAAI,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE;gBAC7E,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC;YACpE;iBAAO;AACH,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB;QACJ;AAEA,QAAA,IAAI,GAAG,IAAI,CAAC,IAAK;AACrB,IAAA,CAAC,QAAQ,IAAI,KAAK,SAAS;AAC/B;AAEA,SAAS,gBAAgB,CAAC,KAAgB,EAAE,SAAqB,EAAE,WAAqB,EAAA;AACpF,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAE,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AACzF,IAAA,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;AAE/B,IAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAEtB,IAAA,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAE,EAAE,WAAW,CAAC,IAAK,CAAC;AAE1D,IAAA,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,CAAE;AAChC;AAEA,SAAS,WAAW,CAAC,KAAgB,EAAE,SAAqB,EAAE,OAAmB,EAAA;AAC7E,IAAA,KAAK,CAAC,QAAQ,GAAG,EAAE;IAEnB,IAAI,aAAa,GAAoB,IAAI;IACzC,IAAI,gBAAgB,GAAoB,IAAI;AAE5C,IAAA,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE;QAC/B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC;AAEhE,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;YACxB,aAAa,GAAG,QAAQ;QAC5B;aAAO;AACH,YAAA,eAAe,CAAC,QAAQ,CAAC,IAAK,EAAE,gBAAiB,CAAC;QACtD;QAEA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,gBAAgB,GAAG,QAAQ;IAC/B;AAEA,IAAA,eAAe,CAAC,aAAc,CAAC,IAAK,EAAE,gBAAiB,CAAC;AAC5D;AAEA,SAAS,eAAe,CAAC,KAAgB,EAAE,SAAqB,EAAA;IAC5D,MAAM,OAAO,GAAe,EAAE;AAE9B,IAAA,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;IAEjC,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,IAAK,CAAC;AAEvD,IAAA,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,IAAK,EAAE,OAAO,CAAC;AAEtE,IAAA,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;AAEtC,IAAA,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;AAClD;AAEA,SAAS,YAAY,CAAC,KAAgB,EAAA;IAClC,MAAM,WAAW,GAAW,EAAE;AAE9B,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACvB,YAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B;IACJ;AAEA,IAAA,KAAK,CAAC,KAAK,GAAG,WAAW;AAC7B;AAEA;AAEA,SAAS,YAAY,CAAC,MAAgB,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,SAAmC,EAAA;IAC3G,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9B,IAAA,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG;AACrB,IAAA,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG;AACrB,IAAA,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG;AACrB,IAAA,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG;AACrB,IAAA,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG;AACrB,IAAA,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG;IAErB,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAChC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAChC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAEhC,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAClD,IAAA,IAAI,GAAG,GAAG,OAAO,EAAE;AACf,QAAA,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AAChB,QAAA,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AAChB,QAAA,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AAChB,QAAA,OAAO,CAAC;IACZ;AAEA,IAAA,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG;AACtB,IAAA,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM;AAC1B,IAAA,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM;AAC1B,IAAA,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM;IAE1B,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC1E;AAEA,SAAS,eAAe,CAAC,MAAgB,EAAE,GAAW,EAAE,MAAgC,EAAE,MAAc,EAAA;IACpG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM;AACjE;AAEA,SAAS,qBAAqB,CAAC,MAAgB,EAAE,GAAW,EAAE,EAAU,EAAE,EAAU,EAAA;IAChF,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7B,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AACnB,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AACnB,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AAEnB,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AACnB,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;AACnB,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE;IAEnB,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAChC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAChC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAEhC,IAAA,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC9C,IAAA,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAEjD,IAAI,OAAO,GAAG,OAAO;QAAE,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAE/D,OAAO,UAAU,GAAG,OAAO;AAC/B;;;;"}
|