@itwin/core-geometry 5.1.2 → 5.1.3-experimental.1
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/CHANGELOG.md +6 -1
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/geometry4d/Map4d.js.map +1 -1
- package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
- package/lib/cjs/geometry4d/MomentData.js.map +1 -1
- package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/cjs/geometry4d/Point4d.js.map +1 -1
- package/lib/cjs/numerics/BandedSystem.js.map +1 -1
- package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
- package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
- package/lib/cjs/numerics/Complex.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/SmallSystem.js.map +1 -1
- package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js.map +1 -1
- package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
- package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/cjs/serialization/DeepCompare.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveTypes.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/Query/InOutTests.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/esm/geometry3d/Segment1d.js.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/esm/geometry3d/XYZProps.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/geometry4d/Map4d.js.map +1 -1
- package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
- package/lib/esm/geometry4d/MomentData.js.map +1 -1
- package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/esm/geometry4d/Point4d.js.map +1 -1
- package/lib/esm/numerics/BandedSystem.js.map +1 -1
- package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
- package/lib/esm/numerics/ClusterableArray.js.map +1 -1
- package/lib/esm/numerics/Complex.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.js.map +1 -1
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/Range1dArray.js.map +1 -1
- package/lib/esm/numerics/SmallSystem.js.map +1 -1
- package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/esm/numerics/UnionFind.js.map +1 -1
- package/lib/esm/numerics/UsageSums.js.map +1 -1
- package/lib/esm/polyface/AuxData.js.map +1 -1
- package/lib/esm/polyface/BoxTopology.js.map +1 -1
- package/lib/esm/polyface/FacetFaceData.js.map +1 -1
- package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/esm/polyface/FacetOrientation.js.map +1 -1
- package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/RangeLengthData.js.map +1 -1
- package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
- package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/esm/serialization/DeepCompare.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SolidPrimitive.js.map +1 -1
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/SignedDataSummary.js.map +1 -1
- package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Merging.js","sourceRoot":"","sources":["../../../src/topology/Merging.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,qCAAqC,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,mBAAmB;AAEnB,MAAM,OAAO,cAAc;IAClB,SAAS,GAAG,CAAC,CAAC;IACd,mBAAmB,GAAG,CAAC,CAAC;IACxB,QAAQ,GAAG,CAAC,CAAC;IACb,SAAS,GAAG,CAAC,CAAC;IACd,OAAO,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC,CAAC;IACnB;IACA,CAAC;CACF;AACD;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAC9B,KAAK,CAAS;IACd,iBAAiB,CAAS;IAC1B,IAAI,CAAW;IACf,OAAO,CAAU;IACxB,YAAmB,KAAa,EAAE,GAAW,EAAE,IAAc,EAAE,OAAgB;QAC7E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAID;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAE3B,iFAAiF;IAC1E,MAAM,CAAC,gBAAgB,CAAC,CAAW,EAAE,CAAW;QACrD,YAAY;QACZ,4CAA4C;QAC5C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,YAAY;QACZ,4CAA4C;QAC5C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED,mIAAmI;IAC5H,MAAM,CAAC,UAAU,CAAC,KAAe;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;QAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;eACzC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;eACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,qBAAqB,CAAC,IAAc,EAAE,OAAiB,EAAE,OAAiB;QACtF,OAAO,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnH,CAAC;IAED,wHAAwH;IACxH,yHAAyH;IAElH,MAAM,CAAC,UAAU,CAAC,KAAoB;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACtC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,gFAAgF;IACzE,MAAM,CAAC,wBAAwB,CAAC,QAAyB,EAAE,WAA0B,EAAE,IAAkB;QAC9G,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,kFAAkF;QAClF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAE/B,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,CACxC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAC7D,UAAU,EACV,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAC7D,UAAU,GAAG,CAAC,CAAC,CAAC;YAElB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC7B,UAAU,IAAI,CAAC,CAAC;YAEhB,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAG,sDAAsD;YACvF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,eAAe,CAAC,KAAoB;QAChD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC;YACtC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD;;;;;;;OAOG;IACK,MAAM,CAAC,8BAA8B,CAAC,IAAc,EAAE,MAAoB,EAAE,OAAqB,EAAE,gBAAwB,CAAC;QAClI,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,8DAA8D;YACjE,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;gBACzD,MAAM;YACR,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;QAC1B,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAC9C,IAAI,EAAE,KAAK,IAAI;YACb,OAAO,KAAK,CAAC;QACf,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,2DAA2D;YAC9D,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;gBACzD,MAAM;YACR,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC;QAC5B,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAC9C,IAAI,EAAE,KAAK,IAAI;YACb,OAAO,KAAK,CAAC;QACf,OAAO,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACrF,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,qCAAqC,CAAC,KAAoB,EAAE,IAAkB,EAAE,UAAwB,YAAY,CAAC,aAAa;QAC9I,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI;YACjC,OAAO,CAAC,CAAC;QACX,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClE,gFAAgF;oBAChF,MAAM,aAAa,GAAG,QAAQ,CAAC,0BAA0B,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;oBACrH,IAAI,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;wBAChK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBAC7B,EAAE,SAAS,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;OAOG;IACI,MAAM,CAAC,wCAAwC,CAAC,KAAoB,EAAE,UAAwB,YAAY,CAAC,aAAa;QAC7H,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACzE,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACtC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;oBAChC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,iBAAiB,CAAC,KAAoB,EAAE,UAAwB,YAAY,CAAC,aAAa;QACtG,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzF,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,cAAc,GAAG,GAAG,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9F,MAAM,CAAC,cAAc,KAAK,eAAe,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,KAAoB,EAAE,QAAsB,YAAY,CAAC,QAAQ;QAC/F,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAChC,SAAS;YACX,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,uEAAuE;IACvE,uDAAuD;IACvD,+EAA+E;IACxE,MAAM,CAAC,sBAAsB,CAAC,QAA0B,EAAE,KAAkB,EAAE,EAAU,EAAE,EAAU;QACzG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBAChE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,EAAE,EAAE,CAAC;QACP,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACO,MAAM,CAAC,mCAAmC,CAAsC;IACxF;;OAEG;IACI,MAAM,KAAK,kCAAkC,CAAC,IAAoD,IAAI,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,CAAC,CAAC;IACvJ,MAAM,CAAC,4BAA4B,CAAC,QAA0B,EAAE,KAAkB,EAAE,QAAoB,EAAE,EAAU,EAAE,EAAU;QACtI,IAAI,IAAI,CAAC,mCAAmC,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAiC,EAAE,CAAC;YAClD,0CAA0C;YAC1C,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACnD,QAAQ,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;IAEH,CAAC;IACD,mCAAmC;IACnC,yCAAyC;IACzC,gDAAgD;IAChD,6DAA6D;IAC7D,mCAAmC;IACnC,iCAAiC;IACzB,MAAM,CAAC,yBAAyB,CAAC,QAA0B,EAAE,KAAkB,EAAE,QAAoB,EAAE,EAAU,EAAE,EAAU;QACnI,MAAM,QAAQ,GAAiC,EAAE,CAAC;QAElD,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;gBACf,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBACnD,QAAQ,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;gBACjF,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAA6B,EAAE,CAA6B,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC7H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,CAAC,GAAG,EAAE,CAAC;QACT,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,gBAAgB,CAAC,IAAc;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAA8B,CAAC;QAChD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,MAAM,GAAG,KAAK,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC;gBACjE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;oBAClD,MAAM,GAAG,CAAC,MAAM,CAAC;gBACnB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,4FAA4F;IACrF,MAAM,CAAC,UAAU,CAAC,IAAc;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;IACrJ,CAAC;IACD;;;;;;;OAOG;IACI,MAAM,CAAC,sBAAsB,CAAC,KAAoB,EAAE,uBAAkD;QAC3G,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;QACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAE,yEAAyE;QACjI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YACnB,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAE,0CAA0C;YACzF,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,UAAU,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;gBACrD,sFAAsF;gBACtF,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;oBACZ,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;wBACjC,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;wBAC3B,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;wBACnB,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;gBACD,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM;QACN,4EAA4E;QAC5E,qDAAqD;QAErD,qDAAqD;QACrD,KAAK,MAAM,iBAAiB,IAAI,KAAK,EAAE,CAAC;YACtC,IAAI,iBAAiB,KAAK,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;gBAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;gBAClC,IAAI,qBAAqB,GAAG,uBAAuB,CAAC;gBACpD,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,4HAA4H;oBAC5H,MAAM,MAAM,GAAG,KAAK,CAAC,OAA8B,CAAC;oBACpD,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,YAAY,aAAa;wBAC7F,qBAAqB,GAAG,SAAS,CAAC;gBACtC,CAAC;gBACD,IAAI,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtH,IAAI,KAAK,CAAC,oCAAoC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/D,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;gBACpB,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,sBAAsB,GAAe,EAAE,CAAC;QAC9C,EAAE,GAAG,CAAC,CAAC;QACP,IAAI,MAAM,EAAE,MAAM,CAAC;QACnB,uDAAuD;QAEvD,2CAA2C;QAC3C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;gBACrD,kFAAkF;gBAClF,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;oBACZ,6CAA6C;oBAC7C,+DAA+D;oBAC/D,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;wBACb,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACpE,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACrE,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC/C,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC5B,IAAI,KAAK,GAAG,MAAM,CAAC;oBACnB,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;wBACjC,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC9C,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;wBAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC5C,8DAA8D;4BAC9D,MAAM,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;4BAC/E,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gCACX,sBAAsB,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gCACtF,sBAAsB,CAAC,GAAG,EAAE,CAAC;4BAC/B,CAAC;4BACD,KAAK,GAAG,KAAK,CAAC;4BACd,MAAM,GAAG,MAAM,CAAC;wBAClB,CAAC;6BAAM,IAAI,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;4BACnD,MAAM,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;4BAC/E,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gCACX,sBAAsB,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gCACtF,sBAAsB,CAAC,GAAG,EAAE,CAAC;4BAC/B,CAAC;4BACD,6FAA6F;wBAC/F,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;4BAE7B,wCAAwC;4BACxC,wDAAwD;4BACxD,6CAA6C;4BAC7C,kDAAkD;4BAClD,8CAA8C;4BAC9C,IAAI,KAAK,CAAC,oCAAoC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gCAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;gCACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;gCAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oCAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oCACxC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oCACxC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,CAAE,kBAAkB;wCACtE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;wCAC/B,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;wCACtC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;wCACvC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oCACtC,CAAC;gCACH,CAAC;4BACH,CAAC;4BACD,KAAK,GAAG,KAAK,CAAC;4BACd,MAAM,GAAG,MAAM,CAAC;wBAClB,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,+BAA+B,CAAC,KAAoB;QACjE,MAAM,SAAS,GAAG,IAAI,qCAAqC,EAAE,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAEnC,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9D,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,mCAAmC,CAAC,MAAgB,EAAE,MAAgB,EAAE,MAAc,QAAQ,CAAC,mBAAmB;QAC/H,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;QACpC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;QACpC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,SAAS,GAAG,WAAW,CAAC,oCAAoC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAClG,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,QAAe,EAAE,MAAa,EAAU,EAAE;gBACzF,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/D,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/D,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;oBAChE,OAAO,GAAG,CAAC;gBACb,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;oBAC5D,OAAO,GAAG,CAAC;gBACb,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAC;YACF,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACvE,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;gBACjB,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvE,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvF,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,kEAAkE;YAC9F,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;oBACjB,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,oEAAoE;oBACjG,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC;gBAC3B,CAAC;;oBACC,SAAS,GAAG,SAAS,CAAC,CAAC,gDAAgD;YAC3E,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,sBAAsB,CAAC,KAAoB;QACvD,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,MAAM,EAAE,MAAM,CAAC;QACnB,MAAM,aAAa,GAAG,MAAM,CAAC;QAC7B,MAAM,aAAa,GAAG,GAAG,GAAG,aAAa,CAAC;QAC1C,IAAI,CAAC,CAAC;QACN,IAAI,MAAM,CAAC;QACX,MAAM,OAAO,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QAC7C,OAAO,SAAS,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;YACxC,SAAS,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,SAAS,IAAI,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC9B,IAAI,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;oBACjF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,CAAC;qBAAM,IAAI,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;oBACxF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,mCAAmC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBACpF,IAAI,SAAS,EAAE,CAAC;wBACd,MAAM,YAAY,GAAG,CAAC,IAAc,EAAE,QAAiB,EAAQ,EAAE;4BAC/D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,aAAa,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;gCACnF,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gCAC1D,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,mCAAmC;gCAC3E,IAAI,CAAC,QAAQ,EAAE,CAAC;4BAClB,CAAC;wBACH,CAAC,CAAC;wBACF,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACrC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBACtC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACrC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBACtC,0EAA0E;oBAC5E,CAAC;gBACH,CAAC;YACH,CAAC;YACD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,qBAAqB,CAAC,YAA6B;QAC/D,uEAAuE;QACvE,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,gBAAgB,CAAC,wBAAwB,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAC3F,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,mBAAmB,CAAC,MAAkC,EAAE,aAAsB,IAAI,EAAE,OAAqB,YAAY,CAAC,YAAY;QAC9I,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,YAAY,CAAC,iCAAiC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjF,KAAK,MAAM,IAAI,IAAI,UAAU;YAC3B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACjD,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CAEF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Topology\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { MultiLineStringDataVariant } from \"../geometry3d/IndexedXYZCollection\";\nimport { Range3d } from \"../geometry3d/Range\";\nimport { XAndY } from \"../geometry3d/XYZProps\";\nimport { ClusterableArray } from \"../numerics/ClusterableArray\";\nimport { SmallSystem } from \"../numerics/SmallSystem\";\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\nimport { HalfEdgePriorityQueueWithPartnerArray } from \"./HalfEdgePriorityQueue\";\nimport { RegularizationContext } from \"./RegularizeFace\";\nimport { Triangulator } from \"./Triangulation\";\n\n// cspell:word XYUV\n\nexport class GraphSplitData {\n public numUpEdge = 0;\n public numIntersectionTest = 0;\n public numSplit = 0;\n public numPopOut = 0;\n public numA0B0 = 0;\n public numA0B1 = 0;\n public constructor() {\n }\n}\n/**\n * Structure for data used when sorting outbound edges \"around a node\"\n */\nexport class VertexNeighborhoodSortData {\n public index: number;\n public radiusOfCurvature: number;\n public node: HalfEdge;\n public radians?: number;\n public constructor(index: number, key: number, node: HalfEdge, radians?: number) {\n this.index = index;\n this.radiusOfCurvature = key;\n this.node = node;\n this.radians = radians;\n }\n}\n\n/** Function signature for announcing a vertex neighborhood during sorting. */\nexport type AnnounceVertexNeighborhoodSortData = (data: VertexNeighborhoodSortData[]) => any;\n/**\n * * Assorted methods used in algorithms on HalfEdgeGraph.\n * @internal\n */\nexport class HalfEdgeGraphOps {\n\n /** Compare function for sorting with primary y compare, secondary x compare. */\n public static compareNodesYXUp(a: HalfEdge, b: HalfEdge) {\n // Check y's\n // if (!Geometry.isSameCoordinate(a.y, b.y))\n if (a.y < b.y)\n return -1;\n else if (a.y > b.y)\n return 1;\n // Check x's\n // if (!Geometry.isSameCoordinate(a.x, b.x))\n if (a.x < b.x)\n return -1;\n else if (a.x > b.x)\n return 1;\n return 0;\n }\n\n /** Return true if nodeB (a) is lower than both its neighbors and (b) inflects as a downward peak (rather than an upward trough) */\n public static isDownPeak(nodeB: HalfEdge) {\n const nodeA = nodeB.facePredecessor;\n const nodeC = nodeB.faceSuccessor;\n return this.compareNodesYXUp(nodeB, nodeA) < 0\n && this.compareNodesYXUp(nodeB, nodeC) < 0\n && this.crossProductToTargets(nodeB, nodeA, nodeC) > 0;\n }\n\n /** return the cross product of vectors from base to targetA and base to targetB\n * @param base base vertex of both vectors.\n * @param targetA target vertex of first vector\n * @param targetB target vertex of second vector\n */\n public static crossProductToTargets(base: HalfEdge, targetA: HalfEdge, targetB: HalfEdge): number {\n return Geometry.crossProductXYXY(targetA.x - base.x, targetA.y - base.y, targetB.x - base.x, targetB.y - base.y);\n }\n\n // ---------------------------------------------------------------------------------------------------------------------\n // ----------------------------------------------------------------------------------------------------------------------\n\n public static graphRange(graph: HalfEdgeGraph): Range3d {\n const range = Range3d.create();\n for (const node of graph.allHalfEdges) {\n range.extendXYZ(node.x, node.y, node.z);\n }\n return range;\n }\n /** Returns an array of all nodes (both ends) of edges created from segments. */\n public static segmentArrayToGraphEdges(segments: LineSegment3d[], returnGraph: HalfEdgeGraph, mask: HalfEdgeMask): HalfEdge[] {\n const result = [];\n let idxCounter = 0;\n\n // Push the endpoints of each segment onto arr[] in the form {(x, y, theta), Node}\n for (const segment of segments) {\n\n const node0 = returnGraph.createEdgeXYZXYZ(\n segment.point0Ref.x, segment.point0Ref.y, segment.point0Ref.z,\n idxCounter,\n segment.point1Ref.x, segment.point1Ref.y, segment.point1Ref.z,\n idxCounter + 1);\n\n const node1 = node0.edgeMate;\n idxCounter += 2;\n\n node0.setMaskAroundFace(mask); // Original given coordinates must be part of boundary\n result.push(node0);\n result.push(node1);\n }\n\n return result;\n }\n\n /**\n * * Visit all nodes in `graph`.\n * * invoke `pinch(node, vertexPredecessor)`\n * * this leaves the graph as isolated edges.\n * @param graph graph to modify\n */\n public static isolateAllEdges(graph: HalfEdgeGraph) {\n for (const nodeA of graph.allHalfEdges) {\n const nodeB = nodeA.vertexPredecessor;\n HalfEdge.pinch(nodeA, nodeB);\n }\n }\n /**\n * Compute convexity of a sector of a super-face.\n * @param base node whose edge is to be tested for removal\n * @param ignore edges with this mask (on either side) are ignored for the purposes of computing convexity\n * @param barrier edges with this mask (on either side) will not be removed\n * @param signedAreaTol optional signed area tolerance to use in test for parallel vectors\n * @return whether removing the edge at base would create a convex sector in the super-face\n */\n private static isSectorConvexAfterEdgeRemoval(base: HalfEdge, ignore: HalfEdgeMask, barrier: HalfEdgeMask, signedAreaTol: number = 0): boolean {\n let vs = base;\n do { // loop ccw around vertex looking for a super-face predecessor\n if (vs.isMaskSet(barrier) || vs.edgeMate.isMaskSet(barrier))\n break;\n vs = vs.vertexSuccessor;\n } while (vs !== base && vs.isMaskSet(ignore));\n if (vs === base)\n return false;\n let vp = base;\n do { // loop cw around vertex looking for a super-face successor\n if (vp.isMaskSet(barrier) || vp.edgeMate.isMaskSet(barrier))\n break;\n vp = vp.vertexPredecessor;\n } while (vp !== base && vp.isMaskSet(ignore));\n if (vp === base)\n return false;\n return HalfEdge.isSectorConvex(vs.edgeMate, base, vp.faceSuccessor, signedAreaTol);\n }\n /**\n * Mask edges between faces if the union of the faces is convex.\n * Uses a greedy algorithm with no regard to quality of resulting convex faces.\n * Best results when input faces are convex.\n * @param graph graph to examine and mark\n * @param mark the mask used to mark (both sides of) removable edges\n * @param barrier edges with this mask (on either side) will not be marked. Defaults to HalfEdgeMask.BOUNDARY_EDGE.\n * @return number of edges masked (half the number of HalfEdges masked)\n */\n public static markRemovableEdgesToExpandConvexFaces(graph: HalfEdgeGraph, mark: HalfEdgeMask, barrier: HalfEdgeMask = HalfEdgeMask.BOUNDARY_EDGE): number {\n if (HalfEdgeMask.NULL_MASK === mark)\n return 0;\n const visit = graph.grabMask(true);\n let numMarked = 0;\n for (const node of graph.allHalfEdges) {\n if (!node.isMaskSet(visit)) {\n if (!node.isMaskSet(barrier) && !node.edgeMate.isMaskSet(barrier)) {\n // tol based on areas of *original* faces on each side of the edge to be removed\n const signedAreaTol = Geometry.smallMetricDistanceSquared * (node.signedFaceArea() + node.edgeMate.signedFaceArea());\n if (this.isSectorConvexAfterEdgeRemoval(node, mark, barrier, signedAreaTol) && this.isSectorConvexAfterEdgeRemoval(node.edgeMate, mark, barrier, signedAreaTol)) {\n node.setMaskAroundEdge(mark);\n ++numMarked;\n }\n }\n }\n node.setMaskAroundEdge(visit);\n }\n graph.dropMask(visit);\n return numMarked;\n }\n /**\n * Collect edges between faces if the union of the faces is convex.\n * Uses a greedy algorithm with no regard to quality of resulting convex faces.\n * Best results when input faces are convex.\n * @param graph graph to examine\n * @param barrier edges with this mask (on either side) will not be collected. Defaults to HalfEdgeMask.BOUNDARY_EDGE.\n * @return one HalfEdge per removable edge\n */\n public static collectRemovableEdgesToExpandConvexFaces(graph: HalfEdgeGraph, barrier: HalfEdgeMask = HalfEdgeMask.BOUNDARY_EDGE): HalfEdge[] | undefined {\n const removable: HalfEdge[] = [];\n const mark = graph.grabMask(true);\n if (0 < this.markRemovableEdgesToExpandConvexFaces(graph, mark, barrier)) {\n const visited = graph.grabMask(true);\n for (const node of graph.allHalfEdges) {\n if (node.isMaskSet(mark) && !node.isMaskSet(visited)) {\n node.setMaskAroundEdge(visited);\n removable.push(node);\n }\n }\n graph.dropMask(visited);\n }\n graph.dropMask(mark);\n return removable;\n }\n\n /**\n * Remove edges between faces if the union of the faces is convex.\n * Uses a greedy algorithm with no regard to quality of resulting convex faces.\n * Best results when input faces are convex.\n * @param graph graph to modify\n * @param barrier edges with this mask (on either side) will not be removed. Defaults to HalfEdgeMask.BOUNDARY_EDGE.\n * @return number of edges deleted\n */\n public static expandConvexFaces(graph: HalfEdgeGraph, barrier: HalfEdgeMask = HalfEdgeMask.BOUNDARY_EDGE): number {\n const mark = graph.grabMask(true);\n const numRemovedEdges = this.markRemovableEdgesToExpandConvexFaces(graph, mark, barrier);\n if (numRemovedEdges > 0) {\n const numYankedEdges = 0.5 * graph.yankAndDeleteEdges((node: HalfEdge) => node.getMask(mark));\n assert(numYankedEdges === numRemovedEdges);\n }\n graph.dropMask(mark);\n return numRemovedEdges;\n }\n\n /**\n * Test desired faces for convexity.\n * @param graph graph to examine\n * @param avoid faces with this mask will not be examined. Defaults to HalfEdgeMask.EXTERIOR.\n * @return whether every face in the graph is convex\n */\n public static isEveryFaceConvex(graph: HalfEdgeGraph, avoid: HalfEdgeMask = HalfEdgeMask.EXTERIOR): boolean {\n const allFaces = graph.collectFaceLoops();\n for (const node of allFaces) {\n if (node.isMaskedAroundFace(avoid))\n continue;\n if (!node.isFaceConvex())\n return false;\n }\n return true;\n }\n}\n\n/**\n * Note: this class uses hardcoded micrometer coordinate/cluster tolerance throughout.\n * @internal\n */\nexport class HalfEdgeGraphMerge {\n // return kC such that all angles k are equal, with kA <= k < kC <= kB.\n // * Assume: angles k are stored at extra data index 0.\n // * Note that the usual case (when angle at kA is not repeated) is kA+1 === kC\n public static getCommonThetaEndIndex(clusters: ClusterableArray, order: Uint32Array, kA: number, kB: number): number {\n let kC = kA + 1;\n const thetaA = clusters.getExtraData(order[kA], 0);\n while (kC < kB) {\n const thetaB = clusters.getExtraData(order[kC], 0);\n if (!Angle.isAlmostEqualRadiansAllowPeriodShift(thetaA, thetaB)) {\n return kC;\n }\n kC++;\n }\n return kC;\n }\n private static _announceVertexNeighborhoodFunction?: AnnounceVertexNeighborhoodSortData;\n /**\n * public property setter for a function to be called with sorted edge data around a vertex.\n */\n public static set announceVertexNeighborhoodFunction(func: AnnounceVertexNeighborhoodSortData | undefined) { this._announceVertexNeighborhoodFunction = func; }\n private static doAnnounceVertexNeighborhood(clusters: ClusterableArray, order: Uint32Array, allNodes: HalfEdge[], k0: number, k1: number) {\n if (this._announceVertexNeighborhoodFunction) {\n const sortData: VertexNeighborhoodSortData[] = [];\n // build and share the entire vertex order\n for (let k = k0; k < k1; k++) {\n const index = clusters.getExtraData(order[k], 1);\n const theta = clusters.getExtraData(order[k], 0);\n const node = allNodes[index];\n const signedDistance = this.curvatureSortKey(node);\n sortData.push(new VertexNeighborhoodSortData(order[k], signedDistance, node, theta));\n }\n this._announceVertexNeighborhoodFunction(sortData);\n }\n\n }\n // assumptions about cluster array:\n // * data order is: x,y,theta,nodeIndex\n // * theta and nodeIndex are the \"extra\" data.\n // * only want to do anything here when curves are present.\n // * k0<=k<k1 are around a vertex\n // * These are sorted by theta.\n private static secondarySortAroundVertex(clusters: ClusterableArray, order: Uint32Array, allNodes: HalfEdge[], k0: number, k1: number) {\n const sortData: VertexNeighborhoodSortData[] = [];\n\n for (let k = k0; k < k1;) {\n const kB = this.getCommonThetaEndIndex(clusters, order, k, k1);\n if (k + 1 < kB) {\n sortData.length = 0;\n for (let kA = k; kA < kB; kA++) {\n const index = clusters.getExtraData(order[kA], 1);\n const node = allNodes[index];\n const signedDistance = this.curvatureSortKey(node);\n sortData.push(new VertexNeighborhoodSortData(order[kA], signedDistance, node));\n }\n sortData.sort((a: VertexNeighborhoodSortData, b: VertexNeighborhoodSortData) => (a.radiusOfCurvature - b.radiusOfCurvature));\n for (let i = 0; i < sortData.length; i++) {\n order[k + i] = sortData[i].index;\n }\n }\n k = kB;\n }\n }\n /** Return the sort key for sorting by curvature.\n * * This is the signed distance from the curve at the edge start, to center of curvature.\n * * NOTE: Currently does not account for higher derivatives in the case of higher-than-tangent match.\n */\n public static curvatureSortKey(node: HalfEdge): number {\n const cld = node.edgeTag as CurveLocationDetail;\n if (cld !== undefined) {\n const fraction = cld.fraction;\n const curve = cld.curve;\n if (curve) {\n let radius = curve.fractionToSignedXYRadiusOfCurvature(fraction);\n if (node.sortData !== undefined && node.sortData < 0)\n radius = -radius;\n return radius;\n }\n }\n return 0.0;\n }\n /** Whether the HalfEdge is part of a null face, as marked by [[clusterAndMergeXYTheta]]. */\n public static isNullFace(node: HalfEdge): boolean {\n return node.isMaskSet(HalfEdgeMask.NULL_FACE) && node.faceSuccessor.isMaskSet(HalfEdgeMask.NULL_FACE) && node === node.faceSuccessor.faceSuccessor;\n }\n /** Simplest merge algorithm:\n * * collect array of (x,y,theta) at all nodes\n * * lexical sort of the array.\n * * twist all vertices together.\n * * This effectively creates valid face loops for a planar subdivision if there are no edge crossings.\n * * If there are edge crossings, the graph can be a (highly complicated) Klein bottle topology.\n * * Mask.NULL_FACE is cleared throughout and applied within null faces.\n */\n public static clusterAndMergeXYTheta(graph: HalfEdgeGraph, outboundRadiansFunction?: (he: HalfEdge) => number) {\n const allNodes = graph.allHalfEdges;\n const numNodes = allNodes.length;\n graph.clearMask(HalfEdgeMask.NULL_FACE);\n const clusters = new ClusterableArray(2, 2, numNodes); // data order: x,y,theta,nodeIndex. But theta is not set in first round.\n for (let i = 0; i < numNodes; i++) {\n const nodeA = allNodes[i];\n const xA = nodeA.x;\n const yA = nodeA.y;\n HalfEdge.pinch(nodeA, nodeA.vertexSuccessor); // pull it out of its current vertex loop.\n clusters.addDirect(xA, yA, 0.0, i);\n }\n const clusterTol = Geometry.smallMetricDistance;\n const order = clusters.clusterIndicesLexical(clusterTol);\n let k0 = 0;\n const numK = order.length;\n for (let k1 = 0; k1 < numK; k1++) {\n if (order[k1] === ClusterableArray.clusterTerminator) {\n // nodes identified in order[k0]..order[k1-1] are at a vertex cluster; equate their xy\n if (k1 > k0) {\n const iA = clusters.getExtraData(order[k0], 1);\n const nodeA0 = allNodes[iA];\n for (let k = k0 + 1; k < k1; k++) {\n const iB = clusters.getExtraData(order[k], 1);\n const nodeB = allNodes[iB];\n nodeB.x = nodeA0.x;\n nodeB.y = nodeA0.y;\n }\n }\n k0 = k1 + 1;\n }\n }\n // NOW\n // 1) There are identical coordinates at all nodes around each vertex loop.\n // 2) Hence ready do sort (at each vertex) by theta.\n\n // insert theta as extra data in the sort table . . .\n for (const clusterTableIndex of order) {\n if (clusterTableIndex !== ClusterableArray.clusterTerminator) {\n const nodeA = allNodes[clusterTableIndex];\n const nodeB = nodeA.faceSuccessor;\n let getPrecomputedRadians = outboundRadiansFunction;\n if (getPrecomputedRadians) {\n // Recompute theta when edge geometry is completely determined by the vertices, which may have been perturbed by clustering.\n const detail = nodeA.edgeTag as CurveLocationDetail;\n if (undefined === detail || undefined === detail.curve || detail.curve instanceof LineSegment3d)\n getPrecomputedRadians = undefined;\n }\n let radians = getPrecomputedRadians ? getPrecomputedRadians(nodeA) : Math.atan2(nodeB.y - nodeA.y, nodeB.x - nodeA.x);\n if (Angle.isAlmostEqualRadiansAllowPeriodShift(radians, -Math.PI))\n radians = Math.PI;\n clusters.setExtraData(clusterTableIndex, 0, radians);\n }\n }\n clusters.sortSubsetsBySingleKey(order, 2);\n const unmatchedNullFaceNodes: HalfEdge[] = [];\n k0 = 0;\n let thetaA, thetaB;\n // GeometryCoreTestIO.consoleLog(\"START VERTEX LINKS\");\n\n // now pinch each neighboring pair together\n for (let k1 = 0; k1 < numK; k1++) {\n if (order[k1] === ClusterableArray.clusterTerminator) {\n // nodes identified in order[k0]..order[k1-1] are properly sorted around a vertex.\n if (k1 > k0) {\n // const xy = clusters.getPoint2d(order[k0]);\n // GeometryCoreTestIO.consoleLog({ k0, k1, x: xy.x, y: xy.y });\n if (k1 > k0 + 1)\n this.secondarySortAroundVertex(clusters, order, allNodes, k0, k1);\n this.doAnnounceVertexNeighborhood(clusters, order, allNodes, k0, k1);\n const iA = clusters.getExtraData(order[k0], 1);\n thetaA = clusters.getExtraData(order[k0], 0);\n const nodeA0 = allNodes[iA];\n let nodeA = nodeA0;\n for (let k = k0 + 1; k < k1; k++) {\n const iB = clusters.getExtraData(order[k], 1);\n thetaB = clusters.getExtraData(order[k], 0);\n const nodeB = allNodes[iB];\n if (nodeA.isMaskSet(HalfEdgeMask.NULL_FACE)) {\n // nope, this edge was flagged and pinched from the other end.\n const j = unmatchedNullFaceNodes.findIndex((node: HalfEdge) => nodeA === node);\n if (j >= 0) {\n unmatchedNullFaceNodes[j] = unmatchedNullFaceNodes[unmatchedNullFaceNodes.length - 1];\n unmatchedNullFaceNodes.pop();\n }\n nodeA = nodeB;\n thetaA = thetaB;\n } else if (nodeB.isMaskSet(HalfEdgeMask.NULL_FACE)) {\n const j = unmatchedNullFaceNodes.findIndex((node: HalfEdge) => nodeB === node);\n if (j >= 0) {\n unmatchedNullFaceNodes[j] = unmatchedNullFaceNodes[unmatchedNullFaceNodes.length - 1];\n unmatchedNullFaceNodes.pop();\n }\n // NO leave nodeA and thetaA ignore nodeB -- later step will get the outside of its banana.\n } else {\n HalfEdge.pinch(nodeA, nodeB);\n\n // Detect null face using the heuristic:\n // * near vertex angles are same (periodic, toleranced)\n // * far vertex is clustered (exactly equal)\n // * near vertex curvatures are same (toleranced)\n // Note that near vertex is already clustered.\n if (Angle.isAlmostEqualRadiansAllowPeriodShift(thetaA, thetaB)) {\n const nodeA1 = nodeA.faceSuccessor;\n const nodeB1 = nodeB.edgeMate;\n if (nodeA1.isEqualXY(nodeB1)) {\n const cA = this.curvatureSortKey(nodeA);\n const cB = this.curvatureSortKey(nodeB);\n if (Geometry.isSameCoordinate(cA, cB, clusterTol)) { // rule out banana\n HalfEdge.pinch(nodeA1, nodeB1);\n nodeA.setMask(HalfEdgeMask.NULL_FACE);\n nodeB1.setMask(HalfEdgeMask.NULL_FACE);\n unmatchedNullFaceNodes.push(nodeB1);\n }\n }\n }\n nodeA = nodeB;\n thetaA = thetaB;\n }\n }\n }\n k0 = k1 + 1;\n }\n }\n }\n\n private static buildVerticalSweepPriorityQueue(graph: HalfEdgeGraph): HalfEdgePriorityQueueWithPartnerArray {\n const sweepHeap = new HalfEdgePriorityQueueWithPartnerArray();\n for (const p of graph.allHalfEdges) {\n\n if (HalfEdgeGraphOps.compareNodesYXUp(p, p.faceSuccessor) < 0) {\n sweepHeap.priorityQueue.push(p);\n }\n }\n return sweepHeap;\n }\n\n private static computeIntersectionFractionsOnEdges(nodeA0: HalfEdge, nodeB0: HalfEdge, tol: number = Geometry.smallMetricDistance): { f0: XAndY, f1?: XAndY} | undefined {\n const nodeA1 = nodeA0.faceSuccessor;\n const aDir = { x: nodeA1.x - nodeA0.x, y: nodeA1.y - nodeA0.y };\n const nodeB1 = nodeB0.faceSuccessor;\n const bDir = { x: nodeB1.x - nodeB0.x, y: nodeB1.y - nodeB0.y };\n let fractions = SmallSystem.lineSegmentXYUVIntersectionUnbounded(nodeA0, aDir, nodeB0, bDir, tol);\n if (fractions) {\n const snapFractionToSegment = (fraction: number, segStart: XAndY, segEnd: XAndY): number => {\n const x = Geometry.interpolate(segStart.x, fraction, segEnd.x);\n const y = Geometry.interpolate(segStart.y, fraction, segEnd.y);\n if (Geometry.isSameCoordinateXY(x, y, segStart.x, segStart.y, tol))\n return 0.0;\n if (Geometry.isSameCoordinateXY(x, y, segEnd.x, segEnd.y, tol))\n return 1.0;\n return fraction;\n };\n fractions.f0.x = snapFractionToSegment(fractions.f0.x, nodeA0, nodeA1);\n fractions.f0.y = snapFractionToSegment(fractions.f0.y, nodeB0, nodeB1);\n if (fractions.f1) {\n fractions.f1.x = snapFractionToSegment(fractions.f1.x, nodeA0, nodeA1);\n fractions.f1.y = snapFractionToSegment(fractions.f1.y, nodeB0, nodeB1);\n }\n if (fractions.f1 && !(Geometry.isIn01(fractions.f1.x) && Geometry.isIn01(fractions.f1.y)))\n fractions.f1 = undefined; // overlap ends beyond a segment; downgrade to simple intersection\n if (!(Geometry.isIn01(fractions.f0.x) && Geometry.isIn01(fractions.f0.y))) {\n if (fractions.f1) {\n fractions.f0 = fractions.f1; // overlap starts beyond a segment; downgrade to simple intersection\n fractions.f1 = undefined;\n } else\n fractions = undefined; // intersection/overlap is outside both segments\n }\n }\n return fractions;\n }\n /**\n * Split edges at intersections.\n * * This is a large operation.\n * @param graph\n */\n public static splitIntersectingEdges(graph: HalfEdgeGraph): GraphSplitData {\n const data = new GraphSplitData();\n const sweepHeap = this.buildVerticalSweepPriorityQueue(graph);\n let nodeA0, nodeB1;\n const smallFraction = 1.0e-8;\n const largeFraction = 1.0 - smallFraction;\n let i;\n let nodeB0;\n const distTol = Geometry.smallMetricDistance;\n while (undefined !== (nodeA0 = sweepHeap.priorityQueue.pop())) {\n data.numUpEdge++;\n const n0 = sweepHeap.activeEdges.length;\n sweepHeap.removeArrayMembersWithY1Below(nodeA0.y - distTol);\n data.numPopOut += n0 - sweepHeap.activeEdges.length;\n for (i = 0; i < sweepHeap.activeEdges.length; i++) {\n nodeB0 = sweepHeap.activeEdges[i];\n nodeB1 = nodeB0.faceSuccessor;\n if (Geometry.isSameCoordinateXY(nodeA0.x, nodeA0.y, nodeB0.x, nodeB0.y, distTol)) {\n data.numA0B0++;\n } else if (Geometry.isSameCoordinateXY(nodeB1.x, nodeB1.y, nodeA0.x, nodeA0.y, distTol)) {\n data.numA0B1++;\n } else {\n data.numIntersectionTest++;\n const fractions = this.computeIntersectionFractionsOnEdges(nodeA0, nodeB0, distTol);\n if (fractions) {\n const splitAndPush = (node: HalfEdge, fraction?: number): void => {\n if (fraction !== undefined && fraction > smallFraction && fraction < largeFraction) {\n const newNode = graph.splitEdgeAtFraction(node, fraction);\n sweepHeap.priorityQueue.push(newNode); // will be popped as a nodeA0 later\n data.numSplit++;\n }\n };\n splitAndPush(nodeA0, fractions.f0.x);\n splitAndPush(nodeA0, fractions.f1?.x);\n splitAndPush(nodeB0, fractions.f0.y);\n splitAndPush(nodeB0, fractions.f1?.y);\n // existing nodeA0 and its shortened edge remain for further intersections\n }\n }\n }\n sweepHeap.activeEdges.push(nodeA0);\n }\n return data;\n }\n\n /**\n * Returns a graph structure formed from the given LineSegment array\n *\n * * Find all intersections among segments, and split them if necessary\n * * Record endpoints of every segment in the form X, Y, Theta; This information is stored as a new node and sorted to match up\n * vertices.\n * * For vertices that match up, pinch the nodes to create vertex loops, which in closed objects, will also eventually form face\n * loops\n */\n public static formGraphFromSegments(lineSegments: LineSegment3d[]): HalfEdgeGraph {\n // Structure of an index of the array: { xyTheta: Point3d, node: Node }\n const graph = new HalfEdgeGraph();\n HalfEdgeGraphOps.segmentArrayToGraphEdges(lineSegments, graph, HalfEdgeMask.BOUNDARY_EDGE);\n this.splitIntersectingEdges(graph);\n this.clusterAndMergeXYTheta(graph);\n return graph;\n }\n\n /**\n * * Input is random linestrings, not necessarily loops\n * * Graph gets full splitEdges, regularize (optional), and triangulate.\n * @returns graph, or undefined if bad data.\n */\n public static formGraphFromChains(chains: MultiLineStringDataVariant, regularize: boolean = true, mask: HalfEdgeMask = HalfEdgeMask.PRIMARY_EDGE): HalfEdgeGraph | undefined {\n if (chains.length < 1)\n return undefined;\n const graph = new HalfEdgeGraph();\n const chainSeeds = Triangulator.directCreateChainsFromCoordinates(graph, chains);\n for (const seed of chainSeeds)\n seed.setMaskAroundFace(mask);\n\n this.splitIntersectingEdges(graph);\n this.clusterAndMergeXYTheta(graph);\n if (regularize) {\n const context = new RegularizationContext(graph);\n context.regularizeGraph(true, true);\n }\n return graph;\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Merging.js","sourceRoot":"","sources":["../../../src/topology/Merging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegularizeFace.js","sourceRoot":"","sources":["../../../src/topology/RegularizeFace.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Topology\n */\n\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\nimport { HalfEdgeGraphOps } from \"./Merging\";\n\n/**\n * * Context for regularizing single faces.\n * @internal\n */\nexport class RegularizationContext {\n // For debugging use ... \"almost always\" undefined.\n // If defined, it is called with each inserted node pair.\n // scale will be either plus or minus one.\n // when it is negative, the node coordinates (both x and y) have been negated.\n // The call is made after full insertion into vertex loop.\n public static announceEdge?: (graph: HalfEdgeGraph, nodeA: HalfEdge, nodeB: HalfEdge, scale: number) => void;\n public constructor(graph: HalfEdgeGraph) {\n this.graph = graph;\n this.upEdges = [];\n this.downEdges = [];\n this.bottomPeaks = [];\n this.topPeaks = [];\n this.localMin = [];\n this.localMax = [];\n }\n\n /**\n * These are public only for testing.\n */\n public graph: HalfEdgeGraph;\n /** array of edges directed upward. Turn can be left or right, but is not large enough to be a min or max */\n public upEdges: HalfEdge[];\n /** array of edges directed downward, Turn can be left or right, but is not large enough to be a min or max */\n public downEdges: HalfEdge[];\n /** Array of edges whose start is an upward peak (right turn, inbound up, outbound down) */\n public topPeaks: HalfEdge[];\n /** Array of edges whose start is an downward peak (right turn, inbound down, outbound up) */\n public bottomPeaks: HalfEdge[];\n\n /** Array of edges at local minima (left turn, inbound down, outbound up). Ensuing chain is up */\n public localMin: HalfEdge[];\n /** Array of edges at local maxima (left turn, inbound up, outbound down). Ensuing chain is down */\n public localMax: HalfEdge[];\n /**\n * Collect (and classify) all the edges around a single face.\n * * The various arrays are collected: upEdges, downEdges, topPeaks, bottomPeaks, upChains, downChains\n * @param faceSeed face to examine\n */\n public collectVerticalEventsAroundFace(faceSeed: HalfEdge) {\n let nodeA = faceSeed;\n let nodeB;\n let nodeC;\n let abUp;\n let bcUp;\n this.upEdges.length = 0;\n this.downEdges.length = 0;\n this.topPeaks.length = 0;\n this.bottomPeaks.length = 0;\n this.localMin.length = 0;\n this.localMax.length = 0;\n do {\n nodeB = nodeA.faceSuccessor;\n nodeC = nodeB.faceSuccessor;\n abUp = HalfEdgeGraphOps.compareNodesYXUp(nodeA, nodeB) < 0;\n bcUp = HalfEdgeGraphOps.compareNodesYXUp(nodeB, nodeC) < 0;\n if (abUp) {\n this.upEdges.push(nodeA);\n if (!bcUp) {\n if (HalfEdgeGraphOps.crossProductToTargets(nodeB, nodeA, nodeC) < 0)\n this.localMax.push(nodeB);\n else\n this.topPeaks.push(nodeB);\n }\n\n } else { // ab is DOWN\n this.downEdges.push(nodeA);\n if (bcUp) {\n if (HalfEdgeGraphOps.crossProductToTargets(nodeB, nodeA, nodeC) > 0)\n this.bottomPeaks.push(nodeB);\n else\n this.localMin.push(nodeB);\n }\n }\n nodeA = nodeB;\n } while (nodeA !== faceSeed);\n }\n\n /**\n * Collect (and classify) all the edges in an array.\n * * The various arrays are collected: upEdges, downEdges, topPeaks, bottomPeaks, upChains, downChains\n * @param candidateEdges array of edges.\n */\n public collectVerticalEventFromEdgesInAndArray(candidateEdges: HalfEdge[]) {\n let nodeA;\n let nodeB;\n let nodeC;\n let abUp;\n let bcUp;\n this.upEdges.length = 0;\n this.downEdges.length = 0;\n this.topPeaks.length = 0;\n this.bottomPeaks.length = 0;\n this.localMin.length = 0;\n this.localMax.length = 0;\n for (nodeA of candidateEdges) {\n nodeB = nodeA.faceSuccessor;\n nodeC = nodeB.faceSuccessor;\n abUp = HalfEdgeGraphOps.compareNodesYXUp(nodeA, nodeB) < 0;\n bcUp = HalfEdgeGraphOps.compareNodesYXUp(nodeB, nodeC) < 0;\n if (abUp) {\n this.upEdges.push(nodeA);\n if (!bcUp) {\n if (HalfEdgeGraphOps.crossProductToTargets(nodeB, nodeA, nodeC) < 0)\n this.localMax.push(nodeB);\n else\n this.topPeaks.push(nodeB);\n }\n\n } else { // ab is DOWN\n this.downEdges.push(nodeA);\n if (bcUp) {\n if (HalfEdgeGraphOps.crossProductToTargets(nodeB, nodeA, nodeC) > 0)\n this.bottomPeaks.push(nodeB);\n else\n this.localMin.push(nodeB);\n }\n }\n }\n }\n\n private swapArrays() {\n let save = this.downEdges; this.downEdges = this.upEdges; this.upEdges = save;\n save = this.localMax; this.localMax = this.localMin; this.localMin = save;\n save = this.topPeaks; this.topPeaks = this.bottomPeaks; this.bottomPeaks = save;\n }\n\n /**\n * Find the edge (among candidates) which is first struck by a \"rightward\" scan from node\n * * comparisonFunction determines scan sense\n * * HalfEdge.compareNodeYXTheta is an upward scan.\n * * HalfEdge.compareNodeYXThetaDownward is a downward scan.\n * @param node\n * @param candidates Array of nodes to search\n * @param nodeComparisonFunction function for lexical comparison.\n */\n private findTopVisibleEdge(node: HalfEdge, candidates: HalfEdge[],\n directionSign: number) {\n const y0 = node.y;\n const x0 = node.x;\n let dx;\n let distanceRight = Number.MAX_SAFE_INTEGER;\n let result: HalfEdge | undefined;\n for (const rightBase of candidates) {\n const rightTop = rightBase.faceSuccessor;\n if (rightBase === node || rightTop === node)\n continue;\n // for horizontal edge cases -- require edges ends to have strict sign change (no zeros!!)\n const cRight = HalfEdgeGraphOps.compareNodesYXUp(node, rightBase);\n const cTop = HalfEdgeGraphOps.compareNodesYXUp(node, rightTop);\n // GeometryCoreTestIO.consoleLog(node.id, rightBase.id, rightTop.id, cRight, cTop);\n if (cRight * cTop >= 0)\n continue;\n const fraction = HalfEdge.horizontalScanFraction01(rightBase, y0);\n if (fraction !== undefined) {\n dx = directionSign * (rightBase.fractionToX(fraction) - x0);\n if (dx > 0 && dx < distanceRight) {\n result = rightBase;\n distanceRight = dx;\n }\n }\n }\n return result;\n }\n /**\n *\n * @param downPeak a \"bottom\" node where the interior CCW loop has a local min\n * @param downEdgeStart (optional) node at the start (heading downwards!) of an edge that brackets downPeak on the left.\n * @param upEdgeStart (optional) node at the start (heading up!) of the edge that brackets downPeak on the right.\n */\n private highestUpPeakConnection(downPeak: HalfEdge, downEdgeStart: HalfEdge | undefined, upEdgeStart: HalfEdge | undefined): HalfEdge | undefined {\n let highestPeak;\n\n for (const upPeak of this.topPeaks) {\n const y0 = upPeak.y;\n const x0 = upPeak.x;\n // is upPeak higher than prior upPeak?\n if (highestPeak !== undefined && HalfEdgeGraphOps.compareNodesYXUp(upPeak, highestPeak) < 0)\n continue;\n // is upPeak BELOW downPeak, ABOVE both limit edges lower node, and between limit edge interiors.\n if (HalfEdgeGraphOps.compareNodesYXUp(upPeak, downPeak) < 0) {\n if (downEdgeStart) {\n const fraction = HalfEdge.horizontalScanFraction01(downEdgeStart, y0);\n if (fraction === undefined)\n continue;\n if (x0 <= downEdgeStart.fractionToX(fraction))\n continue;\n }\n if (upEdgeStart) {\n const fraction = HalfEdge.horizontalScanFraction01(upEdgeStart, y0);\n if (fraction === undefined)\n continue;\n if (upEdgeStart.fractionToX(fraction) <= x0)\n continue;\n }\n highestPeak = upPeak;\n }\n }\n return highestPeak;\n }\n\n private updateMaxNode(maxNode: HalfEdge | undefined, candidate: HalfEdge | undefined, compare: (a: HalfEdge, b: HalfEdge) => number): HalfEdge | undefined {\n if (!maxNode)\n return candidate;\n if (!candidate)\n return maxNode;\n // both are defined .. look for positive compare ...\n if (compare(maxNode, candidate) < 0)\n return candidate;\n return maxNode;\n }\n private negateXY() {\n for (const node of this.graph.allHalfEdges) {\n node.x *= -1;\n node.y *= -1;\n }\n }\n private downwardConnectionFromBottomPeak(node: HalfEdge): HalfEdge | undefined {\n let connectTo;\n const upFunction = (a: HalfEdge, b: HalfEdge) => HalfEdgeGraphOps.compareNodesYXUp(a, b);\n const upEdgeBase = this.findTopVisibleEdge(node, this.upEdges, 1.0)!;\n const downEdgeBase = this.findTopVisibleEdge(node, this.downEdges, -1.0)!;\n connectTo = this.updateMaxNode(connectTo, upEdgeBase, upFunction);\n if (downEdgeBase)\n connectTo = this.updateMaxNode(connectTo, downEdgeBase.faceSuccessor, upFunction);\n const upPeakConnection = this.highestUpPeakConnection(node, downEdgeBase, upEdgeBase);\n if (upPeakConnection !== undefined)\n connectTo = this.updateMaxNode(connectTo, upPeakConnection, upFunction);\n return connectTo;\n }\n /** Search around the vertex of nodeA for a nodeA1 such that nodeB is visible in the sector at nodeA1 */\n private findVisibleSector(nodeA: HalfEdge, nodeB: HalfEdge): HalfEdge | undefined {\n let nodeA1 = nodeA;\n do {\n if (HalfEdge.isNodeVisibleInSector(nodeB, nodeA1))\n return nodeA1;\n nodeA1 = nodeA1.vertexSuccessor;\n } while (nodeA1 !== nodeA);\n return undefined;\n }\n /**\n * Create an edge from (some node around the vertex of) nodeA to (some node around the vertex of) nodeB.\n * * looking around the vertex for alternate insertion corrects cusp insertion errors.\n * @param nodeA\n * @param nodeB\n */\n private joinNodes(nodeA: HalfEdge, nodeB: HalfEdge, direction: number): HalfEdge | undefined {\n const nodeC = this.graph.createEdgeXYZXYZ(nodeA.x, nodeA.y, nodeA.z, 0, nodeB.x, nodeB.y, nodeB.z, 0);\n const nodeA1 = this.findVisibleSector(nodeA, nodeB);\n const nodeB1 = this.findVisibleSector(nodeB, nodeA);\n if (nodeA1 !== undefined && nodeB1 !== undefined) {\n HalfEdge.pinch(nodeA1, nodeC);\n HalfEdge.pinch(nodeB1, nodeC.edgeMate);\n nodeC.setMaskAroundEdge(HalfEdgeMask.REGULARIZED_EDGE);\n if (RegularizationContext.announceEdge)\n RegularizationContext.announceEdge(this.graph, nodeC, nodeC.edgeMate, direction);\n return nodeC;\n }\n return undefined;\n }\n /**\n * Regularize a single face.\n * * Insert edge from any downward interior vertex to something lower\n * * Insert an edge from each upward interior vertex to something higher.\n * * The face is split into smaller faces\n * * Each final face has at most one \"min\" and one \"max\", and is easy to triangulate with a bottom to top sweep.\n * * Normal usage is to sweep in both directions, i.e. use the default (true,true) for the upSweep and downSweep parameters.\n * @param faceSeed any representative half edge on the face\n * @param upSweep true to do the upward sweep.\n * @param downSweep true to do the downward sweep.\n */\n private runRegularization(upSweep: boolean = true, downSweep: boolean = true) {\n if (upSweep) {\n this.bottomPeaks.sort((a, b) => HalfEdgeGraphOps.compareNodesYXUp(a, b));\n for (const bottomPeak of this.bottomPeaks) {\n // GeometryCoreTestIO.consoleLog(\"SEARCH\", bottomPeak.id, [bottomPeak.x, bottomPeak.y]);\n if (!HalfEdgeGraphOps.isDownPeak(bottomPeak))\n continue;\n const target = this.downwardConnectionFromBottomPeak(bottomPeak);\n if (target !== undefined) {\n // GeometryCoreTestIO.consoleLog(\"join\", bottomPeak.id, [bottomPeak.x, bottomPeak.y], target.id, [target.x, target.y]);\n this.joinNodes(bottomPeak, target, 1);\n }\n }\n }\n if (downSweep) {\n // flip the whole graph (ouch)\n this.negateXY();\n // swap the various p and down seeds ....\n this.swapArrays();\n this.bottomPeaks.sort((a, b) => HalfEdgeGraphOps.compareNodesYXUp(a, b));\n for (const bottomPeak of this.bottomPeaks) {\n if (!HalfEdgeGraphOps.isDownPeak(bottomPeak))\n continue;\n const target = this.downwardConnectionFromBottomPeak(bottomPeak);\n if (target !== undefined) {\n this.joinNodes(bottomPeak, target, -1);\n }\n }\n this.negateXY();\n this.swapArrays();\n }\n }\n\n /**\n * Regularize a single face.\n * * Insert edge from any downward interior vertex to something lower\n * * Insert an edge from each upward interior vertex to something higher.\n * * The face is split into smaller faces\n * * Each final face has at most one \"min\" and one \"max\", and is easy to triangulate with a bottom to top sweep.\n * * Normal usage is to sweep in both directions, i.e. use the default (true,true) for the upSweep and downSweep parameters.\n * @param faceSeed any representative half edge on the face\n * @param upSweep true to do the upward sweep.\n * @param downSweep true to do the downward sweep.\n */\n public regularizeFace(faceSeed: HalfEdge, upSweep: boolean = true, downSweep: boolean = true) {\n this.collectVerticalEventsAroundFace(faceSeed);\n this.runRegularization(upSweep, downSweep);\n }\n\n public regularizeGraph(upSweep: boolean = true, downSweep: boolean = true) {\n this.collectVerticalEventFromEdgesInAndArray(this.graph.allHalfEdges);\n this.runRegularization(upSweep, downSweep);\n }\n\n /** test if a single face is monotone; if so, return its (single) min */\n public static isMonotoneFace(seed: HalfEdge): HalfEdge | undefined {\n let numMin = 0;\n let numMax = 0;\n let nodeMin: HalfEdge | undefined;\n let nodeA = seed;\n do {\n const nodeB = nodeA.faceSuccessor;\n const nodeC = nodeB.faceSuccessor;\n const ab = HalfEdgeGraphOps.compareNodesYXUp(nodeA, nodeB);\n const bc = HalfEdgeGraphOps.compareNodesYXUp(nodeB, nodeC);\n if (ab * bc <= 0) {\n if (ab > 0) {\n numMin++;\n nodeMin = nodeB;\n }\n if (bc > 0) {\n numMax++;\n }\n }\n } while ((nodeA = nodeA.faceSuccessor) !== seed);\n return numMin === 1 && numMax === 1 ? nodeMin : undefined;\n }\n /** Return faces filtered by area and test function.\n * * find one arbitrary representative of each face\n * * offer the candidate to the mutate function.\n * * collect results\n * @param mappedSeeds when filter returns a HalfEdge, collect it here\n * @param unmappedSeeds when filter does not return a half edge, collect the candidate.\n */\n public static collectMappedFaceRepresentatives(\n graph: HalfEdgeGraph,\n positiveAreaOnly: boolean,\n mutate: (seed: HalfEdge) => HalfEdge | undefined,\n mappedEdges: HalfEdge[] | undefined,\n unMappedSeeds: HalfEdge[] | undefined) {\n if (mappedEdges)\n mappedEdges.length = 0;\n if (unMappedSeeds)\n unMappedSeeds.length = 0;\n const mask = HalfEdgeMask.VISITED;\n graph.clearMask(mask);\n for (const seed of graph.allHalfEdges) {\n if (!seed.getMask(mask)) {\n seed.setMaskAroundFace(mask);\n if (!positiveAreaOnly || seed.signedFaceArea() > 0) {\n const edge = mutate(seed);\n if (edge) {\n if (mappedEdges)\n mappedEdges.push(edge);\n } else {\n if (unMappedSeeds)\n unMappedSeeds.push(seed);\n }\n }\n }\n }\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RegularizeFace.js","sourceRoot":"","sources":["../../../src/topology/RegularizeFace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignedDataSummary.js","sourceRoot":"","sources":["../../../src/topology/SignedDataSummary.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAC5B,sCAAsC;IAC/B,WAAW,CAAS;IAC3B,qCAAqC;IAC9B,WAAW,CAAS;IAC3B,kCAAkC;IAC3B,WAAW,CAAS;IAC3B,qCAAqC;IAC9B,WAAW,CAAS;IAC3B,iCAAiC;IAC1B,OAAO,CAAS;IACvB,wDAAwD;IACjD,mBAAmB,CAAK;IAC/B,qDAAqD;IAC9C,mBAAmB,CAAK;IACxB,oBAAoB,CAAS;IAC7B,oBAAoB,CAAS;IACpC,wCAAwC;IACjC,iBAAiB,CAAO;IAC/B,gCAAgC;IACzB,aAAa,CAAO;IAC3B,oCAAoC;IAC7B,iBAAiB,CAAO;IAC/B,gDAAgD;IAChD,YAAmB,YAAqB;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACzD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;QAC5D,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,8CAA8C;IACvC,YAAY,CAAC,IAAO,EAAE,IAAY;QACvC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB;gBACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB;gBACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,aAAa;gBACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF"
|
|
1
|
+
{"version":3,"file":"SignedDataSummary.js","sourceRoot":"","sources":["../../../src/topology/SignedDataSummary.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAC5B,sCAAsC;IAC/B,WAAW,CAAS;IAC3B,qCAAqC;IAC9B,WAAW,CAAS;IAC3B,kCAAkC;IAC3B,WAAW,CAAS;IAC3B,qCAAqC;IAC9B,WAAW,CAAS;IAC3B,iCAAiC;IAC1B,OAAO,CAAS;IACvB,wDAAwD;IACjD,mBAAmB,CAAK;IAC/B,qDAAqD;IAC9C,mBAAmB,CAAK;IACxB,oBAAoB,CAAS;IAC7B,oBAAoB,CAAS;IACpC,wCAAwC;IACjC,iBAAiB,CAAO;IAC/B,gCAAgC;IACzB,aAAa,CAAO;IAC3B,oCAAoC;IAC7B,iBAAiB,CAAO;IAC/B,gDAAgD;IAChD,YAAmB,YAAqB;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACzD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;QAC5D,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,8CAA8C;IACvC,YAAY,CAAC,IAAO,EAAE,IAAY;QACvC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB;gBACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB;gBACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,aAAa;gBACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpaceTriangulation.js","sourceRoot":"","sources":["../../../src/topology/SpaceTriangulation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Topology\n */\n\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Geometry } from \"../Geometry\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\nimport {PolygonOps} from \"../geometry3d/PolygonOps\";\nimport {PolylineOps} from \"../geometry3d/PolylineOps\";\ntype AnnounceLoopAndTrianglesFunction = (loop: Point3d[], triangles: Point3d[][]) => void;\n\n/**\n * Class with static methods to triangulate various forms of possibly non-planar polygons.\n * @public\n */\nexport class SpacePolygonTriangulation {\n\n /**\n * * Return a number which is:\n * * 0 for collapsed (zero area) triangle\n * * positive for non-zero area\n * * larger is \"better\"\n * * Specifically, return (if well defined) the area divided by summed squares of edge lengths.\n * @param point0\n * @param point1\n * @param point2\n */\n public static spaceTriangleAspectRatio(point0: Point3d, point1: Point3d, point2: Point3d): number {\n const crossProduct = point0.crossProductToPoints (point1, point2);\n const area = 0.5 * crossProduct.magnitude ();\n const summedEdgeSquares = point0.distanceSquared (point1) + point1.distanceSquared (point2) + point2.distanceSquared (point0);\n return Geometry.safeDivideFraction (area, summedEdgeSquares, 0.0);\n }\n /**\n * * Treat a space quad as two triangles with interior diagonal from point0 to point2\n * * Return the smaller of the aspect ratios of the two triangles.\n * * The quad edges proceed in the order [point0, point1, point2, point3]\n * @param point0 first point of quad\n * @param point1 second point of quad (diagonally opposite of point3)\n * @param point2 third point (diagonally opposite point0)\n * @param point3 fourth point\n */\n public static spaceQuadDiagonalAspectRatio(point0: Point3d, point1: Point3d, point2: Point3d, point3: Point3d): number{\n const q012 = this.spaceTriangleAspectRatio (point0, point1, point2);\n const q023 = this.spaceTriangleAspectRatio (point0, point2, point3);\n return Math.max (q012, q023);\n }\n /** \"Triangulate\" by cutting of the ear with best aspect ratio. Reject if successive normals have negative dot product with PolygonOps.AreaNormal */\n public static triangulateGreedyEarCut(points: Point3d[], announceLoopAndTriangles: AnnounceLoopAndTrianglesFunction): boolean{\n const normalA = PolygonOps.areaNormal (points);\n const triangles: Point3d[][] = [];\n const myPoints = points.slice ();\n PolylineOps.removeClosurePoint (myPoints);\n // first pass deals with entire array.\n // each pass lops off one point.\n for (;myPoints.length > 2;){\n // Find the ear candidate whose cross product vector has largest dot product (large area, best alignment with overall).\n let bestRatio = -1.0;\n let bestRatioIndex0 = 0;\n let i0 = myPoints.length - 2;\n let i1 = myPoints.length - 1;\n let i2;\n for (i2 = 0; i2 < myPoints.length; i0 = i1, i1 = i2, i2++){\n const ratio = this.spaceTriangleAspectRatio (myPoints[i0], myPoints[i1], myPoints[i2]);\n const normalB = myPoints[i0].crossProductToPoints (myPoints[i1], myPoints[i2]);\n if (normalB.dotProduct (normalA) > 0 && ratio > bestRatio){\n bestRatio = ratio;\n bestRatioIndex0 = i0;\n }\n }\n if (bestRatio <= 0.0)\n return false;\n // add the ear to the result\n i0 = bestRatioIndex0;\n i1 = (i0 + 1) % myPoints.length;\n i2 = (i1 + 1) % myPoints.length;\n const t = [];\n t.push (myPoints[i0], myPoints[i1], myPoints[i2]);\n // remove the middle point\n myPoints.splice (i1, 1);\n triangles.push(t);\n }\n announceLoopAndTriangles (points, triangles);\n return true;\n }\n\n private static triangulateSimplestSpaceLoopGo(points: Point3d[], announceLoopAndTriangles: AnnounceLoopAndTrianglesFunction,\n maxPerimeter: number | undefined): boolean{\n const n = Point3dArray.countNonDuplicates (points);\n if (maxPerimeter !== undefined && Point3dArray.sumEdgeLengths (points, true, n) > maxPerimeter)\n return false;\n if (n < 3)\n return false;\n if (n === 3){\n if (this.spaceTriangleAspectRatio (points[0], points[1], points[2]) === 0)\n return false;\n // already a triangle . . .\n announceLoopAndTriangles (points, [points.slice ()]);\n return true;\n }\n if (n === 4){\n const d02 = this.spaceQuadDiagonalAspectRatio (points[0], points[1], points[2], points[3]);\n const d13 = this.spaceQuadDiagonalAspectRatio (points[1], points[2], points[3], points[0]);\n if (d02 === 0.0 && d13 === 0.0)\n return false;\n // announce the two triangles with better aspect ratios ....\n if (d02 > d13){\n announceLoopAndTriangles (points, [[points[0], points[1], points[2]], [points[2], points[3], points[0]]]);\n return true;\n } else {\n announceLoopAndTriangles (points, [[points[0], points[1], points[3]], [points[3], points[1], points[2]]]);\n return true;\n }\n }\n return this.triangulateGreedyEarCut (points, announceLoopAndTriangles);\n }\n /**\n * * Emit triangles for a (possibly non-planar) loop for various simple cases:\n * * only 3 points: just emit that triangle.\n * * only 4 points: split across a diagonal, choosing the one with better aspect ratios of its two triangles.\n * * BUT\n * * do not complete the triangulation if perimeter is larger than maxPerimeter (i.e. only consider small areas)\n * * Hence it is expected that the caller will use this as the first attempt, possibly followed by calls to other more adventurous methods.\n */\n public static triangulateSimplestSpaceLoop(loop: Point3d [] | LineString3d,\n announceLoopAndTriangles: AnnounceLoopAndTrianglesFunction,\n maxPerimeter?: number): boolean{\n if (loop instanceof LineString3d)\n return this.triangulateSimplestSpaceLoopGo (loop.points, announceLoopAndTriangles, maxPerimeter);\n // (array case by exhaustion)\n return this.triangulateSimplestSpaceLoopGo (loop, announceLoopAndTriangles, maxPerimeter);\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SpaceTriangulation.js","sourceRoot":"","sources":["../../../src/topology/SpaceTriangulation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Triangulation.js","sourceRoot":"","sources":["../../../src/topology/Triangulation.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAqD,MAAM,oCAAoC,CAAC;AAC7H,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAExG;;;GAGG;AACH,MAAM,OAAO,YAAY;IAEvB;;;;OAIG;IACK,MAAM,CAAC,wBAAwB,CAAC,CAAW,EAAE,CAAW,EAAE,CAAW,EAAE,CAAW,EAAE,CAAW,EAAE,CAAW;QAClH,+BAA+B;QAC/B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAErB,oEAAoE;QACpE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IACD;;;;;;;;;;OAUG;IACI,MAAM,CAAC,8CAA8C,CAAC,KAAe;QAC1E,8EAA8E;QAC9E,oEAAoE;QACpE,kGAAkG;QAClG,gGAAgG;QAChG,4GAA4G;QAC5G,8GAA8G;QAC9G,4GAA4G;QAC5G,sCAAsC;QACtC,kFAAkF;QAClF,iHAAiH;QACjH,6HAA6H;QAC7H,gDAAgD;QAChD,kFAAkF;QAClF,oDAAoD;QACpD,gDAAgD;QAChD,mBAAmB;QACnB,kHAAkH;QAClH,8GAA8G;QAC9G,0DAA0D;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;QACpC,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK;YAChC,OAAO,KAAK,CAAC;QACf,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;QACpC,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK;YAChC,OAAO,KAAK,CAAC;QACf,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9B,IAAI,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,gFAAgF;QAChF,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EACV,EAAE,EAAE,EAAE,EAAE,EAAE,EACV,EAAE,EAAE,EAAE,EAAE,EAAE,CACX,CAAC;QACF,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,KAAK,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;cAClF,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,aAAa,CAAC,KAAoB;QAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAY;YACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,sBAAsB,CAAC,KAAoB,EAAE,OAAsB;QAC/E,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC;QAEpG,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;QACxC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,CAAC;QACT,OAAO,SAAS,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAE3D,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,mBAAmB;gBACnD,SAAS;YAEX,IAAI,YAAY,CAAC,8CAA8C,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,qBAAqB;gBACrB,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBACjK,8BAA8B;gBAC9B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,KAAK,EAAE,CAAC;YACV,CAAC;YACD,IAAI,OAAO,GAAG,KAAK,GAAG,OAAO;gBAC3B,MAAM;QACV,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,iCAAiC,CAC7C,MAAiB,EACjB,QAAgC,sBAAsB,CAAC,eAAe,EACtE,iBAAyB,QAAQ,CAAC,mBAAmB;QAErD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,6BAA6B,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,6BAA6B,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClF,IAAI,SAAS,KAAK,KAAK;YACrB,OAAO,SAAS,CAAC;QACnB,oDAAoD;QACpD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,SAAS,EAAE,CAAC,CAAC,wDAAwD;QACvE,CAAC;QACD,IAAI,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,EAAE,6EAA6E;YACjH,OAAO,YAAY,CAAC,qCAAqC,CAAC,IAAI,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,gCAAgC,CAAC,KAA8B;QAC3E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC;QACpE,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC;QACvB,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;QACtB,+DAA+D;QAC/D,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,GAAG,YAAY,CAAC,mCAAmC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAE,4BAA4B;gBACxD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;gBAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACtC,SAAS,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;oBAC9B,OAAO,GAAG,IAAI,CAAC;oBACf,YAAY,GAAG,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,gCAAgC;QAChC,MAAM,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1D,SAAS,CAAC,GAAG,EAAE,CAAC;QAChB,WAAW,CAAC,eAAe,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrE,6EAA6E;QAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC9C,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,YAAY,GAAG,YAAY,CAAC,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAC5F,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,YAAY,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC;gBACzD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,+BAA+B,CAAC,KAAoB;QAChE,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACnC,IAAI,IAAI,GAAG,GAAG;oBACZ,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC;wBAClD,OAAO,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,KAAK,CAAC,CAAC;IACvB,CAAC;IAEO,MAAM,CAAC,cAAc,CAAa;IAE1C;;;;;;;OAOG;IACI,MAAM,CAAC,2BAA2B,CAAC,KAAoB,EAAE,cAAwB;QACtF,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC;QAC3E,IAAI,YAAmC,CAAC;QACxC,IAAI,KAA4B,CAAC;QACjC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;oBACrC,SAAS;gBACX,IAAI,cAAc,EAAE,CAAC;oBACnB,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;oBAC/B,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACjC,YAAY,GAAG,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC5G,YAAY,EAAE,kCAAkC,CAAC,KAAK,CAAC,CAAC;gBAC1D,CAAC;gBACD,4IAA4I;gBAC5I,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC;oBAClE,OAAO,EAAE,CAAC;gBACZ,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;oBAC1B,KAAK,IAAI,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ;wBACtE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAQ,CAAC,CAAC;oBAClD,YAAY,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,OAAO,KAAK,CAAC,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,qCAAqC,CAAC,IAA2B;QAC7E,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,YAAY,CAAC,6BAA6B,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzF,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;YACzC,OAAO,SAAS,CAAC;QACnB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC;YAC1D,OAAO,SAAS,CAAC;QACnB,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,iBAAiB,CAAC,KAAoB,EAAE,QAA8B,EAAE,EAAoB;QACzG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACV,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,EAAS,CAAC;YACpB,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,QAAQ;YACX,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,YAAY,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,OAAO,QAAQ,CAAC;QAClB,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,oEAAoE;IAC5D,MAAM,CAAC,kBAAkB,CAAC,IAA2B;QAC3D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACpB,IAAI,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,IAAI,YAAY,oBAAoB,EAAE,CAAC;gBACzC,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;gBACvC,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;gBACvC,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3C,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACrD,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpB,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACf,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACf,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnB,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;YACD,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC;gBAC9E,EAAE,CAAC,CAAC;;gBAEJ,MAAM;QACV,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,mCAAmC,CAAC,KAAoB,EAAE,IAA2B;QACjG,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAE,gDAAgD;QAC1F,IAAI,QAA8B,CAAC;QACnC,IAAI,IAAI,YAAY,oBAAoB,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,6BAA6B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC3C,QAAQ,GAAG,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACxB,QAAQ,GAAG,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,iCAAiC,CAAC,KAAoB,EAAE,IAAgC,EAAE,KAAa,CAAC;QACpH,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtD,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClD,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,wBAAwB,CAAC,MAAqB,EAAE,IAA0B,EAAE,sBAA+B,EACxH,gBAA8B,EAC9B,gBAA8B;QAC9B,gCAAgC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,sFAAsF;YACjH,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC3B,IAAI,gBAAgB,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;gBAChD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;gBACzC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,aAAa,GAAG,IAAI,CAAC;YACzB,IAAI,sBAAsB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBACtC,aAAa,GAAG,IAAI,CAAC;YACvB,MAAM,SAAS,GAAG,aAAa,CAAC,eAAe,CAAC;YAEhD,IAAI,gBAAgB,KAAK,YAAY,CAAC,SAAS;gBAC7C,SAAS,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;YAChD,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,6BAA6B,CACzC,KAAoB,EAAE,IAA2B,EAAE,sBAA+B,EAAE,YAAqB;QAEzG,MAAM,IAAI,GAAG,YAAY,CAAC,mCAAmC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3E,OAAO,YAAY,CAAC,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAC9E,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,YAAY,EACtD,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,qCAAqC,CAAC,KAAoB,EAAE,IAA2B,EAAE,sBAA+B,EACpI,gBAA8B,EAC9B,gBAA8B;QAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,mCAAmC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3E,OAAO,YAAY,CAAC,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IACxH,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,kBAAkB,CAAC,KAAoB,EAAE,GAAa;QACnE,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAClC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,EAC1F,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;QAE5B,oGAAoG;QACpG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACxC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC3C,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACxD,CAAC;IACO,MAAM,CAAC,kBAAkB,CAAC,CAAW;QAC3C,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,OAAO,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,cAAc,CAAC,GAAa;QACzC,oEAAoE;QACpE,wCAAwC;QACxC,wCAAwC;QACxC,iDAAiD;QACjD,oCAAoC;QACpC,4DAA4D;QAC5D,qEAAqE;QACrE,uGAAuG;QACvG,2EAA2E;QAC3E,EAAE;QACF,gEAAgE;QAChE,gEAAgE;QAChE,gEAAgE;QAChE,gEAAgE;QAChE,gEAAgE;QAChE,gEAAgE;QAChE,gEAAgE;QAChE,6DAA6D;QAC7D,0DAA0D;QAC1D,wDAAwD;QACxD,sDAAsD;QACtD,mDAAmD;QACnD,IAAI,EAAE,GAAG,GAAG,CAAC;QACb,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;QAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;QACrB,OAAO,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,YAAY,CAAC,8CAA8C,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,IAAI;gBACP,MAAM;YACR,qBAAqB;YACrB,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;YAC5B,YAAY,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;YAC1H,EAAE,GAAG,EAAE,CAAC;YACR,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;YACxB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,qBAAqB,CAAC,KAAoB,EAAE,GAAc,EAAE,UAAmB,KAAK;QACjG,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC;QACT,IAAI,KAAK,CAAC;QACV,IAAI,IAAI,CAAC;QACT,IAAI,YAAY,GAAG,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC9C,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,GAAG,CAAC,mBAAmB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACxD,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACtD,IAAI,GAAG,GAAG,EAAE,eAAe,CAAC;YAC5B,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC;YACzB,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;YAC3B,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;gBAC/B,OAAO,IAAI,CAAC;YACd,IAAI,KAAK,CAAC,aAAa,KAAK,GAAG,EAAE,CAAC;gBAChC,wFAAwF;gBACxF,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,yGAAyG;YACzG,4GAA4G;YAC5G,2GAA2G;YAC3G,IAAI,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;gBAClC,MAAM,yBAAyB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC9E,IAAI,yBAAyB,EAAE,CAAC;oBAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC;oBAC/C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,yCAAyC;gBACjG,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,iDAAiD;oBAC/E,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;gBACxD,CAAC;gBACD,GAAG,GAAG,KAAK,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;gBAClC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAClC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,YAAY,EAAE,CAAC;gBACf,YAAY,GAAG,CAAC,CAAC;gBAEjB,4DAA4D;gBAE5D,uDAAuD;gBACvD,IAAI,GAAG,CAAC,aAAa,CAAC,aAAa,KAAK,GAAG,CAAC,eAAe,EAAE,CAAC;oBAC5D,YAAY,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC5C,IAAI,CAAC,OAAO;wBACV,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;oBACzC,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC;oBAC/C,kDAAkD;gBACpD,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;oBACtD,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC3B,CAAC;gBACD,SAAS;YACX,CAAC;YACD,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC,CAAE,yCAAyC;IACzD,CAAC;IACD,iBAAiB;IACT,MAAM,CAAC,WAAW,CAA4B;IACtD,gBAAgB;IACR,MAAM,CAAC,wBAAwB,GAAG,KAAK,CAAC;IAEhD;;;;mBAIe;IACR,MAAM,CAAC,eAAe;QAC3B,MAAM,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC;QACnC,YAAY,CAAC,WAAW,GAAG,SAAS,CAAC;QACrC,YAAY,CAAC,wBAAwB,GAAG,KAAK,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;mBAIe;IACR,MAAM,CAAC,aAAa,CAAC,KAAgC,IAAI,IAAI,YAAY,CAAC,wBAAwB;QAAE,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9I;;;;;;;;;mBASe;IACR,MAAM,CAAC,+BAA+B,CAAC,KAAc;QAC1D,YAAY,CAAC,wBAAwB,GAAG,KAAK,CAAC;QAC9C,YAAY,CAAC,WAAW,GAAG,SAAS,CAAC;IACvC,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,oBAAoB,CAAC,CAAW,EAAE,CAAW;QAC1D,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,yCAAyC;IACjC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAC5C,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,CAAC,OAAO,GAAmC;QACvD,4BAA4B,CAAC,aAAa,EAAE;QAC5C,4BAA4B,CAAC,aAAa,EAAE;QAC5C,4BAA4B,CAAC,aAAa,EAAE;KAC7C,CAAC;IACF,yEAAyE;IACjE,MAAM,CAAC,KAAK,CAAC,GAAa;QAChC,MAAM,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC;QAC9B,MAAM,CAAC,GAAG,GAAG,CAAC;QACd,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC;QAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,IAAI,IAAI,CAAC;YACX,OAAO,KAAK,CAAC,CAAC,0BAA0B;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,4BAA4B,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;eACrE,CAAC,4BAA4B,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;eACtE,CAAC,4BAA4B,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACzE,OAAO,KAAK,CAAC;QAEf,wFAAwF;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC7D,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,QAAQ,GAAG,MAAM,CAAC;QACxB,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC;QAC5B,MAAM,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC;QAC/B,MAAM,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC;QAChC,MAAM,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;YAC1B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAClD,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxC,uCAAuC;gBACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;gBACnD,aAAa,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;gBAClF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;oBACzB,IAAI,YAAY,CAAC,GAAG,GAAG,QAAQ,EAAE,CAAC;wBAChC,gFAAgF;wBAChF,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;+BAC/B,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;+BAChC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;4BACnC,OAAO,KAAK,CAAC;oBACjB,CAAC;yBAAM,IAAI,YAAY,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;wBACxC,gFAAgF;wBAChF,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;+BAC/B,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;+BAChC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;4BACnC,OAAO,KAAK,CAAC;oBACjB,CAAC;yBAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBAC9E,yEAAyE;oBAC3E,CAAC;yBAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBAC9E,yEAAyE;oBAC3E,CAAC;yBAAM,CAAC;wBACN,OAAO,KAAK,CAAC,CAAC,4DAA4D;oBAC5E,CAAC;gBACH,CAAC;YACH,CAAC;YACD,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;OAEG;IACK,MAAM,CAAC,0BAA0B,CAAC,KAAoB,EAAE,SAAmB,EAAE,oBAAgC;QAEnH,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,mCAAmC;QACnC,KAAK,MAAM,SAAS,IAAI,oBAAoB,EAAE,CAAC;YAC7C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC;gBAC1D,OAAO,EAAE,CAAC;QACd,CAAC;QAED,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IACD,mEAAmE;IAC3D,MAAM,CAAC,QAAQ,CAAC,CAAW,EAAE,CAAW;QAC9C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,2FAA2F;IACnF,MAAM,CAAC,aAAa,CAAC,KAAoB,EAAE,IAAc,EAAE,SAAmB;QACpF,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC;QACvE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qBAAqB;IACrB;;;OAGG;IACK,MAAM,CAAC,cAAc,CAAC,IAAc,EAAE,SAAoB;QAChE,IAAI,CAAC,GAAG,SAAS,CAAC;QAElB,IAAI,CAAC,CAAC;YACJ,OAAO,SAAS,CAAC;QAEnB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAClB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC;QACnB,IAAI,CAAC,CAAC;QAEN,kFAAkF;QAClF,sEAAsE;QACtE,GAAG,CAAC;YACF,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;oBACtB,EAAE,GAAG,CAAC,CAAC;oBACP,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;wBACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;4BAAE,OAAO,CAAC,CAAC;wBACzB,IAAI,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;4BAAE,OAAO,CAAC,CAAC,aAAa,CAAC;oBACvD,CAAC;oBACD,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;gBACpD,CAAC;YACH,CAAC;YACD,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QACtB,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;QAE1B,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAEzB,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,kDAAkD;QAE3F,sIAAsI;QACtI,gEAAgE;QAChE,mFAAmF;QAEnF,MAAM,IAAI,GAAG,CAAC,CAAC;QACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,IAAI,GAAG,CAAC;QAER,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QAEpB,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtC,YAAY,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE/F,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;gBAEpD,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC3F,CAAC,GAAG,CAAC,CAAC;oBACN,MAAM,GAAG,GAAG,CAAC;gBACf,CAAC;YACH,CAAC;YAED,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QACtB,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAED,2CAA2C;IACnC,MAAM,CAAC,WAAW,CAAC,KAAe;QACxC,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,GAAG,CAAC;YACF,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAAE,QAAQ,GAAG,CAAC,CAAC;YACnC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QACtB,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;QAEtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,eAAe,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QAC3H,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;YACvD,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;YAClD,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,6DAA6D;IACrD,MAAM,CAAC,cAAc,CAAC,CAAW,EAAE,CAAW,EAAE,CAAW,EAAE,CAAW;QAC9E,OAAO,YAAY,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;eAC3D,YAAY,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;eACzD,YAAY,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IACD;;;MAGE;IACM,MAAM,CAAC,oBAAoB,CAAC,CAAW,EAAE,CAAW,EAAE,CAAW;QACvE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;MACE;IACM,MAAM,CAAC,+BAA+B,CAAC,CAAW,EAAE,CAAW,EAAE,CAAW,EAAE,SAAiB,OAAO;QAC5G,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,IAAI,IAAI,GAAG,GAAG;YACZ,OAAO,IAAI,CAAC;QACd,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oCAAoC;IAC5B,MAAM,CAAC,oBAAoB,CAAC,EAAS,EAAE,CAAS,EAAE,CAAS;QACjE,OAAO,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,iDAAiD;IACzC,MAAM,CAAC,aAAa,CAAC,CAAW,EAAE,CAAW;QACnD,OAAO,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YACnF,YAAY,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAClI,YAAY,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACnI,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,SAAS,CAAC,KAAoB,EAAE,CAAW,EAAE,CAAW;QACrE,IAAI,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;YAC5B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,6BAA6B,CAAC,KAAoB,EAAE,KAAe;QAC/E,IAAI,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;QACjC,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;QAChC,uDAAuD;QACvD,IAAI,kBAAkB,CAAC;QACvB,OAAO,IAAI,KAAK,KAAK;eAChB,KAAK,KAAK,KAAK;eACf,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAClC,uDAAuD;YACvD,IAAI,QAAQ,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACtB,OAAO,KAAK,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACvB,OAAO,KAAK,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB;qCACqB;gBAErB;mDACmC;gBACnC,IAAI,EAAE,GAAG,IAAI,CAAC;gBACd,IAAI,EAAE,GAAG,KAAK,CAAC;gBACf,IAAI,EAAE,GAAG,KAAK,CAAC;gBACf;;;;mBAIG;gBACH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtC,OAAO,EAAE,KAAK,KAAK;2BACd,EAAE,KAAK,EAAE;2BACT,EAAE,KAAK,EAAE;2BACT,QAAQ,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvD,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC3D,IAAI,kBAAkB,KAAK,SAAS;4BAClC,OAAO,KAAK,CAAC;wBACf,EAAE,GAAG,kBAAkB,CAAC;wBACxB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;wBACtB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;oBACxB,CAAC;oBACD,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;gBAC1B,CAAC;gBACD;;mDAEmC;gBACnC,IAAI,GAAG,EAAE,CAAC;gBACV,EAAE,GAAG,KAAK,CAAC;gBACX,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;gBACxB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;gBACxB,OAAO,EAAE,CAAC,aAAa,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAC9C,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,IAAI,kBAAkB,KAAK,SAAS;wBAClC,OAAO,KAAK,CAAC;oBACf,EAAE,GAAG,kBAAkB,CAAC;oBACxB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;gBAC1B,CAAC;gBACD;;gCAEgB;gBAChB,IAAI,EAAE,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;oBAC5B,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,IAAI,kBAAkB,KAAK,SAAS;wBAClC,OAAO,KAAK,CAAC;oBACf,EAAE,GAAG,kBAAkB,CAAC;gBAC1B,CAAC;gBACD,KAAK,GAAG,EAAE,CAAC;gBACX,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;gBAC5B,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;YAE/B,CAAC;iBAAM,CAAC;gBACN;oCACoB;gBAEpB;mDACmC;gBACnC,IAAI,EAAE,GAAG,IAAI,CAAC;gBACd,IAAI,EAAE,GAAG,KAAK,CAAC;gBACf,IAAI,EAAE,GAAG,KAAK,CAAC;gBACf;;;;;;mBAMG;gBACH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,OAAO,EAAE,KAAK,IAAI;2BACb,EAAE,KAAK,EAAE;2BACT,EAAE,KAAK,EAAE;2BACT,QAAQ,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvD,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC3D,IAAI,kBAAkB,KAAK,SAAS;4BAClC,OAAO,KAAK,CAAC;wBAEf,EAAE,GAAG,kBAAkB,CAAC,eAAe,CAAC;wBACxC,EAAE,GAAG,kBAAkB,CAAC;oBAC1B,CAAC;oBACD,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;gBACxB,CAAC;gBACD;;mDAEmC;gBACnC,KAAK,GAAG,EAAE,CAAC;gBACX,EAAE,GAAG,IAAI,CAAC;gBACV,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;gBACtB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;gBACtB,OAAO,EAAE,CAAC,aAAa,KAAK,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;oBAC/C,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,IAAI,kBAAkB,KAAK,SAAS;wBAClC,OAAO,KAAK,CAAC;oBACf,EAAE,GAAG,kBAAkB,CAAC;oBACxB,wJAAwJ;oBACxJ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;gBACxB,CAAC;gBACD;;gCAEgB;gBAChB,IAAI,EAAE,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtD,IAAI,OAAO,KAAK,SAAS;wBACvB,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,KAAK,GAAG,KAAK,CAAC;gBACd,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;gBAC5B,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AAIH;;;GAGG;AACH,MAAM,oBAAqB,SAAQ,4BAA4B;IAC7D,oGAAoG;IAC5F,MAAM,CAAc;IACpB,SAAS,CAAuB;IAChC,MAAM,CAAuB;IAC7B,MAAM,CAAuB;IAC7B,MAAM,CAAgB;IACtB,GAAG,CAAM;IACjB,YAAmB,KAAoB,EAAE,EAAO;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAChB,CAAC;IACe,UAAU,CAAC,SAAqC,EAAE,MAAe;QAC/E,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IACe,YAAY,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QACjG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QAC1C,CAAC;IACH,CAAC;IACe,QAAQ,CAAC,SAAqC,EAAE,MAAe;QAC7E,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAC3B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IACM,UAAU;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAC3B,OAAO,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Topology\n */\n\nimport { ClipUtilities } from \"../clipping/ClipUtils\";\nimport { Geometry } from \"../Geometry\";\nimport { FrameBuilder } from \"../geometry3d/FrameBuilder\";\nimport { IndexedXYZCollection, LineStringDataVariant, MultiLineStringDataVariant } from \"../geometry3d/IndexedXYZCollection\";\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\nimport { PointStreamXYZXYZHandlerBase, VariantPointDataStream } from \"../geometry3d/PointStreaming\";\nimport { Range1d, Range2d } from \"../geometry3d/Range\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XAndY } from \"../geometry3d/XYZProps\";\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\nimport { MarkedEdgeSet } from \"./HalfEdgeMarkSet\";\nimport { InsertAndRetriangulateContext, InsertedVertexZOptions } from \"./InsertAndRetriangulateContext\";\n\n/**\n * Static methods for triangulating polygons and points.\n * * @internal\n */\nexport class Triangulator {\n\n /** Given the six nodes that make up two bordering triangles, \"pinch\" and relocate the nodes to flip them\n * * The shared edge mates are c and e.\n * * (abc) are a triangle in CCW order\n * * (dfe) are a triangle in CCW order. (Note: dfe instead of def!!)\n */\n private static flipEdgeBetweenTriangles(a: HalfEdge, b: HalfEdge, c: HalfEdge, d: HalfEdge, e: HalfEdge, f: HalfEdge) {\n // Reassign all of the pointers\n HalfEdge.pinch(a, e);\n HalfEdge.pinch(c, d);\n HalfEdge.pinch(f, c);\n HalfEdge.pinch(e, b);\n\n // Move alpha and beta into the xy coordinates of their predecessors\n e.x = b.x;\n e.y = b.y;\n e.z = b.z;\n e.i = b.i;\n c.i = f.i;\n c.x = f.x;\n c.y = f.y;\n c.z = f.z;\n }\n /**\n * Given a node in triangle A on the edge shared by triangle B, test whether the far vertex of B lies inside the circumcircle of A.\n * @param nodeA node on the shared edge between triangles A and B.\n * @return The following are equivalent:\n * * return true\n * * the computed determinant is strongly positive (greater than epsilon)\n * * the far vertex of B lies strictly inside the circumcircle of A\n * * the quad AB fails the Delaunay condition\n * * the quad CD obtained from AB by switching to the other diagonal satisfies the Delaunay condition\n * * to satisfy Delaunay, the caller should flip the diagonal of AB (obtaining CD)\n */\n public static computeCircumcircleDeterminantIsStrongPositive(nodeA: HalfEdge): boolean {\n // Confusingly enough, what we are actually doing here is testing the quad CD.\n // * CD satisfies the Delaunay condition if and only if AB does not.\n // * So let AB be convex, with CCW triangles (A,A1,A2) and (B,B1,B2) where A and B are edge mates.\n // Then CD consists of two CCW triangles that share an edge between the vertices at A2 and B2.\n // We only have to test one of the two triangles of CD---whether its circumcircle contains the far vertex.\n // By a beautiful theorem (Corollary 5.7.1 in O'Rourke, Computational Geometry in C, 2nd ed.), the following\n // are equivalent based on the radial symmetry and convexity of the paraboloid P defined by z = x*x + y*y,\n // and the CCW triangle orientation:\n // * A is outside the circumcircle of the CCW triangle with vertices (A1,A2,B2).\n // * The volume of the tetrahedron (determinant) formed by the projections of the quad points to P is negative.\n // * The volume of the parallelepiped (triple product) formed by vectors u=A1-A, v=A2-A, w=B2-A projected to P is negative.\n // * The triple product u.(v x w) is negative.\n // * The triple product w.(v x u) is positive <-- this is what we compute below.\n // * The quad CD satisfies the Delaunay condition.\n // * The quad AB fails the Delaunay condition.\n // * Return true.\n // * When AB is non-convex, CD is convex and consists of a large CCW triangle that contains the other CW triangle.\n // This containment causes the triple product to be positive, which implies CD fails (and thus AB satisfies)\n // the Delaunay condition, so this method returns false.\n const nodeA1 = nodeA.faceSuccessor;\n const nodeA2 = nodeA1.faceSuccessor;\n if (nodeA2.faceSuccessor !== nodeA)\n return false;\n const nodeB = nodeA.edgeMate;\n const nodeB1 = nodeB.faceSuccessor;\n const nodeB2 = nodeB1.faceSuccessor;\n if (nodeB2.faceSuccessor !== nodeB)\n return false;\n const ux = nodeA1.x - nodeA.x;\n const uy = nodeA1.y - nodeA.y;\n const vx = nodeA2.x - nodeA.x;\n const vy = nodeA2.y - nodeA.y;\n if (Geometry.crossProductXYXY(ux, uy, vx, vy) < 0)\n return false;\n // we assume identical coordinates in pairs (nodeA, nodeB1) and (nodeA1, nodeB)\n const wx = nodeB2.x - nodeA.x;\n const wy = nodeB2.y - nodeA.y;\n const tx = wx * wx + wy * wy;\n const ty = vx * vx + vy * vy;\n const tz = ux * ux + uy * uy;\n const q = Geometry.tripleProduct(\n wx, wy, tx,\n vx, vy, ty,\n ux, uy, tz,\n );\n if (q < 0)\n return false;\n const denom = Math.abs(wx * vy * tz) + Math.abs(wy * ty * ux) + Math.abs(tx * vx * uy)\n + Math.abs(wx * ty * uy) + Math.abs(wy * vx * tz) + Math.abs(tx * vy * ux);\n return q > 1.0e-12 * denom;\n }\n\n /**\n * * Visit each node of the graph array\n * * If a flip would be possible, test the results of flipping using circumcircle condition\n * * If revealed to be an improvement, conduct the flip, mark involved nodes as unvisited, and repeat until all nodes are visited\n */\n public static flipTriangles(graph: HalfEdgeGraph): number {\n const edgeSet = MarkedEdgeSet.create(graph)!;\n for (const node of graph.allHalfEdges)\n edgeSet.addToSet(node);\n const numFlip = this.flipTrianglesInEdgeSet(graph, edgeSet);\n edgeSet.teardown();\n return numFlip;\n }\n\n /**\n * * Visit each node of the graph array\n * * If a flip would be possible, test the results of flipping using circumcircle condition\n * * If revealed to be an improvement, conduct the flip, mark involved nodes as unvisited, and repeat until all nodes are visited\n */\n public static flipTrianglesInEdgeSet(graph: HalfEdgeGraph, edgeSet: MarkedEdgeSet): number {\n const barrierMasks = HalfEdgeMask.EXTERIOR | HalfEdgeMask.PRIMARY_EDGE | HalfEdgeMask.BOUNDARY_EDGE;\n\n const nodeArray = graph.allHalfEdges;\n const maxTest = 10.0 * nodeArray.length;\n let numFlip = 0;\n let numOK = 0;\n let node;\n while (undefined !== (node = edgeSet.chooseAndRemoveAny())) {\n\n if (node.isMaskSet(barrierMasks)) // Flip not allowed\n continue;\n\n if (Triangulator.computeCircumcircleDeterminantIsStrongPositive(node)) {\n // Flip the triangles\n Triangulator.flipEdgeBetweenTriangles(node.edgeMate.faceSuccessor, node.edgeMate.facePredecessor, node.edgeMate, node.faceSuccessor, node, node.facePredecessor);\n // keep looking at the 2 faces\n edgeSet.addAroundFace(node);\n edgeSet.addAroundFace(node.edgeMate);\n numFlip++;\n } else {\n numOK++;\n }\n if (numFlip + numOK > maxTest)\n break;\n }\n return numFlip;\n }\n\n /**\n * Create a graph from an xy-triangulation of the given points.\n * * The outer boundary of the graph is the xy-convex hull of the points; it is marked `HalfEdgeMask.EXTERIOR`.\n * @param points the points to triangulate\n * @param zRule optional rule for updating the z-coordinate of an existing vertex when an xy-duplicate point is\n * inserted into the graph. Default is `InsertedVertexZOptions.ReplaceIfLarger`.\n * @param pointTolerance optional xy-distance tolerance for equating vertices. Default is\n * `Geometry.smallMetricDistance`.\n */\n public static createTriangulatedGraphFromPoints(\n points: Point3d[],\n zRule: InsertedVertexZOptions = InsertedVertexZOptions.ReplaceIfLarger,\n pointTolerance: number = Geometry.smallMetricDistance,\n ): HalfEdgeGraph | undefined {\n if (points.length < 3)\n return undefined;\n const hull: Point3d[] = [];\n const interior: Point3d[] = [];\n Point3dArray.computeConvexHullXY(points, hull, interior, true);\n const graph = new HalfEdgeGraph();\n const context = InsertAndRetriangulateContext.create(graph, pointTolerance);\n const face0 = Triangulator.createFaceLoopFromCoordinates(graph, hull, true, true);\n if (undefined === face0)\n return undefined;\n // HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph);\n let numInsert = 0;\n for (const p of interior) {\n context.insertAndRetriangulate(p, zRule);\n numInsert++; // eslint-disable-line @typescript-eslint/no-unused-vars\n }\n if (face0.countEdgesAroundFace() > 3) // no strictly interior vertices to split the hull polygon, so triangulate it\n return Triangulator.createTriangulatedGraphFromSingleLoop(hull);\n return graph;\n }\n /**\n * * Only one outer loop permitted.\n * * Largest area loop is assumed outer.\n * @param loops an array of loops\n * @returns triangulated graph, or undefined if bad data.\n */\n public static createTriangulatedGraphFromLoops(loops: LineStringDataVariant[]): HalfEdgeGraph | undefined {\n if (loops.length < 1)\n return undefined;\n const mask = HalfEdgeMask.BOUNDARY_EDGE | HalfEdgeMask.PRIMARY_EDGE;\n const graph = new HalfEdgeGraph();\n const holeSeeds: HalfEdge[] = [];\n let maxArea = -10000.0;\n let maxAreaIndex = -1;\n // collect all the loops with pointers to the positive (inside)\n // remember which one has largest area.\n for (let i = 0; i < loops.length; i++) {\n let seed = Triangulator.directCreateFaceLoopFromCoordinates(graph, loops[i]);\n if (seed) {\n seed = seed.faceSuccessor; // directCreate returns tail\n const mate = seed.vertexSuccessor;\n seed.setMaskAroundFace(mask);\n mate.setMaskAroundFace(mask);\n const signedFaceArea = seed.signedFaceArea();\n const area = Math.abs(signedFaceArea);\n holeSeeds.push(signedFaceArea >= 0 ? seed : mate);\n if (i === 0 || area > maxArea) {\n maxArea = area;\n maxAreaIndex = i;\n }\n }\n }\n if (holeSeeds.length === 0)\n return undefined;\n // extract the max area seed ...\n const maxAreaFace = holeSeeds[maxAreaIndex];\n holeSeeds[maxAreaIndex] = holeSeeds[holeSeeds.length - 1];\n holeSeeds.pop();\n maxAreaFace.vertexSuccessor.setMaskAroundFace(HalfEdgeMask.EXTERIOR);\n // The hole seeds all have inside nodes. Set mask there and jump to outside.\n for (let i = 0; i < holeSeeds.length; i++) {\n const seed = holeSeeds[i];\n seed.setMaskAroundFace(HalfEdgeMask.EXTERIOR);\n holeSeeds[i] = this.getLeftmost(seed.vertexSuccessor);\n }\n\n const startingNode = Triangulator.spliceLeftMostNodesOfHoles(graph, maxAreaFace, holeSeeds);\n if (startingNode) {\n if (Triangulator.triangulateSingleFace(graph, startingNode))\n return graph;\n }\n return undefined;\n }\n /**\n * Triangulate all positive area faces of a (planar) graph.\n * * Area is computed using `HalfEdge.signedFaceArea`, which ignores z-coordinates.\n * @returns whether all indicated faces were triangulated successfully\n * @see [[triangulateAllInteriorFaces]]\n */\n public static triangulateAllPositiveAreaFaces(graph: HalfEdgeGraph): boolean {\n const seeds = graph.collectFaceLoops();\n let numFail = 0;\n for (const face of seeds) {\n if (face.countEdgesAroundFace() > 3) {\n const area = face.signedFaceArea();\n if (area > 0.0)\n if (!Triangulator.triangulateSingleFace(graph, face))\n numFail++;\n }\n }\n return numFail === 0;\n }\n\n private static _workTransform?: Transform;\n\n /**\n * Triangulate all interior faces of a graph.\n * * A random node is checked for each face; if it has the `HalfEdgeMask.EXTERIOR` mask, the face is ignored.\n * @param useLocalCoords whether to transform each face into local coords before triangulating.\n * This is useful if the graph has z-coordinates.\n * @returns whether all indicated faces were triangulated successfully\n * @see [[triangulateAllPositiveAreaFaces]]\n */\n public static triangulateAllInteriorFaces(graph: HalfEdgeGraph, useLocalCoords?: boolean): boolean {\n const seeds = graph.collectFaceLoops();\n const visited = useLocalCoords ? graph.grabMask() : HalfEdgeMask.NULL_MASK;\n let localToWorld: Transform | undefined;\n let nodes: Point3d[] | undefined;\n let nodeCount = 0;\n let numFail = 0;\n for (const face of seeds) {\n if (face.countEdgesAroundFace() > 3) {\n if (face.getMask(HalfEdgeMask.EXTERIOR))\n continue;\n if (useLocalCoords) {\n nodeCount = graph.countNodes();\n nodes = face.collectAroundFace();\n localToWorld = this._workTransform = FrameBuilder.createRightHandedLocalToWorld(nodes, this._workTransform);\n localToWorld?.multiplyInversePoint3dArrayInPlace(nodes);\n }\n // don't flip triangles if using local coords; an edge of this face can be flipped out of plane if the neighboring triangle is non-coplanar.\n if (!Triangulator.triangulateSingleFace(graph, face, useLocalCoords))\n numFail++;\n if (localToWorld && nodes) {\n for (let iNewNode = nodeCount; iNewNode < graph.countNodes(); ++iNewNode)\n nodes.push(graph.allHalfEdges[iNewNode] as any);\n localToWorld.multiplyPoint3dArrayInPlace(nodes);\n }\n }\n }\n graph.dropMask(visited);\n return numFail === 0;\n }\n\n /**\n * Triangulate the polygon made up of by a series of points.\n * * The loop may be either CCW or CW -- CCW order will be used for triangles.\n * * To triangulate a polygon with holes, use createTriangulatedGraphFromLoops.\n */\n public static createTriangulatedGraphFromSingleLoop(data: LineStringDataVariant): HalfEdgeGraph | undefined {\n const graph = new HalfEdgeGraph();\n const startingNode = Triangulator.createFaceLoopFromCoordinates(graph, data, true, true);\n if (!startingNode || graph.countNodes() < 6)\n return undefined;\n if (!Triangulator.triangulateSingleFace(graph, startingNode))\n return undefined;\n Triangulator.flipTriangles(graph);\n return graph;\n }\n\n /**\n * cautiously split the edge starting at baseNode.\n * * If baseNode is null, create a trivial loop with the single vertex at xy\n * * if xy is distinct from the coordinates at both baseNode and its successor, insert xy as a new node within that edge.\n * * also include z coordinate if present.\n */\n private static interiorEdgeSplit(graph: HalfEdgeGraph, baseNode: HalfEdge | undefined, xy: XAndY | number[]): HalfEdge | undefined {\n let x = 0, y = 0, z = 0;\n if (Array.isArray(xy)) {\n x = xy[0];\n y = xy[1];\n z = xy.length > 2 ? xy[3] : 0.0;\n } else {\n const q = xy as any;\n if (q.hasOwnProperty(\"x\")) x = q.x;\n if (q.hasOwnProperty(\"y\")) y = q.y;\n if (q.hasOwnProperty(\"z\")) z = q.z;\n }\n if (!baseNode)\n return graph.splitEdge(baseNode, x, y, z);\n if (Triangulator.isAlmostEqualXAndYXY(baseNode, x, y))\n return baseNode;\n return graph.splitEdge(baseNode, x, y, z);\n }\n /** Return length of data without wraparound point(s), if present */\n private static getUnwrappedLength(data: LineStringDataVariant): number {\n let n = data.length;\n let x0: number, y0: number, x1: number, y1: number;\n while (n > 1) {\n if (data instanceof IndexedXYZCollection) {\n x0 = data.getXAtUncheckedPointIndex(0);\n y0 = data.getYAtUncheckedPointIndex(0);\n x1 = data.getXAtUncheckedPointIndex(n - 1);\n y1 = data.getYAtUncheckedPointIndex(n - 1);\n } else if (Geometry.isArrayOfNumberArray(data, n, 2)) {\n x0 = data[0][0];\n y0 = data[0][1];\n x1 = data[n - 1][0];\n y1 = data[n - 1][1];\n } else {\n x0 = data[0].x;\n y0 = data[0].y;\n x1 = data[n - 1].x;\n y1 = data[n - 1].y;\n }\n if (Geometry.isAlmostEqualNumber(x0, x1) && Geometry.isAlmostEqualNumber(y0, y1))\n --n;\n else\n break;\n }\n return n;\n }\n /** Create a loop from coordinates.\n * * Return a pointer to any node on the loop.\n * * no masking or other markup is applied.\n */\n public static directCreateFaceLoopFromCoordinates(graph: HalfEdgeGraph, data: LineStringDataVariant): HalfEdge | undefined {\n const n = this.getUnwrappedLength(data); // open it up to allow starting at a bridge edge\n let baseNode: HalfEdge | undefined;\n if (data instanceof IndexedXYZCollection) {\n const xyz = Point3d.create();\n for (let i = 0; i < n; i++) {\n data.getPoint3dAtCheckedPointIndex(i, xyz);\n baseNode = Triangulator.interiorEdgeSplit(graph, baseNode, xyz);\n }\n } else {\n for (let i = 0; i < n; i++)\n baseNode = Triangulator.interiorEdgeSplit(graph, baseNode, data[i]);\n }\n return baseNode;\n }\n\n /** Create chains from coordinates.\n * * Return array of pointers to base node of the chains.\n * * no masking or other markup is applied (save id).\n * @param graph New edges are built in this graph\n * @param data coordinate data\n * @param id id to attach to (both side of all) edges\n */\n public static directCreateChainsFromCoordinates(graph: HalfEdgeGraph, data: MultiLineStringDataVariant, id: number = 0): HalfEdge[] {\n const assembler = new AssembleXYZXYZChains(graph, id);\n VariantPointDataStream.streamXYZ(data, assembler);\n return assembler.claimSeeds();\n }\n\n /**\n * @param graph the containing graph\n * @param base The last node of a newly created loop. (i.e. its `faceSuccessor` has the start xy)\n * @param returnPositiveAreaLoop if true, return the start node on the side with positive area. otherwise return the left side as given.\n * @param maskForBothSides mask to apply on both sides.\n * @param maskForOtherSide mask to apply to the \"other\" side of the loop.\n * @return the loop's start node or its vertex successor, chosen to be the positive or negative loop per request.\n */\n private static maskAndOrientNewFaceLoop(_graph: HalfEdgeGraph, base: HalfEdge | undefined, returnPositiveAreaLoop: boolean,\n maskForBothSides: HalfEdgeMask,\n maskForOtherSide: HalfEdgeMask): HalfEdge | undefined {\n // base is the final coordinates\n if (base) {\n base = base.faceSuccessor; // because typical construction process leaves the \"live\" edge at the end of the loop.\n const area = base.signedFaceArea();\n const mate = base.edgeMate;\n if (maskForBothSides !== HalfEdgeMask.NULL_MASK) {\n base.setMaskAroundFace(maskForBothSides);\n mate.setMaskAroundFace(maskForBothSides);\n }\n\n let preferredNode = base;\n if (returnPositiveAreaLoop && (area < 0))\n preferredNode = mate;\n const otherNode = preferredNode.vertexSuccessor;\n\n if (maskForOtherSide !== HalfEdgeMask.NULL_MASK)\n otherNode.setMaskAroundFace(maskForOtherSide);\n return preferredNode;\n }\n return undefined;\n }\n /**\n * Create a circular doubly linked list of internal and external nodes from polygon points in the specified winding order.\n * * This applies the masks used by typical applications:\n * * HalfEdgeMask.BOUNDARY on both sides.\n * * HalfEdgeMask.PRIMARY_EDGE on both sides.\n * * Use [[createFaceLoopFromCoordinatesAndMasks]] for detailed control of masks.\n */\n public static createFaceLoopFromCoordinates(\n graph: HalfEdgeGraph, data: LineStringDataVariant, returnPositiveAreaLoop: boolean, markExterior: boolean,\n ): HalfEdge | undefined {\n const base = Triangulator.directCreateFaceLoopFromCoordinates(graph, data);\n return Triangulator.maskAndOrientNewFaceLoop(graph, base, returnPositiveAreaLoop,\n HalfEdgeMask.BOUNDARY_EDGE | HalfEdgeMask.PRIMARY_EDGE,\n markExterior ? HalfEdgeMask.EXTERIOR : HalfEdgeMask.NULL_MASK);\n }\n /**\n * create a circular doubly linked list of internal and external nodes from polygon points.\n * * Optionally jump to the \"other\" side so the returned loop has positive area\n * @param graph graph to receive the new edges\n * @param data array with x,y coordinates\n * @param returnPositiveAreaLoop if false, return an edge proceeding around the loop in the order given. If true, compute the loop area and flip return the side with positive area.\n * @param maskForBothSides mask to apply on both sides.\n * @param maskForOtherSide mask to apply on the \"other\" side from the returned loop.\n */\n public static createFaceLoopFromCoordinatesAndMasks(graph: HalfEdgeGraph, data: LineStringDataVariant, returnPositiveAreaLoop: boolean,\n maskForBothSides: HalfEdgeMask,\n maskForOtherSide: HalfEdgeMask): HalfEdge | undefined {\n const base = Triangulator.directCreateFaceLoopFromCoordinates(graph, data);\n return Triangulator.maskAndOrientNewFaceLoop(graph, base, returnPositiveAreaLoop, maskForBothSides, maskForOtherSide);\n }\n\n /** Cut off an ear, forming a new face loop of nodes\n * @param ear the vertex being cut off.\n * * Form two new nodes, alpha and beta, which have the coordinates one step away from the ear vertex.\n * * Reassigns the pointers such that beta is left behind with the new face created\n * * Reassigns the pointers such that alpha becomes the resulting missing node from the remaining polygon\n * * Reassigns prevZ and nextZ pointers\n */\n private static joinNeighborsOfEar(graph: HalfEdgeGraph, ear: HalfEdge) {\n const alpha = graph.createEdgeXYZXYZ(\n ear.facePredecessor.x, ear.facePredecessor.y, ear.facePredecessor.z, ear.facePredecessor.i,\n ear.faceSuccessor.x, ear.faceSuccessor.y, ear.faceSuccessor.z, ear.faceSuccessor.i);\n const beta = alpha.edgeMate;\n\n // Add two nodes alpha and beta and reassign pointers (also mark triangle nodes as part of triangle)\n HalfEdge.pinch(ear.faceSuccessor, beta);\n HalfEdge.pinch(ear.facePredecessor, alpha);\n ear.setMaskAroundFace(HalfEdgeMask.TRIANGULATED_FACE);\n }\n private static isInteriorTriangle(a: HalfEdge) {\n if (!a.isMaskSet(HalfEdgeMask.TRIANGULATED_FACE) || a.isMaskSet(HalfEdgeMask.EXTERIOR))\n return false;\n const b = a.faceSuccessor;\n if (!b.isMaskSet(HalfEdgeMask.TRIANGULATED_FACE) || b.isMaskSet(HalfEdgeMask.EXTERIOR))\n return false;\n const c = b.faceSuccessor;\n if (!c.isMaskSet(HalfEdgeMask.TRIANGULATED_FACE) || c.isMaskSet(HalfEdgeMask.EXTERIOR))\n return false;\n return c.faceSuccessor === a;\n }\n\n /**\n * Perform 0, 1, or more edge flips to improve aspect ratio just behind an ear that was just cut.\n * @param ear the triangle corner which just served as the ear node.\n * @returns the node at the back corner after flipping.\"appropriately positioned\" node for the usual advance to ear.faceSuccessor.edgeMate.faceSuccessor.\n */\n private static doPostCutFlips(ear: HalfEdge) {\n // B is the ear -- inside a (probably newly created) triangle ABC\n // CA is the recently added cut edge.\n // AB is the candidate to be flipped.\n // triangle B1 A1 D is on the other side of AB\n // The condition for flipping is:\n // ! both triangles must be TRIANGULATED_NODE_MASK\n // ! circumcircle condition flags D as in the circle of ABC\n // after flip, node A moves to the vertex of D, and is the effective \"ear\", with the cap edge C A1\n // after flip, consider the A1 D (whose nodes are A1 and flipped A!!!)\n //\n // * *\n // . C0| . / |\n // . | . C0 /B1|\n // . | . /v |\n // . ^| . / |\n // . A0 ----> B0| . / ^|\n // *=======================* --> * A1 / B0*\n // \\ A1 <---- B1/ \\ / /\n // \\ / \\ / /\n // \\ / \\ ^/ D1/\n // \\ D1 / \\A0/ /\n // * *\n let b0 = ear;\n let a0 = b0.facePredecessor;\n let b1 = a0.edgeMate;\n while (Triangulator.isInteriorTriangle(a0) && Triangulator.isInteriorTriangle(b1)) {\n const detA = Triangulator.computeCircumcircleDeterminantIsStrongPositive(a0);\n if (!detA)\n break;\n // Flip the triangles\n const a1 = b1.faceSuccessor;\n Triangulator.flipEdgeBetweenTriangles(a1, a1.faceSuccessor, a1.facePredecessor, b0, b0.facePredecessor, b0.faceSuccessor);\n b0 = a0;\n a0 = b0.facePredecessor;\n b1 = a0.edgeMate;\n }\n return b0;\n }\n\n /**\n * Main ear slicing loop which triangulates the face starting at `ear`.\n * @param graph containing graph to receive new edges\n * @param ear sector at which to start triangulation of the containing face.\n * @param noFlips if false (default) perform edge-flipping after each ear cut for better aspect ratio. Pass true if your graph isn't planar.\n */\n private static triangulateSingleFace(graph: HalfEdgeGraph, ear?: HalfEdge, noFlips: boolean = false): boolean {\n if (!ear) {\n Triangulator.setDebugGraph(graph);\n return false;\n }\n let next;\n let next2;\n let pred;\n let maxCandidate = ear.countEdgesAroundFace();\n let numCandidate = 0;\n ear.clearMaskAroundFace(HalfEdgeMask.TRIANGULATED_FACE);\n // iterate through ears, slicing them one by one\n while (!ear.isMaskSet(HalfEdgeMask.TRIANGULATED_FACE)) {\n pred = ear?.facePredecessor;\n next = ear.faceSuccessor;\n next2 = next.faceSuccessor;\n if (next === ear || next2 === ear)\n return true;\n if (next2.faceSuccessor === ear) {\n // if triangle, mask it so that its edges can potentially be flipped by doPostCutFlips()\n ear.setMaskAroundFace(HalfEdgeMask.TRIANGULATED_FACE);\n return true;\n }\n // The earcut algorithm does not support self intersections, however we do handle the re-entrant triangle\n // case by pinching a bridge/hole into existence when vertices i and i+3 live in the same face loop, but not\n // the same vertex loop. Earcut whittles larger faces down into triangles, so this is the only case needed.\n if (Geometry.isAlmostEqualXAndY(next2, pred) && !next2.findAroundVertex(pred)) {\n const next3 = next2.faceSuccessor;\n const hasBridgeEdgeOrHoleInside = this.nodeInTriangle(pred, ear, next, next3);\n if (hasBridgeEdgeOrHoleInside) {\n const nullOrHoleFace = next2.vertexPredecessor;\n HalfEdge.pinch(pred.vertexSuccessor, nullOrHoleFace); // keep pred and next2 in their face loop\n } else {\n HalfEdge.pinch(pred, next2); // pred and next2 split into different face loops\n ear.setMaskAroundFace(HalfEdgeMask.TRIANGULATED_FACE);\n }\n ear = next2;\n continue;\n }\n if (++numCandidate > maxCandidate) {\n Triangulator.setDebugGraph(graph);\n return false;\n }\n if (Triangulator.isEar(ear)) {\n maxCandidate--;\n numCandidate = 0;\n\n // skipping the next vertices leads to less sliver triangles\n\n // If we already have a separated triangle, do not join\n if (ear.faceSuccessor.faceSuccessor !== ear.facePredecessor) {\n Triangulator.joinNeighborsOfEar(graph, ear);\n if (!noFlips)\n ear = Triangulator.doPostCutFlips(ear);\n ear = ear.faceSuccessor.edgeMate.faceSuccessor;\n // another step? Nate's 2017 code went one more.\n } else {\n ear.setMaskAroundFace(HalfEdgeMask.TRIANGULATED_FACE);\n ear = next.faceSuccessor;\n }\n continue;\n }\n ear = next;\n }\n return true; // um .. I'm not sure what this state is.\n }\n /** @internal */\n private static sDebugGraph: HalfEdgeGraph | undefined;\n /** @internal */\n private static sEnableDebugGraphCapture = false;\n\n /**\n * * returns the (possibly undefined) debug graph.\n * * sets the debug graph to undefined.\n * * disables subsequent saving.\n * @internal */\n public static claimDebugGraph(): HalfEdgeGraph | undefined {\n const g = Triangulator.sDebugGraph;\n Triangulator.sDebugGraph = undefined;\n Triangulator.sEnableDebugGraphCapture = false;\n return g;\n }\n /** Call (from within the triangulator) to announce a graph to be saved for debug.\n * * If debug graph capture is not enabled, do nothing.\n * * If debug graph capture is enabled, save this graph.\n * * This is called by internal steps at point of failure to preserve the failing graph for unit test examination.\n * @internal */\n public static setDebugGraph(graph: HalfEdgeGraph | undefined) { if (Triangulator.sEnableDebugGraphCapture) Triangulator.sDebugGraph = graph; }\n /**\n * * Clear the debug graph\n * * Set capture enabled to indicated value.\n * * Intended use:\n * * By default \"enabled\" is false so there is no activity in the debug graph.\n * * A unit test which needs to see graph after failure calls clearAndEnableDebugGraphCapture (true)\n * * run the triangulation step\n * * call claimDebugGraph.\n * * claimDebugGraph reverts everything to default no-capture state.\n * @internal */\n public static clearAndEnableDebugGraphCapture(value: boolean) {\n Triangulator.sEnableDebugGraphCapture = value;\n Triangulator.sDebugGraph = undefined;\n }\n\n /**\n * Whether a and b are in same vertex loop, or at the same xy location.\n * @internal\n */\n private static findAroundOrAtVertex(a: HalfEdge, b: HalfEdge): boolean {\n if (a.findAroundVertex(b))\n return true;\n return Geometry.isAlmostEqualXAndY(a, b);\n }\n\n // for reuse over all calls to isEar ....\n private static _edgeInterval = Range1d.createNull();\n private static _earRange = Range2d.createNull();\n private static _edgeRange = Range2d.createNull();\n private static _planes: Plane3dByOriginAndUnitNormal[] = [\n Plane3dByOriginAndUnitNormal.createXYPlane(),\n Plane3dByOriginAndUnitNormal.createXYPlane(),\n Plane3dByOriginAndUnitNormal.createXYPlane(),\n ];\n /** Check whether a polygon node forms a valid ear with adjacent nodes */\n private static isEar(ear: HalfEdge) {\n const a = ear.facePredecessor;\n const b = ear;\n const c = ear.faceSuccessor;\n const area = Triangulator.signedTolerancedCCWTriangleArea(a, b, c);\n if (area <= 0)\n return false; // reflex, can't be an ear\n const planes = this._planes;\n if (!Plane3dByOriginAndUnitNormal.createOriginAndTargetXY(a, b, planes[0])\n || !Plane3dByOriginAndUnitNormal.createOriginAndTargetXY(b, c, planes[1])\n || !Plane3dByOriginAndUnitNormal.createOriginAndTargetXY(c, a, planes[2]))\n return false;\n\n // now make sure we don't have other points inside the potential ear, or edges crossing.\n const earRange = this._earRange;\n const edgeRange = this._edgeRange;\n const edgeInterval = this._edgeInterval;\n Range2d.createXYXYXY(a.x, a.y, b.x, b.y, c.x, c.y, earRange);\n earRange.expandInPlace(Geometry.smallMetricDistance);\n let p = c;\n const zeroPlus = 1.0e-8;\n const zeroMinus = -zeroPlus;\n const onePlus = 1.0 + zeroPlus;\n const oneMinus = 1.0 - zeroPlus;\n const clipTolerance = 1.0e-10 * area;\n while (p !== a) {\n const q = p.faceSuccessor;\n Range2d.createXYXY(p.x, p.y, q.x, q.y, edgeRange);\n if (earRange.intersectsRange(edgeRange)) {\n // Does pq impinge on the triangle abc?\n Range1d.createXX(zeroMinus, onePlus, edgeInterval);\n ClipUtilities.clipSegmentBelowPlanesXY(planes, p, q, edgeInterval, clipTolerance);\n if (!edgeInterval.isNull) {\n if (edgeInterval.low > oneMinus) {\n // only q touches triangle abc, so b might still be an ear if q lies at a vertex\n if (!this.findAroundOrAtVertex(a, q)\n && !this.findAroundOrAtVertex(b, q)\n && !this.findAroundOrAtVertex(c, q))\n return false;\n } else if (edgeInterval.high < zeroPlus) {\n // only p touches triangle abc, so b might still be an ear if p lies at a vertex\n if (!this.findAroundOrAtVertex(a, p)\n && !this.findAroundOrAtVertex(b, p)\n && !this.findAroundOrAtVertex(c, p))\n return false;\n } else if (this.findAroundOrAtVertex(b, q) && this.findAroundOrAtVertex(c, p)) {\n // edge pq is the back side of bridge edge bc, so b might still be an ear\n } else if (this.findAroundOrAtVertex(a, q) && this.findAroundOrAtVertex(b, p)) {\n // edge pq is the back side of bridge edge ab, so b might still be an ear\n } else {\n return false; // edge pq intrudes into triangle abc, so b cannot be an ear\n }\n }\n }\n p = p.faceSuccessor;\n }\n return true;\n }\n /** link holeLoopNodes[1], holeLoopNodes[2] etc into the outer loop, producing a single-ring polygon without holes\n *\n */\n private static spliceLeftMostNodesOfHoles(graph: HalfEdgeGraph, outerNode: HalfEdge, leftMostHoleLoopNode: HalfEdge[]): HalfEdge | undefined {\n\n leftMostHoleLoopNode.sort((a, b) => Triangulator.compareX(a, b));\n let numFail = 0;\n // process holes from left to right\n for (const holeStart of leftMostHoleLoopNode) {\n if (!Triangulator.eliminateHole(graph, holeStart, outerNode))\n numFail++;\n }\n\n return numFail === 0 ? outerNode : undefined;\n }\n /** For use in sorting -- return (signed) difference (a.x - b.x) */\n private static compareX(a: HalfEdge, b: HalfEdge) {\n return a.x - b.x;\n }\n\n /** find a bridge between vertices that connects hole with an outer ring and and link it */\n private static eliminateHole(graph: HalfEdgeGraph, hole: HalfEdge, outerNode: HalfEdge): boolean {\n const outerNodeA = Triangulator.findHoleBridge(hole, outerNode);\n if (outerNodeA) {\n return Triangulator.splitFace(graph, outerNodeA, hole) !== undefined;\n }\n return false;\n }\n // cspell:word Eberly\n /**\n * David Eberly algorithm for finding a bridge between hole and outer polygon:\n * https://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf\n */\n private static findHoleBridge(hole: HalfEdge, outerNode?: HalfEdge): HalfEdge | undefined {\n let p = outerNode;\n\n if (!p)\n return undefined;\n\n const hx = hole.x;\n const hy = hole.y;\n let qx = -Infinity;\n let m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.faceSuccessor.y && p.faceSuccessor.y !== p.y) {\n const x = p.x + (hy - p.y) * (p.faceSuccessor.x - p.x) / (p.faceSuccessor.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.faceSuccessor.y) return p.faceSuccessor;\n }\n m = p.x < p.faceSuccessor.x ? p : p.faceSuccessor;\n }\n }\n p = p.faceSuccessor;\n } while (p !== outerNode);\n\n if (!m) return undefined;\n\n if (hx === qx) return m.facePredecessor; // hole touches outer segment; pick lower endpoint\n\n // look for outer loop points p inside the triangle of hole point h, outer segment intersection (qx,hy), and outer segment endpoint m;\n // if there are no points found, we have a valid connection (m);\n // otherwise choose the point p with minimum angle with the ray as connection point\n\n const stop = m;\n const mx = m.x;\n const my = m.y;\n let tanMin = Infinity;\n let tan;\n\n p = m.faceSuccessor;\n\n while (p !== stop) {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n Triangulator.pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && Triangulator.locallyInside(p, hole)) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.faceSuccessor;\n }\n\n return m;\n }\n\n // find the leftmost node of a polygon ring\n private static getLeftmost(start: HalfEdge) {\n let p = start;\n let leftmost = start;\n do {\n if (p.x < leftmost.x) leftmost = p;\n p = p.faceSuccessor;\n } while (p !== start);\n\n return leftmost;\n }\n\n /**\n * Check if a point lies within a triangle.\n * * In other words, the areas of the 3 triangles formed by an edge of abc and p all have zero or positive area.\n */\n private static pointInTriangle(ax: number, ay: number, bx: number, by: number, cx: number, cy: number, px: number, py: number) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n }\n /** Check if node p lies strictly inside the triangle abc. */\n private static nodeInTriangle(a: HalfEdge, b: HalfEdge, c: HalfEdge, p: HalfEdge) {\n return Triangulator.signedTolerancedCCWTriangleArea(a, b, p) > 0\n && Triangulator.signedTolerancedCCWTriangleArea(b, c, p) > 0\n && Triangulator.signedTolerancedCCWTriangleArea(c, a, p) > 0;\n }\n /** signed area of a triangle\n * EDL 2/21 This is negative of usual CCW area. Beware in callers !!!\n * (This originates in classic earcut code.)\n */\n private static signedCWTriangleArea(p: HalfEdge, q: HalfEdge, r: HalfEdge) {\n return 0.5 * ((q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y));\n }\n\n /** signed area of a triangle, with small positive corrected to zero by relTol\n */\n private static signedTolerancedCCWTriangleArea(p: HalfEdge, q: HalfEdge, r: HalfEdge, relTol: number = 1.0e-12) {\n const ux = q.x - p.x;\n const uy = q.y - p.y;\n const vx = r.x - p.x;\n const vy = r.y - p.y;\n const area = 0.5 * (ux * vy - uy * vx);\n if (area < 0.0)\n return area;\n const uu = ux * ux + uy * uy;\n const vv = vx * vx + vy * vy;\n if (area < relTol * (uu + vv))\n return 0.0;\n return area;\n }\n\n /** check if two points are equal */\n private static isAlmostEqualXAndYXY(p1: XAndY, x: number, y: number) {\n return Geometry.isAlmostEqualNumber(p1.x, x) && Geometry.isAlmostEqualNumber(p1.y, y);\n }\n\n /** check if a b is inside the sector around a */\n private static locallyInside(a: HalfEdge, b: HalfEdge) {\n return Triangulator.signedCWTriangleArea(a.facePredecessor, a, a.faceSuccessor) < 0 ?\n Triangulator.signedCWTriangleArea(a, b, a.faceSuccessor) >= 0 && Triangulator.signedCWTriangleArea(a, a.facePredecessor, b) >= 0 :\n Triangulator.signedCWTriangleArea(a, b, a.facePredecessor) < 0 || Triangulator.signedCWTriangleArea(a, a.faceSuccessor, b) < 0;\n }\n\n /**\n * link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n * if one belongs to the outer ring and another to a hole, it merges it into a single ring\n * * Returns the base of the new edge at the \"a\" end.\n * * \"a\" and \"b\" still represent the same physical pieces of edges\n * @returns Returns the (base of) the new half edge, at the \"a\" end.\n */\n private static splitFace(graph: HalfEdgeGraph, a: HalfEdge, b: HalfEdge): HalfEdge | undefined {\n if (HalfEdge.isNodeVisibleInSector(a, b) && HalfEdge.isNodeVisibleInSector(b, a)) {\n const a2 = graph.createEdgeXYZXYZ(a.x, a.y, a.z, a.i, b.x, b.y, b.z, b.i);\n const b2 = a2.faceSuccessor;\n HalfEdge.pinch(a, a2);\n HalfEdge.pinch(b, b2);\n return a2;\n }\n return undefined;\n }\n\n /**\n * Triangulate a single face with (linear time) logic applicable only if the lowNode is the lowest node.\n * @returns false if any monotonicity condition is violated.\n */\n public static triangulateSingleMonotoneFace(graph: HalfEdgeGraph, start: HalfEdge): boolean {\n let left = start.facePredecessor;\n let right = start.faceSuccessor;\n // P0, P1, P2 are successive edges along evolving chain\n let upperSideOfNewEdge;\n while (left !== right\n && right !== start\n && right.faceSuccessor !== left) {\n /** These should not happen if face is monotone . .. */\n if (HalfEdge.crossProductXYAlongChain(left, start, right) <= 0)\n return false;\n if (!start.belowYX(left))\n return false;\n if (!start.belowYX(right))\n return false;\n if (left.belowYX(right)) {\n /* Triangulate to all left side edges that\n are below right */\n\n /* Phase 1: move upward, adding back edges\n when prior nodes are visible. */\n let P0 = left;\n let P1 = start;\n let P2 = right;\n /* Invariant: the path from P0 back to P1 is concave.\n Each loop pass moves P0 up the left side, filling in\n edges as needed. The right side edge\n (following start) is never altered.\n */\n while (P0 !== P2 && P0.belowYX(right)) {\n while (P2 !== right\n && P2 !== P0\n && P2 !== P1\n && HalfEdge.crossProductXYAlongChain(P0, P1, P2) > 0) {\n upperSideOfNewEdge = Triangulator.splitFace(graph, P0, P2);\n if (upperSideOfNewEdge === undefined)\n return false;\n P0 = upperSideOfNewEdge;\n P1 = P0.faceSuccessor;\n P2 = P1.faceSuccessor;\n }\n P2 = P1;\n P1 = P0;\n P0 = P0.facePredecessor;\n }\n /* Phase 2: Fan out edges from right to the\n left side. P0.P1.P2 describes a pair of\n adjacent edges at the bottom. */\n left = P1;\n P2 = right;\n P1 = P2.facePredecessor;\n P0 = P1.facePredecessor;\n while (P2.faceSuccessor !== P0 && P0 !== left) {\n upperSideOfNewEdge = Triangulator.splitFace(graph, P0, P2);\n if (upperSideOfNewEdge === undefined)\n return false;\n P1 = upperSideOfNewEdge;\n P0 = P1.facePredecessor;\n }\n /* Finish off with the last stroke from the\n left node to the right, except when already\n topped out */\n if (P2.faceSuccessor !== P0) {\n upperSideOfNewEdge = Triangulator.splitFace(graph, P0, P2);\n if (upperSideOfNewEdge === undefined)\n return false;\n P0 = upperSideOfNewEdge;\n }\n start = P0;\n right = start.faceSuccessor;\n left = start.facePredecessor;\n\n } else {\n /* Triangulate to all right side edges that\n are below left */\n\n /* Phase 1: move upward, adding back edges\n when prior nodes are visible. */\n let P0 = left;\n let P1 = start;\n let P2 = right;\n /* Invariant: the path up to P1 is concave.\n Each loop pass advances P1, filling in\n edges as needed. Note that the\n start edge may get hidden, so the\n bottom node must be referenced as\n left.faceSuccessor rather than as start.\n */\n while (P0 !== P2 && P2.belowYX(left)) {\n while (P0 !== left\n && P2 !== P0\n && P2 !== P1\n && HalfEdge.crossProductXYAlongChain(P0, P1, P2) > 0) {\n upperSideOfNewEdge = Triangulator.splitFace(graph, P0, P2);\n if (upperSideOfNewEdge === undefined)\n return false;\n\n P0 = upperSideOfNewEdge.facePredecessor;\n P1 = upperSideOfNewEdge;\n }\n P0 = P1;\n P1 = P2;\n P2 = P2.faceSuccessor;\n }\n /* Phase 2: Fan out edges from left to the\n right side. P0.P1.P2 describes a pair of\n adjacent edges at the bottom. */\n right = P1;\n P0 = left;\n P1 = P0.faceSuccessor;\n P2 = P1.faceSuccessor;\n while (P2.faceSuccessor !== P0 && P2 !== right) {\n upperSideOfNewEdge = Triangulator.splitFace(graph, P0, P2);\n if (upperSideOfNewEdge === undefined)\n return false;\n P0 = upperSideOfNewEdge;\n // P1 = P2; // original code (ported from native) carefully maintained P1..P2 relationship. But code analyzer says P1 is not used again. So skip it.\n P2 = P2.faceSuccessor;\n }\n /* Finish off with the last stroke from the\n left node to the right, except when already\n topped out */\n if (P2.faceSuccessor !== P0) {\n const newEdge = Triangulator.splitFace(graph, P0, P2);\n if (newEdge === undefined)\n return false;\n }\n start = right;\n right = start.faceSuccessor;\n left = start.facePredecessor;\n }\n }\n return true;\n }\n\n}\n\n/**\n * Internal class for assembling chains\n * @internal\n */\nclass AssembleXYZXYZChains extends PointStreamXYZXYZHandlerBase {\n // Add the starting nodes as the boundary, and apply initial masks to the primary edge and exteriors\n private _seeds?: HalfEdge[];\n private _baseNode: HalfEdge | undefined;\n private _nodeB: HalfEdge | undefined;\n private _nodeC: HalfEdge | undefined;\n private _graph: HalfEdgeGraph;\n private _id: any;\n public constructor(graph: HalfEdgeGraph, id: any) {\n super();\n this._graph = graph;\n this._id = id;\n }\n public override startChain(chainData: MultiLineStringDataVariant, isLeaf: boolean): void {\n super.startChain(chainData, isLeaf);\n this._baseNode = undefined;\n this._nodeB = undefined;\n }\n public override handleXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number) {\n this._nodeC = this._graph.createEdgeXYZXYZ(x0, y0, z0, this._id, x1, y1, z1, this._id);\n if (this._baseNode === undefined) {\n this._baseNode = this._nodeC;\n this._nodeB = this._baseNode.faceSuccessor;\n } else {\n HalfEdge.pinch(this._nodeB!, this._nodeC);\n this._nodeB = this._nodeC.faceSuccessor;\n }\n }\n public override endChain(chainData: MultiLineStringDataVariant, isLeaf: boolean): void {\n super.endChain(chainData, isLeaf);\n if (this._baseNode !== undefined) {\n if (this._seeds === undefined)\n this._seeds = [];\n this._seeds.push(this._baseNode);\n }\n this._baseNode = undefined;\n this._nodeB = undefined;\n this._nodeC = undefined;\n }\n public claimSeeds(): HalfEdge[] {\n if (this._seeds === undefined)\n return [];\n return this._seeds;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Triangulation.js","sourceRoot":"","sources":["../../../src/topology/Triangulation.ts"],"names":[],"mappings":"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"}
|